diff --git a/lib/modules/Standards.pmod/ASN1.pmod/Encode.pmod b/lib/modules/Standards.pmod/ASN1.pmod/Encode.pmod
index 9b38843ebe483287d6a0845496c1a8b4db8d12c6..257397c52aa1bca73409fd34a1c2497f5515a3e5 100644
--- a/lib/modules/Standards.pmod/ASN1.pmod/Encode.pmod
+++ b/lib/modules/Standards.pmod/ASN1.pmod/Encode.pmod
@@ -20,6 +20,8 @@ class asn1_object
 
   string to_base_128(int n)
     {
+      if (!n)
+	return "\0";
       /* Convert tag number to base 128 */
       array(int) digits = ({ });
 
@@ -75,6 +77,10 @@ class asn1_compound
   void create(object ...args)
     {
       elements = args;
+      foreach(elements, mixed o)
+	if (!o || !objectp(o))
+	  throw( ({ "asn1_compound: Non-object argument!\n",
+		    backtrace() }) );
       WERROR(sprintf("asn1_compound: %O\n", elements));
     }
 }
@@ -195,7 +201,11 @@ class asn1_sequence
 
   string der()
     {
-      return build_der(`+("", @Array.map(elements, "der")));
+      WERROR(sprintf("asn1_sequence->der: elements = '%O\n",
+		     elements));
+      array(string) a = Array.map(elements, "der");
+      WERROR(sprintf("asn1_sequence->der: der(elements) = '%O\n", a));
+      return build_der(`+("", @ a));
     }
 }
 
@@ -223,10 +233,9 @@ class asn1_set
     {
       WERROR(sprintf("asn1_set->der: elements = '%O\n",
 		     elements));
-      WERROR(sprintf("asn1_set->der: der(elements) = '%O\n",
-		     Array.map(elements, "der")));
-      return build_der(`+("", @Array.sort_array(Array.map(elements, "der"),
-						compare_octet_strings)));
+      array(string) a = Array.map(elements, "der");
+      WERROR(sprintf("asn1_set->der: der(elements) = '%O\n", a));
+      return build_der(`+("", @Array.sort_array(a, compare_octet_strings)));
     }
 }