diff --git a/views/ngXosViews/tenant/src/js/createslice.js b/views/ngXosViews/tenant/src/js/createslice.js
new file mode 100644
index 0000000..933542e
--- /dev/null
+++ b/views/ngXosViews/tenant/src/js/createslice.js
@@ -0,0 +1,278 @@
+/**
+ * Created by arpit on 7/7/2016.
+ */
+'use strict';
+
+angular.module('xos.tenant')
+.directive('createSlice', function(){
+  return {
+    //sites : {},
+    restrict: 'E',
+    scope: {},
+    bindToController: true,
+    controllerAs: 'cs',
+    templateUrl: 'templates/createslice.html',
+    controller: function(Slices, SlicesPlus, Sites, Images, $stateParams, $http, $state, $q, XosUserPrefs){
+      this.config = {
+        exclude: ['site', 'password', 'last_login', 'mount_data_sets', 'default_flavor', 'creator', 'exposed_ports', 'networks', 'omf_friendly', 'omf_friendly', 'no_sync', 'no_policy', 'lazy_blocked', 'write_protect', 'deleted', 'backend_status', 'backend_register', 'policed', 'enacted', 'updated', 'created', 'validators', 'humanReadableName'],
+        formName: 'SliceDetails',
+        feedback: {
+          show: false,
+          message: 'Form submitted successfully !!!',
+          type: 'success'
+        },
+        actions: [
+          {
+            label: 'Save',
+            icon: 'ok', // refers to bootstraps glyphicon
+            cb: (model, form) => { // receive the model
+              saveform(model, form).then(()=> {
+                $state.go('site', {id: this.model.site});
+              });
+            },
+            class: 'success'
+          },  {
+            label: 'Save and continue editing',
+            icon: 'ok', // refers to bootstraps glyphicon
+            cb: (model, form) => { // receive the model
+              saveform(model,form);
+            },
+            class: 'primary'
+          },
+          {
+            label: 'Save and add another',
+            icon: 'ok', // refers to bootstraps glyphicon
+            cb: (model, form) => {
+              saveform(model,form).then(()=> {
+                $state.go('createslice',{site : this.model.site,id : ''});
+              });
+            },
+            class: 'primary'
+          }
+        ],
+        fields:
+        {
+          site: {
+            label: 'Site',
+            type: 'select',
+            validators: { required: true},
+            hint: 'The Site this Slice belongs to',
+            options: []
+
+          },
+          name: {
+            label: 'Name',
+            type: 'string',
+            hint: 'The Name of the Slice',
+            validators: {
+              required: true
+            }
+          },
+          serviceClass: {
+            label: 'ServiceClass',
+            type: 'select',
+            validators: {required: true},
+            hint: 'The Site this Slice belongs to',
+            options: [
+              {
+                id: 1,
+                label: 'Best effort'
+              }
+            ]
+          },
+          enabled: {
+            label: 'Enabled',
+            type: 'boolean',
+            hint: 'Status for this Slice'
+          },
+          description: {
+            label: 'Description',
+            type: 'string',
+            hint: 'High level description of the slice and expected activities',
+            validators: {
+              required: false,
+              minlength: 10
+            }
+          },
+          service: {
+            label: 'Service',
+            type: 'select',
+            validators: { required: false},
+            options: [
+              {
+                id: 0,
+                label: '--------'
+              }
+            ]
+          },
+          slice_url: {
+            label: 'Slice url',
+            type: 'string',
+            validators: {
+              required: false,
+              minlength: 10
+            }
+          },
+          max_instances: {
+            label: 'Max Instances',
+            type: 'number',
+            validators: {
+              required: false,
+              min: 0
+            }
+          },
+          default_isolation: {
+            label: 'Default Isolation',
+            type: 'select',
+            validators: { required: false},
+            options: [
+              {
+                id: 'vm',
+                label: 'Virtual Machine'
+              },
+              {
+                id: 'container',
+                label: 'Container'
+              },
+              {
+                id: 'container_vm',
+                label: 'Container in VM'
+              }
+            ]
+          },
+          default_image: {
+            label: 'Default image',
+            type: 'select',
+            validators: { required: false},
+            options: []
+          },
+          network: {
+            label: 'Network',
+            type: 'select',
+            validators: { required: false},
+            options: [
+              {
+                id: 'default',
+                label: 'Default'
+              },
+              {
+                id: 'host',
+                label: 'Host'
+              },
+              {
+                id: 'bridged',
+                label: 'Bridged'
+              },
+              {
+                id: 'noauto',
+                label: 'No Automatic Networks'
+              }
+            ]
+          }
+
+        }
+      };
+      var data;
+      Images.query().$promise
+          .then((users) => {
+            this.users = users;
+            data = this.users;
+            this.optionValImg = this.setData(data, {field1: 'id', field2: 'name'});
+            this.config.fields['default_image'].options = this.optionValImg;
+          })
+          .catch((e) => {
+            throw new Error(e);
+          });
+
+      // Use this method for select by seting object in fields variable of format { field1 : "val1", field2 : "val2"}
+      this.setData = (data, fields) => {
+        var i;
+        var retObj=[];
+        for(i = 0; i<data.length; i++){
+          var optVal = {id: data[i][fields.field1], label: data[i][fields.field2]};
+          retObj.push(optVal);
+
+        }
+        return retObj;
+      };
+
+      // retrieving user list
+
+      if ($stateParams.id)
+      {
+        delete this.config.fields['site'];
+        this.config.exclude.push('site');
+
+        Slices.get({id: $stateParams.id}).$promise
+          .then((users) => {
+            this.users = users;
+            data = users;
+
+            this.model = data;
+          })
+          .catch((e) => {
+            throw new Error(e);
+          });
+      }
+      else
+      {
+
+
+        this.model = {};
+        XosUserPrefs.getUserDetailsCookie().$promise
+        .then((userdata)=>{
+          this.model['creator'] =userdata.current_user_id;
+        })
+        .catch ((e) => {
+          throw new Error(e);
+        });
+
+        Sites.query().$promise
+        .then((users) => {
+          this.users_site = users;
+          this.optionVal = this.setData(this.users_site, {field1: 'id', field2: 'name'});
+          this.config.fields['site'].options = this.optionVal;
+        })
+        .catch((e) => {
+          throw new Error(e);
+        });
+      }
+
+      var  saveform = (model,form) =>
+      { // receive the model
+        var deferred = $q.defer();
+        delete model.networks;
+        if (form.$valid )
+        {
+          if(model.id){
+            var pr = Slices.update(model).$promise;
+          }
+          else{
+            var pr = Slices.save(model).$promise;
+          }
+          pr.then((users) => {
+            this.model = users;
+            //data = users;
+            //this.model = this.users;
+            this.config.feedback.show = true;
+            deferred.resolve(this.model);
+          })
+          .catch((e) => {
+            this.config.feedback.show = true;
+            this.config.feedback.type='danger';
+            if(e.data && e.data.detail )
+            {
+              this.config.feedback.message = e.data.detail;
+            }
+            else {
+              this.config.feedback.message=e.statusText;
+            }
+            deferred.reject(e);
+          });
+        }
+
+        return  deferred.promise;
+      }
+    }
+  };
+});
\ No newline at end of file
