diff --git a/fedora_openqa_schedule/config.py b/fedora_openqa_schedule/config.py
--- a/fedora_openqa_schedule/config.py
+++ b/fedora_openqa_schedule/config.py
@@ -38,5 +38,9 @@
 CONFIG.set('report', 'jobs-wait', '360')
 CONFIG.set('schedule', 'iso-path', '/var/lib/openqa/factory/iso/')
 CONFIG.set('schedule', 'compose-wait', '480')
+CONFIG.set('schedule', 'imagetype', 'boot live dvd')
+CONFIG.set('schedule', 'arches', 'x86_64 i386')
+CONFIG.set('schedule', 'payload', 'server generic workstation kde')
+CONFIG.set('schedule', 'persistent', '/var/tmp/openqa_watcher.json')
 CONFIG.read('/etc/fedora-openqa/schedule.conf')
 CONFIG.read('{0}/.config/fedora-openqa/schedule.conf'.format(os.path.expanduser('~')))
diff --git a/fedora_openqa_schedule/schedule.py b/fedora_openqa_schedule/schedule.py
--- a/fedora_openqa_schedule/schedule.py
+++ b/fedora_openqa_schedule/schedule.py
@@ -27,6 +27,7 @@
 import json
 import logging
 import os.path
+import re
 
 # External dependencies
 import fedfind.release
@@ -39,13 +40,6 @@
 
 logger = logging.getLogger(__name__)
 
-PERSISTENT = "/var/tmp/openqa_watcher.json"
-ARCHES = ('x86_64', 'i386')
-# Default value is '/var/lib/openqa/factory/iso/'
-ISO_PATH = CONFIG.get('schedule', 'iso-path')
-# List of all desktops we want to test
-DESKTOPS = ('workstation', 'kde')
-
 
 class TriggerException(Exception):
     pass
@@ -56,35 +50,45 @@
     pass
 
 
-def read_last():
-    """Read last tested version from file."""
-    logger.debug("reading latest checked version from %s", PERSISTENT)
+def read_last(arches=None):
+    """Read last tested version from file.
+    If no architectures were provided, load them from config file.
+    """
+    persistent = CONFIG.get('schedule', 'persistent')
+    if not arches:
+        # split arches by words (works for both space- and comma-separated values)
+        arches = re.split(r'\W+', CONFIG.get('schedule', 'arches').strip())
+    logger.debug("reading latest checked version from %s", persistent)
     result = {}
     try:
-        f = open(PERSISTENT, "r")
+        f = open(persistent, "r")
         json_raw = f.read()
         f.close()
         json_parsed = json.loads(json_raw)
     except IOError:
-        logger.warning("cannot read file %s", PERSISTENT)
+        logger.warning("cannot read file %s", persistent)
         return result, {}
 
-    for arch in ARCHES:
+    for arch in arches:
         result[arch] = json_parsed.get(arch, None)
         logger.info("latest version for %s: %s", arch, result[arch])
     return result, json_parsed
 
 
-def download_image(image):
-    """Download a given image with a name that should be unique.
+def download_image(image, iso_path=None):
+    """Download a given image with a name that should be unique,
+    optionally specifying destination directory.
     Returns the filename of the image (not the path).
     """
+    # if no iso_path is specified, parse it from config file
+    if not iso_path:
+        iso_path = CONFIG.get('schedule', 'iso-path')
     ver = image.version.replace(' ', '_')
     if image.imagetype == 'boot':
         isoname = "{0}_{1}_{2}_boot.iso".format(ver, image.payload, image.arch)
     else:
         isoname = "{0}_{1}".format(ver, image.filename)
-    filename = os.path.join(ISO_PATH, isoname)
+    filename = os.path.join(iso_path, isoname)
     if not os.path.isfile(filename):
         logger.info("downloading %s (%s) to %s", image.url, image.desc, filename)
         # Icky hack around a urlgrabber bug:
@@ -139,21 +143,24 @@
     return output["ids"]
 
 
-def jobs_from_current(wiki, force=False):
+def jobs_from_current(wiki, force=False, arches=None):
     """Schedule jobs against the 'current' release validation event
     (according to wikitcms) if we have not already. Returns the job
     list. If force is False, for each ISO, jobs will only be scheduled
     if there are no existing, non-cancelled jobs for the same ISO and
-    flavor.
+    flavor. If not set, load list of arches from config file.
     """
     if not wiki:
         logger.warning("python-wikitcms is required for current validation event discovery.")
         return ([], None)
+    # if arches weren't specified as argument, parse them from config file
+    if not arches:
+        arches = re.split(r'\W+', CONFIG.get('schedule', 'arches').strip())
     last_versions, json_parsed = read_last()
     currev = wiki.current_event
     logger.info("current event: %s", currev.version)
     runarches = []
-    for arch in ARCHES:
+    for arch in arches:
         last_version = last_versions.get(arch, None)
         if last_version and last_version >= currev.sortname:
             logger.info("skipped: %s: %s is newer or equal to %s", arch, last_version, currev.sortname)
@@ -171,7 +178,7 @@
     logger.info("jobs_from_current: planned jobs: %s", ' '.join(str(j) for j in jobs))
 
     # write info about latest versions
-    f = open(PERSISTENT, "w")
+    f = open(CONFIG.get('schedule', 'persistent'), "w")
     f.write(json.dumps(json_parsed))
     f.close()
     logger.debug("written info about newest version")
@@ -189,7 +196,7 @@
     if there is something wrong with these values.
 
     arches may be an iterable of arches to run on. If not specified,
-    the default ARCHES will be used.
+    the default from config file will be used.
 
     If force is False, for each ISO, jobs will only be scheduled if
     there are no existing, non-cancelled jobs for the same ISO and
@@ -223,21 +230,29 @@
     return jobs
 
 
-def jobs_from_fedfind(ff_release, arches=None, force=False):
+def jobs_from_fedfind(ff_release, force=False, arches=None, imagetypes=None, payloads=None):
     """Given a fedfind.Release object, find the ISOs we want and run
     jobs on them. arches is an iterable of arches to run on, if not
-    specified, we'll use ARCHES (defined above). If force is False,
+    specified, we'll use value from config file. If force is False,
     for each ISO, jobs will only be scheduled if there are no
     existing, non-cancelled jobs for the same ISO and flavor.
     """
+    # if arches, imagetypes or payload weren't specified as argument, parse them from config file
     if not arches:
-        arches = ARCHES
+        # split arches by words (works for both space- and comma-separated values)
+        arches = re.split(r'\W+', CONFIG.get('schedule', 'arches').strip())
+    if not imagetypes:
+        # split imagetypes by words (works for both space- and comma-separated values)
+        imagetypes = re.split(r'\W+', CONFIG.get('schedule', 'imagetype').strip())
+    if not payloads:
+        # split payloads by words (works for both space- and comma-separated values)
+        payloads = re.split(r'\W+', CONFIG.get('schedule', 'payload').strip())
     # Find currently-testable images for our arches.
     jobs = []
     queries = (
-        fedfind.release.Query('imagetype', ('boot', 'live')),
+        fedfind.release.Query('imagetype', imagetypes),
         fedfind.release.Query('arch', arches),
-        fedfind.release.Query('payload', ('server', 'generic') + DESKTOPS))
+        fedfind.release.Query('payload', payloads))
     logger.debug("querying fedfind for images")
     images = ff_release.find_images(queries)
 
@@ -273,7 +288,7 @@
                 score += 5
             elif img.payload == 'server':
                 score += 3
-            elif img.payload in DESKTOPS:
+            elif img.payload == 'workstation':
                 score += 1
             if score > bestscore:
                 bestimg = img
diff --git a/schedule.conf.sample b/schedule.conf.sample
--- a/schedule.conf.sample
+++ b/schedule.conf.sample
@@ -25,3 +25,15 @@
 # Minutes to wait for the compose to be complete, when scheduling jobs for a
 # specific compose. 'current' never waits.
 compose-wait: 480
+
+# Image types to download, space-separated list - boot, live, dvd
+imagetype: boot live dvd
+
+# Architectures to download, space-separated list - x86_64, i386
+arches: x86_64 i386
+
+# Payloads to download, space-separated list - server, generic or one of desktops
+payload: server generic workstation kde
+
+# Where file with info about latest checked version is located
+persistent: /var/tmp/openqa_watcher.json

