diff --git a/libtaskotron/exceptions.py b/libtaskotron/exceptions.py
--- a/libtaskotron/exceptions.py
+++ b/libtaskotron/exceptions.py
@@ -43,7 +43,12 @@
 
 class TaskotronImportError(TaskotronError):
     '''All issues with Extensions'''
-    pass
+
+    def __init__(self, e):
+        msg = str(e.message)
+        if 'libtaskotron' in msg:
+            msg += "\nHint: Make sure that all required sub-packages are installed."
+        super(TaskotronError, self).__init__(msg)
 
 
 class TaskotronImageError(TaskotronError):
diff --git a/libtaskotron/executor.py b/libtaskotron/executor.py
--- a/libtaskotron/executor.py
+++ b/libtaskotron/executor.py
@@ -21,10 +21,9 @@
 
 try:
     from libtaskotron.ext.fedora import rpm_utils
-except ImportError:
-    raise exc.TaskotronImportError("Executor requires libtaskotron.ext.fedora.rpm_utils but "
-                                   "it could not be imported. Make sure that "
-                                   "libtaskotron-fedora is installed")
+except ImportError, e:
+    raise exc.TaskotronImportError(e)
+
 
 class Executor(object):
     '''This class serves the purpose of actual task execution. It is instantiated by
@@ -204,12 +203,7 @@
         try:
             loaded_directive = imp.load_source(real_name, directive_file)
         except ImportError, e:
-            if e.message.find('libtaskotron') >= 0:
-                log.error("Error while loading directive {}: make sure that all required "
-                          "sub-packages are installed.".format(directive_name))
-                raise exc.TaskotronImportError(e)
-            else:
-                raise e
+            raise exc.TaskotronImportError(e)
 
         self.directives[directive_name] = loaded_directive
 
diff --git a/libtaskotron/minion.py b/libtaskotron/minion.py
--- a/libtaskotron/minion.py
+++ b/libtaskotron/minion.py
@@ -16,11 +16,8 @@
 
 try:
     from libtaskotron.ext.disposable import vm
-except ImportError:
-    raise exc.TaskotronImportError("Minion requires libtaskotron.ext.disposable.vm but "
-                                   "it could not be imported. Make sure that "
-                                   "libtaskotron-disposable is installed")
-
+except ImportError, e:
+    raise exc.TaskotronImportError(e)
 
 
 class BaseMinion(object):
diff --git a/testing/functest_executor.py b/testing/functest_executor.py
--- a/testing/functest_executor.py
+++ b/testing/functest_executor.py
@@ -41,26 +41,28 @@
 
     def test_executor_load_directive_our_importerror(self, tmpdir, monkeypatch):
         """ The idea here is to test the logic that looks for an ImportError
-        during directive loading and only transforms the exception if it's coming
-        from libtaskotron
+        during directive loading, transforms the exception and includes a hint
+        to install sub-packages if it's coming from libtaskotron
         """
 
         stub_imp = Mock(side_effect=(ImportError("No module libtaskotron.stub")))
         monkeypatch.setattr(imp, 'load_source', stub_imp)
 
         test_executor = executor.Executor(self.ref_taskdata, self.ref_inputdata, tmpdir)
 
-        with pytest.raises(exc.TaskotronImportError):
+        with pytest.raises(exc.TaskotronImportError) as e:
             test_executor._load_directive(self.ref_directivename, self.ref_dir)
+        assert 'Hint' in e.value.message
 
     def test_executor_load_directive_notour_importerror(self, tmpdir, monkeypatch):
-        """ The opposite case as out_importerror - make sure that the ImportError
-        is not changed into a Taskotron exception if it's not from libtaskotron
+        """ The similar case as out_importerror just check that the exception message
+        does not include a hint
         """
         stub_imp = Mock(side_effect=(ImportError("No module unicorn.candy")))
         monkeypatch.setattr(imp, 'load_source', stub_imp)
 
         test_executor = executor.Executor(self.ref_taskdata, self.ref_inputdata, tmpdir)
 
-        with pytest.raises(ImportError):
+        with pytest.raises(exc.TaskotronImportError) as e:
             test_executor._load_directive(self.ref_directivename, self.ref_dir)
+        assert 'Hint' not in e.value.message

