diff --git a/planetstack/openstack/reservationagent.py b/planetstack/openstack/reservationagent.py
new file mode 100644
index 0000000..86c4e91
--- /dev/null
+++ b/planetstack/openstack/reservationagent.py
@@ -0,0 +1,51 @@
+import datetime
+import os
+import sys
+#os.environ.setdefault("DJANGO_SETTINGS_MODULE", "planetstack.settings")
+import time
+import django.utils
+from core.models.sliver import Sliver
+from core.models.reservation import Reservation, ReservedResource
+
+class ReservationAgent:
+
+    def run(self):
+        while True :
+            slivers = {}
+
+            tNow = django.utils.timezone.now()
+            print "Processing reservations, tNow is %s" % tNow
+            reservations = Reservation.objects.filter(startTime__lte = tNow)
+            for reservation in reservations:
+                print "  Processing reservation %s" % reservation
+                if reservation.endTime <= tNow:
+                    print "    deleting expired reservation"
+                    reservation.delete()
+                for reservedResource in reservation.reservedResources.all():
+                    sliver_resources = slivers.get(reservedResource.sliver.id, {})
+                    sliver_resources[reservedResource.resource.name] = reservedResource.quantity
+                    slivers[reservedResource.sliver.id] = sliver_resources
+
+            print "Sliver reservation set"
+            for (sliverid, sliver_resources) in slivers.items():
+                print "  sliver", sliverid,
+                for (name, value) in sliver_resources.items():
+                    print str(name)+":", value,
+                print
+
+            print "Updating slivers"
+            for sliver in Sliver.objects.all():
+                sliver_resv = slivers.get(sliver.id, {})
+                numberCores = sliver_resv.get("numberCores", 0)
+                if numberCores != sliver.numberCores:
+                    print "sliver %s setting numberCores to %s" % (sliver.name, numberCores)
+                    sliver.numberCores = numberCores
+                    sliver.save()
+
+            print "sleep"
+            time.sleep(7)
+
+
+if __name__ == '__main__':
+    ReservationAgent().run()
+                 
