diff --git a/libtaskotron/directives/mash_directive.py b/libtaskotron/directives/mash_directive.py
--- a/libtaskotron/directives/mash_directive.py
+++ b/libtaskotron/directives/mash_directive.py
@@ -5,6 +5,7 @@
 
 from __future__ import absolute_import
 import subprocess as sub
+import os
 import mash
 import mash.config
 import StringIO
@@ -17,10 +18,11 @@
 directive_class = 'MashDirective'
 
 class MashDirective(BaseDirective):
-    """This will create a YUM repository in ``rpmdir`` from all RPM packages
-    inside the same directory. It will call ``mash`` tool to perform this task.
+    """This will create a YUM repository in ``outdir`` from from all RPM
+    packages in ``rpmdir``. If ``outdir`` is not specified, repo is created
+    in ``rpmdir``. It will call ``mash`` tool to perform this task.
 
-    The directive returns None.
+    The directive returns actual path where repo was created.
 
     For the mash directive, we're expecting a yaml declaration of the form:
 
@@ -30,22 +32,24 @@
       arch=["i386", "x86_64", "armhfp", "noarch"]
     """
 
-    def do_mash(self, rpmdir, dodelta, arch):
+    def do_mash(self, rpmdir, dodelta, arch, outdir=None):
         """Set up a mash object with an ad-hoc config
 
         :param str rpmdir: directory containing rpms to mash
         :param bool dodelta: create drpms during mash
         :param str arch: arch of the rpms
-        :returns: return code of doMultilib, 0 if it went fine, 1 othwerise
+        :param str outdir: output directory where repo is created,
+                           if not specified or None, rpmdir is used
+        :rtype str
+        :returns: path to directory where repo was created
         """
 
         # copied over from the old depcheck
         distname = 'depcheck'
-
         mash_conf_items = ["[%s]" % distname,
                            "output_dir = ",
                            "output_subdir = ",
-                           "rpm_path = %s" % rpmdir,
+                           "rpm_path = %s" % (rpmdir if not outdir else outdir),
                            "strict_keys = False",
                            "multilib = True",
                            "multilib_method = devel",
@@ -72,18 +76,24 @@
         themash.logger.handlers = [themash.logger.handlers[-1]]
 
         log.info('running createrepo on %s', rpmdir)
-        p = sub.Popen(['createrepo', rpmdir], stdout=sub.PIPE, stderr=sub.PIPE)
+        if outdir:
+            p = sub.Popen(['createrepo', '-o', outdir, rpmdir], stdout=sub.PIPE,
+                          stderr=sub.PIPE)
+            for rpm in os.listdir(rpmdir):
+                os.symlink(os.path.join(rpmdir, rpm), os.path.join(outdir, rpm))
+        else:
+            p = sub.Popen(['createrepo', rpmdir], stdout=sub.PIPE, stderr=sub.PIPE)
 
         output, errors = p.communicate()
 
         if p.returncode:
             raise TaskotronDirectiveError(errors)
 
         log.info('running mash multilib on %s', rpmdir)
-        rc = themash.doMultilib()
+        themash.doMultilib()
         conf.distros.pop()
 
-        return rc
+        return rpmdir if not outdir else outdir
 
     def process(self, input_data, env_data):
         if 'rpmdir' not in input_data or 'arch' not in input_data:
@@ -98,6 +108,7 @@
             dodelta = input_data['dodelta']
 
         rpmdir = input_data['rpmdir']
+        outdir = input_data.get('outdir', None)
         arch = input_data['arch']
 
-        self.do_mash(rpmdir, dodelta, arch)
+        return self.do_mash(rpmdir, dodelta, arch, outdir)
diff --git a/testing/test_mash_directive.py b/testing/test_mash_directive.py
--- a/testing/test_mash_directive.py
+++ b/testing/test_mash_directive.py
@@ -73,3 +73,27 @@
         assert self.rpms[0] in before and self.rpms[0] in after and \
                self.rpms[1] in before and self.rpms[1] not in after
 
+    def test_repodata_in_rpmdir(self):
+        input_data = {
+            'rpmdir': self.rpmdir,
+            'arch': ['x86_64']
+        }
+        directive = mash_directive.MashDirective()
+        directive.process(input_data, {})
+        after = os.listdir(self.rpmdir)
+
+        assert 'repodata' in after
+
+    def test_repodata_in_outdir(self):
+        outdir = mkdtemp()
+        input_data = {
+            'rpmdir': self.rpmdir,
+            'outdir': outdir,
+            'arch': ['x86_64']
+        }
+        directive = mash_directive.MashDirective()
+        directive.process(input_data, {})
+        after = os.listdir(self.rpmdir)
+
+        assert 'repodata' not in after and 'repodata' in os.listdir(outdir)
+

