diff --git a/homeassistant/__init__.py b/homeassistant/__init__.py
index 874d868d07e5a91fd14b387b0415762f55c218bc..f111e4c050fe56adf82ea90079a7d72c353263e5 100644
--- a/homeassistant/__init__.py
+++ b/homeassistant/__init__.py
@@ -50,6 +50,8 @@ POOL_NUM_THREAD = 4
 # Pattern for validating entity IDs (format: <domain>.<entity>)
 ENTITY_ID_PATTERN = re.compile(r"^(?P<domain>\w+)\.(?P<entity>\w+)$")
 
+_LOGGER = logging.getLogger(__name__)
+
 
 class HomeAssistant(object):
     """ Core class to route all communication to right components. """
@@ -256,7 +258,6 @@ class JobPriority(util.OrderedEnum):
 
 def create_worker_pool(thread_count=POOL_NUM_THREAD):
     """ Creates a worker pool to be used. """
-    logger = logging.getLogger(__name__)
 
     def job_handler(job):
         """ Called whenever a job is available to do. """
@@ -266,19 +267,18 @@ def create_worker_pool(thread_count=POOL_NUM_THREAD):
         except Exception:  # pylint: disable=broad-except
             # Catch any exception our service/event_listener might throw
             # We do not want to crash our ThreadPool
-            logger.exception("BusHandler:Exception doing job")
+            _LOGGER.exception("BusHandler:Exception doing job")
 
     def busy_callback(current_jobs, pending_jobs_count):
         """ Callback to be called when the pool queue gets too big. """
-        log_error = logger.error
 
-        log_error(
-            "WorkerPool:All {} threads are busy and {} jobs pending".format(
-                thread_count, pending_jobs_count))
+        _LOGGER.error(
+            "WorkerPool:All %d threads are busy and %d jobs pending",
+            thread_count, pending_jobs_count)
 
         for start, job in current_jobs:
-            log_error("WorkerPool:Current job from {}: {}".format(
-                util.datetime_to_str(start), job))
+            _LOGGER.error("WorkerPool:Current job from %s: %s",
+                          util.datetime_to_str(start), job)
 
     return util.ThreadPool(thread_count, job_handler, busy_callback)
 
@@ -323,7 +323,6 @@ class EventBus(object):
 
     def __init__(self, pool=None):
         self._listeners = {}
-        self._logger = logging.getLogger(__name__)
         self._lock = threading.Lock()
         self._pool = pool or create_worker_pool()
 
@@ -347,7 +346,7 @@ class EventBus(object):
 
             event = Event(event_type, event_data, origin)
 
-            self._logger.info("Bus:Handling {}".format(event))
+            _LOGGER.info("Bus:Handling %s", event)
 
             if not listeners:
                 return
@@ -602,7 +601,7 @@ class Timer(threading.Thread):
     def run(self):
         """ Start the timer. """
 
-        logging.getLogger(__name__).info("Timer:starting")
+        _LOGGER.info("Timer:starting")
 
         last_fired_on_second = -1
 
diff --git a/homeassistant/bootstrap.py b/homeassistant/bootstrap.py
index 5ccb6f1fe761605cba5def58d6df75ca2e421051..81eaefdba248bcb0ff689bb393434f29af626864 100644
--- a/homeassistant/bootstrap.py
+++ b/homeassistant/bootstrap.py
@@ -117,8 +117,8 @@ def from_config_dict(config, hass=None):
                                 if dep not in validated]
 
                 logger.error(
-                    "Could not validate all dependencies for {}: {}".format(
-                        domain, ", ".join(missing_deps)))
+                    "Could not validate all dependencies for %s: %s",
+                    domain, ", ".join(missing_deps))
 
             break
 
@@ -139,14 +139,12 @@ def from_config_dict(config, hass=None):
 
             try:
                 if component.setup(hass, config):
-                    logger.info("component {} initialized".format(domain))
+                    logger.info("component %s initialized", domain)
                 else:
-                    logger.error(
-                        "component {} failed to initialize".format(domain))
+                    logger.error("component %s failed to initialize", domain)
 
             except Exception:  # pylint: disable=broad-except
-                logger.exception(
-                    "Error during setup of component {}".format(domain))
+                logger.exception("Error during setup of component %s", domain)
 
     else:
         logger.error(("Home Assistant core failed to initialize. "
@@ -175,6 +173,8 @@ def from_config_file(config_path, hass=None, enable_logging=True):
         err_log_path = hass.get_config_path("home-assistant.log")
         err_path_exists = os.path.isfile(err_log_path)
 
+        # Check if we can write to the error log if it exists or that
+        # we can create files in the containgin directory if not.
         if (err_path_exists and os.access(err_log_path, os.W_OK)) or \
            (not err_path_exists and os.access(hass.config_dir, os.W_OK)):
 
@@ -189,8 +189,7 @@ def from_config_file(config_path, hass=None, enable_logging=True):
 
         else:
             logging.getLogger(__name__).error(
-                "Unable to setup error log {} (access denied)".format(
-                    err_log_path))
+                "Unable to setup error log %s (access denied)", err_log_path)
 
     # Read config
     config = configparser.ConfigParser()
diff --git a/homeassistant/components/__init__.py b/homeassistant/components/__init__.py
index 02387f23118084951fd95d3c52bd714d8f549d8c..663393f9c15e488afac508664796d7af9b240eab 100644
--- a/homeassistant/components/__init__.py
+++ b/homeassistant/components/__init__.py
@@ -48,7 +48,7 @@ SERVICE_MEDIA_PAUSE = "media_pause"
 SERVICE_MEDIA_NEXT_TRACK = "media_next_track"
 SERVICE_MEDIA_PREV_TRACK = "media_prev_track"
 
-__LOGGER = logging.getLogger(__name__)
+_LOGGER = logging.getLogger(__name__)
 
 
 def is_on(hass, entity_id=None):
@@ -72,7 +72,8 @@ def is_on(hass, entity_id=None):
 
         except AttributeError:
             # module is None or method is_on does not exist
-            pass
+            _LOGGER.exception("Failed to call %s.is_on for %s",
+                              module, entity_id)
 
     return False
 
@@ -123,6 +124,9 @@ def setup(hass, config):
 
         # Generic turn on/off method requires entity id
         if not entity_ids:
+            _LOGGER.error(
+                "homeassistant/%s cannot be called without entity_id",
+                service.service)
             return
 
         # Group entity_ids by domain. groupby requires sorted data.
diff --git a/homeassistant/components/browser.py b/homeassistant/components/browser.py
index 556cbd683c9a20d3d2d67ebdd9be51769b96a876..dc3fc568fde095730bb910e368ce59c62f4af44b 100644
--- a/homeassistant/components/browser.py
+++ b/homeassistant/components/browser.py
@@ -21,7 +21,7 @@ def setup(hass, config):
     hass.services.register(DOMAIN, SERVICE_BROWSE_URL,
                            lambda service:
                            webbrowser.open(
-                               service.data.get('url',
-                                                'https://www.google.com')))
+                               service.data.get(
+                                   'url', 'https://www.google.com')))
 
     return True
diff --git a/homeassistant/components/device_sun_light_trigger.py b/homeassistant/components/device_sun_light_trigger.py
index 7a2ff2f5bdd755837b6eab2b6052fea8a4edd087..6ad2166c79269fbe03383501d97865fabe2bdde4 100644
--- a/homeassistant/components/device_sun_light_trigger.py
+++ b/homeassistant/components/device_sun_light_trigger.py
@@ -118,11 +118,9 @@ def setup(hass, config):
             if light_needed:
 
                 logger.info(
-                    "Home coming event for {}. Turning lights on".
-                    format(entity))
+                    "Home coming event for %s. Turning lights on", entity)
 
-                light.turn_on(hass, light_ids,
-                              profile=light_profile)
+                light.turn_on(hass, light_ids, profile=light_profile)
 
             # Are we in the time span were we would turn on the lights
             # if someone would be home?
diff --git a/homeassistant/components/device_tracker.py b/homeassistant/components/device_tracker.py
index 7cd9e7729d4c4c213e745ca642be48b0a7b63ab7..52e9b64d076f203fcf4155c6a284641ecbd1497a 100644
--- a/homeassistant/components/device_tracker.py
+++ b/homeassistant/components/device_tracker.py
@@ -43,6 +43,8 @@ KNOWN_DEVICES_FILE = "known_devices.csv"
 
 CONF_HTTP_ID = "http_id"
 
+_LOGGER = logging.getLogger(__name__)
+
 
 def is_on(hass, entity_id=None):
     """ Returns if any or specified device is home. """
@@ -54,17 +56,15 @@ def is_on(hass, entity_id=None):
 def setup(hass, config):
     """ Sets up the device tracker. """
 
-    logger = logging.getLogger(__name__)
-
     # We have flexible requirements for device tracker so
     # we cannot use util.validate_config
 
     conf = config[DOMAIN]
 
     if ha.CONF_TYPE not in conf:
-        logger.error(
-            'Missing required configuration item in {}: {}'.format(
-                DOMAIN, ha.CONF_TYPE))
+        _LOGGER.error(
+            'Missing required configuration item in %s: %s',
+            DOMAIN, ha.CONF_TYPE)
 
         return False
 
@@ -84,18 +84,18 @@ def setup(hass, config):
         scanner = LuciDeviceScanner
 
     else:
-        logger.error('Found unknown router type {}'.format(router_type))
+        _LOGGER.error('Found unknown router type %s', router_type)
 
         return False
 
-    if not util.validate_config(config, {DOMAIN: fields}, logger):
+    if not util.validate_config(config, {DOMAIN: fields}, _LOGGER):
         return False
 
     device_scanner = scanner(conf)
 
     if not device_scanner.success_init:
-        logger.error(
-            "Failed to initialize device scanner for {}".format(router_type))
+        _LOGGER.error("Failed to initialize device scanner for %s",
+                      router_type)
 
         return False
 
@@ -115,8 +115,6 @@ class DeviceTracker(object):
 
         self.error_scanning = TIME_SPAN_FOR_ERROR_IN_SCANNING
 
-        self.logger = logging.getLogger(__name__)
-
         self.lock = threading.Lock()
 
         self.path_known_devices_file = hass.get_config_path(KNOWN_DEVICES_FILE)
@@ -205,8 +203,8 @@ class DeviceTracker(object):
                     is_new_file = not os.path.isfile(known_dev_path)
 
                     with open(known_dev_path, 'a') as outp:
-                        self.logger.info((
-                            "DeviceTracker:Found {} new devices,"
+                        _LOGGER.info((
+                            "Found {} new devices,"
                             " updating {}").format(len(unknown_devices),
                                                    known_dev_path))
 
@@ -228,8 +226,8 @@ class DeviceTracker(object):
                                                  'picture': ""}
 
                 except IOError:
-                    self.logger.exception((
-                        "DeviceTracker:Error updating {}"
+                    _LOGGER.exception((
+                        "Error updating {}"
                         "with {} new devices").format(known_dev_path,
                                                       len(unknown_devices)))
 
@@ -292,9 +290,9 @@ class DeviceTracker(object):
                         known_devices[device] = row
 
                     if not known_devices:
-                        self.logger.warning(
-                            "No devices to track. Please update {}.".format(
-                                self.path_known_devices_file))
+                        _LOGGER.warning(
+                            "No devices to track. Please update %s.",
+                            self.path_known_devices_file)
 
                     # Remove entities that are no longer maintained
                     new_entity_ids = set([known_devices[device]['entity_id']
@@ -304,25 +302,22 @@ class DeviceTracker(object):
                     for entity_id in \
                             self.device_entity_ids - new_entity_ids:
 
-                        self.logger.info(
-                            "DeviceTracker:Removing entity {}".format(
-                                entity_id))
+                        _LOGGER.info("Removing entity %s", entity_id)
                         self.states.remove(entity_id)
 
                     # File parsed, warnings given if necessary
                     # entities cleaned up, make it available
                     self.known_devices = known_devices
 
-                    self.logger.info(
-                        "DeviceTracker:Loaded devices from {}".format(
-                            self.path_known_devices_file))
+                    _LOGGER.info("Loaded devices from %s",
+                                 self.path_known_devices_file)
 
                 except KeyError:
                     self.invalid_known_devices_file = True
-                    self.logger.warning((
-                        "Invalid known devices file: {}. "
-                        "We won't update it with new found devices."
-                        ).format(self.path_known_devices_file))
+                    _LOGGER.warning(
+                        ("Invalid known devices file: %s. "
+                         "We won't update it with new found devices."),
+                        self.path_known_devices_file)
 
                 finally:
                     self.lock.release()
@@ -349,7 +344,7 @@ class TomatoDeviceScanner(object):
 
         self.parse_api_pattern = re.compile(r"(?P<param>\w*) = (?P<value>.*);")
 
-        self.logger = logging.getLogger(__name__)
+        self.logger = logging.getLogger("{}.{}".format(__name__, "Tomato"))
         self.lock = threading.Lock()
 
         self.date_updated = None
@@ -390,7 +385,7 @@ class TomatoDeviceScanner(object):
         if not self.date_updated or \
            datetime.now() - self.date_updated > MIN_TIME_BETWEEN_SCANS:
 
-            self.logger.info("Tomato:Scanning")
+            self.logger.info("Scanning")
 
             try:
                 response = requests.Session().send(self.req, timeout=3)
@@ -415,7 +410,7 @@ class TomatoDeviceScanner(object):
                 elif response.status_code == 401:
                     # Authentication error
                     self.logger.exception((
-                        "Tomato:Failed to authenticate, "
+                        "Failed to authenticate, "
                         "please check your username and password"))
 
                     return False
@@ -424,7 +419,7 @@ class TomatoDeviceScanner(object):
                 # We get this if we could not connect to the router or
                 # an invalid http_id was supplied
                 self.logger.exception((
-                    "Tomato:Failed to connect to the router"
+                    "Failed to connect to the router"
                     " or invalid http_id supplied"))
 
                 return False
@@ -433,14 +428,14 @@ class TomatoDeviceScanner(object):
                 # We get this if we could not connect to the router or
                 # an invalid http_id was supplied
                 self.logger.exception(
-                    "Tomato:Connection to the router timed out")
+                    "Connection to the router timed out")
 
                 return False
 
             except ValueError:
                 # If json decoder could not parse the response
                 self.logger.exception(
-                    "Tomato:Failed to parse response from router")
+                    "Failed to parse response from router")
 
                 return False
 
@@ -462,15 +457,17 @@ class NetgearDeviceScanner(object):
         host = config['host']
         username, password = config['username'], config['password']
 
-        self.logger = logging.getLogger(__name__)
+        self.logger = logging.getLogger("{}.{}".format(__name__, "Netgear"))
         self.date_updated = None
         self.last_results = []
 
         try:
+            # Pylint does not play nice if not every folders has an __init__.py
+            # pylint: disable=no-name-in-module, import-error
             import homeassistant.external.pynetgear.pynetgear as pynetgear
         except ImportError:
             self.logger.exception(
-                ("Netgear:Failed to import pynetgear. "
+                ("Failed to import pynetgear. "
                  "Did you maybe not run `git submodule init` "
                  "and `git submodule update`?"))
 
@@ -481,7 +478,7 @@ class NetgearDeviceScanner(object):
         self._api = pynetgear.Netgear(host, username, password)
         self.lock = threading.Lock()
 
-        self.logger.info("Netgear:Logging in")
+        self.logger.info("Logging in")
         if self._api.login():
             self.success_init = True
             self._update_info()
@@ -526,7 +523,7 @@ class NetgearDeviceScanner(object):
             if not self.date_updated or \
                datetime.now() - self.date_updated > MIN_TIME_BETWEEN_SCANS:
 
-                self.logger.info("Netgear:Scanning")
+                self.logger.info("Scanning")
 
                 self.last_results = self._api.get_attached_devices()
 
@@ -557,7 +554,7 @@ class LuciDeviceScanner(object):
 
         self.parse_api_pattern = re.compile(r"(?P<param>\w*) = (?P<value>.*);")
 
-        self.logger = logging.getLogger(__name__)
+        self.logger = logging.getLogger("{}.{}".format(__name__, "Luci"))
         self.lock = threading.Lock()
 
         self.date_updated = None
@@ -596,7 +593,7 @@ class LuciDeviceScanner(object):
                 "please check your username and password")
             return
         else:
-            self.logger.error("Invalid response from luci: {}".format(res))
+            self.logger.error("Invalid response from luci: %s", res)
 
     def get_token(self, host, username, password):
         """ Get authentication token for the given host+username+password """
diff --git a/homeassistant/components/downloader.py b/homeassistant/components/downloader.py
index 1f979063a4a451121b0ca216d9666eed91efcc66..362f7d43e0488de1c866cfc40d92492344755046 100644
--- a/homeassistant/components/downloader.py
+++ b/homeassistant/components/downloader.py
@@ -44,15 +44,15 @@ def setup(hass, config):
     if not os.path.isdir(download_path):
 
         logger.error(
-            "Download path {} does not exist. File Downloader not active.".
-            format(download_path))
+            "Download path %s does not exist. File Downloader not active.",
+            download_path)
 
         return False
 
     def download_file(service):
         """ Starts thread to download file specified in the url. """
 
-        if not ATTR_URL in service.data:
+        if ATTR_URL not in service.data:
             logger.error("Service called but 'url' parameter not specified.")
             return
 
@@ -114,18 +114,16 @@ def setup(hass, config):
 
                         final_path = "{}_{}.{}".format(path, tries, ext)
 
-                    logger.info("{} -> {}".format(url, final_path))
+                    logger.info("%s -> %s", url, final_path)
 
                     with open(final_path, 'wb') as fil:
                         for chunk in req.iter_content(1024):
                             fil.write(chunk)
 
-                    logger.info("Downloading of {} done".format(
-                        url))
+                    logger.info("Downloading of %s done", url)
 
             except requests.exceptions.ConnectionError:
-                logger.exception("ConnectionError occured for {}".
-                                 format(url))
+                logger.exception("ConnectionError occured for %s", url)
 
                 # Remove file if we started downloading but failed
                 if final_path and os.path.isfile(final_path):
diff --git a/homeassistant/components/group.py b/homeassistant/components/group.py
index b311f9ee0e957fa6fdbd17b136eaf152325f2dbe..511e5bbc05be7b00dd42c88e08982f9d43e21c71 100644
--- a/homeassistant/components/group.py
+++ b/homeassistant/components/group.py
@@ -106,8 +106,6 @@ def setup_group(hass, name, entity_ids, user_defined=True):
     """ Sets up a group state that is the combined state of
         several states. Supports ON/OFF and DEVICE_HOME/DEVICE_NOT_HOME. """
 
-    logger = logging.getLogger(__name__)
-
     # In case an iterable is passed in
     entity_ids = list(entity_ids)
 
@@ -145,7 +143,7 @@ def setup_group(hass, name, entity_ids, user_defined=True):
         # Check if entity is valid state
         elif state.state != group_off and state.state != group_on:
 
-            errors.append("State of {} is {} (expected: {}, {})".format(
+            errors.append("State of {} is {} (expected: {} or {})".format(
                 entity_id, state.state, group_off, group_on))
 
         # Keep track of the group state to init later on
@@ -156,8 +154,8 @@ def setup_group(hass, name, entity_ids, user_defined=True):
         errors.append('Unable to determine group type for {}'.format(name))
 
     if errors:
-        logger.error("Error setting up group {}: {}".format(
-            name, ", ".join(errors)))
+        logging.getLogger(__name__).error(
+            "Error setting up group %s: %s", name, ", ".join(errors))
 
         return False
 
diff --git a/homeassistant/components/http/__init__.py b/homeassistant/components/http/__init__.py
index f039032a8ea9830180ba9c1892e417f0998fdd26..a730edd8c01c9adb7f7c68e526e6f65d22e28a8f 100644
--- a/homeassistant/components/http/__init__.py
+++ b/homeassistant/components/http/__init__.py
@@ -110,12 +110,14 @@ CONF_SERVER_HOST = "server_host"
 CONF_SERVER_PORT = "server_port"
 CONF_DEVELOPMENT = "development"
 
+_LOGGER = logging.getLogger(__name__)
+
 
 def setup(hass, config):
     """ Sets up the HTTP API and debug interface. """
 
     if not util.validate_config(config, {DOMAIN: [CONF_API_PASSWORD]},
-                                logging.getLogger(__name__)):
+                                _LOGGER):
         return False
 
     api_password = config[DOMAIN]['api_password']
@@ -156,22 +158,17 @@ class HomeAssistantHTTPServer(ThreadingMixIn, HTTPServer):
         self.hass = hass
         self.api_password = api_password
         self.development = development
-        self.logger = logging.getLogger(__name__)
-
-        # To store flash messages between sessions
-        self.flash_message = None
 
         # We will lazy init this one if needed
         self.event_forwarder = None
 
         if development:
-            self.logger.info("running frontend in development mode")
+            _LOGGER.info("running frontend in development mode")
 
     def start(self):
         """ Starts the server. """
-        self.logger.info(
-            "Web interface starting at http://{}:{}".format(
-                *self.server_address))
+        _LOGGER.info(
+            "Starting web interface at http://%s:%d", *self.server_address)
 
         self.serve_forever()
 
@@ -256,8 +253,8 @@ class RequestHandler(SimpleHTTPRequestHandler):
                 try:
                     data.update(json.loads(body_content))
                 except ValueError:
-                    self.server.logger.exception(
-                        "Exception parsing JSON: {}".format(body_content))
+                    _LOGGER.exception("Exception parsing JSON: %s",
+                                      body_content)
 
                     self._message(
                         "Error parsing JSON", HTTP_UNPROCESSABLE_ENTITY)
@@ -598,9 +595,6 @@ class RequestHandler(SimpleHTTPRequestHandler):
         """ Helper method to return a message to the caller. """
         if self.use_json:
             self._write_json({'message': message}, status_code=status_code)
-        elif status_code == HTTP_OK:
-            self.server.flash_message = message
-            self._redirect('/')
         else:
             self.send_error(status_code, message)
 
diff --git a/homeassistant/components/light/__init__.py b/homeassistant/components/light/__init__.py
index a59249ea2ef7caa573e7e85a07f6ed168c7e2fc4..54518f822d8cb4b61683d22906140a61f6172f9e 100644
--- a/homeassistant/components/light/__init__.py
+++ b/homeassistant/components/light/__init__.py
@@ -153,7 +153,7 @@ def setup(hass, config):
         light_init = HueLightControl
 
     else:
-        logger.error("Found unknown light type: {}".format(light_type))
+        logger.error("Unknown light type specified: %s", light_type)
 
         return False
 
@@ -172,7 +172,7 @@ def setup(hass, config):
             # We have not seen this light before, set it up
 
             # Create entity id
-            logger.info("Found new light {}".format(name))
+            logger.info("Found new light %s", name)
 
             entity_id = util.ensure_unique_string(
                 ENTITY_ID_FORMAT.format(util.slugify(name)),
@@ -251,8 +251,7 @@ def setup(hass, config):
                     # ValueError if not 4 values per row
                     # ValueError if convert to float/int failed
                     logger.error(
-                        "Error parsing light profiles from {}".format(
-                            profile_path))
+                        "Error parsing light profiles from %s", profile_path)
 
                     return False
 
@@ -357,15 +356,16 @@ class HueLightControl(object):
     """ Class to interface with the Hue light system. """
 
     def __init__(self, hass, config):
-        logger = logging.getLogger(__name__)
+        logger = logging.getLogger("{}.{}".format(__name__, "HueLightControl"))
 
         host = config.get(ha.CONF_HOST, None)
 
         try:
+            # Pylint does not play nice if not every folders has an __init__.py
+            # pylint: disable=no-name-in-module, import-error
             import homeassistant.external.phue.phue as phue
         except ImportError:
-            logger.exception(
-                "HueLightControl:Error while importing dependency phue.")
+            logger.exception("Error while importing dependency phue.")
 
             self.success_init = False
 
@@ -377,8 +377,8 @@ class HueLightControl(object):
                                            PHUE_CONFIG_FILE))
         except socket.error:  # Error connecting using Phue
             logger.exception((
-                "HueLightControl:Error while connecting to the bridge. "
-                "Is phue registered?"))
+                "Error while connecting to the bridge. "
+                "Did you follow the instructions to set it up?"))
 
             self.success_init = False
 
@@ -389,7 +389,7 @@ class HueLightControl(object):
         self._update_lights()
 
         if len(self._lights) == 0:
-            logger.error("HueLightControl:Could not find any lights. ")
+            logger.error("Could not find any lights. ")
 
             self.success_init = False
         else:
@@ -409,7 +409,7 @@ class HueLightControl(object):
 
     def get_name(self, light_id):
         """ Return name for specified light_id or None if no name known. """
-        if not light_id in self._lights:
+        if light_id not in self._lights:
             self._update_lights()
 
         return self._lights.get(light_id)
diff --git a/homeassistant/components/sun.py b/homeassistant/components/sun.py
index 2ed06d88137375f78cde127484ff5419c6bfb02e..f9f108409287a773d583edd15a4413b558f27ab8 100644
--- a/homeassistant/components/sun.py
+++ b/homeassistant/components/sun.py
@@ -91,9 +91,8 @@ def setup(hass, config):
             new_state = STATE_BELOW_HORIZON
             next_change = next_rising_dt
 
-        logger.info(
-            "{}. Next change: {}".format(new_state,
-                                         next_change.strftime("%H:%M")))
+        logger.info("%s. Next change: %s",
+                    new_state, next_change.strftime("%H:%M"))
 
         state_attributes = {
             STATE_ATTR_NEXT_RISING: util.datetime_to_str(next_rising_dt),
diff --git a/homeassistant/components/wemo.py b/homeassistant/components/wemo.py
index 61dcb459f05b6867dc001366b60645b084705674..66b625402f12a3dfd3c892932bd62ff4849632a6 100644
--- a/homeassistant/components/wemo.py
+++ b/homeassistant/components/wemo.py
@@ -54,6 +54,8 @@ def setup(hass, config):
     logger = logging.getLogger(__name__)
 
     try:
+        # Pylint does not play nice if not every folders has an __init__.py
+        # pylint: disable=no-name-in-module, import-error
         import homeassistant.external.pywemo.pywemo as pywemo
     except ImportError:
         logger.exception((
diff --git a/homeassistant/loader.py b/homeassistant/loader.py
index 2c684bae85ac4363a4a25b07fabd7cff828a8e08..69e72d0158036cfda96fa2de055dfe1a88713596 100644
--- a/homeassistant/loader.py
+++ b/homeassistant/loader.py
@@ -63,7 +63,7 @@ def get_component(comp_name):
                        if path in AVAILABLE_COMPONENTS]
 
     if not potential_paths:
-        _LOGGER.error("Failed to find component {}".format(comp_name))
+        _LOGGER.error("Failed to find component %s", comp_name)
 
         return None
 
@@ -71,15 +71,14 @@ def get_component(comp_name):
         comp = _get_component(path)
 
         if comp is not None:
-            _LOGGER.info("Loaded component {} from {}".format(
-                comp_name, path))
+            _LOGGER.info("Loaded component %s from %s", comp_name, path)
 
             _COMPONENT_CACHE[comp_name] = comp
 
             return comp
 
     # We did find components but were unable to load them
-    _LOGGER.error("Unable to load component {}".format(comp_name))
+    _LOGGER.error("Unable to load component %s", comp_name)
 
     return None
 
@@ -91,8 +90,8 @@ def _get_component(module):
         comp = importlib.import_module(module)
 
     except ImportError:
-        _LOGGER.exception(("Error loading {}. Make sure all "
-                           "dependencies are installed").format(module))
+        _LOGGER.exception(("Error loading %s. Make sure all "
+                           "dependencies are installed"), module)
 
         return None
 
@@ -109,8 +108,8 @@ def _get_component(module):
         errors.append("missing setup method")
 
     if errors:
-        _LOGGER.error("Found invalid component {}: {}".format(
-            module, ", ".join(errors)))
+        _LOGGER.error("Found invalid component %s: %s",
+                      module, ", ".join(errors))
 
         return None
 
diff --git a/homeassistant/remote.py b/homeassistant/remote.py
index 7fc084b2c1845e9b8a77a4d877fd8a1d1f95ac77..acea245ec06b7afe78e67e105b7efb7c19dcbb1d 100644
--- a/homeassistant/remote.py
+++ b/homeassistant/remote.py
@@ -35,6 +35,8 @@ URL_API_EVENT_FORWARD = "/api/event_forwarding"
 METHOD_GET = "get"
 METHOD_POST = "post"
 
+_LOGGER = logging.getLogger(__name__)
+
 
 # pylint: disable=no-init, invalid-name
 class APIStatus(enum.Enum):
@@ -84,12 +86,12 @@ class API(object):
                     method, url, data=data, timeout=5, headers=self._headers)
 
         except requests.exceptions.ConnectionError:
-            logging.getLogger(__name__).exception("Error connecting to server")
+            _LOGGER.exception("Error connecting to server")
             raise ha.HomeAssistantError("Error connecting to server")
 
         except requests.exceptions.Timeout:
             error = "Timeout when talking to {}".format(self.host)
-            logging.getLogger(__name__).exception(error)
+            _LOGGER.exception(error)
             raise ha.HomeAssistantError(error)
 
 
@@ -159,7 +161,6 @@ class EventForwarder(object):
     def __init__(self, hass, restrict_origin=None):
         self.hass = hass
         self.restrict_origin = restrict_origin
-        self.logger = logging.getLogger(__name__)
 
         # We use a tuple (host, port) as key to ensure
         # that we do not forward to the same host twice
@@ -205,7 +206,7 @@ class EventForwarder(object):
                 return
 
             for api in self._targets.values():
-                fire_event(api, event.event_type, event.data, self.logger)
+                fire_event(api, event.event_type, event.data)
 
 
 class StateMachine(ha.StateMachine):
@@ -217,8 +218,6 @@ class StateMachine(ha.StateMachine):
     def __init__(self, bus, api):
         super().__init__(None)
 
-        self.logger = logging.getLogger(__name__)
-
         self._api = api
 
         self.mirror()
@@ -232,7 +231,7 @@ class StateMachine(ha.StateMachine):
     def mirror(self):
         """ Discards current data and mirrors the remote state machine. """
         self._states = {state.entity_id: state for state
-                        in get_states(self._api, self.logger)}
+                        in get_states(self._api)}
 
     def _state_changed_listener(self, event):
         """ Listens for state changed events and applies them. """
@@ -298,7 +297,7 @@ def disconnect_remote_events(from_api, to_api):
         pass
 
 
-def get_event_listeners(api, logger=None):
+def get_event_listeners(api):
     """ List of events that is being listened for. """
     try:
         req = api(METHOD_GET, URL_API_EVENTS)
@@ -307,28 +306,26 @@ def get_event_listeners(api, logger=None):
 
     except (ha.HomeAssistantError, ValueError):
         # ValueError if req.json() can't parse the json
-        if logger:
-            logger.exception("Bus:Got unexpected result")
+        _LOGGER.exception("Unexpected result retrieving event listeners")
 
         return {}
 
 
-def fire_event(api, event_type, data=None, logger=None):
+def fire_event(api, event_type, data=None):
     """ Fire an event at remote API. """
 
     try:
         req = api(METHOD_POST, URL_API_EVENTS_EVENT.format(event_type), data)
 
-        if req.status_code != 200 and logger:
-            logger.error(
-                "Error firing event: {} - {}".format(
-                    req.status_code, req.text))
+        if req.status_code != 200:
+            _LOGGER.error("Error firing event: %d - %d",
+                          req.status_code, req.text)
 
     except ha.HomeAssistantError:
         pass
 
 
-def get_state(api, entity_id, logger=None):
+def get_state(api, entity_id):
     """ Queries given API for state of entity_id. """
 
     try:
@@ -342,13 +339,12 @@ def get_state(api, entity_id, logger=None):
 
     except (ha.HomeAssistantError, ValueError):
         # ValueError if req.json() can't parse the json
-        if logger:
-            logger.exception("Error getting state")
+        _LOGGER.exception("Error fetching state")
 
         return None
 
 
-def get_states(api, logger=None):
+def get_states(api):
     """ Queries given API for all states. """
 
     try:
@@ -360,13 +356,12 @@ def get_states(api, logger=None):
 
     except (ha.HomeAssistantError, ValueError, AttributeError):
         # ValueError if req.json() can't parse the json
-        if logger:
-            logger.exception("Error getting state")
+        _LOGGER.exception("Error fetching states")
 
         return {}
 
 
-def set_state(api, entity_id, new_state, attributes=None, logger=None):
+def set_state(api, entity_id, new_state, attributes=None):
     """ Tells API to update state for entity_id. """
 
     attributes = attributes or {}
@@ -379,24 +374,22 @@ def set_state(api, entity_id, new_state, attributes=None, logger=None):
                   URL_API_STATES_ENTITY.format(entity_id),
                   data)
 
-        if req.status_code != 201 and logger:
-            logger.error(
-                "Error changing state: {} - {}".format(
-                    req.status_code, req.text))
+        if req.status_code != 201:
+            _LOGGER.error("Error changing state: %d - %s",
+                          req.status_code, req.text)
 
     except ha.HomeAssistantError:
-        if logger:
-            logger.exception("Error setting state to server")
+        _LOGGER.exception("Error setting state")
 
 
-def is_state(api, entity_id, state, logger=None):
+def is_state(api, entity_id, state):
     """ Queries API to see if entity_id is specified state. """
-    cur_state = get_state(api, entity_id, logger)
+    cur_state = get_state(api, entity_id)
 
     return cur_state and cur_state.state == state
 
 
-def get_services(api, logger=None):
+def get_services(api):
     """
     Returns a list of dicts. Each dict has a string "domain" and
     a list of strings "services".
@@ -408,24 +401,21 @@ def get_services(api, logger=None):
 
     except (ha.HomeAssistantError, ValueError):
         # ValueError if req.json() can't parse the json
-        if logger:
-            logger.exception("ServiceRegistry:Got unexpected result")
+        _LOGGER.exception("Got unexpected services result")
 
         return {}
 
 
-def call_service(api, domain, service, service_data=None, logger=None):
+def call_service(api, domain, service, service_data=None):
     """ Calls a service at the remote API. """
     try:
         req = api(METHOD_POST,
                   URL_API_SERVICES_SERVICE.format(domain, service),
                   service_data)
 
-        if req.status_code != 200 and logger:
-            logger.error(
-                "Error calling service: {} - {}".format(
-                    req.status_code, req.text))
+        if req.status_code != 200:
+            _LOGGER.error("Error calling service: %d - %s",
+                          req.status_code, req.text)
 
     except ha.HomeAssistantError:
-        if logger:
-            logger.exception("Error setting state to server")
+        _LOGGER.exception("Error calling service")
diff --git a/homeassistant/util.py b/homeassistant/util.py
index 9c8a15e89ed77a89f97e74cd35874d1bdc05fe14..f072e39e43a243b11aac40601c46be93b4b8ef9f 100644
--- a/homeassistant/util.py
+++ b/homeassistant/util.py
@@ -238,7 +238,8 @@ class ThreadPool(object):
         self.work_queue.put(PriorityQueueItem(priority, job))
 
         # check if our queue is getting too big
-        if self.work_queue.qsize() > self.busy_warning_limit:
+        if self.work_queue.qsize() > self.busy_warning_limit \
+           and self.busy_callback is not None:
 
             # Increase limit we will issue next warning
             self.busy_warning_limit *= 2