diff --git a/src/modules/_Crypto/cast.c b/src/modules/_Crypto/cast.c
index 5bf02f21ca3f68b32739833e19c3c68fb9a27b4e..7f3ce66c0570916ad887b0d783071e05584132bc 100644
--- a/src/modules/_Crypto/cast.c
+++ b/src/modules/_Crypto/cast.c
@@ -1,5 +1,5 @@
 /*
- * $Id: cast.c,v 1.1 1997/11/04 01:28:47 nisse Exp $
+ * $Id: cast.c,v 1.2 1997/11/16 22:25:39 nisse Exp $
  *
  * CAST crypto module for Pike
  *
@@ -22,9 +22,6 @@
 
 #include <cast.h>
 
-/* Module specific includes */
-#include "precompiled_crypto.h"
-
 struct pike_crypto_cast {
   struct cast_key key;
   void (*crypt_fun)(struct cast_key* key, unsigned INT8* inblock,
@@ -153,14 +150,7 @@ static void f_crypt_block(INT32 args)
  * Module linkage
  */
 
-#if 0
-void MOD_INIT2(cast)(void)
-{
-  /* add_efun()s */
-}
-#endif
-
-void MOD_INIT(cast)(void)
+void pike_cast_init(void)
 {
   /*
    * start_new_program();
@@ -192,9 +182,9 @@ void MOD_INIT(cast)(void)
   set_init_callback(init_pike_crypto_cast);
   set_exit_callback(exit_pike_crypto_cast);
 
-  end_class(MODULE_PREFIX "cast", 0);
+  end_class("cast", 0);
 }
 
-void MOD_EXIT(cast)(void)
+void pike_cast_exit(void)
 {
 }
diff --git a/src/modules/_Crypto/cbc.c b/src/modules/_Crypto/cbc.c
index 4a9dd8544078cc4bba96159ac4ecb3408456c415..d3644cdbf40b5580068d01b766b4849b7b53a667 100644
--- a/src/modules/_Crypto/cbc.c
+++ b/src/modules/_Crypto/cbc.c
@@ -1,5 +1,5 @@
 /*
- * $Id: cbc.c,v 1.8 1997/04/10 02:33:26 nisse Exp $
+ * $Id: cbc.c,v 1.9 1997/11/16 22:25:39 nisse Exp $
  *
  * CBC (Cipher Block Chaining Mode) crypto module for Pike.
  *
@@ -25,8 +25,8 @@
 #include "interpret.h"
 #include "builtin_functions.h"
 
-/* Module specific includes */
-#include "precompiled_crypto.h"
+/* Prototypes */
+#include "crypto.h"
 
 struct pike_crypto_cbc {
   struct object *object;
@@ -294,7 +294,7 @@ static void f_crypt_block(INT32 args)
  * Module linkage
  */
 
-void MOD_INIT(cbc)(void)
+void pike_cbc_init(void)
 {
   /*
    * start_new_program();
@@ -331,10 +331,10 @@ void MOD_INIT(cbc)(void)
   set_init_callback(init_pike_crypto_cbc);
   set_exit_callback(exit_pike_crypto_cbc);
 
-  end_class(MODULE_PREFIX "cbc", 0);
+  end_class("cbc", 0);
 }
 
-void MOD_EXIT(cbc)(void)
+void pike_cbc_exit(void)
 {
 }
 
diff --git a/src/modules/_Crypto/crypto.c b/src/modules/_Crypto/crypto.c
index 0ee1f726c5de51e4a4414f52ce681d72b0cda713..9d0fab908c93b41229c8de2f7b753e3f48bdf6c3 100644
--- a/src/modules/_Crypto/crypto.c
+++ b/src/modules/_Crypto/crypto.c
@@ -1,5 +1,5 @@
 /*
- * $Id: crypto.c,v 1.21 1997/11/04 01:28:48 nisse Exp $
+ * $Id: crypto.c,v 1.22 1997/11/16 22:25:41 nisse Exp $
  *
  * A pike module for getting access to some common cryptos.
  *
@@ -20,8 +20,7 @@
 #include "threads.h"
 #include "object.h"
 #include "interpret.h"
-/* #include "builtin_functions.h"
- */
+
 /* System includes */
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -31,8 +30,8 @@
 #include <fcntl.h>
 #include <errno.h>
 
-/* Module specific includes */
-#include "precompiled_crypto.h"
+/* Prototypes */
+#include "crypto.h"
 
 struct pike_crypto {
   struct object *object;
@@ -215,7 +214,6 @@ static void f_des_parity(INT32 args)
   push_string(end_shared_string(s));
 }
 
-  
 /*
  * /precompiled/crypto
  */
@@ -444,29 +442,8 @@ static void f_unpad(INT32 args)
  * Module linkage
  */
 
-#if 0
-void MOD_INIT2(crypto)(void)
-{
-  /* add_efun()s */
-
-#if 0
-  MOD_INIT2(md2)();
-  MOD_INIT2(md5)();
-#endif
-#if 1
-  MOD_INIT2(idea)();
-  MOD_INIT2(des)();
-  MOD_INIT2(rc4)();
-  MOD_INIT2(invert)();
-
-  MOD_INIT2(sha)();
-  MOD_INIT2(cbc)();
-  MOD_INIT2(pipe)();
-#endif
-}
-#endif
 
-void MOD_INIT(crypto)(void)
+void pike_crypto_init(void)
 {
   /*
    * start_new_program();
@@ -503,51 +480,50 @@ void MOD_INIT(crypto)(void)
   set_init_callback(init_pike_crypto);
   set_exit_callback(exit_pike_crypto);
 
-  end_class(MODULE_PREFIX "crypto", 0);
+  end_class("crypto", 0);
 }
 
-void MOD_EXIT(crypto)(void) {}
+void pike_crypto_exit(void) {}
 
 void pike_module_init(void)
 {
   add_function("string_to_hex", f_string_to_hex, "function(string:string)", 0);
   add_function("hex_to_string", f_hex_to_string, "function(string:string)", 0);
   add_function("des_parity", f_des_parity, "function(string:string)", 0);
-#if 0
-  MOD_INIT(md2)();
-#endif
-#if 1
-  MOD_INIT(md5)();
-  MOD_INIT(crypto)();
-  MOD_INIT(idea)();
-  MOD_INIT(des)();
-  MOD_INIT(cast)();
-  MOD_INIT(rc4)();
-  MOD_INIT(invert)();
-
-  MOD_INIT(sha)();
-  MOD_INIT(cbc)();
-  MOD_INIT(pipe)();
-#endif
+
+  pike_md5_init();
+  pike_sha_init();
+  pike_crypto_init();
+  pike_cbc_init();
+  pike_pipe_init();
+  pike_invert_init();
+
+  /* BEGIN NATIONAL SECURITY */  
+
+  pike_idea_init();
+  pike_des_init();
+  pike_cast_init();
+  pike_rc4_init();
+
+  /* END NATIONAL SECURITY */
 }  
 
 void pike_module_exit(void)
 {
-  /* free_program()s */
-#if 0
-  MOD_EXIT(md2)();
-#endif
-#if 1
-  MOD_EXIT(md5)();
-  MOD_EXIT(crypto)();
-  MOD_EXIT(idea)();
-  MOD_EXIT(cast)();  
-  MOD_EXIT(des)();
-  MOD_EXIT(rc4)();
-  MOD_EXIT(invert)();
-  MOD_EXIT(sha)();
-  MOD_EXIT(cbc)();
-  MOD_EXIT(pipe)();
-#endif
+  pike_md5_exit();
+  pike_sha_exit();
+  pike_crypto_exit();
+  pike_cbc_exit();
+  pike_pipe_exit();
+  pike_invert_exit();
+
+  /* BEGIN NATIONAL SECURITY */
+
+  pike_idea_exit();
+  pike_des_exit();
+  pike_cast_exit();
+  pike_rc4_exit();
+
+  /* END NATIONAL SECURITY */
 }
 
diff --git a/src/modules/_Crypto/crypto.h b/src/modules/_Crypto/crypto.h
index 2c61d25e8773b50fc4f624c525c8812b8af481b3..be85d3269e7e6c21c45dd1ecdd08731402b04d45 100644
--- a/src/modules/_Crypto/crypto.h
+++ b/src/modules/_Crypto/crypto.h
@@ -1,14 +1,30 @@
 /*
- * $Id: crypto.h,v 1.1.1.1 1996/11/05 15:10:09 grubba Exp $
+ * $Id: crypto.h,v 1.2 1997/11/16 22:25:42 nisse Exp $
  *
- * The Pike crypto module
+ * Prototypes for some functions.
  *
- * Henrik Grubbström 1996-10-24
- *
- * This module provides the Pike interface to libcrypto.so.
- *
- * NOTE:
- *	If the crypto module was compiled as a dynamic module (the default),
- *	you MUST include this file to get it loaded.
  */
 
+extern void assert_is_crypto_module(struct object *);
+
+extern void pike_md5_init(void);
+extern void pike_md5_exit(void);
+extern void pike_crypto_init(void);
+extern void pike_crypto_exit(void);
+extern void pike_idea_init(void);
+extern void pike_idea_exit(void);
+extern void pike_des_init(void);
+extern void pike_des_exit(void);
+extern void pike_cast_init(void);
+extern void pike_cast_exit(void);
+extern void pike_rc4_init(void);
+extern void pike_rc4_exit(void);
+extern void pike_invert_init(void);
+extern void pike_invert_exit(void);
+extern void pike_sha_init(void);
+extern void pike_sha_exit(void);
+extern void pike_cbc_init(void);
+extern void pike_cbc_exit(void);
+extern void pike_pipe_init(void);
+extern void pike_pipe_exit(void);
+
diff --git a/src/modules/_Crypto/des.c b/src/modules/_Crypto/des.c
index 77cd984ba6818bec0cce0df452086e26e3aff883..61132d00ded35da86d99966635b5b0b2fc85faab 100644
--- a/src/modules/_Crypto/des.c
+++ b/src/modules/_Crypto/des.c
@@ -1,5 +1,5 @@
 /*
- * $Id: des.c,v 1.8 1997/05/30 02:40:14 grubba Exp $
+ * $Id: des.c,v 1.9 1997/11/16 22:25:42 nisse Exp $
  *
  * A pike module for getting access to some common cryptos.
  *
@@ -35,9 +35,6 @@
 
 #include <des.h>
 
-/* Module specific includes */
-#include "precompiled_crypto.h"
-
 struct pike_crypto_des {
   unsigned INT32 method[DES_EXPANDED_KEYLEN];
   void (*crypt_fun)(unsigned INT8 *dest,
@@ -157,14 +154,7 @@ static void f_crypt_block(INT32 args)
  * Module linkage
  */
 
-#if 0
-void MOD_INIT2(des)(void)
-{
-  /* add_efun()s */
-}
-#endif
-
-void MOD_INIT(des)(void)
+void pike_des_init(void)
 {
   /*
    * start_new_program();
@@ -196,9 +186,9 @@ void MOD_INIT(des)(void)
   set_init_callback(init_pike_crypto_des);
   set_exit_callback(exit_pike_crypto_des);
 
-  end_class(MODULE_PREFIX "des", 0);
+  end_class("des", 0);
 }
 
-void MOD_EXIT(des)(void)
+void pike_des_exit(void)
 {
 }
diff --git a/src/modules/_Crypto/idea.c b/src/modules/_Crypto/idea.c
index e603f49cb9adffa6b69d81bfb134246efb6ad68d..ff603965d41a38cdd24cde87dc0b642799c47e61 100644
--- a/src/modules/_Crypto/idea.c
+++ b/src/modules/_Crypto/idea.c
@@ -1,5 +1,5 @@
 /*
- * $Id: idea.c,v 1.9 1997/03/11 03:15:00 nisse Exp $
+ * $Id: idea.c,v 1.10 1997/11/16 22:25:43 nisse Exp $
  *
  * IDEA crypto module for Pike
  *
@@ -24,9 +24,6 @@
 /* Backend includes */
 #include <idea.h>
 
-/* Module specific includes */
-#include "precompiled_crypto.h"
-
 #define THIS ((unsigned INT16 *)(fp->current_storage))
 #define OBTOCTX(o) ((unsigned INT16 *)(o->storage))
 
@@ -140,14 +137,7 @@ static void f_crypt_block(INT32 args)
  * Module linkage
  */
 
-#if 0
-void MOD_INIT2(idea)(void)
-{
-  /* add_efun()s */
-}
-#endif
-
-void MOD_INIT(idea)(void)
+void pike_idea_init(void)
 {
   /*
    * start_new_program();
@@ -179,9 +169,9 @@ void MOD_INIT(idea)(void)
   set_init_callback(init_pike_crypto_idea);
   set_exit_callback(exit_pike_crypto_idea);
 
-  end_class(MODULE_PREFIX "idea", 0);
+  end_class("idea", 0);
 }
 
-void MOD_EXIT(idea)(void)
+void pike_idea_exit(void)
 {
 }
diff --git a/src/modules/_Crypto/invert.c b/src/modules/_Crypto/invert.c
index 1ea00de08a48c01a2de848754324458ffea5c4b7..75cc852eefe0c8fae7c74c319d773070901b7c12 100644
--- a/src/modules/_Crypto/invert.c
+++ b/src/modules/_Crypto/invert.c
@@ -1,5 +1,5 @@
 /*
- * $Id: invert.c,v 1.6 1997/03/17 03:11:15 hubbe Exp $
+ * $Id: invert.c,v 1.7 1997/11/16 22:25:44 nisse Exp $
  *
  * INVERT crypto module for Pike
  *
@@ -24,9 +24,6 @@
 #include "stralloc.h"
 #include "builtin_functions.h"
 
-/* Module specific includes */
-#include "precompiled_crypto.h"
-
 /*
  * Globals
  */
@@ -125,7 +122,7 @@ static void f_crypt_block(INT32 args)
  * Module linkage
  */
 
-void MOD_INIT(invert)(void)
+void pike_invert_init(void)
 {
   /*
    * start_new_program();
@@ -157,10 +154,10 @@ void MOD_INIT(invert)(void)
   set_init_callback(init_pike_crypto_invert);
   set_exit_callback(exit_pike_crypto_invert);
 
-  end_class(MODULE_PREFIX "invert", 0);
+  end_class("invert", 0);
 }
 
-void MOD_EXIT(invert)(void)
+void pike_invert_exit(void)
 {
 }
 
diff --git a/src/modules/_Crypto/md5.c b/src/modules/_Crypto/md5.c
index fc519236e20daf3be9b416e89534f8ba80a52f7d..9b35a4628b3ea95817b687a5b92faf9685b10537 100644
--- a/src/modules/_Crypto/md5.c
+++ b/src/modules/_Crypto/md5.c
@@ -1,5 +1,5 @@
 /*
- * $Id: md5.c,v 1.6 1997/09/07 19:51:57 nisse Exp $
+ * $Id: md5.c,v 1.7 1997/11/16 22:25:44 nisse Exp $
  *
  * A pike module for getting access to some common cryptos.
  *
@@ -22,10 +22,7 @@
 #include "error.h"
 #include "module_support.h"
 
-#include "md5.h"
-
-/* Module specific includes */
-#include "precompiled_crypto.h"
+#include <md5.h>
 
 #define THIS ((struct md5_ctx *)(fp->current_storage))
 #define OBTOCTX(o) ((struct md5_ctx *)(o->storage))
@@ -86,11 +83,11 @@ static void f_digest(INT32 args)
   push_string(end_shared_string(s));
 }
 
-void MOD_EXIT(md5)(void)
+void pike_md5_exit(void)
 {
 }
 
-void MOD_INIT(md5)(void)
+void pike_md5_init(void)
 {
   start_new_program();
   add_storage(sizeof(struct md5_ctx));
@@ -99,5 +96,5 @@ void MOD_INIT(md5)(void)
   add_function("update", f_update, "function(string:object)", 0);
   add_function("digest", f_digest, "function(void:string)", 0);
   add_function("identifier", f_identifier, "function(void:string)", 0);
-  end_class(MODULE_PREFIX "md5", 0);
+  end_class("md5", 0);
 }
diff --git a/src/modules/_Crypto/pipe.c b/src/modules/_Crypto/pipe.c
index 0d19f57aece70f8fb5217ba4c4040547a6e7142c..604534d351804713fafe4e922fcbb8bb2b89982e 100644
--- a/src/modules/_Crypto/pipe.c
+++ b/src/modules/_Crypto/pipe.c
@@ -1,5 +1,5 @@
 /*
- * $Id: pipe.c,v 1.9 1997/05/17 12:46:44 grubba Exp $
+ * $Id: pipe.c,v 1.10 1997/11/16 22:25:45 nisse Exp $
  *
  * PIPE crypto module for Pike.
  *
@@ -25,8 +25,8 @@
 #include "builtin_functions.h"
 #include "operators.h"
 
-/* Module specific includes */
-#include "precompiled_crypto.h"
+/* Prototypes */
+#include "crypto.h"
 
 struct pike_crypto_pipe {
   struct object **objects;
@@ -285,7 +285,7 @@ static void f_crypt_block(INT32 args)
  * Module linkage
  */
 
-void MOD_INIT(pipe)(void)
+void pike_pipe_init(void)
 {
   /*
    * start_new_program();
@@ -321,9 +321,9 @@ void MOD_INIT(pipe)(void)
   set_init_callback(init_pike_crypto_pipe);
   set_exit_callback(exit_pike_crypto_pipe);
 
-  end_class(MODULE_PREFIX "pipe", 0);
+  end_class("pipe", 0);
 }
 
-void MOD_EXIT(pipe)(void)
+void pike_pipe_exit(void)
 {
 }
diff --git a/src/modules/_Crypto/precompiled_crypto.h b/src/modules/_Crypto/precompiled_crypto.h
index 8aaf4aa1008b14ba7dc113cddeb3417e196a08c5..7fe6a24358c56b04d4bd730e46569c554c35dfab 100644
--- a/src/modules/_Crypto/precompiled_crypto.h
+++ b/src/modules/_Crypto/precompiled_crypto.h
@@ -8,6 +8,8 @@
 
 /* This file should be removed when things have stabilized */
 
+#error precompiled_crypto.h is obsolete
+
 #ifndef PRECOMPILED_CRYPTO_H
 #define PRECOMPILED_CRYPTO_H
 
diff --git a/src/modules/_Crypto/rc4.c b/src/modules/_Crypto/rc4.c
index 90dc821cf1eecb5bc6d773765257b16c6fb7eeed..c67ad3c74e4df9ff0efce5e97c99e0e39ac5978a 100644
--- a/src/modules/_Crypto/rc4.c
+++ b/src/modules/_Crypto/rc4.c
@@ -16,10 +16,7 @@
 
 #include "rc4.h"
 
-RCSID("$Id: rc4.c,v 1.5 1997/04/18 20:07:17 nisse Exp $");
-
-/* Module specific includes */
-#include "precompiled_crypto.h"
+RCSID("$Id: rc4.c,v 1.6 1997/11/16 22:25:46 nisse Exp $");
 
 #define THIS ((struct rc4_ctx *)(fp->current_storage))
 
@@ -95,12 +92,7 @@ static void f_crypt(INT32 args)
   push_string(end_shared_string(s));
 }
 
-void MOD_INIT2(rc4)(void)
-{
-  /* add_efun()s */
-}
-
-void MOD_INIT(rc4)(void)
+void pike_rc4_init(void)
 {
   start_new_program();
   add_storage(sizeof(struct rc4_ctx));
@@ -114,9 +106,9 @@ void MOD_INIT(rc4)(void)
   set_init_callback(init_pike_rc4);
   set_exit_callback(exit_pike_rc4);
 
-  end_class(MODULE_PREFIX "rc4", 0);
+  end_class("rc4", 0);
 }
 
-void MOD_EXIT(rc4)(void)
+void pike_rc4_exit(void)
 {
 }
diff --git a/src/modules/_Crypto/sha.c b/src/modules/_Crypto/sha.c
index ae92646d70150afaeb0a661aadb4f13fb6beb404..e165fe2290c56e1253bb57e3602a2c09af0940dd 100644
--- a/src/modules/_Crypto/sha.c
+++ b/src/modules/_Crypto/sha.c
@@ -15,10 +15,7 @@
 #include "error.h"
 #include "module_support.h"
 
-#include "sha.h"
-
-/* Module specific includes */
-#include "precompiled_crypto.h"
+#include <sha.h>
 
 #define THIS ((struct sha_ctx *)(fp->current_storage))
 #define OBTOCTX(o) ((struct sha_ctx *)(o->storage))
@@ -72,11 +69,11 @@ static void f_digest(INT32 args)
   push_string(end_shared_string(s));
 }
 
-void MOD_EXIT(sha)(void)
+void pike_sha_exit(void)
 {
 }
 
-void MOD_INIT(sha)(void)
+void pike_sha_init(void)
 {
   start_new_program();
   add_storage(sizeof(struct sha_ctx));
@@ -84,5 +81,5 @@ void MOD_INIT(sha)(void)
   add_function("create", f_create, "function(void|object:void)", 0);
   add_function("update", f_update, "function(string:object)", 0);
   add_function("digest", f_digest, "function(void:string)", 0);
-  end_class(MODULE_PREFIX "sha", 0);
+  end_class("sha", 0);
 }