diff --git a/currency/currency.api.php b/currency/currency.api.php
index 420fe20..36af524 100644
--- a/currency/currency.api.php
+++ b/currency/currency.api.php
@@ -70,16 +70,16 @@ function hook_currency_locale_pattern_info_alter(array $locale_patterns) {
  *
  * @return array
  *   Keys are plugin machine names. Values are arrays with two items:
- *   converter: an array with a "class" key, which contains the name of the
- *   converter class, which should implement CurrencyConverterInterface.
- *   weight: an integer. All converters will be ordered by weight and executed
- *   in that order, until one of them returns a rate. Defaults to 0.
+ *   - converter: an array with a "class" key, which contains the name of the
+ *     converter class, which should implement CurrencyConverterInterface.
+ *   - title: the translated human-readable title. Defaults to TRUE.
  */
 function hook_currency_converter_info() {
   $currency_converters['CurrencyConverterFixedRates'] = array(
     'converter' => array(
       'class' => 'CurrencyConverterFixedRates',
     ),
+    'title' => t('Fixed rates'),
   );
 
   return $currency_converters;
diff --git a/currency/currency.currency.inc b/currency/currency.currency.inc
index 83162ca..652bee1 100644
--- a/currency/currency.currency.inc
+++ b/currency/currency.currency.inc
@@ -27,11 +27,13 @@ function currency_currency_converter_info() {
     'converter' => array(
       'class' => 'CurrencyConverter',
     ),
+    'title' => t('All converters'),
   );
   $currency_converters['CurrencyConverterFixedRates'] = array(
     'converter' => array(
       'class' => 'CurrencyConverterFixedRates',
     ),
+    'title' => t('Fixed rates'),
   );
 
   return $currency_converters;
diff --git a/currency/currency.info b/currency/currency.info
index 6b521df..84aa683 100755
--- a/currency/currency.info
+++ b/currency/currency.info
@@ -19,6 +19,7 @@ files[] = includes/CurrencyViewsHandlerFilter.inc
 files[] = tests/CurrencyAmountFormElementWebTestCase.test
 files[] = tests/CurrencyAmountViewsHandlerFieldWebTestCase.test
 files[] = tests/CurrencyConverterFixedRatesWebTestCase.test
+files[] = tests/CurrencyConverterUIWebTestCase.test
 files[] = tests/CurrencyConverterWebTestCase.test
 files[] = tests/CurrencyCRUDWebTestCase.test
 files[] = tests/CurrencyFilterWebTestCase.test
diff --git a/currency/currency.module b/currency/currency.module
index 81537f1..a10ad77 100644
--- a/currency/currency.module
+++ b/currency/currency.module
@@ -48,6 +48,13 @@ function currency_hook_info() {
 * Implements hook_menu().
 */
 function currency_menu() {
+  $items['admin/config/regional/currency/conversion'] = array(
+    'title' => 'Conversion',
+    'access arguments' => array('currency.currency_converter.administer'),
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('currency_form_currency_converter'),
+    'type' => MENU_LOCAL_TASK,
+  );
   $items['admin/config/regional/currency/list/%currency/translate'] = array(
     'title' => 'Translate',
     'access arguments' => array('currency.currency.administer'),
@@ -120,6 +127,9 @@ function currency_permission() {
   $permissions['currency.currency_locale_pattern.administer'] = array(
     'title' => t('Administer currency locale patterns'),
   );
+  $permissions['currency.currency_converter.administer'] = array(
+    'title' => t('Administer currency converters'),
+  );
 
   return $permissions;
 }
@@ -146,13 +156,24 @@ function currency_filter_info() {
 }
 
 /**
+ * Implements hook_theme().
+ */
+function currency_theme(array $existing, $type, $theme, $path) {
+  $templates['currency_form_currency_converter'] = array(
+    'render element' => 'form',
+  );
+
+  return $templates;
+}
+
+/**
  * Implements hook_ctools_plugin_type().
  */
 function currency_ctools_plugin_type() {
   $plugins_types['currency_converter'] = array(
     'classes' => array('converter'),
     'defaults' => array(
-      'weight' => 0,
+      'title' => '',
     ),
     'hook' => 'currency_converter_info',
     'use hooks' => TRUE,
@@ -723,3 +744,100 @@ function currency_delete($currency) {
     ->condition('ISO4217Code', $currency_code)
     ->execute();
 }
+
+/**
+ * Implements form build callback: the currency converter overview form.
+ *
+ * @see theme_currency_form_currency_converters()
+ */
+function currency_form_currency_converter(array $form, array &$form_state) {
+  ctools_include('plugins');
+  $converters_info = ctools_get_plugins('currency', 'currency_converter');
+  $currency_converters = CurrencyConverter::loadConfiguration();
+  $weight = 0;
+  foreach (array_keys($currency_converters) as $name) {
+    // Skip CurrencyConverter, because it is a utility/service and not a
+    // regular plugin.
+    if ($name == 'CurrencyConverter') {
+      continue;
+    }
+
+    $converter_info = $converters_info[$name];
+
+    $form['converters']['#tree'] = TRUE;
+    $form['converters'][$name]['#tree'] = TRUE;
+    $form['converters'][$name]['enabled'] = array(
+      '#default_value' => $currency_converters[$name],
+      '#title' => t('Enabled'),
+      '#type' => 'checkbox',
+    );
+    $form['converters'][$name]['title'] = array(
+      '#markup' => $converter_info['title'],
+      '#title' => t('Title'),
+      '#type' => 'item',
+    );
+    $form['converters'][$name]['weight'] = array(
+      '#default_value' => $weight++,
+      '#delta' => count($converters_info),
+      '#title' => t('Weight'),
+      '#type' => 'weight',
+    );
+  }
+  $form['actions'] = array(
+    '#type' => 'actions',
+  );
+  $form['actions']['save'] = array(
+    '#value' => t('Save'),
+    '#type' => 'submit',
+  );
+
+  return $form;
+}
+
+/**
+ * Implements form validate callback.
+ *
+ * @see currency_form_currency_converters()
+ */
+function currency_form_currency_converter_validate(array $form, array &$form_state) {
+  uasort($form_state['values']['converters'], 'drupal_sort_weight');
+  $configuration = array();
+  foreach ($form_state['values']['converters'] as $name => $converter_configuration) {
+    $configuration[$name] = (bool) $converter_configuration['enabled'];
+  }
+  CurrencyConverter::saveConfiguration($configuration);
+  drupal_set_message(t('The configuration options have been saved.'));
+  
+}
+
+/**
+ * Implements theme function: themes the currency converter overview form.
+ *
+ * @see currency_form_currency_converters
+ */
+function theme_currency_form_currency_converter(array $variables) {
+  drupal_add_tabledrag('currency-converters', 'order', 'sibling', 'form-select');
+  $header = array(t('Title'), t('Enabled'), t('Weight'));
+  $rows = array();
+  $names = element_children($variables['form']['converters']);
+  foreach ($names as $name) {
+    $elements = &$variables['form']['converters'][$name];
+    $row_data = array();
+    foreach (array('title', 'enabled', 'weight') as $key) {
+      $elements[$key]['#title_display'] = 'invisible';
+      $row_data[] = drupal_render($elements[$key]);
+    }
+    $rows[] = array(
+      'class' => array('draggable'),
+      'data' => $row_data,
+    );
+  }
+
+  return theme('table', array(
+    'attributes' => array(
+      'id' => 'currency-converters',
+    ),
+    'header' => $header,
+    'rows' => $rows,
+  )) . drupal_render_children($variables['form']);
+}
diff --git a/currency/includes/CurrencyConverter.inc b/currency/includes/CurrencyConverter.inc
index 8e3180a..fa32c60 100644
--- a/currency/includes/CurrencyConverter.inc
+++ b/currency/includes/CurrencyConverter.inc
@@ -12,34 +12,59 @@
 class CurrencyConverter implements CurrencyConverterInterface {
 
   /**
-   * Returns the names of available currency converter classes, sorted by weight.
+   * Loads the configuration.
+   *
+   * @return array
+   *   Keys are currency_converter plugin names. Values are booleans that
+   *   describe whether the plugins are enabled. Items are ordered by weight.
+   */
+  public static function loadConfiguration() {
+    $configuration = variable_get('currency_converter', array());
+    if (empty($configuration)) {
+      ctools_include('plugins');
+      $plugins = ctools_get_plugins('currency', 'currency_converter');
+      $configuration = array_fill_keys(array_keys($plugins), TRUE);
+    }
+    // Skip CurrencyConverter, because it is a utility/service and not a
+    // regular plugin. It should never be part of the configuration anyway.
+    // This unset() is just a fail-safe.
+    unset($configuration['CurrencyConverter']);
+
+    return $configuration;
+  }
+
+  /**
+   * Saves the configuration.
+   *
+   * @param array $configuration
+   *   Keys are currency_converter plugin names. Values are booleans that
+   *   describe whether the plugins are enabled. Items are ordered by weight.
+   *
+   * @return NULL
+   */
+  public static function saveConfiguration(array $configuration) {
+    variable_set('currency_converter', $configuration);
+  }
+
+  /**
+   * Returns the names of enabled currency converter classes, sorted by weight.
    *
    * @return array
    */
   static function loadConverters() {
     ctools_include('plugins');
     $plugins = ctools_get_plugins('currency', 'currency_converter');
-    // Unlist this class.
-    unset($plugins['CurrencyConverter']);
-    usort($plugins, array('CurrencyConverter', 'sortConverters'));
+
+    $names = array_keys(array_filter(self::loadConfiguration()));
     $classes = array();
-    foreach ($plugins as $plugin) {
-      $classes[] = $plugin['converter']['class'];
+    foreach ($names as $name) {
+      $classes[] = $plugins[$name]['converter']['class'];
     }
 
     return $classes;
   }
 
   /**
-   * Sorts converters by their weights.
-   */
-  static function sortConverters(array $plugin_a, array $plugin_b) {
-    // To preserve the original order of plugins with an equal weight, pretend
-    // that of two equal weights, the first is greater.
-    return $plugin_a['weight'] < $plugin_b['weight'] ? -1 : 1;
-  }
-
-  /**
    * Implements CurrencyConverterInterface::load().
    */
   static function load($currency_code_from, $currency_code_to) {
diff --git a/currency/tests/CurrencyConverterUIWebTestCase.test b/currency/tests/CurrencyConverterUIWebTestCase.test
new file mode 100644
index 0000000..963e463
--- /dev/null
+++ b/currency/tests/CurrencyConverterUIWebTestCase.test
@@ -0,0 +1,46 @@
+<?php
+
+/**
+ * @file
+ * Contains class CurrencyUIWebTestCase.
+ */
+
+/**
+ * Tests the Ctools exportables UI for Currency exportables.
+ */
+class CurrencyUIWebTestCase extends DrupalWebTestCase {
+
+  static function getInfo() {
+    return array(
+      'name' => 'CurrencyConverter UI',
+      'group' => 'Currency',
+    );
+  }
+
+  function setUp(array $modules = array()) {
+    $this->profile = 'testing';
+    parent::setUp($modules + array('currency'));
+  }
+
+  /**
+   * Test CurrencyConverter's UI.
+   */
+  function testCurrencyConverterUI() {
+    $user = $this->drupalCreateUser(array('currency.currency_converter.administer'));
+    $this->drupalLogin($user);
+
+    // Test the default configuration.
+    $this->assertEqual(array(
+      'CurrencyConverterFixedRates' => TRUE,
+    ), CurrencyConverter::loadConfiguration());
+    // Test overridden configuration.
+    $path = 'admin/config/regional/currency/conversion';
+    $values = array(
+      'converters[CurrencyConverterFixedRates][enabled]' => FALSE,
+    );
+    $this->drupalPost($path, $values, t('Save'));
+    $this->assertEqual(array(
+      'CurrencyConverterFixedRates' => FALSE,
+    ), CurrencyConverter::loadConfiguration());
+  }
+}
diff --git a/currency/tests/CurrencyConverterWebTestCase.test b/currency/tests/CurrencyConverterWebTestCase.test
index b0d646c..c523638 100644
--- a/currency/tests/CurrencyConverterWebTestCase.test
+++ b/currency/tests/CurrencyConverterWebTestCase.test
@@ -38,6 +38,26 @@ class CurrencyConverterWebTestCase extends DrupalWebTestCase {
    * @see CurrencyConverterFixedRates
    */
   function testCurrencyConverter() {
+    // Test default configuration.
+    $this->assertCurrencyConversionRates();
+
+    // Test a configuration with explicitly enabled converters.
+    CurrencyConverter::saveConfiguration(array(
+      'CurrencyConverterFixedRates' => TRUE,
+    ));
+    $this->assertCurrencyConversionRates();
+
+    // Test a configuration with explicitly disabled converters.
+    CurrencyConverter::saveConfiguration(array(
+      'CurrencyConverterFixedRates' => FALSE,
+    ));
+    $this->assertFalse(count(CurrencyConverter::loadConverters()));
+  }
+
+  /**
+   * Assert that conversion rates can be retrieved..
+   */
+  function assertCurrencyConversionRates() {
     $this->assertTrue(is_array(CurrencyConverter::loadConverters()));
     $this->assertTrue(in_array('CurrencyConverterFixedRates', CurrencyConverter::loadConverters()));
 
