diff --git a/libtaskotron/directives/yumrepoinfo_directive.py b/libtaskotron/directives/yumrepoinfo_directive.py
--- a/libtaskotron/directives/yumrepoinfo_directive.py
+++ b/libtaskotron/directives/yumrepoinfo_directive.py
@@ -55,7 +55,20 @@
             raise TaskotronDirectiveError("The yumrepoinfo directive requires "\
                     "koji_tag and arch arguments.")
 
-        arch = input_data['arch']
+
+        arches = input_data['arch']
+
+        processed_arches = [arch for arch in arches if arch not in ['noarch', 'all', 'src']]
+        if len(processed_arches) == 0:
+            raise TaskotronDirectiveError("No valid yumrepo arches supplied to "
+                    "yumrepoinfo directive. Recieved %r" % arches)
+
+        if len(processed_arches) > 1:
+          raise TaskotronDirectiveError("Yumrepoinfo requires a single arch "
+                    "but multiple arches were submitted: %r" % arches)
+
+        arch = processed_arches[0]
+
         koji_tag = input_data['koji_tag']
 
         output = {}
diff --git a/libtaskotron/koji_utils.py b/libtaskotron/koji_utils.py
--- a/libtaskotron/koji_utils.py
+++ b/libtaskotron/koji_utils.py
@@ -5,6 +5,8 @@
 ''' Utility methods related to Koji '''
 
 from __future__ import absolute_import
+import os
+
 import collections
 import koji
 import hawkey
@@ -78,6 +80,34 @@
         :rtype: list of str
         :raise TaskotronRemoteError: if downloading failed
         '''
+
+        # Create the rpm_dir if if does not exist
+        #  as fileutils.download requires existing directory
+        # If this is not present, then the first rpm to be downloaded
+        #  will fail to download, because of how file_utils.download()
+        #  is currently written. On line #79, the `dest` is not a dir
+        #  (because it is not yet created), so it is created on line #83
+        #  but as an effect, `dest` is still containing just the dirname
+        #  instead of dirname+rpmname (because line #80 was not executed
+        #  so the lines #89-94 end up going through the else branch
+        #  thus not downloading the first file.
+        # All subsequent downloads are OK, since the rpm_dir (aka dest)
+        #  already exists.
+        # YAY for two hours of debugging!
+        # FIXME: this should be solved better, somehow...
+        if os.path.exists(rpm_dir):
+            if not os.path.isdir(rpm_dir):
+                raise exc.TaskotronRemoteError(
+                        "Can't create directory: %r It is an already "
+                        "existing file.", rpm_dir)
+        else:
+            try:
+                file_utils.makedirs(rpm_dir)
+            except OSError, e:
+                log.exception("Can't create directory: %s", rpm_dir)
+                raise TaskotronRemoteError(e)
+
+
         rpm_urls = self.nvr_to_urls(nvr,
                                     arches=arches,
                                     debuginfo=debuginfo,
diff --git a/testing/test_yumrepoinfo_directive.py b/testing/test_yumrepoinfo_directive.py
--- a/testing/test_yumrepoinfo_directive.py
+++ b/testing/test_yumrepoinfo_directive.py
@@ -48,13 +48,13 @@
     def setup_class(cls):
         '''One-time class initialization'''
         # create YumRepoInfo initialized with TEST_CONF
-        cls.ref_arch = 'x86_64'
+        cls.ref_arch = ['x86_64']
         cls.repoinfo = yumrepoinfo.YumRepoInfo(filelist=[], arch=cls.ref_arch)
         cls.repoinfo.parser.readfp(StringIO.StringIO(TEST_CONF))
 
     def test_missing_kojitag(self):
         directive = yumrepoinfo_directive.YumrepoinfoDirective(self.repoinfo)
-        ref_input = {"arch":"x86_64"}
+        ref_input = {"arch": ["x86_64"]}
 
         with pytest.raises(TaskotronDirectiveError):
             directive.process(ref_input, None)
@@ -68,15 +68,15 @@
 
     def test_pending(self):
         directive = yumrepoinfo_directive.YumrepoinfoDirective(self.repoinfo)
-        ref_input = {"koji_tag": "f20-pending", "arch": "x86_64"}
+        ref_input = {"koji_tag": "f20-pending", "arch": ["x86_64"]}
 
         output = directive.process(ref_input, None)
 
         assert output == {"f20": "http://download.fedoraproject.org/pub/fedora/linux/releases/20/Everything/x86_64/os"}
 
     def test_rawhide(self):
         directive = yumrepoinfo_directive.YumrepoinfoDirective(self.repoinfo)
-        ref_input = {"koji_tag": "rawhide", "arch": "x86_64"}
+        ref_input = {"koji_tag": "rawhide", "arch": ["x86_64"]}
 
         output = directive.process(ref_input, None)
 
@@ -92,7 +92,7 @@
     def test_repo_path(self):
 
         directive = yumrepoinfo_directive.YumrepoinfoDirective(self.repoinfo)
-        ref_input = {"koji_tag": "f20-updates", "arch": "x86_64"}
+        ref_input = {"koji_tag": "f20-updates", "arch": ["x86_64"]}
 
         output = directive.process(ref_input, None)
 
@@ -112,7 +112,7 @@
         # don't set the repoinfo object, we've stubbed out the code that would
         # hit the filesystem, so it's not a risk here
         directive = yumrepoinfo_directive.YumrepoinfoDirective()
-        ref_input = {"koji_tag": "f20-updates", "arch": ref_arch}
+        ref_input = {"koji_tag": "f20-updates", "arch": [ref_arch]}
 
         directive.process(ref_input, None)
 

