diff --git a/src/pike_types.c b/src/pike_types.c
index cdd9edd176178bfb79ec2bfd451e8c76201bc4b7..fb8489d7da9de08462e1d77318aa27852e7b1f86 100644
--- a/src/pike_types.c
+++ b/src/pike_types.c
@@ -5,7 +5,7 @@
 \*/
 /**/
 #include "global.h"
-RCSID("$Id: pike_types.c,v 1.107 1999/12/19 18:42:55 grubba Exp $");
+RCSID("$Id: pike_types.c,v 1.108 1999/12/21 17:19:55 grubba Exp $");
 #include <ctype.h>
 #include "svalue.h"
 #include "pike_types.h"
@@ -2061,11 +2061,14 @@ static int low_pike_types_le2(char *a, char *b, int array_cnt)
     if (EXTRACT_UCHAR(b) == T_NOT) {
       return low_pike_types_le(b+1, a+1, -array_cnt);
     }
+    if (EXTRACT_UCHAR(a+1) == T_NOT) {
+      return low_pike_types_le(a+2, b, array_cnt);
+    }
     if (low_pike_types_le(a+1, b, array_cnt)) {
       return 0;
     }
     /* FIXME: This is wrong... */
-    return low_pike_types_le(b, a+1, -array_cnt);
+    return !low_pike_types_le(b, a+1, -array_cnt);
 
   case T_ASSIGN:
     ret=low_pike_types_le(a+2, b, array_cnt);
@@ -2133,11 +2136,14 @@ static int low_pike_types_le2(char *a, char *b, int array_cnt)
     return low_pike_types_le(a, b, array_cnt);
 
   case T_NOT:
+    if (EXTRACT_UCHAR(b+1) == T_NOT) {
+      return low_pike_types_le(a, b+2, array_cnt);
+    }
     if (low_pike_types_le(a, b+1, array_cnt)) {
       return 0;
     }
     /* FIXME: This is wrong... */
-    return low_pike_types_le(b+1, a, -array_cnt);
+    return !low_pike_types_le(b+1, a, -array_cnt);
 
   case T_ASSIGN:
     ret=low_pike_types_le(a, b+2, array_cnt);
@@ -2335,7 +2341,7 @@ static int low_pike_types_le2(char *a, char *b, int array_cnt)
     /* check the 'many' type */
     a++;
     b++;
-    if (EXTRACT_UCHAR(a) != T_VOID) {
+    if ((EXTRACT_UCHAR(a) != T_VOID) && (EXTRACT_UCHAR(b) != T_VOID)) {
       if (!low_pike_types_le(b, a, 0))
 	return 0;
     }