diff --git a/instancehandler/template/instance_list.html b/instancehandler/template/instance_list.html
index 9baae4c..5888519 100644
--- a/instancehandler/template/instance_list.html
+++ b/instancehandler/template/instance_list.html
@@ -25,7 +25,7 @@
 
 {% block breadcrumb_body %}
     {{ block.super }}
-    <li><a href="{% url 'projects:instances:list' project_id=project_id type=type %}">{{ type|upper }} Instances</a></li>
+    <li><a href="{% url 'projects:instances:list'  type=type %}">{{ type|upper }} Instances</a></li>
 {% endblock %}
 
 {% block content_body %}
diff --git a/instancehandler/template/instance_list_ns.html b/instancehandler/template/instance_list_ns.html
index dd84d47..2da870d 100644
--- a/instancehandler/template/instance_list_ns.html
+++ b/instancehandler/template/instance_list_ns.html
@@ -7,7 +7,7 @@
 
             <button type="button" class="btn btn-default" data-container="body"
                     data-toggle="tooltip" data-placement="top" title="Instantiate NS"
-                    onclick="javascript:openModalCreateNS({ 'project_id':'{{ project_id }}','vim_list_url': '{% url "projects:vims:list" project_id=project_id %}', 'nsd_list_url': '{% url "projects:list_descriptors" project_id=project_id descriptor_type='nsd' %}'})">
+                    onclick="javascript:openModalCreateNS({ 'project_id':'{{ project_id }}','vim_list_url': '{% url "projects:vims:list"  %}', 'nsd_list_url': '{% url "projects:list_descriptors" descriptor_type='nsd' %}'})">
                 <i class="fa fa-paper-plane"></i> <span> New NS</span></button>
 
         </div>
@@ -58,14 +58,20 @@
                     <td>
                         <div class="btn-group">
                             <button type="button" class="btn btn-default"
-                                    onclick="javascript:showInstanceDetails('{% url 'projects:instances:show' instance_id=i|get:'_id' project_id=project_id type=type %}')"
+                                    onclick="javascript:showInstanceDetails('{% url 'projects:instances:show' instance_id=i|get:'_id'  type=type %}')"
                                     data-toggle="tooltip" data-placement="top" data-container="body" title="Show Info">
-                                <i
-                                        class="fa fa-info"></i>
+                                <i class="fa fa-info"></i>
                             </button>
+                            <!--
+                            <button type="button" class="btn btn-default"
+                                    onclick="javascript:showInstanceTopology('{% url 'projects:instances:show_topology' instance_id=i|get:'_id'  type=type %}')"
+                                    data-toggle="tooltip" data-placement="top" data-container="body" title="Show Topology">
+                                <i class="fa fa-sitemap"></i>
+                            </button>
+                            -->
 
                             <button type="button" class="btn btn-default"
-                                    onclick="javascript:deleteNs('{% url 'projects:instances:delete' instance_id=i|get:'_id' project_id=project_id type=type %}')"
+                                    onclick="javascript:deleteNs('{% url 'projects:instances:delete' instance_id=i|get:'_id'  type=type %}')"
                                     data-toggle="tooltip" data-placement="top" data-container="body" title="Delete"><i
                                     class="far fa-trash-alt"></i></button>
 
@@ -74,21 +80,21 @@
                                 <span class="fa fa-caret-down"></span></button>
                             <ul class="dropdown-menu">
                                 <li><a href="#"
-                                       onclick="javascript:performAction('{% url 'projects:instances:action' instance_id=i|get:'_id' project_id=project_id type=type %}')">
+                                       onclick="javascript:performAction('{% url 'projects:instances:action' instance_id=i|get:'_id'  type=type %}')">
                                     <i class="fa fa-magic"></i> Exec NS Primitive</a></li>
                                 <li>
-                                    <a href="{% url 'projects:instances:ns_operations' project_id=project_id type=type instance_id=i|get:'_id' %}">
+                                    <a href="{% url 'projects:instances:ns_operations'  type=type instance_id=i|get:'_id' %}">
                                         <i class="fa fa-list"></i> Active operations</a></li>
                                 <li class="divider"></li>
                                 <li><a href="#"
-                                       onclick="javascript:newAlarmNs('{% url 'projects:instances:ns_create_alarm' instance_id=i|get:'_id' project_id=project_id type=type %}')">
+                                       onclick="javascript:newAlarmNs('{% url 'projects:instances:ns_create_alarm' instance_id=i|get:'_id'  type=type %}')">
                                     <i class="far fa-bell"></i> New Alarm</a></li>
                                 <li><a href="#"
-                                       onclick="javascript:exportMetricNs('{% url 'projects:instances:ns_export_metric' instance_id=i|get:'_id' project_id=project_id type=type %}')">
+                                       onclick="javascript:exportMetricNs('{% url 'projects:instances:ns_export_metric' instance_id=i|get:'_id'  type=type %}')">
                                     <i class="far fa-chart-bar"></i> Export metric</a></li>
                                 <li class="divider"></li>
                                 <li>
-                                    <a href="javascript:deleteNs('{% url 'projects:instances:delete' instance_id=i|get:'_id' project_id=project_id type=type %}', true)">
+                                    <a href="javascript:deleteNs('{% url 'projects:instances:delete' instance_id=i|get:'_id'  type=type %}', true)">
                                         <i class="far fa-trash-alt" style="color:red" ></i> Force delete</a></li>
                             </ul>
 
diff --git a/instancehandler/template/instance_list_vnf.html b/instancehandler/template/instance_list_vnf.html
index 4aa084e..410fcb0 100644
--- a/instancehandler/template/instance_list_vnf.html
+++ b/instancehandler/template/instance_list_vnf.html
@@ -29,7 +29,7 @@
                 <tr>
 
                     <td>{{ i|get:"_id" }}</td>
-                    <td><a href="javascript:openDescriptorView('{{project_id}}', 'vnfd', '{{ i|get:"vnfd-id" }}')"> {{ i|get:"vnfd-ref" }}</a></td>
+                    <td><a href="javascript:openDescriptorView('vnfd', '{{ i|get:"vnfd-id" }}')"> {{ i|get:"vnfd-ref" }}</a></td>
                     <td>{{ i|get:"member-vnf-index-ref" }}</td>
                     <td class="ellipsis" data-text="{{ i|get:"nsr-id-ref" }}">{{ i|get:"nsr-id-ref" }}</td>
                     <td >{{ i|get:"created-time"|get_date }}</td>
@@ -37,7 +37,7 @@
                     <td>
                         <div class="btn-group">
                             <button type="button" class="btn btn-default"
-                                    onclick="javascript:showInstanceDetails('{% url 'projects:instances:show' instance_id=i|get:'_id' project_id=project_id type=type %}')"
+                                    onclick="javascript:showInstanceDetails('{% url 'projects:instances:show' instance_id=i|get:'_id'  type=type %}')"
                                     data-toggle="tooltip" data-placement="top" data-container="body" title="Show Info">
                                 <i class="fa fa-info"></i>
                             </button>
diff --git a/instancehandler/template/instance_operations_list.html b/instancehandler/template/instance_operations_list.html
index 4115e0d..e72b56c 100644
--- a/instancehandler/template/instance_operations_list.html
+++ b/instancehandler/template/instance_operations_list.html
@@ -25,7 +25,7 @@
 
 {% block breadcrumb_body %}
     {{ block.super }}
-    <li><a href="{% url 'projects:instances:list' project_id=project_id type=type %}">Instances</a></li>
+    <li><a href="{% url 'projects:instances:list'  type=type %}">Instances</a></li>
 {% endblock %}
 
 {% block content_body %}
@@ -74,7 +74,7 @@
                                 <td>
                                     <div class="btn-group">
                                         <button type="button" class="btn btn-default"
-                                                onclick="javascript:showOperationDetails('{% url 'projects:instances:ns_operation' op_id=i|get:'_id' instance_id=i|get:'nsInstanceId' project_id=project_id type=type %}')"
+                                                onclick="javascript:showOperationDetails('{% url 'projects:instances:ns_operation' op_id=i|get:'_id' instance_id=i|get:'nsInstanceId'  type=type %}')"
                                                 data-toggle="tooltip" data-placement="top" data-container="body" title="More Info"><i
                                                 class="fa fa-info"></i>
                                         </button>
diff --git a/instancehandler/template/instance_topology_view.html b/instancehandler/template/instance_topology_view.html
new file mode 100644
index 0000000..627770d
--- /dev/null
+++ b/instancehandler/template/instance_topology_view.html
@@ -0,0 +1,79 @@
+{% extends "base.html" %}
+{% load get %}
+{% load staticfiles %}
+
+
+
+{% block head_block %}
+    {{ block.super }}
+    <link rel="stylesheet" href="/static/bower_components/select2/dist/css/select2.min.css">
+    <link rel="stylesheet" href="/static/css/lwuitable.css">
+
+    <!-- Topology3D core CSS -->
+    <link rel="stylesheet" href="/static/topology3D/css/graph_editor_d3js.css">
+    <link rel="stylesheet" href="/static/topology3D/css/d3-context-menu.css">
+
+{% endblock %}
+{% block title_header_big %}
+    {{ block.super }}
+{% endblock %}
+{% block left_sidebar %}
+    {% include 'osm/osm_project_left_sidebar.html' %}
+{% endblock %}
+
+
+{% block breadcrumb_body %}
+    {{ block.super }}
+    <li><a href="{% url 'projects:instances:list'  type=type %}">{{ type|upper }} Instances</a></li>
+    <li><a href="#"><i class="fa fa-sitemap"></i> {{ type|upper }} Topology</a></li>
+{% endblock %}
+
+{% block content_body %}
+    {{ block.super }}
+    {% csrf_token %}
+
+    <div class="row" >
+        <div class="col-md-12">
+            {% block topology_toolbar %}
+                {{ block.super }}
+                 {% include 'topology_toolbar_instance.html' %}
+            {% endblock %}
+            <div id="graph_ed_container" style="width: 100%; height:100%; background-color: white; border: 2px #3c8dbc solid;">
+
+            </div>
+        </div>
+    </div>
+
+
+
+{% endblock %}
+
+{% block resource_block %}
+    {{ block.super }}
+    <script>
+        var topology_data = {};//{{topology_data|safe }};
+    </script>
+    <!-- Utility JS -->
+    <script src="/static/bower_components/select2/dist/js/select2.js"></script>
+
+    <!-- d3.js -->
+    <script src="https://d3js.org/d3.v4.js"></script>
+<!--
+    <script src="/static/bower_components/d3/d3.js"></script>-->
+
+    <!-- topology3D -->
+    <script src="/static/topology3D/js/d3-context-menu.js"></script>
+    <script src="/static/topology3D/js/event.js"></script>
+    <script src="/static/topology3D/js/graph_editor.js"></script>
+    <script src="/static/topology3D/js/graph_request.js"></script>
+    <script src="/static/topology3D/js/model_graph_editor.js"></script>
+
+
+    <script src="/static/src/osm_gui_properties.js"></script>
+    <script src="/static/src/instancehandler/instance_topology_view.js"></script>
+
+{% endblock %}
+
+{% block footer %}
+    {% include "footer.html" %}
+{% endblock %}
diff --git a/instancehandler/template/modal/instance_create.html b/instancehandler/template/modal/instance_create.html
index f1c24d9..384e782 100644
--- a/instancehandler/template/modal/instance_create.html
+++ b/instancehandler/template/modal/instance_create.html
@@ -6,7 +6,7 @@
                     <span aria-hidden="true">×</span></button>
                 <h4 class="modal-title">New Instance</h4>
             </div>
-            <form id="formCreateNS" action='{% url "projects:instances:create"  project_id=project_id %}'
+            <form id="formCreateNS" action='{% url "projects:instances:create"   %}'
                   class="form-horizontal"
                   method="post" enctype="multipart/form-data">
                 {% csrf_token %}
diff --git a/instancehandler/urls.py b/instancehandler/urls.py
index 054c3ba..d097b60 100644
--- a/instancehandler/urls.py
+++ b/instancehandler/urls.py
@@ -21,6 +21,7 @@
     url(r'^(?P<type>[ns|vnf]+)/list/', views.list, name='list'),
     url(r'^create/', views.create, name='create'),
     url(r'^(?P<type>[ns|vnf]+)/(?P<instance_id>[0-9a-z-]+)/delete$', views.delete, name='delete'),
+    url(r'^(?P<type>[ns|vnf]+)/(?P<instance_id>[0-9a-z-]+)/topology', views.show_topology, name='show_topology'),
     url(r'^(?P<type>[ns|vnf]+)/(?P<instance_id>[0-9a-z-]+)/action$', views.action, name='action'),
     url(r'^(?P<type>[ns|vnf]+)/(?P<instance_id>[0-9a-z-]+)/operation$', views.ns_operations, name='ns_operations'),
     url(r'^(?P<type>[ns|vnf]+)/(?P<instance_id>[0-9a-z-]+)/operation/(?P<op_id>[0-9a-z-]+)', views.ns_operation, name='ns_operation'),
diff --git a/instancehandler/views.py b/instancehandler/views.py
index 39837d7..2148b7b 100644
--- a/instancehandler/views.py
+++ b/instancehandler/views.py
@@ -21,18 +21,20 @@
 import json
 import logging
 from lib.osm.osmclient.clientv2 import Client
+import authosm.utils as osmutils
 
 logging.basicConfig(level=logging.DEBUG)
 log = logging.getLogger('instancehandler/view.py')
 
-
 @login_required
-def list(request, project_id=None, type=None):
+def list(request, type=None):
+    user = osmutils.get_user(request)
+    project_id = user.project_id
     client = Client()
     if type == 'ns':
-        instance_list = client.ns_list(request.session['token'])
+        instance_list = client.ns_list(user.get_token())
     elif type == 'vnf':
-        instance_list = client.vnf_list(request.session['token'])
+        instance_list = client.vnf_list(user.get_token())
 
     result = {'instances': instance_list['data'] if instance_list and instance_list['error'] is False else [],
               'type': type, 'project_id': project_id}
@@ -41,7 +43,7 @@
 
 
 @login_required
-def create(request, project_id=None):
+def create(request):
     result = {}
     ns_data = {
         "nsName": request.POST.get('nsName', 'WithoutName'),
@@ -73,32 +75,36 @@
 
                 ns_data["vnf"] = ns_config["vnf"]
     print ns_data
+    user = osmutils.get_user(request)
     client = Client()
-    result = client.ns_create(request.session['token'], ns_data)
+    result = client.ns_create(user.get_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):
+def ns_operations(request, instance_id=None, type=None):
+    user = osmutils.get_user(request)
+    project_id = user.project_id
     client = Client()
-    op_list = client.ns_op_list(request.session['token'], instance_id)
+    op_list = client.ns_op_list(user.get_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):
+def ns_operation(request, op_id, instance_id=None, type=None):
+    user = osmutils.get_user(request)
     client = Client()
-    result = client.ns_op(request.session['token'], op_id)
+    result = client.ns_op(user.get_token(), op_id)
     return __response_handler(request, result['data'])
 
 
 @login_required
-def action(request, project_id=None, instance_id=None, type=None):
+def action(request, instance_id=None, type=None):
+    user = osmutils.get_user(request)
     client = Client()
-
     # result = client.ns_action(instance_id, action_payload)
     primitive_param_keys = request.POST.getlist('primitive_params_name')
     primitive_param_value = request.POST.getlist('primitive_params_value')
@@ -108,7 +114,7 @@
         "primitive_params": {k: v for k, v in zip(primitive_param_keys, primitive_param_value) if len(k) > 0}
     }
 
-    result = client.ns_action(request.session['token'], instance_id, action_payload)
+    result = client.ns_action(user.get_token(), instance_id, action_payload)
     print result
     if result['error']:
         return __response_handler(request, result['data'], url=None,
@@ -119,32 +125,191 @@
 
 
 @login_required
-def delete(request, project_id=None, instance_id=None, type=None):
+def delete(request, instance_id=None, type=None):
     force = bool(request.GET.get('force', False))
     result = {}
+    user = osmutils.get_user(request)
     client = Client()
-    result = client.ns_delete(request.session['token'], instance_id, force)
+    result = client.ns_delete(user.get_token(), instance_id, force)
     print result
     return __response_handler(request, result, 'projects:instances:list', to_redirect=True, type='ns',
-                              project_id=project_id)
+                              )
+
+
+def show_topology(request, instance_id=None, type=None):
+    user = osmutils.get_user(request)
+    project_id = user.project_id
+    raw_content_types = request.META.get('HTTP_ACCEPT', '*/*').split(',')
+    if 'application/json' in raw_content_types:
+        result = {'vertices': [
+            {"info": {"type": "vnf", "property": {"custom_label": ""},
+                      "group": []}, "id": "ping"},
+            {"info": {"type": "vnf", "property": {"custom_label": ""},
+                      "group": []}, "id": "pong"},
+            {"info": {"type": "vdu", "property": {"custom_label": ""},
+                      "group": ['pong']}, "id": "pong/ubuntu"},
+            {"info": {"type": "vdu", "property": {"custom_label": ""},
+                      "group": ['ping']}, "id": "ping/ubuntu"},
+            {"info": {"type": "cp", "property": {"custom_label": ""},
+                      "group": ['ping']}, "id": "ping/cp0"},
+            {"info": {"type": "cp", "property": {"custom_label": ""},
+                      "group": ['ping']}, "id": "ping/cp1"},
+            {"info": {"type": "cp", "property": {"custom_label": ""},
+                      "group": ['pong']}, "id": "pong/cp0"},
+            {"info": {"type": "cp", "property": {"custom_label": ""},
+                      "group": ['pong']}, "id": "pong/cp1"},
+            {"info": {"type": "ns_vl", "property": {"custom_label": ""},
+                      "group": []}, "id": "mgmt_vl"},
+        ],
+            'edges': [
+                # {"source": "ping", "group": [], "target": "ping/cp0", "view": "Data"},
+                {"source": "pong/ubuntu", "group": ['pong'], "target": "pong/cp0", "view": "vnf"},
+                {"source": "ping/ubuntu", "group": ['ping'], "target": "ping/cp0", "view": "vnf"},
+                {"source": "pong/ubuntu", "group": ['pong'], "target": "pong/cp1", "view": "vnf"},
+                {"source": "ping/ubuntu", "group": ['ping'], "target": "ping/cp1", "view": "vnf"},
+                {"source": "pong", "group": [], "target": "mgmt_vl", "view": "ns"},
+                {"source": "ping", "group": [], "target": "mgmt_vl", "view": "ns"},
+            ], 'graph_parameters': [],
+            'model': {
+                "layer": {
+
+                    "ns": {
+                        "nodes": {
+                            "vnf": {
+                                "addable": {
+                                    "callback": "addNode"
+                                },
+                                "removable": {
+                                    "callback": "removeNode"
+                                },
+                                "expands": "vnf"
+                            },
+                            "ns_vl": {
+                                "addable": {
+                                    "callback": "addNode"
+                                },
+                                "removable": {
+                                    "callback": "removeNode"
+                                }
+                            },
+
+                        },
+                        "allowed_edges": {
+                            "ns_vl": {
+                                "destination": {
+                                    "vnf": {
+                                        "callback": "addLink",
+                                        "direct_edge": False,
+                                        "removable": {
+                                            "callback": "removeLink"
+                                        }
+                                    }
+                                }
+                            },
+                            "vnf": {
+                                "destination": {
+                                    "ns_vl": {
+                                        "callback": "addLink",
+                                        "direct_edge": False,
+                                        "removable": {
+                                            "callback": "removeLink"
+                                        }
+                                    },
+
+                                }
+                            }
+
+                        }
+                    },
+                    "vnf": {
+                        "nodes": {
+                            "vdu": {
+                                "addable": {
+                                    "callback": "addNode"
+                                },
+                                "removable": {
+                                    "callback": "removeNode"
+                                }
+                            },
+                            "cp": {
+                                "addable": {
+                                    "callback": "addNode"
+                                },
+                                "removable": {
+                                    "callback": "removeNode"
+                                }
+                            },
+
+                        },
+                        "allowed_edges": {
+                            "vdu": {
+                                "destination": {
+                                    "cp": {
+                                        "callback": "addLink",
+                                        "direct_edge": False,
+                                        "removable": {
+                                            "callback": "removeLink"
+                                        }
+                                    }
+                                }
+                            },
+                            "cp": {
+                                "destination": {
+                                    "vdu": {
+                                        "callback": "addLink",
+                                        "direct_edge": False,
+                                        "removable": {
+                                            "callback": "removeLink"
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    },
+                    "name": "OSM",
+                    "version": 1,
+                    "nodes": {
+                        "vnf": {
+                            "label": "vnf"
+                        },
+                        "ns_vl": {
+                            "label": "vl"
+                        },
+                        "cp": {
+                            "label": "cp"
+                        },
+                        "vdu": {
+                            "label": "vdu"
+                        }
+                    },
+                    "description": "osm"
+                }
+            }}
+        return __response_handler(request, result)
+    else:
+        result = {'type': type, 'project_id': project_id, 'instance_id': instance_id}
+        return __response_handler(request, result, 'instance_topology_view.html')
 
 
 @login_required
-def show(request, project_id=None, instance_id=None, type=None):
+def show(request, instance_id=None, type=None):
     # result = {}
+    user = osmutils.get_user(request)
+    project_id = user.project_id
     client = Client()
     if type == 'ns':
-        result = client.ns_get(request.session['token'], instance_id)
+        result = client.ns_get(user.get_token(), instance_id)
     elif type == 'vnf':
-        result = client.vnf_get(request.session['token'], instance_id)
+        result = client.vnf_get(user.get_token(), instance_id)
     print result
     return __response_handler(request, result)
 
 
 @login_required
-def export_metric(request, project_id=None, instance_id=None, type=None):
+def export_metric(request, instance_id=None, type=None):
     metric_data = request.POST.dict()
-
+    user = osmutils.get_user(request)
+    project_id = user.project_id
     client = Client()
     keys = ["collection_period",
             "vnf_member_index",
@@ -154,7 +319,7 @@
             "collection_unit"]
     metric_data = dict(filter(lambda i: i[0] in keys and len(i[1]) > 0, metric_data.items()))
 
-    result = client.ns_metric_export(request.session['token'], instance_id, metric_data)
+    result = client.ns_metric_export(user.get_token(), instance_id, metric_data)
 
     if result['error']:
         print result
@@ -165,9 +330,11 @@
 
 
 @login_required
-def create_alarm(request, project_id=None, instance_id=None, type=None):
+def create_alarm(request, instance_id=None, type=None):
     metric_data = request.POST.dict()
     print metric_data
+    user = osmutils.get_user(request)
+    project_id = user.project_id
     client = Client()
 
     keys = ["threshold_value",
@@ -181,7 +348,7 @@
             "severity"]
     metric_data = dict(filter(lambda i: i[0] in keys and len(i[1]) > 0, metric_data.items()))
 
-    result = client.ns_alarm_create(request.session['token'], instance_id, metric_data)
+    result = client.ns_alarm_create(user.get_token(), instance_id, metric_data)
     if result['error']:
         print result
         return __response_handler(request, result['data'], url=None,
