diff --git a/libtaskotron/executor.py b/libtaskotron/executor.py
--- a/libtaskotron/executor.py
+++ b/libtaskotron/executor.py
@@ -29,6 +29,8 @@
     '''This class serves the purpose of actual task execution. It is instantiated by
     :class:`.Overlord`, :class:`.PersistentMinion` or :class:`.DisposableMinion`.
 
+    :cvar str default_namespace: namespace to be used when the formula doesn't contain a namespace
+                                 definition
     :ivar dict formula: parsed task formula
     :ivar dict arg_data: processed cli arguments with some extra runtime variables
     :ivar str workdir: path to working directory; a temporary one is created during execution if
@@ -39,6 +41,8 @@
                         directive was not used
     '''
 
+    default_namespace = 'scratch'
+
     def __init__(self, formula, arg_data, workdir=None):
         self.formula = formula
         self.arg_data = arg_data
@@ -81,7 +85,7 @@
         log.debug("Current workdir: %s", self.workdir)
         self.arg_data['workdir'] = self.workdir
         self.arg_data['checkname'] = self.formula['name']
-        self.arg_data['namespace'] = self.formula.get('namespace', 'scratch')
+        self.arg_data['namespace'] = self.formula.get('namespace') or self.default_namespace
 
         # override variable values
         for var, val in self.arg_data['override'].items():
diff --git a/libtaskotron/overlord.py b/libtaskotron/overlord.py
--- a/libtaskotron/overlord.py
+++ b/libtaskotron/overlord.py
@@ -33,6 +33,10 @@
             raise exc.TaskotronYamlError('Task formula file should not be empty: %s' %
                                          arg_data['task'])
 
+        log.debug('Found task: %s.%s',
+                  self.formula.get('namespace') or executor.Executor.default_namespace,
+                  self.formula['name'])
+
     def _get_runner(self):
         """Decide the run mode and get appropriate runner (Executor or Minion).
 
diff --git a/testing/test_executor.py b/testing/test_executor.py
--- a/testing/test_executor.py
+++ b/testing/test_executor.py
@@ -363,7 +363,7 @@
 
 
 @pytest.mark.usefixtures('setup')
-class TestExecutorCheckOverride():
+class TestExecutorRun():
 
     @pytest.fixture
     def setup(self):
@@ -373,28 +373,55 @@
                           'uuid': '20150220_134110_955656',
                           'ssh': None,
                           'local': False,
-                          'override': ["workdir='/some/dir/'"],
-                          'task': 'task.yaml'}
+                          'task': 'task.yaml',
+                          'override': []}
+        self.ref_argdata = main.process_args(self.ref_input)
+        self.ref_formula = {'name': 'rpmlint',
+                            'namespace': 'dist',
+                            'desc': 'test task',
+                            'maintainer': 'Not Sure',
+                            'actions': []}
 
     def test_override_existing(self):
-        ref_params = main.process_args(self.ref_input)
+        self.ref_input['override'] = ["workdir='/some/dir/'"]
+        self.ref_argdata = main.process_args(self.ref_input)
 
-        test_executor = executor.Executor(Dingus(), ref_params)
+        test_executor = executor.Executor(self.ref_formula, self.ref_argdata)
         test_executor._do_actions = lambda: None
         test_executor._run()
 
         assert test_executor.arg_data['workdir'] == "/some/dir/"
 
     def test_override_nonexisting(self):
         self.ref_input['override'] = ["friendship='is magic'"]
-        ref_params = main.process_args(self.ref_input)
+        self.ref_argdata = main.process_args(self.ref_input)
 
-        test_executor = executor.Executor(Dingus(), ref_params)
+        test_executor = executor.Executor(self.ref_formula, self.ref_argdata)
         test_executor._do_actions = lambda: None
         test_executor._run()
 
         assert test_executor.arg_data['friendship'] == "is magic"
 
+    def test_no_namespace(self):
+        '''default namespace should be used for missing namespace'''
+        self.ref_formula.pop('namespace', None)
+
+        test_executor = executor.Executor(self.ref_formula, self.ref_argdata)
+        test_executor._do_actions = lambda: None
+        test_executor._run()
+
+        assert test_executor.arg_data['namespace'] == executor.Executor.default_namespace
+
+    def test_empty_namespace(self):
+        '''default namespace should be used for empty namespace'''
+        self.ref_formula['namespace'] = None
+
+        test_executor = executor.Executor(self.ref_formula, self.ref_argdata)
+        test_executor._do_actions = lambda: None
+        test_executor._run()
+
+        assert test_executor.arg_data['namespace'] == executor.Executor.default_namespace
+
 
 @pytest.mark.usefixtures('setup')
 class TestExecutorPrepareTask():

