diff --git a/xos/tosca/destroy.py b/xos/tosca/destroy.py
index 968e450..e5f5c37 100644
--- a/xos/tosca/destroy.py
+++ b/xos/tosca/destroy.py
@@ -26,7 +26,7 @@
 
     u = User.objects.get(email=username)
 
-    xt = XOSTosca(file(template_name).read(), parent_dir=currentdir)
+    xt = XOSTosca(file(template_name).read(), parent_dir=currentdir, log_to_console=True)
     xt.destroy(u)
 
 if __name__=="__main__":
diff --git a/xos/tosca/engine.py b/xos/tosca/engine.py
index a0d917d..b70bd94 100644
--- a/xos/tosca/engine.py
+++ b/xos/tosca/engine.py
@@ -2,6 +2,8 @@
 import pdb
 import sys
 import tempfile
+import traceback
+
 sys.path.append("/opt/tosca")
 from translator.toscalib.tosca_template import ToscaTemplate
 
@@ -12,21 +14,29 @@
 import resources
 
 class XOSTosca(object):
-    def __init__(self, tosca_yaml, parent_dir=None):
+    def __init__(self, tosca_yaml, parent_dir=None, log_to_console = False):
         # TOSCA will look for imports using a relative path from where the
         # template file is located, so we have to put the template file
         # in a specific place.
         if not parent_dir:
             parent_dir = os.getcwd()
 
+        tmp_pathname = None
         try:
             (tmp_handle, tmp_pathname) = tempfile.mkstemp(dir=parent_dir)
             os.write(tmp_handle, tosca_yaml)
             os.close(tmp_handle)
 
             self.template = ToscaTemplate(tmp_pathname)
+        except:
+            traceback.print_exc()
+            raise
         finally:
-            os.remove(tmp_pathname)
+            if tmp_pathname:
+                os.remove(tmp_pathname)
+
+        self.log_to_console = log_to_console
+        self.log_msgs = []
 
         self.compute_dependencies()
 
@@ -39,6 +49,11 @@
 
         #pdb.set_trace()
 
+    def log(self, msg):
+        if self.log_to_console:
+            print msg
+        self.log_msgs.append(msg)
+
     def compute_dependencies(self):
         nodetemplates_by_name = {}
         for nodetemplate in self.template.nodetemplates:
@@ -136,7 +151,6 @@
                     models.append( (obj, model) )
         models.reverse()
         for (resource,model) in models:
-            print "destroying", model
             resource.delete(model)
 
     def name_to_xos_class(self, user, name):
diff --git a/xos/tosca/resources/xosresource.py b/xos/tosca/resources/xosresource.py
index 0fc1c78..e848ab5 100644
--- a/xos/tosca/resources/xosresource.py
+++ b/xos/tosca/resources/xosresource.py
@@ -108,9 +108,10 @@
         pass
 
     def delete(self, obj):
+        self.info("destroying object %s" % str(obj))
         self.pre_delete(obj)
         obj.delete(purge=True)   # XXX TODO: turn off purge before production
 
     def info(self, s):
-        print s
+        self.engine.log(s)
 
diff --git a/xos/tosca/run.py b/xos/tosca/run.py
index 45a87ea..87fb480 100644
--- a/xos/tosca/run.py
+++ b/xos/tosca/run.py
@@ -26,7 +26,7 @@
 
     u = User.objects.get(email=username)
 
-    xt = XOSTosca(file(template_name).read(), parent_dir=currentdir)
+    xt = XOSTosca(file(template_name).read(), parent_dir=currentdir, log_to_console=True)
     xt.execute(u)
 
 if __name__=="__main__":
