diff --git a/cron.php b/cron.php
new file mode 100644
index 0000000000000000000000000000000000000000..ebde1b30b21c08f90f4e20cc614c4bb635fc9766
--- /dev/null
+++ b/cron.php
@@ -0,0 +1,12 @@
+<?
+
+include "includes/theme.inc";
+include "includes/cron.inc";
+
+$result = db_query("SELECT * FROM cron");
+
+while ($cron = db_fetch_object($result)) {
+  if (time() - $cron->timestamp > $cron->scheduled) cron_execute($cron);
+}
+
+?>
diff --git a/includes/cron.inc b/includes/cron.inc
new file mode 100644
index 0000000000000000000000000000000000000000..59ff0a07cd32e8bfd531efd8d16e3d292302f073
--- /dev/null
+++ b/includes/cron.inc
@@ -0,0 +1,24 @@
+<?
+
+function cron_add($name, $help, $code, $scheduled, $message = "") {
+  if (empty($name) || empty($code) || empty($scheduled)) {
+    $message = "failed: information missing";
+  }
+  else {
+    $result = db_query("INSERT INTO cron (name, help, code, scheduled) VALUES ('". check_input($name) ."', '". check_input($help) ."', '". check_code($code) ."', '". check_input($scheduled) ."')");
+  } 
+}
+
+function cron_delete($id) {
+  $result = db_query("DELETE FROM cron WHERE id = $id");
+}
+
+function cron_execute($cron) {
+  eval($cron->code);
+  
+  db_query("UPDATE cron SET timestamp = '". time() ."' WHERE id = $cron->id");
+
+  watchdog("message", "cron: executed '$cron->name'"); 
+}
+
+?>