diff -urpN 179-a/src/XSHA512_fmt.c john-1.7.9-a/src/XSHA512_fmt.c
--- 179-a/src/XSHA512_fmt.c	2011-11-28 17:29:48.052875000 +0000
+++ john-1.7.9-a/src/XSHA512_fmt.c	2011-11-29 19:58:25.974750000 +0000
@@ -48,7 +48,7 @@ static struct fmt_tests tests[] = {
 	{NULL}
 };
 
-static char saved_key[MAX_KEYS_PER_CRYPT][PLAINTEXT_LENGTH + 1];
+static char (*saved_key)[PLAINTEXT_LENGTH + 1];
 static int saved_key_length[MAX_KEYS_PER_CRYPT];
 #ifdef PRECOMPUTE_CTX_FOR_SALT
 static SHA512_CTX ctx_salt;
@@ -57,6 +57,12 @@ static ARCH_WORD_32 saved_salt;
 #endif
 static ARCH_WORD_32 crypt_out[MAX_KEYS_PER_CRYPT][16];
 
+static void init(struct fmt_main *pFmt)
+{
+	saved_key = mem_alloc_tiny(sizeof(*saved_key) * pFmt->params.max_keys_per_crypt, MEM_ALIGN_NONE);
+	memset(saved_key, 0, (sizeof(*saved_key) * pFmt->params.max_keys_per_crypt));
+}
+
 static int valid(char *ciphertext, struct fmt_main *pFmt)
 {
 	char *pos;
@@ -295,7 +301,7 @@ struct fmt_main fmt_XSHA512 = {
 		FMT_CASE | FMT_8_BIT | FMT_OMP,
 		tests
 	}, {
-		fmt_default_init,
+		init,
 		prepare,
 		valid,
 		fmt_default_split,
diff -urpN 179-a/src/crc32_fmt_plug.c john-1.7.9-a/src/crc32_fmt_plug.c
--- 179-a/src/crc32_fmt_plug.c	2011-11-28 17:29:44.271625000 +0000
+++ john-1.7.9-a/src/crc32_fmt_plug.c	2011-11-29 19:40:53.756000000 +0000
@@ -46,11 +46,7 @@
 #define SALT_SIZE			4
 
 #define MIN_KEYS_PER_CRYPT		1
-//#ifdef _OPENMP
 #define MAX_KEYS_PER_CRYPT		16384
-//#else
-//#define MAX_KEYS_PER_CRYPT		(0x4000 / (PLAINTEXT_LENGTH + 1))
-//#endif
 
 static struct fmt_tests tests[] = {
 	{"$crc32$00000000.fa455f6b", "ripper"},
@@ -61,10 +57,16 @@ static struct fmt_tests tests[] = {
 	{NULL}
 };
 
-static char saved_key[MAX_KEYS_PER_CRYPT][PLAINTEXT_LENGTH + 1];
+static char (*saved_key)[PLAINTEXT_LENGTH + 1];
 static ARCH_WORD_32 crcs[MAX_KEYS_PER_CRYPT];
 static ARCH_WORD_32 crcsalt;
 
+static void init(struct fmt_main *pFmt)
+{
+	saved_key = mem_alloc_tiny(sizeof(*saved_key) * pFmt->params.max_keys_per_crypt, MEM_ALIGN_NONE);
+	memset(saved_key, 0, (sizeof(*saved_key) * pFmt->params.max_keys_per_crypt));
+}
+
 static int valid(char *ciphertext, struct fmt_main *pFmt)
 {
 	char *p, *q;
@@ -199,7 +201,7 @@ struct fmt_main fmt_crc32 = {
 		FMT_CASE | FMT_8_BIT | FMT_NOT_EXACT | FMT_OMP,
 		tests
 	}, {
-		fmt_default_init,
+		init,
 		fmt_default_prepare,
 		valid,
 		fmt_default_split,
diff -urpN 179-a/src/mscash1_fmt_plug.c john-1.7.9-a/src/mscash1_fmt_plug.c
--- 179-a/src/mscash1_fmt_plug.c	2011-11-28 17:29:47.037250000 +0000
+++ john-1.7.9-a/src/mscash1_fmt_plug.c	2011-11-29 19:56:21.006000000 +0000
@@ -68,14 +68,11 @@ static struct fmt_tests tests[] = {
 #define MIN_KEYS_PER_CRYPT		OK_NUM_KEYS
 #define MAX_KEYS_PER_CRYPT		MS_NUM_KEYS
 
-
-static unsigned int ms_buffer1x[16*MS_NUM_KEYS];
-static unsigned int output1x[4*MS_NUM_KEYS];
-
-static unsigned int crypt[4*MS_NUM_KEYS];
-static unsigned int last[4*MS_NUM_KEYS];
-
-static unsigned int last_i[MS_NUM_KEYS];
+static unsigned int *ms_buffer1x;
+static unsigned int *output1x;
+static unsigned int *crypt;
+static unsigned int *last;
+static unsigned int *last_i;
 
 static unsigned int *salt_buffer;
 static unsigned int new_key;
@@ -127,8 +124,19 @@ static void init(struct fmt_main *pFmt)
 		nmax = MS_NUM_KEYS;
 	fmt_mscash.params.max_keys_per_crypt = nmax;
 #endif
-	memset(ms_buffer1x,0,64*MS_NUM_KEYS);
-	memset(last_i,0,4*MS_NUM_KEYS);
+
+	ms_buffer1x = mem_alloc_tiny(sizeof(ms_buffer1x[0]) * 16*MS_NUM_KEYS, MEM_ALIGN_NONE);
+	output1x    = mem_alloc_tiny(sizeof(output1x[0])    * 4*MS_NUM_KEYS, MEM_ALIGN_NONE);
+	crypt       = mem_alloc_tiny(sizeof(crypt[0])       * 4*MS_NUM_KEYS, MEM_ALIGN_NONE);
+	last        = mem_alloc_tiny(sizeof(last[0])        * 4*MS_NUM_KEYS, MEM_ALIGN_NONE);
+	last_i      = mem_alloc_tiny(sizeof(last_i[0])      *   MS_NUM_KEYS, MEM_ALIGN_NONE);
+	memset(output1x,0,sizeof(output1x[0])*4*MS_NUM_KEYS);
+	memset(crypt,0,sizeof(crypt[0])*4*MS_NUM_KEYS);
+	memset(last,0,sizeof(last[0])*4*MS_NUM_KEYS);
+
+	memset(ms_buffer1x,0,sizeof(ms_buffer1x[0])*16*MS_NUM_KEYS);
+	memset(last_i,0,sizeof(last_i[0])*MS_NUM_KEYS);
+
 	new_key=1;
 
 	if (options.utf8) {
