diff --git a/wally/keystone.py b/wally/keystone.py
index 24d322c..77c1d5b 100644
--- a/wally/keystone.py
+++ b/wally/keystone.py
@@ -1,19 +1,20 @@
 import json
-import urllib2
+import urllib.request
 from functools import partial
+from typing import Dict, Any
 
 from keystoneclient import exceptions
 from keystoneclient.v2_0 import Client as keystoneclient
 
 
-class Urllib2HTTP(object):
+class Urllib2HTTP:
     """
     class for making HTTP requests
     """
 
     allowed_methods = ('get', 'put', 'post', 'delete', 'patch', 'head')
 
-    def __init__(self, root_url, headers=None, echo=False):
+    def __init__(self, root_url:str, headers:Dict[str, str]=None, echo: bool=False):
         """
         """
         if root_url.endswith('/'):
@@ -24,7 +25,7 @@
         self.headers = headers if headers is not None else {}
         self.echo = echo
 
-    def do(self, method, path, params=None):
+    def do(self, method: str, path: str, params: Dict[str, str]=None) -> Any:
         if path.startswith('/'):
             url = self.root_url + path
         else:
@@ -36,14 +37,14 @@
         else:
             data_json = json.dumps(params)
 
-        request = urllib2.Request(url,
-                                  data=data_json,
-                                  headers=self.headers)
+        request = urllib.request.Request(url,
+                                         data=data_json,
+                                         headers=self.headers)
         if data_json is not None:
             request.add_header('Content-Type', 'application/json')
 
         request.get_method = lambda: method.upper()
-        response = urllib2.urlopen(request)
+        response = urllib.request.urlopen(request)
 
         if response.code < 200 or response.code > 209:
             raise IndexError(url)
@@ -62,15 +63,15 @@
 
 
 class KeystoneAuth(Urllib2HTTP):
-    def __init__(self, root_url, creds, headers=None, echo=False,
-                 admin_node_ip=None):
+    def __init__(self, root_url: str, creds: Dict[str, str], headers: Dict[str, str]=None, echo: bool=False,
+                 admin_node_ip: str=None):
         super(KeystoneAuth, self).__init__(root_url, headers, echo)
         self.keystone_url = "http://{0}:5000/v2.0".format(admin_node_ip)
         self.keystone = keystoneclient(
             auth_url=self.keystone_url, **creds)
         self.refresh_token()
 
-    def refresh_token(self):
+    def refresh_token(self) -> None:
         """Get new token from keystone and update headers"""
         try:
             self.keystone.authenticate()
@@ -78,11 +79,11 @@
         except exceptions.AuthorizationFailure:
             raise
 
-    def do(self, method, path, params=None):
+    def do(self, method: str, path: str, params: Dict[str, str]=None) -> Any:
         """Do request. If gets 401 refresh token"""
         try:
             return super(KeystoneAuth, self).do(method, path, params)
-        except urllib2.HTTPError as e:
+        except urllib.request.HTTPError as e:
             if e.code == 401:
                 self.refresh_token()
                 return super(KeystoneAuth, self).do(method, path, params)
