diff --git a/plstackapi/core/models/__init__.py b/plstackapi/core/models/__init__.py
new file mode 100644
index 0000000..1ecda7e
--- /dev/null
+++ b/plstackapi/core/models/__init__.py
@@ -0,0 +1,15 @@
+from .plcorebase import PlCoreBase
+from .deploymentnetwork import DeploymentNetwork
+from .site import Site
+from .site import SitePrivilege
+from .flavor import Flavor
+from .image import Image
+from .user import User
+from .role import Role
+from .key import Key
+from .node import Node
+from .slice import Slice
+from .slice import SliceMembership
+from .sliver import Sliver
+from .subnet import Subnet
+
diff --git a/plstackapi/core/models/deploymentnetwork.py b/plstackapi/core/models/deploymentnetwork.py
new file mode 100644
index 0000000..740be33
--- /dev/null
+++ b/plstackapi/core/models/deploymentnetwork.py
@@ -0,0 +1,11 @@
+import os
+from django.db import models
+from plstackapi.core.models import PlCoreBase
+
+# Create your models here.
+
+class DeploymentNetwork(PlCoreBase):
+    name = models.CharField(max_length=200, unique=True, help_text="Name of the Deployment Network")
+
+    def __unicode__(self):  return u'%s' % (self.name)
+
diff --git a/plstackapi/core/models/flavor.py b/plstackapi/core/models/flavor.py
new file mode 100644
index 0000000..3081f82
--- /dev/null
+++ b/plstackapi/core/models/flavor.py
@@ -0,0 +1,14 @@
+import os
+from django.db import models
+from plstackapi.core.models import PlCoreBase
+
+# Create your models here.
+
+class Flavor(PlCoreBase):
+    flavor_id = models.IntegerField(unique=True)
+    name = models.CharField(max_length=256, unique=True)
+    memory_mb = models.IntegerField()
+    disk_gb = models.IntegerField()
+    vcpus = models.IntegerField()
+
+    def __unicode__(self):  return u'%s' % (self.name)
diff --git a/plstackapi/core/models/image.py b/plstackapi/core/models/image.py
new file mode 100644
index 0000000..930b7df
--- /dev/null
+++ b/plstackapi/core/models/image.py
@@ -0,0 +1,13 @@
+import os
+from django.db import models
+from plstackapi.core.models import PlCoreBase
+
+# Create your models here.
+
+class Image(PlCoreBase):
+    image_id = models.CharField(max_length=256, unique=True)
+    name = models.CharField(max_length=256, unique=True)
+    disk_format = models.CharField(max_length=256)
+    container_format = models.CharField(max_length=256)
+
+    def __unicode__(self):  return u'%s' % (self.name)
diff --git a/plstackapi/core/models/key.py b/plstackapi/core/models/key.py
new file mode 100644
index 0000000..d0a0a07
--- /dev/null
+++ b/plstackapi/core/models/key.py
@@ -0,0 +1,15 @@
+import os
+from django.db import models
+from plstackapi.core.models import PlCoreBase
+from plstackapi.core.models import User
+
+# Create your models here.
+
+class Key(PlCoreBase):
+    name = models.CharField(max_length=256, unique=True)
+    key = models.CharField(max_length=512)
+    type = models.CharField(max_length=256)
+    blacklisted = models.BooleanField(default=False)
+    user = models.ForeignKey(User, related_name='keys')
+
+    def __unicode__(self):  return u'%s' % (self.name)
diff --git a/plstackapi/core/models/node.py b/plstackapi/core/models/node.py
new file mode 100644
index 0000000..a4252b1
--- /dev/null
+++ b/plstackapi/core/models/node.py
@@ -0,0 +1,14 @@
+import os
+from django.db import models
+from plstackapi.core.models import PlCoreBase
+from plstackapi.core.models import Site
+from plstackapi.core.models import DeploymentNetwork
+
+# Create your models here.
+
+class Node(PlCoreBase):
+    name = models.CharField(max_length=200, unique=True, help_text="Name of the Node")
+    site  = models.ForeignKey(Site, related_name='nodes')
+    deploymentNetwork  = models.ForeignKey(DeploymentNetwork, related_name='nodes')
+
+    def __unicode__(self):  return u'%s' % (self.name)
diff --git a/plstackapi/core/models/plcorebase.py b/plstackapi/core/models/plcorebase.py
new file mode 100644
index 0000000..52aa0f7
--- /dev/null
+++ b/plstackapi/core/models/plcorebase.py
@@ -0,0 +1,14 @@
+import os
+from django.db import models
+
+class PlCoreBase(models.Model):
+
+    created = models.DateTimeField(auto_now_add=True)
+    updated = models.DateTimeField(auto_now=True)
+
+    class Meta:
+        abstract = True
+        app_label = "core"
+
+
+
diff --git a/plstackapi/core/models/role.py b/plstackapi/core/models/role.py
new file mode 100644
index 0000000..7b3268c
--- /dev/null
+++ b/plstackapi/core/models/role.py
@@ -0,0 +1,20 @@
+import os
+import datetime
+from django.db import models
+from plstackapi.core.models import PlCoreBase
+
+# Create your models here.
+
+class Role(PlCoreBase):
+
+    ROLE_CHOICES = (('admin', 'Admin'), ('pi', 'Principle Investigator'), ('user','User'))
+    role_id = models.CharField(max_length=256, unique=True)
+    role_type = models.CharField(max_length=80, unique=True, choices=ROLE_CHOICES)
+
+    def __unicode__(self):  return u'%s' % (self.role_type)
+
+    def save(self):
+        if not self.id:
+            self.created = datetime.date.today()
+        self.updated = datetime.datetime.today()
+        super(Role, self).save()
diff --git a/plstackapi/core/models/site.py b/plstackapi/core/models/site.py
new file mode 100644
index 0000000..5ec04c4
--- /dev/null
+++ b/plstackapi/core/models/site.py
@@ -0,0 +1,49 @@
+import os
+from django.db import models
+from plstackapi.core.models import PlCoreBase
+from plstackapi.core.models import DeploymentNetwork
+
+from plstackapi.openstack.driver import OpenStackDriver
+
+# Create your models here.
+
+
+class Site(PlCoreBase):
+
+    tenant_id = models.CharField(max_length=200, help_text="Keystone tenant id")
+    name = models.CharField(max_length=200, help_text="Name for this Site")
+    site_url = models.URLField(null=True, blank=True, max_length=512, help_text="Site's Home URL Page")
+    enabled = models.BooleanField(default=True, help_text="Status for this Site")
+    longitude = models.FloatField(null=True, blank=True)
+    latitude = models.FloatField(null=True, blank=True)
+    login_base = models.CharField(max_length=50, unique=True, help_text="Prefix for Slices associated with this Site")
+    is_public = models.BooleanField(default=True, help_text="Indicates the visibility of this site to other members")
+    abbreviated_name = models.CharField(max_length=80)
+
+    deployments = models.ManyToManyField(DeploymentNetwork, blank=True, related_name='sites')
+
+    def __unicode__(self):  return u'%s' % (self.name)
+
+class SitePrivilege(PlCoreBase):
+
+    user = models.ForeignKey('User', related_name='site_privileges')
+    site = models.ForeignKey('Site', related_name='site_privileges')
+    role = models.ForeignKey('Role')
+
+    def __unicode__(self):  return u'%s %s %s' % (self.site, self.user, self.role)
+
+    def save(self, *args, **kwds):
+        driver  = OpenStackDriver()
+        driver.add_user_role(user_id=user.user_id,
+                             tenant_id=site.tenant_id,
+                             role_name=role.name)
+        super(SitePrivilege, self).save(*args, **kwds)
+
+    def delete(self, *args, **kwds):
+        driver = OpenStackDriver()
+        driver.delete_user_role(user_id=user.user_id,
+                                tenant_id=site.tenant_id,
+                                role_name=role.name)
+        super(SitePrivilege, self).delete(*args, **kwds)
+
+
diff --git a/plstackapi/core/models/slice.py b/plstackapi/core/models/slice.py
new file mode 100644
index 0000000..24c44a6
--- /dev/null
+++ b/plstackapi/core/models/slice.py
@@ -0,0 +1,76 @@
+import os
+from django.db import models
+from plstackapi.core.models import PlCoreBase
+from plstackapi.core.models import Site
+from plstackapi.core.models import User
+from plstackapi.core.models import Role
+from plstackapi.core.models import DeploymentNetwork
+
+from plstackapi.openstack.driver import OpenStackDriver
+
+# Create your models here.
+
+class Slice(PlCoreBase):
+    tenant_id = models.CharField(max_length=200, help_text="Keystone tenant id")
+    name = models.CharField(help_text="The Name of the Slice", max_length=80)
+    enabled = models.BooleanField(default=True, help_text="Status for this Slice")
+    SLICE_CHOICES = (('plc', 'PLC'), ('delegated', 'Delegated'), ('controller','Controller'), ('none','None'))
+    instantiation = models.CharField(help_text="The instantiation type of the slice", max_length=80, choices=SLICE_CHOICES)
+    omf_friendly = models.BooleanField()
+    description=models.TextField(blank=True,help_text="High level description of the slice and expected activities", max_length=1024)
+    slice_url = models.URLField(blank=True, max_length=512)
+    site = models.ForeignKey(Site, related_name='slices', help_text="The Site this Node belongs too")
+    network_id = models.CharField(max_length=256, help_text="Quantum network")
+    router_id = models.CharField(max_length=256, help_text="Quantum router id")
+
+    def __unicode__(self):  return u'%s' % (self.name)
+
+    def save(self, *args, **kwds):
+        # sync keystone tenant
+        driver  = OpenStackDriver()
+
+        if not self.id:
+            tenant = driver.create_tenant(tenant_name=self.name,
+                                          description=self.description,
+                                          enabled=self.enabled)
+            self.tenant_id = tenant.id
+            
+            # create a network  
+            network = driver.create_network(name=self.name)
+            self.network_id = network['id']        
+            # create router
+            router = driver.create_router(name=self.name)
+            self.router_id = router['id']     
+
+/bin/sh: 1: command not found
+            # update record
+            self.driver.update_tenant(self.tenant_id, name=self.name,
+                                      description=self.description, enabled=self.enabled)
+        super(Slice, self).save(*args, **kwds)
+
+    def delete(self, *args, **kwds):
+        # delete keystone tenant
+        driver  = OpenStackDriver()
+        driver.delete_tenant(self.tenant_id)
+        super(Slice, self).delete(*args, **kwds)
+
+class SliceMembership(PlCoreBase):
+    user = models.ForeignKey('User', related_name='slice_memberships')
+    slice = models.ForeignKey('Slice', related_name='slice_memberships')
+    role = models.ForeignKey('Role')
+
+    def __unicode__(self):  return u'%s %s %s' % (self.slice, self.user, self.role)
+
+    def save(self, *args, **kwds):
+        driver  = OpenStackDriver()
+        driver.add_user_role(user_id=user.user_id,
+                             tenant_id=slice.tenant_id,
+                             role_name=role.name)
+        super(SliceMembership, self).save(*args, **kwds)
+
+    def delete(self, *args, **kwds):
+        driver = OpenStackDriver()
+        driver.delete_user_role(user_id=user.user_id,
+                                tenant_id=slice.tenant_id,
+                                role_name=role.name)
+        super(SliceMembership, self).delete(*args, **kwds)
diff --git a/plstackapi/core/models/sliver.py b/plstackapi/core/models/sliver.py
new file mode 100644
index 0000000..6f7aabe
--- /dev/null
+++ b/plstackapi/core/models/sliver.py
@@ -0,0 +1,41 @@
+import os
+from django.db import models
+from plstackapi.core.models import PlCoreBase
+from plstackapi.core.models import Flavor
+from plstackapi.core.models import Image
+from plstackapi.core.models import Key
+from plstackapi.core.models import Slice
+from plstackapi.core.models import Node
+from plstackapi.core.models import Site
+from plstackapi.core.models import DeploymentNetwork
+from plstackapi.openstack.driver import OpenStackDriver
+
+# Create your models here.
+class Sliver(PlCoreBase):
+    instance_id = models.CharField(max_length=200, help_text="Nova instance id")    
+    name = models.CharField(max_length=200, help_text="Sliver name")
+    flavor = models.ForeignKey(Flavor, related_name='sliver_flavor')
+    image = models.ForeignKey(Image, related_name='sliver_image')
+    key = models.ForeignKey(Key, related_name='sliver_key')
+    slice = models.ForeignKey(Slice, related_name='sliver_slice')
+    node = models.ForeignKey(Node, related_name='sliver_node')
+    site = models.ForeignKey(Site, related_name='sliver_site')
+    deploymentNetwork = models.ForeignKey(DeploymentNetwork, related_name='sliver_deploymentNetwork')
+
+    def __unicode__(self):  return u'%s::%s' % (self.slice, self.siteDeploymentNetwork)
+
+    def save(self, *args, **kwds):
+        driver  = OpenStackDriver()
+        instance = driver.spawn_instances(name=self.name,
+                                          keyname=self.name,
+                                          hostnames=self.node.name,
+                                          flavor=self.flavor.name,
+                                          image=self.image.name)
+        self.instance_id = instance.id
+        super(Sliver, self).save(*args, **kwds)
+
+    def delete(self, *args, **kwds):
+        driver  = OpenStackDriver()
+        driver.destroy_instance(name=self.name, id=self.instance_id)
+        super(Sliver, self).delete(*args, **kwds)
+
diff --git a/plstackapi/core/models/subnet.py b/plstackapi/core/models/subnet.py
new file mode 100644
index 0000000..291ffe8
--- /dev/null
+++ b/plstackapi/core/models/subnet.py
@@ -0,0 +1,41 @@
+import os
+from django.db import models
+from plstackapi.core.models import PlCoreBase
+from plstackapi.core.models import Slice
+from plstackapi.openstack.driver import OpenStackDriver
+
+# Create your models here.
+
+class Subnet(PlCoreBase):
+    subnet_id = models.CharField(max_length=256, unique=True)
+    cidr = models.CharField(max_length=20)
+    ip_version = models.IntegerField()
+    start = models.IPAddressField()
+    end = models.IPAddressField()
+    slice = models.ForeignKey(Slice, related_name='slice_subnet')
+
+    def __unicode__(self):  return u'%s' % (self.name)
+
+    def save(self, *args, **kwargs):
+        driver  = OpenStackDriver()
+        if not self.id:
+            subnet = driver.create_subnet(network_name=self.slice.name,
+                                          cidr_ip = self.cidr,
+                                          ip_version=self.ip_version,
+                                          start = self.start,
+                                          end = self.end)
+
+            self.subnet_id = subnet.id
+
+        # add subnet as interface to slice router
+        driver.add_router_interface(self.slice.router_id, subnet.id)
+
+        super(Subnet, self).save(*args, **kwargs)
+
+
+    def delete(self, *args, **kwargs):
+        # delete quantum network
+        driver  = OpenStackDriver()
+        driver.delete_subnet(self.subnet_id)
+        driver.delete_router_interface(self.slice.router_id, self.subnet.id)
+        super(Subnet, self).delete(*args, **kwargs)
diff --git a/plstackapi/core/models/user.py b/plstackapi/core/models/user.py
new file mode 100644
index 0000000..765fb62
--- /dev/null
+++ b/plstackapi/core/models/user.py
@@ -0,0 +1,20 @@
+import os
+import datetime
+from django.db import models
+from plstackapi.core.models import PlCoreBase
+from plstackapi.core.models import Site
+
+# Create your models here.
+
+class User(PlCoreBase):
+    user_id = models.CharField(max_length=256, unique=True)
+    firstname = models.CharField(help_text="person's given name", max_length=200)
+    lastname = models.CharField(help_text="person's surname", max_length=200)
+    email = models.EmailField(help_text="e-mail address")
+    phone = models.CharField(null=True, blank=True, help_text="phone number contact", max_length=100)
+    user_url = models.URLField(null=True, blank=True)
+    is_admin = models.BooleanField(default=False)
+    enabled = models.BooleanField(default=True, help_text="Status for this User")
+    site = models.ForeignKey(Site, related_name='users', verbose_name="Site this user will be homed too")
+
+    def __unicode__(self):  return u'%s' % (self.email)
