diff --git a/libraries/liblutil/entropy.c b/libraries/liblutil/entropy.c
index 75e321155c1b02289cc7e4d4bac253ff9894ab99..4a15a789d462e429c41ee294ab07d5380a47ecdc 100644
--- a/libraries/liblutil/entropy.c
+++ b/libraries/liblutil/entropy.c
@@ -49,8 +49,12 @@ int lutil_entropy( char *buf, int nbytes )
 		static int counter = 0;
 		int n;
 
-		struct {
+		struct rdata_s {
 			int counter;
+
+			char *buf;
+			struct rdata_s *stack;
+
 			pid_t	pid;
 
 #ifdef HAVE_GETTIMEOFDAY
@@ -61,18 +65,25 @@ int lutil_entropy( char *buf, int nbytes )
 			unsigned long	junk;
 		} rdata;
 
+		/* make sure rdata differs for each process */
 		rdata.pid = getpid();
-		
+
+		/* make sure rdata differs for each program */
+		rdata.buf = buf;
+		rdata.stack = &rdata;
+
 		for( n = 0; n < nbytes; n += 16 ) {
 			struct lutil_MD5Context ctx;
 			char digest[16];
 
+			/* hopefully has good resolution */
 #ifdef HAVE_GETTIMEOFDAY
 			(void) gettimeofday( &rdata.tv, sizeof( rdata.tv ) );
 #else
 			(void) time( &rdata.time );
 #endif
 
+			/* make sure rdata differs */
 			rdata.counter = ++counter;
 			rdata.pid++;
 			rdata.junk++;