diff --git a/xos/admin.py b/xos/admin.py
new file mode 100644
index 0000000..6f74757
--- /dev/null
+++ b/xos/admin.py
@@ -0,0 +1,112 @@
+from core.admin import ReadOnlyAwareAdmin, SliceInline
+from core.middleware import get_request
+from core.models import User
+
+from django import forms
+from django.contrib import admin
+
+from services.vsm.models import *
+
+class VSMServiceForm(forms.ModelForm):
+
+    class Meta:
+        model = VSMService
+        fields = '__all__'
+
+    def __init__(self, *args, **kwargs):
+        super(VSMServiceForm, self).__init__(*args, **kwargs)
+
+    def save(self, commit=True):
+        return super(VSMServiceForm, self).save(commit=commit)
+
+class VSMServiceAdmin(ReadOnlyAwareAdmin):
+
+    model = VSMService
+    verbose_name = "VSM Service"
+    verbose_name_plural = "VSM Services"
+    form = VSMServiceForm
+    inlines = [SliceInline]
+
+    list_display = ('backend_status_icon', 'name', 'enabled')
+    list_display_links = ('backend_status_icon', 'name')
+
+    fieldsets = [(None, {
+        'fields': ['backend_status_text', 'name', 'enabled', 'versionNumber', 'description',],
+        'classes':['suit-tab suit-tab-general',],
+        })]
+
+    readonly_fields = ('backend_status_text', )
+    user_readonly_fields = ['name', 'enabled', 'versionNumber', 'description',]
+
+    extracontext_registered_admins = True
+
+    suit_form_tabs = (
+        ('general', 'VSM Service Details', ),
+        ('slices', 'Slices',),
+        )
+
+    suit_form_includes = (('mcordadmin.html',
+                           'top',
+                           'administration'),)
+
+    def get_queryset(self, request):
+        return VSMService.get_service_objects_by_user(request.user)
+
+admin.site.register(VSMService, VSMServiceAdmin)
+
+class VSMTenantForm(forms.ModelForm):
+
+    class Meta:
+        model = VSMTenant
+        fields = '__all__'
+
+    creator = forms.ModelChoiceField(queryset=User.objects.all())
+
+    def __init__(self, *args, **kwargs):
+        super(VSMTenantForm, self).__init__(*args, **kwargs)
+
+        self.fields['kind'].widget.attrs['readonly'] = True
+        self.fields['kind'].initial = "vSm"
+
+        self.fields['provider_service'].queryset = VSMService.get_service_objects().all()
+
+        if self.instance:
+            self.fields['creator'].initial = self.instance.creator
+            self.fields['tenant_message'].initial = self.instance.tenant_message
+            self.fields['image_name'].initial = self.instance.image_name
+
+        if (not self.instance) or (not self.instance.pk):
+            self.fields['creator'].initial = get_request().user
+            if VSMService.get_service_objects().exists():
+                self.fields['provider_service'].initial = VSMService.get_service_objects().all()[0]
+
+    def save(self, commit=True):
+        self.instance.creator = self.cleaned_data.get('creator')
+        self.instance.tenant_message = self.cleaned_data.get('tenant_message')
+        self.instance.image_name = self.cleaned_data.get('image_name')
+        return super(VSMTenantForm, self).save(commit=commit)
+
+
+class VSMTenantAdmin(ReadOnlyAwareAdmin):
+
+    verbose_name = "VSM Service Tenant"
+    verbose_name_plural = "VSM Service Tenants"
+
+    list_display = ('id', 'backend_status_icon', 'instance', 'tenant_message', 'image_name')
+    list_display_links = ('backend_status_icon', 'instance', 'tenant_message', 'id', 'image_name')
+
+    fieldsets = [(None, {
+        'fields': ['backend_status_text', 'kind', 'provider_service', 'instance', 'creator', 'tenant_message', 'image_name'],
+        'classes': ['suit-tab suit-tab-general'],
+        })]
+
+    readonly_fields = ('backend_status_text', 'instance',)
+
+    form = VSMTenantForm
+
+    suit_form_tabs = (('general', 'Details'),)
+
+    def get_queryset(self, request):
+        return VSMTenant.get_tenant_objects_by_user(request.user)
+
+admin.site.register(VSMTenant, VSMTenantAdmin)
