diff --git a/ccnode/ccnode.py b/ccnode/ccnode.py
index 51d4918ad6f08d8275a5856591397b5a65d9f5ee..7e37f9592429d1cb34e6d7ed1f5b64cfd3096397 100644
--- a/ccnode/ccnode.py
+++ b/ccnode/ccnode.py
@@ -46,3 +46,9 @@ class CCNode(object):
                 return False
             else:
                 return True
+
+    def get_manager(self):
+        return self.manager
+    
+    def get_server(self):
+        return self.server
\ No newline at end of file
diff --git a/ccnode/handlers.py b/ccnode/handlers.py
index b3a2d70a3c5bdd98c7f292a89a6d63d6235cb7a0..c079754cf7b143f91cd783bff19eff420372f023 100644
--- a/ccnode/handlers.py
+++ b/ccnode/handlers.py
@@ -7,6 +7,8 @@ from logging import debug, info
 from fnmatch import fnmatchcase
 from exceptions import FeatureNotImplemented
 from common import LocalHost
+from threading import Timer
+from sjrpc.core import RpcError
 
 _MOD_KVM = True
 try:
@@ -115,6 +117,10 @@ class NodeHandler(RpcHandler):
         self.VM_TAG_GLOB = {
             'disk*'     : self._tag_map_helper(self._helper_vm_disk),
         }
+        
+        # populate the server with running VMs
+        self._register_vm = []
+        self._register_timer = Timer(5.0, self._register)
     
     def __getitem__(self, name):
         '''
@@ -213,6 +219,38 @@ class NodeHandler(RpcHandler):
             result = None
         return result
     
+    def _register(self):
+        try:
+            vm_current = self._host_handle.vm_list()
+            
+            for vm in vm_current:
+                if vm not in self._register_vm:
+                    try:
+                        self._connection.get_server().call('register', vm, 'vm')
+                    except RpcError as e:
+                        if e.exception == '#FIXME':
+                            self._register_vm.append(vm)
+                        else:
+                            raise e
+                    else:
+                        self._register_vm.append(vm)
+            
+            for vm in self._register_vm:
+                if vm not in vm_current:
+                    try:
+                        self._connection.get_server().call('unregister', vm)
+                    except RpcError as e:
+                        if e.exception == '#FIXME':
+                            vm_current.pop(vm)
+                        else:
+                            raise e
+                    else:
+                        vm_current.pop(vm)
+        except Exception as e:
+            raise e
+        finally:
+            self._register_timer = Timer(1.0, self._register)
+    
     @pure
     def node_tags(self, tags=None):
         '''