diff --git a/sensors/cp_transport.py b/sensors/cp_transport.py
index 1b951f2..2e00e80 100644
--- a/sensors/cp_transport.py
+++ b/sensors/cp_transport.py
@@ -5,7 +5,15 @@
 import urlparse
 
 from cp_protocol import Packet
-from logger import define_logger
+
+try:
+    from disk_perf_test_tool.logger import define_logger
+    logger = define_logger(__name__)
+except ImportError:
+    class Logger(object):
+        def debug(self, *dt):
+            pass
+    logger = Logger()
 
 
 class SenderException(Exception):
@@ -62,14 +70,12 @@
         self.all_data = {}
         self.send_packer = None
 
-
     def bind(self):
         """ Prepare for listening """
         self.sock.bind(self.bindto)
         self.sock.settimeout(0.5)
         self.binded = True
 
-
     def send(self, data):
         """ Send data to udp socket"""
         if self.sock.sendto(data, self.sendto) != len(data):
@@ -77,7 +83,6 @@
             logger.error(mes)
             raise SenderException("Cannot send data")
 
-
     def send_by_protocol(self, data):
         """ Send data by Packet protocol
             data = dict"""
@@ -87,7 +92,6 @@
         for part in parts:
             self.send(part)
 
-
     def recv(self):
         """ Receive data from udp socket"""
         # check for binding
@@ -100,7 +104,6 @@
         except socket.timeout:
             raise Timeout()
 
-
     def recv_by_protocol(self):
         """ Receive data from udp socket by Packet protocol"""
         data, remote_ip = self.recv()
@@ -110,7 +113,6 @@
 
         return self.all_data[remote_ip].new_packet(data)
 
-
     def recv_with_answer(self, stop_event=None):
         """ Receive data from udp socket and send 'ok' back
             Command port = local port + 1
@@ -132,7 +134,6 @@
                     # return None if we are interrupted
                     return None
 
-
     def verified_send(self, send_host, message, max_repeat=20):
         """ Send and verify it by answer not more then max_repeat
             Send port = local port + 1
@@ -148,12 +149,9 @@
                 if remote_ip == send_host and data == "ok":
                     return True
                 else:
-                    logger.warning("No answer from %s, try %i", send_host, repeat)
+                    logger.warning("No answer from %s, try %i",
+                                   send_host, repeat)
             except Timeout:
                 logger.warning("No answer from %s, try %i", send_host, repeat)
 
         return False
-
-
-
-logger = define_logger(__name__)
