diff --git a/includes/scald.admin.inc b/includes/scald.admin.inc
index d8ae6f8..3734310 100644
--- a/includes/scald.admin.inc
+++ b/includes/scald.admin.inc
@@ -423,23 +423,17 @@ function scald_admin_contexts_form_submit($form, &$form_state) {
       case '_trans':
         $context = drupal_substr($key, 0, -6);
         $transcoder = $value;
-        if ($value == '@none') {
-          db_delete('scald_context_type_transcoder')
-            ->condition('context', $context)
-            ->condition('type', $typename)
-            ->execute();
+        if ($value == '@none') {// @todo can it really happen?
+          $context_config = scald_context_config_load($context);
+          if (isset($context_config->transcoder[$typename]['*'])) {
+            $context_config->transcoder[$typename]['*'] = NULL;
+            scald_context_config_save($context_config);
+          }
         }
         else {
-          db_merge('scald_context_type_transcoder')
-            ->fields(array(
-              'file_format' => 'jpg',
-              'transcoder' => $transcoder,
-            ))
-            ->key(array(
-              'context' => $context,
-              'type' => $typename
-            ))
-            ->execute();
+          $context_config = scald_context_config_load($context);
+          $context_config->transcoder[$typename]['*'] = $transcoder;
+          scald_context_config_save($context_config);
         }
         break; // end '_trans'
     }
diff --git a/modules/providers/scald_image/scald_image.install b/modules/providers/scald_image/scald_image.install
index b3c8bac..5fca1de 100644
--- a/modules/providers/scald_image/scald_image.install
+++ b/modules/providers/scald_image/scald_image.install
@@ -18,16 +18,11 @@ function scald_image_install() {
     field_update_instance($instance);
   }
 
-  // Associate the image atom type to the "library" image  style
-  // in the library context.
-  db_insert('scald_context_type_transcoder')
-    ->fields(array(
-      'context'     => 'sdl_library_item',
-      'type'        => 'image',
-      'file_format' => 'passthrough',
-      'transcoder'  => 'style-Library',
-    ))
-    ->execute();
+  // Associate the image atom type to the "library" image style in the library
+  // context.
+  $context_config = scald_context_config_load('sdl_library_item');
+  $context_config->transcoder['image']['*'] = 'style-Library';
+  scald_context_config_save($context_config);
 }
 
 /**
diff --git a/scald.install b/scald.install
index 7a7e619..0bfb024 100644
--- a/scald.install
+++ b/scald.install
@@ -133,38 +133,38 @@ function scald_schema() {
     'primary key' => array('type'),
   );
 
-  $schema['scald_context_type_transcoder'] = array(
-    'description' => 'A mapping between Types, Contexts, file formats, and Transcoders',
-    'fields'      => array(
-      'context'    => array(
-        'description' => 'The Scald Context slug for a Scald Context.  Fk {scald_contexts}.context',
-        'type'        => 'varchar',
-        'length'      => SCALD_SLUG_MAX_LENGTH,
-        'not null'    => TRUE,
-        'default'     => 'title',
-      ),
-      'type'       => array(
-        'description' => 'The Scald Unified Type slug for a Scald Unified Type.  FK {scald_types}.type',
-        'type'        => 'varchar',
-        'length'      => SCALD_SLUG_MAX_LENGTH,
-        'not null'    => TRUE,
-      ),
-      'file_format'     => array(
-        'description' => 'A file format slug.  Could be just about anything, but this is supposed to coincide with the format specifiers used by Scald Transcoders.',
-        'type'        => 'varchar',
-        'length'      => SCALD_SLUG_MAX_LENGTH,
-        'not null'    => TRUE,
-        'default'     => 'passthrough',
+  $schema['scald_context_config'] = array(
+    'description' => 'Context configuration.',
+    'fields' => array(
+      'context' => array(
+        'description' => 'The Scald Context slug for a Scald Context. Fk {scald_contexts}.context',
+        'type' => 'varchar',
+        'length' => SCALD_SLUG_MAX_LENGTH,
+        'not null' => TRUE,
       ),
       'transcoder' => array(
-        'description' => 'The Scald Transcoder slug for a Scald Transcoder.  FK {scald_transcoders}.transcoder',
-        'type'        => 'varchar',
-        'length'      => SCALD_SLUG_MAX_LENGTH,
-        'not null'    => TRUE,
-        'default'     => 'passthrough',
+        'description' => 'A serialized array of transcoder per format.',
+        'type' => 'blob',
+        'size' => 'big',
+        'not null' => TRUE,
+        'serialize' => TRUE,
+        'default' => array(),
+      ),
+    ),
+    'primary key' => array('context'),
+    'export' => array(
+      'key' => 'context',
+      'key name' => 'Context',
+      'primary key' => 'context',
+      'identifier' => 'context_config',
+      'export type string' => 'ctools_type',
+      'api' => array(
+        'owner' => 'scald',
+        'api' => 'context_config',
+        'minimum_version' => 1,
+        'current_version' => 1,
       ),
     ),
-    'primary key' => array('type', 'context'),
   );
 
   $schema['scald_licenses'] = array(
@@ -469,3 +469,32 @@ function scald_update_7004() {
 function scald_update_7005() {
   scald_actions(TRUE);
 }
+
+/**
+ * Migrate {scald_context_type_transcoder} into a new table
+ * {scald_context_config}.
+ */
+function scald_update_7006() {
+  drupal_load('module', 'scald');
+  db_create_table('scald_context_config', drupal_get_schema_unprocessed('scald', 'scald_context_config'));
+
+  $contexts = array();
+  $result = db_select('scald_context_type_transcoder', 's')
+    ->fields('s')
+    ->execute();
+  while ($row = $result->fetchAssoc()) {
+    // Let's make the update simple: there is no multiple format settings now.
+    $contexts[$row['context']]['transcoder'][$row['type']]['*'] = $row['transcoder'];
+  }
+  foreach ($contexts as $context => $config) {
+    db_insert('scald_context_config')
+      ->fields(array(
+        'context' => $context,
+        'transcoder' => serialize($config['transcoder']),
+      ))
+      ->execute();
+  }
+
+  db_drop_table('scald_context_type_transcoder');
+}
+
diff --git a/scald.module b/scald.module
index a178e40..3dd83bc 100644
--- a/scald.module
+++ b/scald.module
@@ -177,19 +177,23 @@ function scald_contexts($reset = FALSE) {
  * the standard info hook output.
  */
 function scald_scald_contexts_alter(&$contexts) {
-  $result = db_select('scald_context_type_transcoder', 's')
-    ->fields('s')
-    ->execute();
-
-  while ($row = $result->fetchAssoc()) {
+  ctools_include('export');
+  foreach (ctools_export_crud_load_all('scald_context_config') as $name => $config) {
     // Only add formats informations to context that got exposed.
-    if (!empty($contexts[$row['context']])) {
-      $contexts[$row['context']]['type_format'][$row['type']] = $row;
+    if (!empty($contexts[$name])) {
+      // This is the old and deprecated structure.
+      foreach ($config->transcoder as $type => $transcoder) {
+        $contexts[$name]['type_format'][$type] = array(
+          'file_format' => '*',
+          'transcoder' => $transcoder['*'],
+        );
+      }
+      // The new structure.
+      $contexts[$name]['transcoder'] = $config->transcoder;
     }
   }
 }
 
-
 /**
  * Get the available Scald Actions
  *
@@ -1624,7 +1628,7 @@ function scald_entity_info() {
       'bundles' => array(),
       'view modes' => array(),
       'view callback' => 'scald_render_multiple',
-    )
+    ),
   );
 
   $contexts = scald_contexts();
@@ -2044,6 +2048,32 @@ function scald_context_save($context) {
 }
 
 /**
+ * Load a context config.
+ *
+ * @param string $name
+ * Context name.
+ */
+function scald_context_config_load($name) {
+ ctools_include('export');
+ if (!$context_config = ctools_export_crud_load('scald_context_config', $name)) {
+   $context_config = ctools_export_new_object('scald_context_config');
+   $context_config->context = $name;
+ }
+ return $context_config;
+}
+
+/**
+ * Save a context config.
+ *
+ * @param object $config
+ * Context config.
+ */
+function scald_context_config_save(&$config) {
+ ctools_include('export');
+ return ctools_export_crud_save('scald_context_config', $config);
+}
+
+/**
  * Access callback for the atom add page.
  */
 function scald_atom_add_access($type = NULL) {
