diff --git a/src/array.c b/src/array.c
index 70da9c02576c2dea7da021a81b7cda004e5fa867..ac765f289be3d465e5559cb0fbf072ffd365de20 100644
--- a/src/array.c
+++ b/src/array.c
@@ -2323,8 +2323,11 @@ void assign_array_level( struct array *a, struct array *b, int level )
             assign_array_level( a->item[i].u.array, b->item[i].u.array, level-1 );
         }
     }
-    else
-        assign_svalues( a->item, b->item, a->size, a->type_field|b->type_field );
+    else {
+      assign_svalues( a->item, b->item, a->size,
+		      a->type_field|b->type_field );
+      a->type_field = b->type_field;
+    }
 }
 
 /* Assign all elemnts in a at level to b.
@@ -2349,6 +2352,7 @@ void assign_array_level_value( struct array *a, struct svalue *b, int level )
         if( REFCOUNTED_TYPE(TYPEOF(*b)) )     *b->u.refs+=a->size;
         for( i=0; i<a->size; i++)
             a->item[i] = *b;
+	a->type_field = 1 << TYPEOF(*b);
     }
 }