diff --git a/bin/install_module b/bin/install_module
new file mode 100755
index 0000000000000000000000000000000000000000..3e97836760efc6eb82179e6f5e49a80cfc1235c2
--- /dev/null
+++ b/bin/install_module
@@ -0,0 +1,51 @@
+#!/bin/sh
+
+# install_module <from> <to>
+
+
+FROM="$1"
+TO="$2"
+
+DIR="$TO"
+while :
+do
+  DIR=`echo $DIR | sed -e 's@/[^/]*$@@'`
+  case "$DIR" in
+    *.pmod)
+      if [ -d "$DIR" ]; then
+         break
+      else
+         :
+      fi
+
+
+      if [ -f "$DIR" ]; then
+        mv "$DIR" "$DIR-foo"
+        mkdir $DIR
+        mv "$DIR-foo" "$DIR/module.pmod"
+        break
+      fi
+
+      BASE=`echo $DIR | sed -e 's/\.[^.]*$//'`
+
+      if [ -f "$BASE.so" ]; then
+        mkdir "$DIR"
+        mv "$BASE.so" "$DIR/module.so"
+        break
+      fi
+
+    ;;
+    *) break ;;
+  esac
+
+done
+
+BASE=`echo $TO | sed -e 's/\.[^.]*$//'`
+
+if [ -d "$BASE.pmod" ]; then
+  EXT=`echo $TO | sed -e 's@(\.[^.]$)@\1@/'`
+  TO="$BASE.pmod/module.$EXT"
+fi
+
+
+exec cp "$FROM" "$TO"
diff --git a/lib/modules/Protocols.pmod/X.pmod/db/convert_compose.pike b/lib/modules/Protocols.pmod/X.pmod/db/convert_compose.pike
index 1a64806d9a2b0f574f4d72009bfa488c269ab177..0a557698214b9b53da811d203d4b2aeccc8a79b0 100644
--- a/lib/modules/Protocols.pmod/X.pmod/db/convert_compose.pike
+++ b/lib/modules/Protocols.pmod/X.pmod/db/convert_compose.pike
@@ -30,7 +30,8 @@ void main()
       to = repl[to];
       string p = "";
       int res = (int)to;
-      for(int i=0;i<sizeof(from)-1; i++)
+      int i;
+      for(i=0;i<sizeof(from)-1; i++)
       {
 	p+=sprintf("%4c", (int)from[i]);
 	patterns[p]=({}); // continue..
diff --git a/src/modules/dynamic_module_makefile.in b/src/modules/dynamic_module_makefile.in
index fb37bcc9bc5c1c38db9d24ae5404f320eed1bca1..a2ac7a3d2a540fe8f1733e3cb2173d7cb9e95f36 100644
--- a/src/modules/dynamic_module_makefile.in
+++ b/src/modules/dynamic_module_makefile.in
@@ -1,5 +1,5 @@
 #
-# $Id: dynamic_module_makefile.in,v 1.45 1998/10/28 22:54:08 marcus Exp $
+# $Id: dynamic_module_makefile.in,v 1.46 1999/03/03 02:39:26 hubbe Exp $
 #
 
 
@@ -26,7 +26,7 @@ subdirs:
 dummy:	$(DUMMY) linker_options modlist_headers modlist_segment module.so
 	@tmp="$(INSTALL_NAME)" ; \
 	if test x$$tmp = x ; then tmp="$(MODNAME)"; else :; fi ;\
-	$(INSTALL) module.so $(TMP_LIBDIR)/modules/$$tmp.so ;\
+	$(TMP_BINDIR)/install_module module.so $(TMP_LIBDIR)/modules/$$tmp.so ;\
 	if [ -f $(SRCDIR)/module.pmod.in ]; then sed -e "s/@module@/\"$$tmp\"/" <$(SRCDIR)/module.pmod.in >$(TMP_LIBDIR)/modules/$$tmp.pmod ; else if [ -f ./module.pmod.in ]; then sed -e "s/@module@/\"$$tmp\"/" <./module.pmod.in >$(TMP_LIBDIR)/modules/$$tmp.pmod; else :; fi; fi
 
 linker_options: Makefile
@@ -90,5 +90,5 @@ gdb_verify: module_testsuite
 
 
 install: $(MODULE_INSTALL)
-	$(INSTALL) module.so @prefix@/lib/pike/modules/$(MODNAME).so
+	$(TMP_BINDIR)/install_module module.so @prefix@/lib/pike/modules/$(MODNAME).so
 
diff --git a/src/modules/static_module_makefile.in b/src/modules/static_module_makefile.in
index 4e369b5e0b1d0c2fcd1e919c4b66841880c004a2..c48189e4f609fee678e0cd04e9b98f0fbe200995 100644
--- a/src/modules/static_module_makefile.in
+++ b/src/modules/static_module_makefile.in
@@ -1,5 +1,5 @@
 #
-# $Id: static_module_makefile.in,v 1.40 1998/11/07 01:34:47 grubba Exp $
+# $Id: static_module_makefile.in,v 1.41 1999/03/03 02:39:27 hubbe Exp $
 #
 
 
@@ -23,7 +23,7 @@ subdirs:
 dummy:	linker_options modlist_headers modlist_segment module.pmod module.a
 	@tmp="$(INSTALL_NAME)" ;\
 	if test x$$tmp = x ; then tmp="$(MODNAME)"; else :; fi ;\
-	$(INSTALL) module.pmod $(TMP_LIBDIR)/modules/$$tmp.pmod
+	$(TMP_BINDIR)/install_module module.pmod $(TMP_LIBDIR)/modules/$$tmp.pmod
 
 linker_options: Makefile $(MODULE_ARCHIVES)
 	echo >linker_options modules/$(MODNAME)/module.a $(MODULE_LDFLAGS)