diff --git a/instancehandler/template/modal/instance_export_metric.html b/instancehandler/template/modal/instance_export_metric.html
new file mode 100644
index 0000000..cd3d1b5
--- /dev/null
+++ b/instancehandler/template/modal/instance_export_metric.html
@@ -0,0 +1,75 @@
+<div class="modal" id="modal_instance_export_metric" xmlns="http://www.w3.org/1999/html">
+    <div class="modal-dialog">
+        <div class="modal-content">
+            <div class="modal-header">
+                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                    <span aria-hidden="true">×</span></button>
+                <h4 class="modal-title">Export metric</h4>
+            </div>
+
+            <form id="formExportMetricNS" action="" class="form-horizontal" method="post" enctype="multipart/form-data">
+                {% csrf_token %}
+                <div class="modal-body" id="modal_instance_export_metric">
+
+
+                    <div class="form-group">
+                        <label for="metric_name" class="col-sm-3">Name *</label>
+                        <div class="col-sm-3">
+                            <input class="form-control input-sm" id="metric_name" name="metric_name" required>
+                        </div>
+                        <label for="metric_name" class="col-sm-3">Metric Name *</label>
+                        <div class="col-sm-3">
+                            <input class="form-control input-sm" id="metric_name" name="metric_name" required>
+                        </div>
+                    </div>
+
+
+                    <div class="form-group">
+                        <label for="vnf_member_index" class="col-sm-3">VNF Member index *</label>
+                        <div class="col-sm-3">
+                            <input class="form-control input-sm" id="vnf_member_index" name="vnf_member_index" required>
+                        </div>
+                        <label for="vdu_name" class="col-sm-3">VDU Name *</label>
+                        <div class="col-sm-3">
+                            <input class="form-control input-sm" id="vdu_name" name="vdu_name" required>
+                        </div>
+                    </div>
+
+                    <div class="form-group">
+
+
+                        <label for="correlation_id" class="col-sm-3">Correlation</label>
+                        <div class="col-sm-3">
+                            <input class="form-control input-sm" id="correlation_id" name="correlation_id" >
+                        </div>
+
+                    </div>
+                    <div class="form-group">
+                        <label for="collection_unit" class="col-sm-3">Collection Unit</label>
+                        <div class="col-sm-3">
+                            <input class="form-control input-sm" id="collection_unit" name="collection_unit" >
+                        </div>
+                        <label for="collection_period" class="col-sm-3">Collection period </label>
+                        <div class="col-sm-3">
+                            <input class="form-control input-sm" id="collection_period" name="collection_period" >
+                        </div>
+
+                    </div>
+                    <div class="form-group">
+
+
+                    </div>
+
+
+                </div>
+                <div class="modal-footer">
+                    <button type="button" class="btn btn-default pull-left" data-dismiss="modal">Cancel</button>
+                    <button class="btn btn-primary pull-right">Create</button>
+                </div>
+            </form>
+
+        </div>
+        <!-- /.modal-content -->
+    </div>
+    <!-- /.modal-dialog -->
+</div>
diff --git a/instancehandler/template/modal/instance_new_alarm.html b/instancehandler/template/modal/instance_new_alarm.html
new file mode 100644
index 0000000..fe5fbfe
--- /dev/null
+++ b/instancehandler/template/modal/instance_new_alarm.html
@@ -0,0 +1,83 @@
+<div class="modal" id="modal_instance_new_alarm" xmlns="http://www.w3.org/1999/html">
+    <div class="modal-dialog">
+        <div class="modal-content">
+            <div class="modal-header">
+                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                    <span aria-hidden="true">×</span></button>
+                <h4 class="modal-title">Create Alarm</h4>
+            </div>
+
+            <form id="formAlarmNS" action="" class="form-horizontal" method="post" enctype="multipart/form-data">
+                {% csrf_token %}
+                <div class="modal-body" id="modal_instance_new_alarm_body">
+
+
+                    <div class="form-group">
+                        <label for="alarm_name" class="col-sm-3">Name *</label>
+                        <div class="col-sm-3">
+                            <input class="form-control input-sm" id="alarm_name" name="alarm_name" required>
+                        </div>
+                        <label for="metric_name" class="col-sm-3">Metric Name *</label>
+                        <div class="col-sm-3">
+                            <input class="form-control input-sm" id="metric_name" name="metric_name" required>
+                        </div>
+                    </div>
+
+
+                    <div class="form-group">
+                        <label for="vnf_member_index" class="col-sm-3">VNF Member index *</label>
+                        <div class="col-sm-3">
+                            <input class="form-control input-sm" id="vnf_member_index" name="vnf_member_index" required>
+                        </div>
+                        <label for="vdu_name" class="col-sm-3">VDU Name *</label>
+                        <div class="col-sm-3">
+                            <input class="form-control input-sm" id="vdu_name" name="vdu_name" required>
+                        </div>
+                    </div>
+
+                    <div class="form-group">
+
+                        <label for="statistic" class="col-sm-3">Statistic *</label>
+                        <div class="col-sm-3">
+                            <input class="form-control input-sm" id="statistic" name="statistic" required>
+                        </div>
+                        <label for="correlation_id" class="col-sm-3">Correlation</label>
+                        <div class="col-sm-3">
+                            <input class="form-control input-sm" id="correlation_id" name="correlation_id" >
+                        </div>
+
+                    </div>
+                    <div class="form-group">
+                        <label for="threshold_value" class="col-sm-3">Threshold Value *</label>
+                        <div class="col-sm-3">
+                            <input class="form-control input-sm" id="threshold_value" name="threshold_value" required>
+                        </div>
+                        <label for="statistic" class="col-sm-3">Severity</label>
+                        <div class="col-sm-3">
+                            <input class="form-control input-sm" id="severity" name="severity" >
+                        </div>
+
+                    </div>
+                    <div class="form-group">
+                        <label for="operation" class="col-sm-3">Operation</label>
+                        <div class="col-sm-3">
+                            <input class="form-control input-sm" id="operation" name="operation" >
+                        </div>
+
+
+
+                    </div>
+
+
+                </div>
+                <div class="modal-footer">
+                    <button type="button" class="btn btn-default pull-left" data-dismiss="modal">Cancel</button>
+                    <button class="btn btn-primary pull-right">Create</button>
+                </div>
+            </form>
+
+        </div>
+        <!-- /.modal-content -->
+    </div>
+    <!-- /.modal-dialog -->
+</div>
diff --git a/instancehandler/views.py b/instancehandler/views.py
index d835de6..39837d7 100644
--- a/instancehandler/views.py
+++ b/instancehandler/views.py
@@ -18,19 +18,24 @@
 from django.contrib.auth.decorators import login_required
 from django.http import HttpResponse, JsonResponse
 import yaml
+import json
 import logging
-from lib.osm.osmclient.client import Client
+from lib.osm.osmclient.clientv2 import Client
+
+logging.basicConfig(level=logging.DEBUG)
+log = logging.getLogger('instancehandler/view.py')
 
 
 @login_required
 def list(request, project_id=None, type=None):
     client = Client()
     if type == 'ns':
-        result = client.ns_list()
+        instance_list = client.ns_list(request.session['token'])
     elif type == 'vnf':
-        result = client.vnf_list()
+        instance_list = client.vnf_list(request.session['token'])
 
-    result = {'instances': result, 'type': type, 'project_id': project_id}
+    result = {'instances': instance_list['data'] if instance_list and instance_list['error'] is False else [],
+              'type': type, 'project_id': project_id}
 
     return __response_handler(request, result, 'instance_list.html')
 
@@ -69,24 +74,29 @@
                 ns_data["vnf"] = ns_config["vnf"]
     print ns_data
     client = Client()
-    result = client.ns_create(ns_data)
-    return __response_handler(request, result, 'projects:instances:list', to_redirect=True, type='ns', project_id=project_id)
+    result = client.ns_create(request.session['token'], ns_data)
+    return __response_handler(request, result, 'projects:instances:list', to_redirect=True, type='ns',
+                              project_id=project_id)
+
 
 @login_required
 def ns_operations(request, project_id=None, instance_id=None, type=None):
     client = Client()
-    result = client.ns_op_list(instance_id)
-    return __response_handler(request, {'operations': result, 'type': 'ns', 'project_id': project_id}, 'instance_operations_list.html')
+    op_list = client.ns_op_list(request.session['token'], instance_id)
+    return __response_handler(request,
+                              {'operations': op_list['data'] if op_list and op_list['error'] is False else [],
+                               'type': 'ns', 'project_id': project_id}, 'instance_operations_list.html')
+
 
 @login_required
 def ns_operation(request, op_id, project_id=None, instance_id=None, type=None):
     client = Client()
-    result = client.ns_op(op_id)
-    return __response_handler(request, result)
+    result = client.ns_op(request.session['token'], op_id)
+    return __response_handler(request, result['data'])
+
 
 @login_required
 def action(request, project_id=None, instance_id=None, type=None):
-
     client = Client()
 
     # result = client.ns_action(instance_id, action_payload)
@@ -98,8 +108,14 @@
         "primitive_params": {k: v for k, v in zip(primitive_param_keys, primitive_param_value) if len(k) > 0}
     }
 
-    result = client.ns_action(instance_id, action_payload)
-    return __response_handler(request, result, None, to_redirect=False, status=result['status'] if 'status' in result else None )
+    result = client.ns_action(request.session['token'], instance_id, action_payload)
+    print result
+    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
@@ -107,9 +123,10 @@
     force = bool(request.GET.get('force', False))
     result = {}
     client = Client()
-    result = client.ns_delete(instance_id, force)
+    result = client.ns_delete(request.session['token'], instance_id, force)
     print result
-    return __response_handler(request, result, 'projects:instances:list', to_redirect=True, type='ns', project_id=project_id)
+    return __response_handler(request, result, 'projects:instances:list', to_redirect=True, type='ns',
+                              project_id=project_id)
 
 
 @login_required
@@ -117,15 +134,15 @@
     # result = {}
     client = Client()
     if type == 'ns':
-        result = client.ns_get(instance_id)
+        result = client.ns_get(request.session['token'], instance_id)
     elif type == 'vnf':
-        result = client.vnf_get(instance_id)
+        result = client.vnf_get(request.session['token'], instance_id)
     print result
     return __response_handler(request, result)
 
+
 @login_required
 def export_metric(request, project_id=None, instance_id=None, type=None):
-
     metric_data = request.POST.dict()
 
     client = Client()
@@ -137,10 +154,15 @@
             "collection_unit"]
     metric_data = dict(filter(lambda i: i[0] in keys and len(i[1]) > 0, metric_data.items()))
 
-    response = client.ns_metric_export(instance_id, metric_data)
+    result = client.ns_metric_export(request.session['token'], instance_id, metric_data)
 
-    return __response_handler(request, {}, None, to_redirect=False,
-                              status=response.status_code)
+    if result['error']:
+        print result
+        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 create_alarm(request, project_id=None, instance_id=None, type=None):
@@ -148,7 +170,6 @@
     print metric_data
     client = Client()
 
-
     keys = ["threshold_value",
             "vnf_member_index",
             "metric_name",
@@ -160,18 +181,20 @@
             "severity"]
     metric_data = dict(filter(lambda i: i[0] in keys and len(i[1]) > 0, metric_data.items()))
 
-    result = client.ns_alarm_create(instance_id, metric_data)
-    return __response_handler(request, {}, None, to_redirect=False,
-                              status=result['status'] if 'status' in result else None)
+    result = client.ns_alarm_create(request.session['token'], instance_id, metric_data)
+    if result['error']:
+        print result
+        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)
 
 
 def __response_handler(request, data_res, url=None, to_redirect=None, *args, **kwargs):
     raw_content_types = request.META.get('HTTP_ACCEPT', '*/*').split(',')
     if 'application/json' in raw_content_types or url is None:
-        return JsonResponse(data_res, *args, **kwargs)
+        return HttpResponse(json.dumps(data_res), content_type="application/json", *args, **kwargs)
     elif to_redirect:
         return redirect(url, *args, **kwargs)
     else:
         return render(request, url, data_res)
-
-
