diff --git a/programs/fuzzer.c b/programs/fuzzer.c
index 4960e76..cc73262 100644
--- a/programs/fuzzer.c
+++ b/programs/fuzzer.c
@@ -96,12 +96,6 @@
 static U32 g_time = 0;
 
 
-/*****************************************
-  Unit Variables
-*****************************************/
-static char* programName = NULL;
-
-
 /*********************************************************
   Fuzzer functions
 *********************************************************/
@@ -290,7 +284,6 @@
     char* compressedBuffer;
     char* decodedBuffer;
 #       define FUZ_max   LZ4_COMPRESSBOUND(LEN)
-    unsigned int randState=seed;
     int ret, cycleNb;
 #       define FUZ_CHECKTEST(cond, ...) if (cond) { printf("Test %i : ", testNb); printf(__VA_ARGS__); \
                                     printf(" (seed %u, cycle %i) \n", seed, cycleNb); goto _output_error; }
@@ -300,6 +293,8 @@
     void* LZ4continue;
     LZ4_stream_t LZ4dict;
     U32 crcOrig, crcCheck;
+    U32 coreRandState = seed;
+    U32 randState = coreRandState ^ PRIME3;
 
 
     // init
@@ -319,16 +314,18 @@
         char* dict;
         char* block;
 
-        FUZ_displayUpdate(cycleNb);
+        (void)FUZ_rand(&coreRandState);
 
-        blockSize  = FUZ_rand(&randState) % FUZ_MAX_BLOCK_SIZE;
-        blockStart = FUZ_rand(&randState) % (COMPRESSIBLE_NOISE_LENGTH - blockSize);
-        dictSize   = FUZ_rand(&randState) % FUZ_MAX_DICT_SIZE;
-        if (dictSize > blockStart) dictSize = blockStart;
-        block = ((char*)CNBuffer) + blockStart;
-        dict = block - dictSize;
         if (0)   // some problems related to dictionary re-use; in this case, enable this loop
         {
+            FUZ_displayUpdate(cycleNb);
+            randState = coreRandState ^ PRIME3;
+            blockSize  = FUZ_rand(&randState) % FUZ_MAX_BLOCK_SIZE;
+            blockStart = FUZ_rand(&randState) % (COMPRESSIBLE_NOISE_LENGTH - blockSize);
+            dictSize   = FUZ_rand(&randState) % FUZ_MAX_DICT_SIZE;
+            if (dictSize > blockStart) dictSize = blockStart;
+            block = ((char*)CNBuffer) + blockStart;
+            dict = block - dictSize;
             LZ4_loadDict(&LZ4dict, dict, dictSize);
             LZ4_compress_continue(&LZ4dict, block, compressedBuffer, blockSize);
             LZ4_loadDict(&LZ4dict, dict, dictSize);
@@ -348,6 +345,8 @@
         int blockContinueCompressedSize;
 
         FUZ_displayUpdate(cycleNb);
+        (void)FUZ_rand(&coreRandState);
+        randState = coreRandState ^ PRIME3;
 
         // Select block to test
         blockSize  = FUZ_rand(&randState) % FUZ_MAX_BLOCK_SIZE;
@@ -717,13 +716,14 @@
         //FUZ_CHECKTEST(crcOrig!=crcNew, "LZ4_decompress_safe() dictionary decompression corruption");
     }
 
+    printf("All unit tests completed succesfully \n");
     return;
 _output_error:
     exit(1);
 }
 
 
-static int FUZ_usage(void)
+static int FUZ_usage(char* programName)
 {
     DISPLAY( "Usage :\n");
     DISPLAY( "      %s [args]\n", programName);
@@ -749,9 +749,9 @@
     int testNb = 0;
     int proba = FUZ_COMPRESSIBILITY_DEFAULT;
     int pause = 0;
+    char* programName = argv[0];
 
     // Check command line
-    programName = argv[0];
     for(argNb=1; argNb<argc; argNb++)
     {
         char* argument = argv[argNb];
@@ -769,7 +769,7 @@
                 switch(*argument)
                 {
                 case 'h':   /* display help */
-                    return FUZ_usage();
+                    return FUZ_usage(programName);
 
                 case 'v':   /* verbose mode */
                     argument++;
