diff --git a/inline_entity_form.api.php b/inline_entity_form.api.php
index b73d3a9..2dc9dfc 100644
--- a/inline_entity_form.api.php
+++ b/inline_entity_form.api.php
@@ -18,3 +18,16 @@ function hook_inline_entity_form_entity_form_alter(&$entity_form, &$form_state)
     $entity_form['quantity']['#description'] = t('New quantity description.');
   }
 }
+
+/**
+ * Add a mapping between an entity type and a form controller class.
+ *
+ * @return array
+ *   An array where the key is the entity type and the value
+ *   is the name of the controller class.
+ */
+function hook_inline_entity_form_controller_info() {
+  return array(
+    'user' => 'SpecialUserInlineEntityFormController'
+  );
+}
diff --git a/inline_entity_form.module b/inline_entity_form.module
index 4235cf0..46199d4 100644
--- a/inline_entity_form.module
+++ b/inline_entity_form.module
@@ -107,24 +107,27 @@ function inline_entity_form_get_controller($instance) {
  * Implements hook_entity_info_alter().
  */
 function inline_entity_form_entity_info_alter(&$entity_info) {
-  $entity_info['node']['inline entity form'] = array(
-    'controller' => 'NodeInlineEntityFormController',
+  // Our defaults.
+  $controller_info = array(
+    'node' => 'NodeInlineEntityFormController',
+    'taxonomy_term' => 'TaxonomyTermInlineEntityFormController',
+    'commerce_product' => 'CommerceProductInlineEntityFormController',
+    'commerce_line_item' => 'CommerceLineItemInlineEntityFormController',
   );
 
-  if (isset($entity_info['taxonomy_term'])) {
-    $entity_info['taxonomy_term']['inline entity form'] = array(
-      'controller' => 'TaxonomyTermInlineEntityFormController',
-    );
-  }
-  if (isset($entity_info['commerce_product'])) {
-    $entity_info['commerce_product']['inline entity form'] = array(
-      'controller' => 'CommerceProductInlineEntityFormController',
-    );
-  }
-  if (isset($entity_info['commerce_line_item'])) {
-    $entity_info['commerce_line_item']['inline entity form'] = array(
-      'controller' => 'CommerceLineItemInlineEntityFormController',
-    );
+  // Invoke hook_inline_entity_form_controller_info().
+  $api_info = module_invoke_all('inline_entity_form_controller_info');
+
+  // Fold in the API info.
+  array_merge($controller_info, $api_info);
+
+  // Finally, alter entity info.
+  foreach($controller_info as $entity_type => $controller) {
+    if (isset($entity_info[$entity_type])) {
+      $entity_info[$entity_type]['inline entity form'] = array(
+        'controller' => $controller,
+      );
+    }
   }
 }
 
