diff --git a/conf/taskotron.yaml.example b/conf/taskotron.yaml.example
--- a/conf/taskotron.yaml.example
+++ b/conf/taskotron.yaml.example
@@ -118,8 +118,17 @@
 ## The location of images for disposable clients
 #imagesdir: /var/lib/taskotron/images
 
-## Temporary option to specify url of an image to download and use for disposable client
-#imageurl:
+## If set to True, image from imageurl will be used instead of the latest image from imagesdir
+## [default: False]
+#force_imageurl: False
+
+## Url of an image to download and use for disposable client, if force_imageurl was set
+#imageurl: http://download.fedoraproject.org/pub/fedora/linux/releases/23/Cloud/x86_64/Images/Fedora-Cloud-Base-23-20151030.x86_64.qcow2
+
+## Temporary options to define release/flavor/arch for the disposable images discovery
+#disposable_release: 23
+#disposable_flavor: taskotron_cloud
+#disposable_arch: x86_64
 
 ## Additional repos for minion to install packages from
 #minion_repos:
diff --git a/libtaskotron/config_defaults.py b/libtaskotron/config_defaults.py
--- a/libtaskotron/config_defaults.py
+++ b/libtaskotron/config_defaults.py
@@ -79,6 +79,10 @@
     imageurl = 'http://download.fedoraproject.org/pub/fedora/linux/'\
                'releases/23/Cloud/x86_64/Images/Fedora-Cloud-'\
                'Base-23-20151030.x86_64.qcow2'                              #:
+    force_imageurl = False                                                  #:
+    disposable_release = '23'                                                 #:
+    disposable_flavor = 'taskotron_cloud'                                   #:
+    disposable_arch = 'x86_64'                                              #:
 
     minion_repos = [
         'https://copr.fedorainfracloud.org/coprs/tflink/taskotron/repo/fedora-23/'
diff --git a/libtaskotron/ext/disposable/vm.py b/libtaskotron/ext/disposable/vm.py
--- a/libtaskotron/ext/disposable/vm.py
+++ b/libtaskotron/ext/disposable/vm.py
@@ -52,17 +52,33 @@
 
     def _prepare_image(self):
         '''Use testcloud to prepare an image for local booting
-        :raises TaskotronRemoteError: for errors in preparing the image with testcloud'''
+        :raises TaskotronImageNotFoundError: when base image of the required type is not found
+        :raises TaskotronImageError: for errors in preparing the image with testcloud
+        '''
 
         log.debug("preparing image {} for task {}".format(self.imageurl, self.uuid))
         tc_image = None
 
         try:
-            tc_image = image.Image(self.imageurl)
+            if config.get_config().force_imageurl:
+                img_url = config.get_config().imageurl
+            else:
+                # FIXME: release/flavor/arch should be provided from formula (?)
+                img_url = ImageFinder.get_latest(
+                    release=config.get_config().disposable_release,
+                    flavor=config.get_config().disposable_flavor,
+                    arch=config.get_config().disposable_arch
+                    )
+        except exc.TaskotronImageNotFoundError, e:
+            log.error(e)
+            raise
+
+        try:
+            tc_image = image.Image(img_url)
             tc_image.prepare()
         except TestcloudImageError, e:
             log.error(e)
-            raise exc.TaskotronRemoteError("There was an error while preparing the "
+            raise exc.TaskotronImageError("There was an error while preparing the "
                                            "testcloud image", e)
 
         return tc_image
@@ -179,7 +195,7 @@
         self._destroy_instance(tc_instance)
 
 
-class Image(object):
+class ImageFinder(object):
     '''Retrieve images from either local or remote sources'''
 
     @classmethod
@@ -205,17 +221,17 @@
                           used if None
         :param arch: architecture of the image
 
-        :return: testcloud.image.Image instance
+        :return: file:// url of the latest image available
         :raises TaskotronImageError: if no such image for given release and flavor was found
         """
 
         latest_metadata = cls.get_latest_metadata(release, flavor, arch, imagesdir)
 
         if not latest_metadata:
-            raise exc.TaskotronImageNotFoundError('No such image for release %s and flavor %s.' %
-                                                  (release, flavor))
+            raise exc.TaskotronImageNotFoundError('No image for release %s, flavor %s, arch %s.' %
+                                                  (release, flavor, arch))
         else:
-            return image.Image("file://" + os.path.join(imagesdir, latest_metadata['filename']))
+            return "file://" + os.path.join(imagesdir, latest_metadata['filename'])
 
     @classmethod
     def get_latest_metadata(cls, release, flavor, arch='x86_64', imagesdir=None):
@@ -231,21 +247,21 @@
         :rtype: dict {'date': str, 'version': str, 'release': str, 'arch': str, 'filename': str}
         """
 
-        pattern = re.compile(r'^([0-9]{8})_([0-9]{4})-fedora-(.*?)-(.*?)-(.*?)\.qcow2$')
+        release = str(release)
+        pattern = re.compile(r'^([0-9]{6}_[0-9]{4})-fedora-(.*?)-(.*?)-(.*?)\.(qcow2|raw|img)$')
 
         images = []
         for filename in cls.get_all_filenames(imagesdir):
             m = pattern.match(filename)
             if m:
-                images.append({'date': m.group(1),
-                               'version': m.group(2),
-                               'release': m.group(3),
-                               'flavor': m.group(4),
-                               'arch': m.group(5),
+                images.append({'timestamp': m.group(1),
+                               'release': m.group(2),
+                               'flavor': m.group(3),
+                               'arch': m.group(4),
                                'filename': filename})
 
         filtered = [i for i in images if i['release'] == release and i['flavor'] == flavor and i['arch'] == arch]
         if not filtered:
             return None
         else:
-            return sorted(filtered, key=lambda i: int(i['date']+i['version']))[-1]
+            return sorted(filtered, key=lambda i: i['timestamp'])[-1]
diff --git a/testing/test_vm.py b/testing/test_vm.py
--- a/testing/test_vm.py
+++ b/testing/test_vm.py
@@ -24,16 +24,18 @@
         stub_image = Mock(side_effect=tce.TestcloudImageError())
 
         monkeypatch.setattr(image, 'Image', stub_image)
+        monkeypatch.setattr(vm.ImageFinder, 'get_latest_metadata', Dingus())
 
         test_vm = vm.TestCloudMachine(self.ref_uuid)
 
-        with pytest.raises(exc.TaskotronRemoteError):
+        with pytest.raises(exc.TaskotronImageError):
             test_vm._prepare_image()
 
     def should_behave_on_success(self, monkeypatch):
         stub_image = MagicMock()
 
         monkeypatch.setattr(image, 'Image', stub_image)
+        monkeypatch.setattr(vm.ImageFinder, 'get_latest_metadata', Dingus())
 
         test_vm = vm.TestCloudMachine(self.ref_uuid)
 
@@ -163,43 +165,44 @@
 
     @pytest.fixture
     def setup(self, monkeypatch):
-        self.images = ['20151008_0427-fedora-23-cloud-x86_64.qcow2',
+        self.images = ['151008_0427-fedora-23-cloud-x86_64.qcow2',
                        'ubuntu-fabulous-fedora.qcow2',
-                       '20151008_0223-fedora-23-minimal-i386.qcow2',
-                       '20151105_0100-server-x86_64.qcow2',
+                       '151008_0223-fedora-23-minimal-i386.qcow2',
+                       '151105_0100-server-x86_64.qcow2',
                        'el_capitan.iso',
-                       '20151008_0100-server.qcow2',
-                       '20151007_0516-fedora-23-minimal-x86_64.qcow2',
-                       '20151007_0516-fedora-rawhide-minimal-x86_64.qcow2',
+                       '151008_0100-server.qcow2',
+                       '151007_0516-fedora-23-minimal-x86_64.qcow2',
+                       '151007_0516-fedora-rawhide-minimal-x86_64.qcow2',
                        'windows10.raw',
-                       '20151008_0315-fedora-23-minimal-i386.qcow2',
-                       '20151008_0315-fedora-23-minimal-x86_64.qcow2']
+                       '151008_0315-fedora-23-minimal-i386.qcow2',
+                       '151008_0315-fedora-23-minimal-x86_64.qcow2']
         self.stub_list_images = Dingus()
-        monkeypatch.setattr(vm.Image, 'get_all_filenames', self.stub_list_images)
+        monkeypatch.setattr(vm.ImageFinder, 'get_all_filenames', self.stub_list_images)
+
 
     def test_dir_populated(self):
         self.stub_list_images.return_value = self.images
 
-        assert vm.Image.get_latest_metadata('23', 'minimal', 'i386', '')['filename'] ==\
-            '20151008_0315-fedora-23-minimal-i386.qcow2'
-        assert vm.Image.get_latest_metadata('23', 'minimal', 'x86_64', '')['filename'] ==\
-            '20151008_0315-fedora-23-minimal-x86_64.qcow2'
+        assert vm.ImageFinder.get_latest_metadata('23', 'minimal', 'i386', '')['filename'] ==\
+            '151008_0315-fedora-23-minimal-i386.qcow2'
+        assert vm.ImageFinder.get_latest_metadata('23', 'minimal', 'x86_64', '')['filename'] ==\
+            '151008_0315-fedora-23-minimal-x86_64.qcow2'
 
 
     def test_dir_populated_single(self):
         self.stub_list_images.return_value = self.images
 
-        assert vm.Image.get_latest_metadata('23', 'cloud', 'x86_64', '')['filename'] ==\
-            '20151008_0427-fedora-23-cloud-x86_64.qcow2'
-        assert vm.Image.get_latest_metadata('rawhide', 'minimal', 'x86_64', '')['filename'] ==\
-            '20151007_0516-fedora-rawhide-minimal-x86_64.qcow2'
+        assert vm.ImageFinder.get_latest_metadata('23', 'cloud', 'x86_64', '')['filename'] ==\
+            '151008_0427-fedora-23-cloud-x86_64.qcow2'
+        assert vm.ImageFinder.get_latest_metadata('rawhide', 'minimal', 'x86_64', '')['filename'] ==\
+            '151007_0516-fedora-rawhide-minimal-x86_64.qcow2'
 
     def test_dir_empty(self):
         self.stub_list_images.return_value = []
 
-        assert vm.Image.get_latest_metadata('23', 'minimal', '') is None
+        assert vm.ImageFinder.get_latest_metadata('23', 'minimal', '') is None
 
     def test_no_such_image(self):
         self.stub_list_images.return_value = self.images
 
-        assert vm.Image.get_latest_metadata('69', 'ultimate', '') is None
+        assert vm.ImageFinder.get_latest_metadata('69', 'ultimate', '') is None

