diff --git a/planetstack/core/models/plcorebase.py b/planetstack/core/models/plcorebase.py
index 709fdc6..30d4df3 100644
--- a/planetstack/core/models/plcorebase.py
+++ b/planetstack/core/models/plcorebase.py
@@ -1,6 +1,8 @@
 import os
 from django.db import models
 from django.forms.models import model_to_dict
+from openstack.event_manager import EventSender
+
 
 class PlCoreBase(models.Model):
 
@@ -36,6 +38,10 @@
 
     def save(self, *args, **kwargs):
         super(PlCoreBase, self).save(*args, **kwargs)
+        
+        # Tell the observer that the source database has been updated
+        EventSender().fire()
+
         self.__initial = self._dict
 
     @property
diff --git a/planetstack/openstack/backend.py b/planetstack/openstack/backend.py
index 43afba7..2f4aa71 100644
--- a/planetstack/openstack/backend.py
+++ b/planetstack/openstack/backend.py
@@ -1,6 +1,6 @@
 import threading
 from openstack.observer import OpenStackObserver
-from openstack.event_listener import EventListener
+from openstack.event_manager import EventListener
 
 class Backend:
     
@@ -11,7 +11,7 @@
         observer_thread.start()
 
         # start event listene
-        event_listener = EventListener()
-        event_listener_thread = threading.Thread(target=event_listener.run)
-        event_listener_thread.start()
+        event_manager = EventListener(wake_up=observer.wake_up)
+        event_manager_thread = threading.Thread(target=event_manager.run)
+        event_manager_thread.start()
                 
diff --git a/planetstack/openstack/event_listener.py b/planetstack/openstack/event_manager.py
similarity index 73%
rename from planetstack/openstack/event_listener.py
rename to planetstack/openstack/event_manager.py
index e5c8909..d7102b6 100644
--- a/planetstack/openstack/event_listener.py
+++ b/planetstack/openstack/event_manager.py
@@ -1,7 +1,9 @@
 import threading
 import requests, json
+
 from core.models import *
 from openstack.manager import OpenStackManager
+from planetstack.config import Config
 
 import os
 import base64
@@ -13,7 +15,7 @@
     return func      
 
 class EventHandler:
-
+    # This code is currently not in use.
     def __init__(self):
         self.manager = OpenStackManager()
 
@@ -82,10 +84,25 @@
         self.manager.destroy_instance(instance_id)                            
 
     
+class EventSender:
+    def __init__(self,user=None,clientid=None):
+        try:
+            clid = Config().feefie_client_id
+            user = Config().feefie_client_user
+        except:
+            clid = 'planetstack_core_team'
+            user = 'pl'
+
+        self.fofum = Fofum(user=user)
+        self.fofum.make(clid)
+
+    def fire(self):
+        self.fofum.fire()
 
 class EventListener:
-    def __init__(self):
+    def __init__(self,wake_up=None):
         self.handler = EventHandler()
+        self.wake_up = wake_up()
 
     def handle_event(self, payload):
         payload_dict = json.loads(payload)
@@ -93,11 +110,22 @@
         ctx = payload_dict['ctx']
         self.handler.dispatch(event,**ctx)   
 
+        if (self.wake_up):
+            self.wake_up()
+        
+
     def run(self):
         # This is our unique client id, to be used when firing and receiving events
-        clid = base64.urlsafe_b64encode(os.urandom(12))
+        # It needs to be generated once and placed in the config file
 
-        f = Fofum()
+        try:
+            clid = Config().feefie_client_id
+            user = Config().feefie_client_user
+        except:
+            clid = 'planetstack_core_team'
+            user = 'pl'
+
+        f = Fofum(user=user)
         
-        listener_thread = threading.Thread(target=f.listen_on_event,args=(clid,self.handle_event))
+        listener_thread = threading.Thread(target=f.listen_for_event,args=(clid,self.handle_event))
         listener_thread.start()
diff --git a/planetstack/openstack/observer.py b/planetstack/openstack/observer.py
index b59530e..dce26aa 100644
--- a/planetstack/openstack/observer.py
+++ b/planetstack/openstack/observer.py
@@ -1,12 +1,15 @@
 import time
 import traceback
 import commands
+import threading
+
 from datetime import datetime
 from collections import defaultdict
 from core.models import *
 from django.db.models import F, Q
 from openstack.manager import OpenStackManager
 from util.logger import Logger, logging
+from timeout import timeout
 
 
 logger = Logger(logfile='observer.log', level=logging.INFO)
@@ -15,6 +18,18 @@
     
     def __init__(self):
         self.manager = OpenStackManager()
+        # The Condition object that gets signalled by Feefie events
+        self.event_cond = threading.Condition()
+
+    def wait_for_event(self, timeout):
+        self.event_cond.acquire()
+        self.event_cond.wait(timeout)
+        self.event_cond.release()
+        
+    def wake_up(self):
+        self.event_cond.acquire()
+        self.event_cond.notify()
+        self.event_cond.release()
 
     def run(self):
         if not self.manager.enabled or not self.manager.has_openstack:
@@ -28,7 +43,9 @@
                 self.sync_slivers()
                 self.sync_sliver_ips()
                 self.sync_external_routes()
-                time.sleep(10)
+
+                self.wait_for_event(timeout=30)
+
             except:
                 traceback.print_exc() 
 
