diff --git a/xos/models.py b/xos/models.py
new file mode 100644
index 0000000..de98a6d
--- /dev/null
+++ b/xos/models.py
@@ -0,0 +1,91 @@
+from django.db import models
+from core.models import Service, PlCoreBase, Slice, Instance, Tenant, TenantWithContainer, Node, Image, User, Flavor, Subscriber, NetworkParameter, NetworkParameterType, Port, AddressPool
+from core.models.plcorebase import StrippedCharField
+import os
+from django.db import models, transaction
+from django.forms.models import model_to_dict
+from django.db.models import Q
+from operator import itemgetter, attrgetter, methodcaller
+from core.models import Tag
+from core.models.service import LeastLoadedNodeScheduler
+import traceback
+from xos.exceptions import *
+from xos.config import Config
+
+
+class ConfigurationError(Exception):
+    pass
+
+
+PROGRAN_KIND = "Progran"
+APP_LABEL = "progran"
+
+
+
+class VProgranService(Service):
+    KIND = PROGRAN_KIND
+
+    class Meta:
+        app_label = APP_LABEL
+        verbose_name = "Progran Service"
+        proxy = True
+
+    default_attributes = {
+        "rest_hostname": "10.6.0.1",
+        "rest_port": "8183",
+        "rest_user": "onos",
+        "rest_pass": "rocks"
+    }
+
+    @property
+    def rest_hostname(self):
+        return self.get_attribute("rest_hostname", self.default_attributes["rest_hostname"])
+
+    @rest_hostname.setter
+    def rest_hostname(self, value):
+        self.set_attribute("rest_hostname", value)
+
+    @property
+    def rest_port(self):
+        return self.get_attribute("rest_port", self.default_attributes["rest_port"])
+
+    @rest_port.setter
+    def rest_port(self, value):
+        self.set_attribute("rest_port", value)
+
+    @property
+    def rest_user(self):
+        return self.get_attribute("rest_user", self.default_attributes["rest_user"])
+
+    @rest_user.setter
+    def rest_user(self, value):
+        self.set_attribute("rest_user", value)
+
+    @property
+    def rest_pass(self):
+        return self.get_attribute("rest_pass", self.default_attributes["rest_pass"])
+
+
+
+
+class VProgranImsi(PlCoreBase):
+    class Meta:
+        app_label = APP_LABEL
+        verbose_name = "vProgran Imsi"
+
+    uiid = models.IntegerField( help_text="uiid ", null=False, blank=False)
+    imsi = models.CharField(max_length=20, help_text="imsi ", null=False, blank=False)
+    profile = models.CharField(max_length=20, help_text="profile name", null=True, blank=True)
+
+
+class VProgranProfile(PlCoreBase):
+
+    class Meta:
+        app_label = APP_LABEL
+        verbose_name = "vProgran Profile"
+
+    uiid = models.IntegerField( help_text="uiid ", null=False, blank=False)
+    profile = models.CharField(max_length=20, help_text="profile name", null=False, blank=False)
+    dlrate = models.IntegerField( help_text="device download rate", null=False, blank=False)
+    ulrate = models.IntegerField( help_text="device upload rate", null=False, blank=False )
+
