diff --git a/tcp_tests/managers/jenkins/__init__.py b/tcp_tests/managers/jenkins/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tcp_tests/managers/jenkins/__init__.py
diff --git a/tcp_tests/managers/jenkins/client.py b/tcp_tests/managers/jenkins/client.py
new file mode 100644
index 0000000..f781305
--- /dev/null
+++ b/tcp_tests/managers/jenkins/client.py
@@ -0,0 +1,65 @@
+import time
+
+import jenkins
+
+from devops.helpers import helpers
+
+
+class JenkinsClient(object):
+
+    def __init__(self, host=None, username=None, password=None):
+        host = host or 'http://172.16.44.33:8081'
+        username = username or 'admin'
+        password = password or 'r00tme'
+        self.__client = jenkins.Jenkins(
+            host,
+            username=username,
+            password=password)
+
+    def jobs(self):
+        return self.__client.get_jobs()
+
+    def find_jobs(self, name):
+        return filter(lambda x: name in x['fullname'], self.jobs())
+
+    def job_info(self, name):
+        return self.__client.get_job_info(name)
+
+    def list_builds(self, name):
+        return self.job_info(name).get('builds')
+
+    def build_info(self, name, build_id):
+        return self.__client.get_build_info(name, build_id)
+
+    def job_params(self, name):
+        job = self.job_info(name)
+        job_params = next(
+            p for p in job['property'] if
+            'hudson.model.ParametersDefinitionProperty' == p['_class'])
+        job_params = job_params['parameterDefinitions']
+        return job_params
+
+    def make_defults_params(self, name):
+        job_params = self.job_params(name)
+        def_params = dict(
+            [(j['name'], j['defaultParameterValue']['value'])
+             for j in job_params])
+        return def_params
+
+    def run_build(self, name, params=None):
+        params = params or self.make_defults_params(name)
+        self.__client.build_job(name, params)
+        time.sleep(10)  # wait while jobs started:
+        build_id = self.job_info(name)['lastBuild']['number']
+        return name, build_id
+
+    def wait_end_of_build(self, name, build_id, timeout=600):
+
+        def building():
+            return not self.build_info(name, build_id)['building']
+
+        helpers.wait(
+            building,
+            timeout=timeout,
+            timeout_msg='Timeout waiting, job {0} are not finished "{1}" build'
+                        ' still'.format(name, build_id))
diff --git a/tcp_tests/managers/saltmanager.py b/tcp_tests/managers/saltmanager.py
index 1ff5324..06e7d0b 100644
--- a/tcp_tests/managers/saltmanager.py
+++ b/tcp_tests/managers/saltmanager.py
@@ -38,14 +38,15 @@
         'runStates': 'run_states',
     }
 
-    def __init__(self, config, underlay, host=None, port='6969'):
+    def __init__(self, config, underlay, host=None, port='6969',
+                 username=None, password=None):
         self.__config = config
         self.__underlay = underlay
         self.__port = port
         self.__host = host
         self.__api = None
-        self.__user = settings.SALT_USER
-        self.__password = settings.SALT_PASSWORD
+        self.__user = username or settings.SALT_USER
+        self.__password = password or settings.SALT_PASSWORD
         self._salt = self
 
         super(SaltManager, self).__init__(config=config, underlay=underlay)
@@ -60,6 +61,10 @@
         self.execute_commands(commands=commands,
                               label="Install and configure salt")
 
+    def change_creds(self, username, password):
+        self.__user = username
+        self.__password = password
+
     @property
     def port(self):
         return self.__port
diff --git a/tcp_tests/managers/underlay_ssh_manager.py b/tcp_tests/managers/underlay_ssh_manager.py
index 7d3da96..5194239 100644
--- a/tcp_tests/managers/underlay_ssh_manager.py
+++ b/tcp_tests/managers/underlay_ssh_manager.py
@@ -247,13 +247,16 @@
         """
         ssh_data = self.__ssh_data(node_name=node_name, host=host,
                                    address_pool=address_pool)
+        ssh_auth = ssh_client.SSHAuth(
+            username=ssh_data['login'],
+            password=ssh_data['password'],
+            keys=[rsakey.RSAKey(file_obj=StringIO.StringIO(key))
+                  for key in ssh_data['keys']])
+
         return ssh_client.SSHClient(
             host=ssh_data['host'],
             port=ssh_data['port'] or 22,
-            username=ssh_data['login'],
-            password=ssh_data['password'],
-            private_keys=[rsakey.RSAKey(file_obj=StringIO.StringIO(key))
-                          for key in ssh_data['keys']])
+            auth=ssh_auth)
 
     def local(self):
         """Get Subprocess instance for local operations like:
