diff --git a/instancehandler/views.py b/instancehandler/views.py
index ad7ead7..53dfb22 100644
--- a/instancehandler/views.py
+++ b/instancehandler/views.py
@@ -15,7 +15,6 @@
 #
 
 from django.shortcuts import render, redirect
-#from django.contrib.auth.decorators import login_required
 from django.http import HttpResponse, JsonResponse
 import yaml
 import json
@@ -48,6 +47,8 @@
         instance_list = client.vnf_list(user.get_token())
     elif type == 'pdu':
         instance_list = client.pdu_list(user.get_token())
+    elif type == 'nsi':
+        instance_list = client.nsi_list(user.get_token())
 
     result['instances'] = instance_list['data'] if instance_list and instance_list['error'] is False else []
 
@@ -56,8 +57,10 @@
 @login_required
 def create(request, type=None):
     result = {}
+    config_vim_account_id = {}
     user = osmutils.get_user(request)
     client = Client()
+
     if type == 'ns':
         try:
 
@@ -96,6 +99,24 @@
             return __response_handler(request, {}, 'instances:list', to_redirect=True, type='ns', )
         result = client.ns_create(user.get_token(), ns_data)
         return __response_handler(request, result, 'instances:list', to_redirect=True, type='ns')
+
+    elif type == 'nsi':
+        try:
+            nsi_data = {
+                "nsiName": request.POST.get('nsiName', 'WithoutName'),
+                "nsiDescription": request.POST.get('nsiDescription', ''),
+                "nstId": request.POST.get('nstId', ''),
+                "vimAccountId": request.POST.get('vimAccountId', ''),
+            }
+            
+            if 'ssh_key' in request.POST and request.POST.get('ssh_key') != '':
+                nsi_data["ssh_keys"] = [request.POST.get('ssh_key')]
+        except Exception as e:
+            request.session["OSM_ERROR"] = "Error creating the NSI; Invalid parameters provided."
+            return __response_handler(request, {}, 'instances:list', to_redirect=True, type=type)
+        result = client.nsi_create(user.get_token(), nsi_data)
+        return __response_handler(request, result, 'instances:list', to_redirect=True, type=type)
+
     elif type == 'pdu':
         interface_param_name = request.POST.getlist('interfaces_name')
         interface_param_ip = request.POST.getlist('interfaces_ip')
@@ -128,12 +149,15 @@
     user = osmutils.get_user(request)
     project_id = user.project_id
 
-    result = {'type': 'ns', 'project_id': project_id, 'instance_id': instance_id}
+    result = {'type': type, 'project_id': project_id, 'instance_id': instance_id}
     raw_content_types = request.META.get('HTTP_ACCEPT', '*/*').split(',')
     if 'application/json' not in raw_content_types:
         return __response_handler(request, result, 'instance_operations_list.html')
     client = Client()
-    op_list = client.ns_op_list(user.get_token(), instance_id)
+    if type == 'ns':
+        op_list = client.ns_op_list(user.get_token(), instance_id)
+    elif type == 'nsi':
+        op_list = client.nsi_op_list(user.get_token(), instance_id)
     result['operations'] = op_list['data'] if op_list and op_list['error'] is False else []
 
     return __response_handler(request, result, 'instance_operations_list.html')
@@ -164,7 +188,6 @@
     if result['error']:
         return __response_handler(request, result['data'], url=None,
                                   status=result['data']['status'] if 'status' in result['data'] else 500)
-
     else:
         return __response_handler(request, {}, url=None, status=200)
 
@@ -179,8 +202,14 @@
         result = client.ns_delete(user.get_token(), instance_id, force)
     elif type == 'pdu':
         result = client.pdu_delete(user.get_token(), instance_id)
-    print result
-    return __response_handler(request, result, 'instances:list', to_redirect=True, type='ns')
+    elif type == 'nsi':
+        result = client.nsi_delete(user.get_token(), instance_id, force)
+
+    if result['error']:
+        return __response_handler(request, result['data'], url=None,
+                                  status=result['data']['status'] if 'status' in result['data'] else 500)
+    else:
+        return __response_handler(request, {}, url=None, status=200)
 
 @login_required
 def show_topology(request, instance_id=None, type=None):
@@ -224,6 +253,8 @@
         result = client.vnf_get(user.get_token(), instance_id)
     elif type == 'pdu':
         result = client.pdu_get(user.get_token(), instance_id)
+    elif type == 'nsi':
+        result = client.nsi_get(user.get_token(), instance_id)
     print result
     return __response_handler(request, result)
 
