diff --git a/xos/tosca/daemon.py b/xos/tosca/daemon.py
new file mode 100644
index 0000000..0fff6e2
--- /dev/null
+++ b/xos/tosca/daemon.py
@@ -0,0 +1,92 @@
+""" A very simple Tosca daemon. Every ten seconds it looks for new programs in
+    "run" or "destroy" status, and executes them.
+
+    TODO: Replace this with observer and/or model_policies ?
+"""
+
+import os
+import sys
+from threading import Thread
+import time
+
+# add the parent directory to sys.path
+import os,sys,inspect
+currentdir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))
+parentdir = os.path.dirname(currentdir)
+sys.path.append(parentdir)
+
+os.environ.setdefault("DJANGO_SETTINGS_MODULE", "xos.settings")
+import django
+django.setup()
+
+from core.models import Program, User
+from nodeselect import XOSNodeSelector
+from imageselect import XOSImageSelector
+import traceback
+
+from engine import XOSTosca
+
+class ToscaDaemon(Thread):
+    def __init__(self):
+        Thread.__init__(self)
+        self.daemon = True
+
+    def run_program(self, model):
+        try:
+            print "*** Run Program %s ***" % model.name
+            model.status = "executing"
+            model.output = ""
+            model.save()
+            xt = XOSTosca(model.contents, parent_dir=currentdir, log_to_console=True)
+            xt.execute(model.owner)
+            model.output = "\n".join(xt.log_msgs)
+            model.status = "complete"
+        except:
+            model.output = traceback.format_exc()
+            model.status = "exception"
+            traceback.print_exc()
+        model.command = None
+        model.save()
+
+    def destroy_program(self, model):
+        try:
+            print "*** Destroy Program %s ***" % model.name
+            model.status = "executing"
+            model.output = ""
+            model.save()
+            xt = XOSTosca(model.contents, parent_dir=currentdir)
+            xt.destroy(model.owner)
+            model.output = "\n".join(xt.log_msgs)
+            model.status = "complete"
+        except:
+            model.output = traceback.format_exc()
+            model.status = "exception"
+            traceback.print_exc()
+        model.command = None
+        model.save()
+
+    def run_once(self):
+        models = Program.objects.filter(kind="tosca", command="run")
+        for model in models:
+            self.run_program(model)
+
+        models = Program.objects.filter(kind="tosca", command="destroy")
+        for model in models:
+            self.destroy_program(model)
+
+    def run(self):
+        while True:
+            self.run_once()
+            time.sleep(10)
+            django.db.reset_queries()
+
+if __name__ == "__main__":
+    if "--once" in sys.argv:
+        ToscaDaemon().execute_once()
+    else:
+        ToscaDaemon().start()
+
+        print "Running forever..."
+        while True:
+            time.sleep(60)
+
