diff --git a/plstackapi/core/__init__.py b/plstackapi/core/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/plstackapi/core/__init__.py
diff --git a/plstackapi/core/admin.py b/plstackapi/core/admin.py
new file mode 100644
index 0000000..fd51666
--- /dev/null
+++ b/plstackapi/core/admin.py
@@ -0,0 +1,13 @@
+from core.models import *
+from django.contrib import admin
+
+from django.contrib.auth.admin import UserAdmin
+from django.contrib.auth.models import User
+
+admin.site.register(Site)
+admin.site.register(Slice)
+admin.site.register(Node)
+admin.site.register(DeploymentNetwork)
+admin.site.register(SiteDeploymentNetwork)
+admin.site.register(Sliver)
+
diff --git a/plstackapi/core/fixtures/initial_data.json b/plstackapi/core/fixtures/initial_data.json
new file mode 100644
index 0000000..5188d63
--- /dev/null
+++ b/plstackapi/core/fixtures/initial_data.json
@@ -0,0 +1 @@
+[{"pk": 1, "model": "core.deploymentnetwork", "fields": {"updated": "2013-03-20T01:18:31.247Z", "name": "VICCI", "created": "2013-03-20T01:18:31.247Z"}}, {"pk": 2, "model": "core.deploymentnetwork", "fields": {"updated": "2013-03-20T01:19:00.063Z", "name": "VINI", "created": "2013-03-20T01:19:00.063Z"}}, {"pk": 3, "model": "core.deploymentnetwork", "fields": {"updated": "2013-03-20T01:19:15.143Z", "name": "GENI", "created": "2013-03-20T01:19:15.143Z"}}, {"pk": 4, "model": "core.deploymentnetwork", "fields": {"updated": "2013-03-20T01:19:40.098Z", "name": "PlanetLab Classic", "created": "2013-03-20T01:19:25.672Z"}}]
\ No newline at end of file
diff --git a/plstackapi/core/models.py b/plstackapi/core/models.py
new file mode 100644
index 0000000..4ea2a25
--- /dev/null
+++ b/plstackapi/core/models.py
@@ -0,0 +1,65 @@
+from django.db import models
+
+# Create your models here.
+
+class PlCoreBase(models.Model):
+
+    created = models.DateTimeField(auto_now_add=True)
+    updated = models.DateTimeField(auto_now=True)
+
+    class Meta:
+        abstract = True
+
+class Site(PlCoreBase):
+    name = models.CharField(max_length=200, unique=True, help_text="Name for this Site")
+    site_url = models.URLField(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, 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)
+
+    def __unicode__(self):  return u'%s' % (self.name)
+
+class Slice(PlCoreBase):
+    name = models.CharField(help_text="The Name of the Slice", max_length=80)
+    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)
+    site = models.ForeignKey(Site, related_name='slices', help_text="The Site this Node belongs too")
+
+    def __unicode__(self):  return u'%s' % (self.name)
+
+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)
+
+class SiteDeploymentNetwork(PlCoreBase):
+    class Meta:
+        unique_together = ['site', 'deploymentNetwork']
+
+    site = models.ForeignKey(Site, related_name='deploymentNetworks')
+    deploymentNetwork = models.ForeignKey(DeploymentNetwork, related_name='sites')
+    name = models.CharField(default="Blah", max_length=100)
+    
+
+    def __unicode__(self):  return u'%s::%s' % (self.site, self.deploymentNetwork)
+
+
+class Sliver(PlCoreBase):
+    name = models.CharField(max_length=200, unique=True)
+    slice = models.ForeignKey(Slice)
+    siteDeploymentNetwork = models.ForeignKey(SiteDeploymentNetwork)
+
+    def __unicode__(self):  return u'%s::%s' % (self.slice, self.siteDeploymentNetwork)
+
+class Node(PlCoreBase):
+    name = models.CharField(max_length=200, unique=True, help_text="Name of the Node")
+    siteDeploymentNetwork = models.ForeignKey(SiteDeploymentNetwork, help_text="The Site and Deployment Network this Node belongs too.")
+
+    def __unicode__(self):  return u'%s' % (self.name)
+
diff --git a/plstackapi/core/serializers.py b/plstackapi/core/serializers.py
new file mode 100644
index 0000000..62ac271
--- /dev/null
+++ b/plstackapi/core/serializers.py
@@ -0,0 +1,93 @@
+from django.forms import widgets
+from rest_framework import serializers
+from models import *
+
+
+class SliceSerializer(serializers.HyperlinkedModelSerializer):
+
+    site = serializers.HyperlinkedRelatedField(view_name='site-detail')
+
+    class Meta:
+        model = Slice
+        fields = ('url',
+                  'name',
+                  'instantiation',
+                  'omf_friendly',
+                  'description',
+                  'slice_url',
+                  'site',
+                  'updated',
+                  'created')
+
+class SiteSerializer(serializers.HyperlinkedModelSerializer):
+
+    #Experimenting with whether to use ids, hyperlinks, or nested includes
+    #slices = serializers.PrimaryKeyRelatedField(many=True, read_only=True)
+    #slices = serializers.RelatedField(many=True, read_only=True)
+    #slices = SliceSerializer(many=True)
+    slices = serializers.HyperlinkedRelatedField(many=True, read_only=True,view_name='slice-detail')
+    deploymentNetworks = serializers.HyperlinkedRelatedField(many=True, read_only=True,view_name='sitedeploymentnetwork-detail')
+
+    class Meta:
+        model = Site
+        fields = ('url',
+                  'name',
+                  'deploymentNetworks',
+                  'slices',
+                  'site_url',
+                  'enabled',
+                  'longitude',
+                  'latitude',
+                  'login_base',
+                  'is_public',
+                  'abbreviated_name',
+                  'updated',
+                  'created')
+
+class DeploymentNetworkSerializer(serializers.HyperlinkedModelSerializer):
+
+    sites = serializers.HyperlinkedRelatedField(view_name='sitedeploymentnetwork-detail')
+    class Meta:
+        model = DeploymentNetwork
+        fields = ('url',
+                  'name',
+                  'sites'
+                 )
+
+class SiteDeploymentNetworkSerializer(serializers.HyperlinkedModelSerializer):
+
+    site = serializers.HyperlinkedRelatedField(view_name='site-detail')
+    deploymentNetwork = serializers.HyperlinkedRelatedField(view_name='deploymentnetwork-detail')
+
+    class Meta:
+        model = SiteDeploymentNetwork
+        fields = ('url',
+                 'site',
+                 'deploymentNetwork')
+
+class SliverSerializer(serializers.ModelSerializer):
+    slice = serializers.RelatedField(read_only=True)
+    #slice = serializers.PrimaryKeyRelatedField(read_only=True)
+
+    class Meta:
+        model = Sliver
+        fields = ('id',
+                  'slice',
+                 'name')
+
+class NodeSerializer(serializers.ModelSerializer):
+
+    class Meta:
+        model = Node
+        fields = ('id',
+                 'name')
+
+
+serializerLookUp = { Site: SiteSerializer,
+                 Slice: SliceSerializer,
+                 Node: NodeSerializer,
+                 Sliver: SliverSerializer,
+                 DeploymentNetwork: DeploymentNetworkSerializer,
+                 SiteDeploymentNetwork: SiteDeploymentNetworkSerializer,
+                 None: None,
+                }
diff --git a/plstackapi/core/tests.py b/plstackapi/core/tests.py
new file mode 100644
index 0000000..501deb7
--- /dev/null
+++ b/plstackapi/core/tests.py
@@ -0,0 +1,16 @@
+"""
+This file demonstrates writing tests using the unittest module. These will pass
+when you run "manage.py test".
+
+Replace this with more appropriate tests for your application.
+"""
+
+from django.test import TestCase
+
+
+class SimpleTest(TestCase):
+    def test_basic_addition(self):
+        """
+        Tests that 1 + 1 always equals 2.
+        """
+        self.assertEqual(1 + 1, 2)
diff --git a/plstackapi/core/views.py b/plstackapi/core/views.py
new file mode 100644
index 0000000..ebbd907
--- /dev/null
+++ b/plstackapi/core/views.py
@@ -0,0 +1,66 @@
+# Create your views here.
+
+from models import Site
+from serializers import *
+from rest_framework import generics
+from rest_framework.decorators import api_view
+from rest_framework.response import Response
+from rest_framework.reverse import reverse
+from rest_framework import renderers
+
+@api_view(['GET'])
+def api_root(request, format=None):
+    return Response({
+        'nodes': reverse('node-list', request=request, format=format),
+        'sites': reverse('site-list', request=request, format=format),
+        'deploymentNetworks': reverse('deploymentnetwork-list', request=request, format=format),
+        'slices': reverse('slice-list', request=request, format=format)
+    })
+  
+class SiteList(generics.ListCreateAPIView):
+    model=Site
+    serializer_class = SiteSerializer
+
+class SiteDetail(generics.RetrieveUpdateDestroyAPIView):
+    model = Site
+    serializer_class = SiteSerializer
+
+class SliceList(generics.ListCreateAPIView):
+    model=Slice
+    serializer_class = SliceSerializer
+
+class SliceDetail(generics.RetrieveUpdateDestroyAPIView):
+    model = Slice
+    serializer_class = SliceSerializer
+
+class NodeList(generics.ListCreateAPIView):
+    model=Node
+    serializer_class = NodeSerializer
+
+class NodeDetail(generics.RetrieveUpdateDestroyAPIView):
+    model = Node
+    serializer_class = NodeSerializer
+
+class SliverList(generics.ListCreateAPIView):
+    model=Sliver
+    serializer_class = SliverSerializer
+
+class SliverDetail(generics.RetrieveUpdateDestroyAPIView):
+    model = Sliver
+    serializer_class = SliverSerializer
+
+class DeploymentNetworkList(generics.ListCreateAPIView):
+    model=DeploymentNetwork
+    serializer_class = DeploymentNetworkSerializer
+
+class DeploymentNetworkDetail(generics.RetrieveUpdateDestroyAPIView):
+    model = DeploymentNetwork
+    serializer_class = DeploymentNetworkSerializer
+
+class SiteDeploymentNetworkList(generics.ListCreateAPIView):
+    model=SiteDeploymentNetwork
+    serializer_class = SiteDeploymentNetworkSerializer
+
+class SiteDeploymentNetworkDetail(generics.RetrieveUpdateDestroyAPIView):
+    model = SiteDeploymentNetwork
+    serializer_class = DeploymentNetworkSerializer
