diff --git a/lib/include/stack.h b/lib/include/stack.h
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/lib/include/stack.pre.pike b/lib/include/stack.pre.pike
new file mode 100644
index 0000000000000000000000000000000000000000..480e715e94f49d43b597e3cf3feba3b04f65df65
--- /dev/null
+++ b/lib/include/stack.pre.pike
@@ -0,0 +1,28 @@
+#define error(X) throw( ({ (X), backtrace()[0..sizeof(backtrace())-2] }) )
+
+class stack {
+  int ptr;
+  mixed *arr=allocate(32);
+
+  void push(mixed val)
+  {
+    if(ptr==sizeof(arr)) arr+=allocate(ptr);
+    arr[ptr++]=val;
+  }
+
+  mixed pop(mixed val)
+  {
+    mixed foo;
+    if(--ptr < 0)
+      error("Stack underflow\n");
+    
+    foo=arr[ptr];
+    arr[ptr]=0; /* Don't waste references */
+    return foo;
+  }
+};
+
+void create()
+{
+  master()->add_precompiled_program("/precompiled/stack",stack);
+}