diff --git a/vimhandler/views.py b/vimhandler/views.py
index 28c264c..dc96dbe 100644
--- a/vimhandler/views.py
+++ b/vimhandler/views.py
@@ -16,8 +16,10 @@
 
 from django.shortcuts import render, redirect
 from django.contrib.auth.decorators import login_required
-from django.http import JsonResponse
-from lib.osm.osmclient.client import Client
+from django.http import HttpResponse
+import json
+#from lib.osm.osmclient.client import Client
+from lib.osm.osmclient.clientv2 import Client
 import yaml
 import logging
 
@@ -28,11 +30,11 @@
 @login_required
 def list(request, project_id):
     client = Client()
-    result = client.vim_list()
+    result = client.vim_list(request.session['token'])
     print result
     result = {
         "project_id": project_id,
-        "datacenters": result
+        "datacenters": result['data'] if result and result['error'] is False else []
     }
     return __response_handler(request, result, 'vim_list.html')
 
@@ -55,8 +57,8 @@
                 "vim_tenant_name",
                 "description"]
         vim_data = dict(filter(lambda i: i[0] in keys and len(i[1]) > 0, new_vim_dict.items()))
-        vim_data['config']={}
-        for k,v in new_vim_dict.items():
+        vim_data['config'] = {}
+        for k, v in new_vim_dict.items():
             if str(k).startswith('config_') and len(v) > 0:
                 config_key = k[7:]
                 vim_data['config'][config_key] = v
@@ -68,7 +70,7 @@
             except Exception as e:
                 # TODO return error on json.loads exception
                 print e
-        result = client.vim_create(vim_data)
+        result = client.vim_create(request.session['token'], vim_data)
         # TODO  'vim:show', to_redirect=True, vim_id=vim_id
         return __response_handler(request, result, 'projects:vims:list', to_redirect=True, project_id=project_id)
 
@@ -76,7 +78,7 @@
 def delete(request, project_id, vim_id=None):
     try:
         client = Client()
-        del_res = client.vim_delete(vim_id)
+        del_res = client.vim_delete(request.session['token'], vim_id)
     except Exception as e:
         log.exception(e)
     return __response_handler(request, {}, 'projects:vims:list', to_redirect=True, project_id=project_id)
@@ -84,18 +86,21 @@
 @login_required
 def show(request, project_id, vim_id=None):
     client = Client()
-    datacenter = client.vim_get(vim_id)
-    print datacenter
+    result = client.vim_get(request.session['token'], vim_id)
+    print result
+    if isinstance(result, dict) and 'error' in result and result['error']:
+        return render(request, 'error.html')
+
     return __response_handler(request, {
-        "datacenter": datacenter,
+        "datacenter": result['data'],
         "project_id": project_id
     }, 'vim_show.html')
 
 
 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:
-        return JsonResponse(data_res)
+    if 'application/json' in raw_content_types or url is None:
+        return HttpResponse(json.dumps(data_res), content_type="application/json", *args, **kwargs)
     elif to_redirect:
         return redirect(url, *args, **kwargs)
     else:
