diff --git a/circle/vm/tasks/agent_tasks.py b/circle/vm/tasks/agent_tasks.py
index 4bb12b5..1c31385 100644
--- a/circle/vm/tasks/agent_tasks.py
+++ b/circle/vm/tasks/agent_tasks.py
@@ -41,3 +41,13 @@ def set_hostname(vm, time):
 @celery.task(name='agent.mount_store')
 def mount_store(vm, host, username, password):
     pass
+
+
+@celery.task(name='agent.cleanup')
+def cleanup(vm):
+    pass
+
+
+@celery.task(name='agent.start_access_server')
+def start_access_server(vm):
+    pass
diff --git a/circle/vm/tasks/local_agent_tasks.py b/circle/vm/tasks/local_agent_tasks.py
index f89a196..892db62 100644
--- a/circle/vm/tasks/local_agent_tasks.py
+++ b/circle/vm/tasks/local_agent_tasks.py
@@ -17,27 +17,43 @@
 
 from manager.mancelery import celery
 from vm.tasks.agent_tasks import (restart_networking, change_password,
-                                  set_time, set_hostname)
+                                  set_time, set_hostname, start_access_server,
+                                  cleanup)
 import time
 
 
+def send_init_commands(instance, act, vm):
+    queue = instance.get_remote_queue_name("agent")
+
+    with act.sub_activity('cleanup'):
+        cleanup.apply_async(queue=queue, args=(vm, ))
+    with act.sub_activity('restart_networking'):
+        restart_networking.apply_async(queue=queue, args=(vm, ))
+    with act.sub_activity('change_password'):
+        change_password.apply_async(queue=queue, args=(vm, instance.pw))
+    with act.sub_activity('set_time'):
+        set_time.apply_async(queue=queue, args=(vm, time.time()))
+    with act.sub_activity('set_hostname'):
+        set_hostname.apply_async(
+            queue=queue, args=(vm, instance.primary_host.hostname))
+
+
 @celery.task
 def agent_started(vm):
-    from vm.models import Instance, instance_activity
+    from vm.models import Instance, instance_activity, InstanceActivity
     instance = Instance.objects.get(id=int(vm.split('-')[-1]))
+    initialized = InstanceActivity.objects.filter(
+        instance=instance, activity_code='vm.Instance.agent').exists()
 
     with instance_activity(code_suffix='agent', instance=instance) as act:
         with act.sub_activity('starting'):
-            queue = "%s.agent" % instance.node.host.hostname
-            print queue
-            restart_networking.apply_async(queue=queue,
-                                           args=(vm, ))
-            change_password.apply_async(queue=queue,
-                                        args=(vm, instance.pw))
-            set_time.apply_async(queue=queue,
-                                 args=(vm, time.time()))
-            set_hostname.apply_async(queue=queue,
-                                     args=(vm, instance.primary_host.hostname))
+            pass
+        if not initialized:
+            send_init_commands(instance, act, vm)
+        with act.sub_activity('start_access_server'):
+            queue = instance.get_remote_queue_name("agent")
+            start_access_server.apply_async(
+                queue=queue, args=(vm, ))
 
 
 @celery.task
@@ -49,14 +65,3 @@ def agent_stopped(vm):
     act = qs.latest('id')
     with act.sub_activity('stopping'):
         pass
-
-
-@celery.task
-def agent_ok(vm):
-    from vm.models import Instance, InstanceActivity
-    instance = Instance.objects.get(id=int(vm.split('-')[-1]))
-    qs = InstanceActivity.objects.filter(instance=instance,
-                                         activity_code='vm.Instance.agent')
-    act = qs.latest('id')
-    with act.sub_activity('ok'):
-        pass