@@ -382,9 +382,19 @@ class Search(object):
382382 # otherwise, using defined categories to
383383 # calculate which engines should be used
384384 else:
385− # set used categories
385+ # set categories/engines
386+ load_default_categories = True
386387 for pd_name, pd in self.request_data.items():
387− if pd_name.startswith('category_'):
388+ if pd_name == 'categories':
389+ self.categories.extend(categ for categ in pd.split(',') if categ in categories)
390+ elif pd_name == 'engines':
391+ pd_engines = [{'category': engines[engine].categories[0],
392+ 'name': engine}
393+ for engine in pd.split(',') if engine in engines]
394+ if pd_engines:
395+ self.engines.extend(pd_engines)
396+ load_default_categories = False
397+ elif pd_name.startswith('category_'):
388398 category = pd_name[9:]
389399
390400 # if category is not found in list, skip
@@ -398,6 +408,9 @@ class Search(object):
398408 # remove category from list if property is set to 'off'
399409 self.categories.remove(category)
400410
411+ if not load_default_categories:
412+ return
413+
401414 # if no category is specified for this search,
402415 # using user-defined default-configuration which
403416 # (is stored in cookie)