diff --git a/lib/modules/Stack.pmod b/lib/modules/Stack.pmod
index b57df1b3d42ba7c280c6cf6cec67408ec4456c09..d6ab90993daa677262b0b7c396e6e15eeff8512a 100644
--- a/lib/modules/Stack.pmod
+++ b/lib/modules/Stack.pmod
@@ -2,12 +2,14 @@
 
 class stack {
   int ptr;
-  mixed *arr=allocate(32);
+  mixed *arr;
 
   void push(mixed val)
   {
-    if(ptr==sizeof(arr)) arr+=allocate(ptr);
-    arr[ptr++]=val;
+    if(ptr == sizeof(arr)) {
+      arr += allocate(ptr);
+    }
+    arr[ptr++] = val;
   }
 
   mixed top()
@@ -18,6 +20,21 @@ class stack {
     error("Stack underflow\n");
   }
 
+  void quick_pop(void|int val)
+  {
+    if (val) {
+      if (ptr < val) {
+	ptr = 0;
+      } else {
+	ptr -= val;
+      }
+    } else {
+      if (ptr > 0) {
+	ptr--;
+      }
+    }
+  }
+
   mixed pop(void|int val)
   {
     mixed foo;
@@ -46,10 +63,15 @@ class stack {
     return foo;
   }
 
-  void reset()
+  void reset(int|void initial_size)
+  {
+    arr = allocate(initial_size || 32);
+    ptr = 0;
+  }
+
+  void create(int|void initial_size)
   {
-    arr=allocate(32);
-    ptr=0;
+    arr = allocate(initial_size || 32);
   }
 };