diff --git a/sdnctrlhandler/template/sdn_create.html b/sdnctrlhandler/template/sdn_create.html
index 60249a3..75d010d 100644
--- a/sdnctrlhandler/template/sdn_create.html
+++ b/sdnctrlhandler/template/sdn_create.html
@@ -19,7 +19,7 @@
 
 {% block breadcrumb_body %}
     {{ block.super }}
-    <li><a href="{% url 'projects:sdns:list' project_id=project_id %}">SDN Controllers</a></li>
+    <li><a href="{% url 'projects:sdns:list'  %}">SDN Controllers</a></li>
 {% endblock %}
 
 {% block content_body %}
@@ -27,7 +27,7 @@
 
     <div class="row">
         <div class="col-md-12">
-            <form action='{% url 'projects:sdns:create' project_id=project_id %}' method="post">
+            <form action='{% url 'projects:sdns:create'  %}' method="post">
                 {% csrf_token %}
                 <div class="box">
                     <div class="box-header with-border">
@@ -120,7 +120,7 @@
 
                     </div>
                     <div class="box-footer">
-                        <button onclick="location.href='{% url 'projects:sdns:list' project_id=project_id %}'"
+                        <button onclick="location.href='{% url 'projects:sdns:list'  %}'"
                                 class="btn btn-default pull-left">Back to
                             SDN Controllers
                         </button>
diff --git a/sdnctrlhandler/template/sdn_list.html b/sdnctrlhandler/template/sdn_list.html
index 8abb5e0..acb73d1 100644
--- a/sdnctrlhandler/template/sdn_list.html
+++ b/sdnctrlhandler/template/sdn_list.html
@@ -17,7 +17,7 @@
 
 {% block breadcrumb_body %}
     {{ block.super }}
-    <li><a href="{% url 'projects:sdns:list' project_id=project_id %}">SDN Controllers</a></li>
+    <li><a href="{% url 'projects:sdns:list'  %}">SDN Controllers</a></li>
 {% endblock %}
 
 {% block content_body %}
@@ -31,7 +31,7 @@
                 <div class="box-header with-border">
                     <h3 class="box-title">Registered SDN Controllers</h3>
                     <div class="box-tools">
-                        <a href='{% url "projects:sdns:create" project_id=project_id %}' class="btn btn-block btn-primary btn-sm"><i
+                        <a href='{% url "projects:sdns:create"  %}' class="btn btn-block btn-primary btn-sm"><i
                                 class="fa fa-plus"></i><span> New SDN Controller</span></a>
                     </div>
                 </div>
@@ -61,10 +61,10 @@
                                 <td>
                                     <div class="btn-group">
                                         <button type="button" class="btn btn-default"
-                                                onclick="javascript:showSDN('{{ project_id }}', '{{ s|get:"_id" }}')" data-toggle="tooltip" data-placement="top" data-container="body" title="Show Info"><i
+                                                onclick="javascript:showSDN( '{{ s|get:"_id" }}')" data-toggle="tooltip" data-placement="top" data-container="body" title="Show Info"><i
                                                 class="fa fa-info"></i></button>
                                         <button type="button" class="btn btn-default"
-                                                onclick="javascript:deleteSDN('{{ project_id }}', '{{ s|get:"_id" }}')" data-toggle="tooltip" data-placement="top" data-container="body" title="Delete"><i
+                                                onclick="javascript:deleteSDN('{{ s|get:"_id" }}')" data-toggle="tooltip" data-placement="top" data-container="body" title="Delete"><i
                                                 class="far fa-trash-alt" ></i></button>
                                     </div>
                                 </td>
diff --git a/sdnctrlhandler/views.py b/sdnctrlhandler/views.py
index f01f8b2..26488ce 100644
--- a/sdnctrlhandler/views.py
+++ b/sdnctrlhandler/views.py
@@ -19,7 +19,7 @@
 from django.http import HttpResponse
 import json
 import logging
-#from lib.osm.osmclient.client import Client
+import authosm.utils as osmutils
 from lib.osm.osmclient.clientv2 import Client
 
 logging.basicConfig(level=logging.DEBUG)
@@ -27,9 +27,11 @@
 
 
 @login_required
-def list(request, project_id):
+def list(request):
+    user = osmutils.get_user(request)
+    project_id = user.project_id
     client = Client()
-    result = client.sdn_list(request.session['token'])
+    result = client.sdn_list(user.get_token())
 
     result = {
         'project_id': project_id,
@@ -39,7 +41,9 @@
 
 
 @login_required
-def create(request, project_id):
+def create(request):
+    user = osmutils.get_user(request)
+    project_id = user.project_id
     result = {'project_id': project_id}
     if request.method == 'GET':
         return __response_handler(request, result, 'sdn_create.html')
@@ -57,25 +61,29 @@
         sdn_data = dict(filter(lambda i: i[0] in keys and len(i[1]) > 0, new_sdn_dict.items()))
         sdn_data['port'] = int(sdn_data['port'])
 
-        result = client.sdn_create(request.session['token'], sdn_data)
+        result = client.sdn_create(user.get_token(), sdn_data)
 
-        return __response_handler(request, result, 'projects:sdns:list', to_redirect=True, project_id=project_id)
+        return __response_handler(request, result, 'projects:sdns:list', to_redirect=True, )
 
 
 @login_required
-def delete(request, project_id, sdn_id=None):
+def delete(request, sdn_id=None):
+    user = osmutils.get_user(request)
+    project_id = user.project_id
     try:
         client = Client()
-        del_res = client.sdn_delete(request.session['token'], sdn_id)
+        del_res = client.sdn_delete(user.get_token(), sdn_id)
     except Exception as e:
         log.exception(e)
-    return __response_handler(request, {}, 'projects:sdns:list', to_redirect=True, project_id=project_id)
+    return __response_handler(request, {}, 'projects:sdns:list', to_redirect=True, )
 
 
 @login_required
-def show(request, project_id, sdn_id=None):
+def show(request, sdn_id=None):
+    user = osmutils.get_user(request)
+    project_id = user.project_id
     client = Client()
-    result = client.sdn_get(request.session['token'], sdn_id)
+    result = client.sdn_get(user.get_token(), sdn_id)
     if isinstance(result, dict) and 'error' in result and result['error']:
         return render(request, 'error.html')
     return __response_handler(request, {
