diff --git a/lib/modules/Crypto/randomness.pmod b/lib/modules/Crypto/randomness.pmod
index 7a6f3e7a71e472022371ce62457e0742f4db8464..06baaaa5dcf023e9cea925757d15951426f6adbd 100644
--- a/lib/modules/Crypto/randomness.pmod
+++ b/lib/modules/Crypto/randomness.pmod
@@ -1,4 +1,4 @@
-/* $Id: randomness.pmod,v 1.11 1999/08/25 17:32:54 grubba Exp $
+/* $Id: randomness.pmod,v 1.12 1999/09/13 22:19:15 hubbe Exp $
  */
 
 //! module Crypto
@@ -82,8 +82,19 @@ class pike_random {
   //!	Returns a string of length len with pseudo random values.
   string read(int len)
   {
+#if 1 // 30% optimization /Hubbe
+    string ret="";
+    if(len>=16384)
+    {
+      array x=allocate(16384,random);
+      for(int e=0;e<(len/16384);e++) ret+=(string)x(256);
+    }
+    ret+=(string)allocate(len % 16384, random)(256);
+    return ret;
+#else
     if (len > 16384) return read(len/2)+read(len-len/2);
     return (string)allocate(len, random)(256);
+#endif
   }
 }