diff --git a/src/docode.c b/src/docode.c
index b4163d28cadeeebe500ede1b16940dad4ccb0778..47fb4353959409e05a26f86b00a603b0ab29b9ac 100644
--- a/src/docode.c
+++ b/src/docode.c
@@ -4,7 +4,7 @@
 ||| See the files COPYING and DISCLAIMER for more information.
 \*/
 #include "global.h"
-RCSID("$Id: docode.c,v 1.27 1998/01/29 01:55:34 hubbe Exp $");
+RCSID("$Id: docode.c,v 1.28 1998/01/29 02:47:43 hubbe Exp $");
 #include "las.h"
 #include "program.h"
 #include "language.h"
@@ -762,7 +762,7 @@ static int do_docode2(node *n,int flags)
     emit(F_ALIGN,sizeof(INT32));
 
     current_switch_values_on_stack=0;
-    current_switch_case=0;
+    current_switch_case=1;
     current_switch_default=-1;
     current_switch_jumptable=(INT32 *)xalloc(sizeof(INT32)*(cases*2+2));
     jumptable=(INT32 *)xalloc(sizeof(INT32)*(cases*2+2));
diff --git a/src/fsort.c b/src/fsort.c
index fd8cb524edcf01dde5c239d1e9a558e47e37ebf6..e6439bc84b9c7a673396e2757d212ecd84724d52 100644
--- a/src/fsort.c
+++ b/src/fsort.c
@@ -80,16 +80,16 @@ void fsort(void *base,
 	   long elmSize,
 	   fsortfun cmpfunc)
 {
-#ifdef DEBUG
-  if(((unsigned long)base) % elmSize)
-    fatal("Unaligned memory in argument to fsort()()\n");
-#endif
 
   if(elms<=0) return;
   cmpfun=cmpfunc;
   size=elmSize;
 
+#ifdef HANDLES_UNALIGNED_MEMORY_ACCESS
   switch(elmSize)
+#else
+  switch( (((unsigned long)memory) % elmSize) ? size : 0 )
+#endif
   {
   case  1:  fsort_1(( B1_T *)base,(elms-1)+( B1_T *)base); break;
 #ifdef B2_T
diff --git a/src/pike_memory.c b/src/pike_memory.c
index f6f2c93d99e7d6bae365986e60685abd5d3240f1..de2f2f148403534d46d9c50275d4b8f26630ecfd 100644
--- a/src/pike_memory.c
+++ b/src/pike_memory.c
@@ -44,10 +44,6 @@ void swap(char *a, char *b, INT32 size)
 
 void reverse(char *memory, INT32 nitems, INT32 size)
 {
-#ifdef DEBUG
-  if(((unsigned long)memory) % size)
-    fatal("Unaligned memory in argument to reverse()\n");
-#endif
 
 #define DOSIZE(X,Y)						\
  case X:							\
@@ -59,7 +55,11 @@ void reverse(char *memory, INT32 nitems, INT32 size)
   break;							\
  }
 
+#ifdef HANDLES_UNALIGNED_MEMORY_ACCESS
   switch(size)
+#else
+  switch( (((unsigned long)memory) % size) ? size : 0 )
+#endif
   {
     DOSIZE(1,B1_T)
 #ifdef B2_T
@@ -98,12 +98,9 @@ void reorder(char *memory, INT32 nitems, INT32 size,INT32 *order)
   char *tmp;
   if(nitems<2) return;
 
-#ifdef DEBUG
-  if(((unsigned long)memory) % size)
-    fatal("Unaligned memory in argument to reorder()\n");
-#endif
 
   tmp=xalloc(size * nitems);
+
 #undef DOSIZE
 #define DOSIZE(X,Y)				\
  case X:					\
@@ -115,17 +112,21 @@ void reorder(char *memory, INT32 nitems, INT32 size,INT32 *order)
  }
   
 
+#ifdef HANDLES_UNALIGNED_MEMORY_ACCESS
   switch(size)
-  {
-    DOSIZE(1,B1_T)
+#else
+  switch( (((unsigned long)memory) % size) ? size : 0 )
+#endif
+ {
+   DOSIZE(1,B1_T)
 #ifdef B2_T
-    DOSIZE(2,B2_T)
+     DOSIZE(2,B2_T)
 #endif
 #ifdef B4_T
-    DOSIZE(4,B4_T)
+     DOSIZE(4,B4_T)
 #endif
 #ifdef B8_T
-    DOSIZE(8,B8_T)
+     DOSIZE(8,B8_T)
 #endif
 #ifdef B16_T
     DOSIZE(16,B16_T)