diff --git a/wally/config.py b/wally/config.py
index 332dc5e..c5d1db0 100644
--- a/wally/config.py
+++ b/wally/config.py
@@ -1,6 +1,5 @@
 import os
 import uuid
-import logging
 import functools
 
 import yaml
@@ -11,19 +10,26 @@
     def pet_generate(x, y):
         return str(uuid.uuid4())
 
-import pretty_yaml
+from . import pretty_yaml
 
 
-class NoData(object):
+class NoData:
     @classmethod
     def get(cls, name, x):
         return cls
 
 
-class Config(object):
+class Config:
     def __init__(self, val=None):
         if val is not None:
             self.update(val)
+        self.results_dir = None
+        self.run_uuid = None
+        self.settings = {}
+        self.run_params_file = None
+        self.default_test_local_folder = None
+        self.hwinfo_directory = None
+        self.hwreport_fname = None
 
     def get(self, name, defval=None):
         obj = self.__dict__
@@ -65,7 +71,6 @@
     file_name = os.path.abspath(file_name)
 
     defaults = dict(
-        sensors_remote_path='/tmp/sensors',
         testnode_log_root='/tmp/wally',
         settings={}
     )
@@ -85,7 +90,6 @@
     cfg.update(raw_cfg)
 
     results_storage = cfg.settings.get('results_storage', '/tmp')
-    print results_storage
     results_storage = os.path.abspath(results_storage)
 
     existing = file_name.startswith(results_storage)
@@ -135,84 +139,3 @@
 
     return dict(run_uuid=dt['run_uuid'],
                 comment=dt.get('comment'))
-
-
-def color_me(color):
-    RESET_SEQ = "\033[0m"
-    COLOR_SEQ = "\033[1;%dm"
-
-    color_seq = COLOR_SEQ % (30 + color)
-
-    def closure(msg):
-        return color_seq + msg + RESET_SEQ
-    return closure
-
-
-class ColoredFormatter(logging.Formatter):
-    BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE = range(8)
-
-    colors = {
-        'WARNING': color_me(YELLOW),
-        'DEBUG': color_me(BLUE),
-        'CRITICAL': color_me(YELLOW),
-        'ERROR': color_me(RED)
-    }
-
-    def __init__(self, msg, use_color=True, datefmt=None):
-        logging.Formatter.__init__(self, msg, datefmt=datefmt)
-        self.use_color = use_color
-
-    def format(self, record):
-        orig = record.__dict__
-        record.__dict__ = record.__dict__.copy()
-        levelname = record.levelname
-
-        prn_name = levelname + ' ' * (8 - len(levelname))
-        if levelname in self.colors:
-            record.levelname = self.colors[levelname](prn_name)
-        else:
-            record.levelname = prn_name
-
-        # super doesn't work here in 2.6 O_o
-        res = logging.Formatter.format(self, record)
-
-        # res = super(ColoredFormatter, self).format(record)
-
-        # restore record, as it will be used by other formatters
-        record.__dict__ = orig
-        return res
-
-
-def setup_loggers(def_level=logging.DEBUG, log_fname=None):
-    logger = logging.getLogger('wally')
-    logger.setLevel(logging.DEBUG)
-    sh = logging.StreamHandler()
-    sh.setLevel(def_level)
-
-    log_format = '%(asctime)s - %(levelname)s - %(name)-15s - %(message)s'
-    colored_formatter = ColoredFormatter(log_format, datefmt="%H:%M:%S")
-
-    sh.setFormatter(colored_formatter)
-    logger.addHandler(sh)
-
-    logger_api = logging.getLogger("wally.fuel_api")
-
-    if log_fname is not None:
-        fh = logging.FileHandler(log_fname)
-        log_format = '%(asctime)s - %(levelname)8s - %(name)-15s - %(message)s'
-        formatter = logging.Formatter(log_format, datefmt="%H:%M:%S")
-        fh.setFormatter(formatter)
-        fh.setLevel(logging.DEBUG)
-        logger.addHandler(fh)
-        logger_api.addHandler(fh)
-    else:
-        fh = None
-
-    logger_api.addHandler(sh)
-    logger_api.setLevel(logging.WARNING)
-
-    logger = logging.getLogger('paramiko')
-    logger.setLevel(logging.WARNING)
-    # logger.addHandler(sh)
-    if fh is not None:
-        logger.addHandler(fh)
