diff --git a/lib/modules/Stack.pmod b/lib/modules/Stack.pmod
index 92dfb2546e94ae3d1ec1f1356d8684285a43425f..aeb471a65bd4bac88873886bf35e1ebb028ee1bb 100644
--- a/lib/modules/Stack.pmod
+++ b/lib/modules/Stack.pmod
@@ -10,14 +10,31 @@ class stack {
     arr[ptr++]=val;
   }
 
-  mixed pop(mixed val)
+  mixed pop(void|int val)
   {
     mixed foo;
-    if(--ptr < 0)
-      error("Stack underflow\n");
+
+    if (val) {
+      if (ptr <= 0) {
+	error("Stack underflow\n");
+      }
+
+      if (ptr < val) {
+        val = ptr;
+      }
+      ptr -= val;
+      foo = arr[ptr..ptr + val - 1];
+ 
+      for (int i=0; i < val; i++) {
+        arr[ptr + i] = 0;       /* Don't waste references */
+      }
+    } else {
+      if(--ptr < 0)
+	error("Stack underflow\n");
     
-    foo=arr[ptr];
-    arr[ptr]=0; /* Don't waste references */
+      foo=arr[ptr];
+      arr[ptr]=0; /* Don't waste references */
+    }
     return foo;
   }