Index: trunk/src/sh_utils.c
===================================================================
--- trunk/src/sh_utils.c	(revision 154)
+++ trunk/src/sh_utils.c	(revision 156)
@@ -941,8 +941,10 @@
 UINT32 taus_get ()
 {
-  UINT32   taus_svec[6];
+#define TAUS_SAMPLE 12
+
+  UINT32   taus_svec[TAUS_SAMPLE];
   UINT32   retval;
   UINT32 * res;
-  static   UINT32   res_vec[6];
+  UINT32 * res_vec = &(skey->res_vec[0]);
   static   int      res_num = 0;
   register int i;
@@ -962,15 +964,15 @@
 
   SH_MUTEX_LOCK_UNSAFE(mutex_skey);
-  taus_svec[0] = taus_get_long (&(skey->rng0[0]));
-  taus_svec[1] = taus_get_long (&(skey->rng1[0]));
-  taus_svec[2] = taus_get_long (&(skey->rng2[0]));
-  taus_svec[3] = taus_get_long (&(skey->rng0[0]));
-  taus_svec[4] = taus_get_long (&(skey->rng1[0]));
-  taus_svec[5] = taus_get_long (&(skey->rng2[0]));
+  for (i = 0; i < (TAUS_SAMPLE/3); ++i)
+    {
+      taus_svec[i*3]   = taus_get_long (&(skey->rng0[0]));
+      taus_svec[i*3+1] = taus_get_long (&(skey->rng1[0]));
+      taus_svec[i*3+2] = taus_get_long (&(skey->rng2[0]));
+    }
   SH_MUTEX_UNLOCK_UNSAFE(mutex_skey);
 
   res     = sh_tiger_hash_uint32 ( (char *) &taus_svec[0], 
 				   TIGER_DATA, 
-				   (unsigned long)(6 * sizeof(UINT32)),
+				   (unsigned long)(TAUS_SAMPLE * sizeof(UINT32)),
 				   kbuf, KEY_BYT/sizeof(UINT32));
 
@@ -980,10 +982,9 @@
       res_vec[i] = res[i];
     }
-  retval  = taus_svec[0];
+  retval  = res[0];
   res_num = 1;
   SH_MUTEX_UNLOCK_UNSAFE(mutex_skey);
 
-  taus_svec[0] = 0; taus_svec[1] = 0; taus_svec[2] = 0; 
-  taus_svec[3] = 0; taus_svec[4] = 0; taus_svec[5] = 0; 
+  memset(taus_svec, '\0', TAUS_SAMPLE * sizeof(UINT32));
 
   return retval;
