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.info b/inline_entity_form.info
index 92267a7..ed62ba3 100644
--- a/inline_entity_form.info
+++ b/inline_entity_form.info
@@ -10,3 +10,5 @@ files[] = includes/node.inline_entity_form.inc
 files[] = includes/taxonomy_term.inline_entity_form.inc
 files[] = includes/commerce_product.inline_entity_form.inc
 files[] = includes/commerce_line_item.inline_entity_form.inc
+
+files[] = tests/inline_entity_form.test
diff --git a/inline_entity_form.module b/inline_entity_form.module
index 4235cf0..ea593c1 100644
--- a/inline_entity_form.module
+++ b/inline_entity_form.module
@@ -107,24 +107,29 @@ 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',
-    );
+  // Invoke hook_inline_entity_form_controller_info().
+  $api_info = module_invoke_all('inline_entity_form_controller_info');
+
+  // Fold in the API info.
+  foreach($api_info as $entity_type => $controller) {
+    $controller_info[$entity_type] = $api_info[$entity_type];
   }
-  if (isset($entity_info['commerce_line_item'])) {
-    $entity_info['commerce_line_item']['inline entity form'] = array(
-      'controller' => 'CommerceLineItemInlineEntityFormController',
-    );
+
+  // 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,
+      );
+    }
   }
 }
 
diff --git a/tests/MockInlineEntityFormController.inc b/tests/MockInlineEntityFormController.inc
new file mode 100644
index 0000000..11e0948
--- /dev/null
+++ b/tests/MockInlineEntityFormController.inc
@@ -0,0 +1,10 @@
+<?php
+
+/**
+ * @file
+ * A mock controller class for testing purposes.
+ */
+
+class MockInlineEntityFormController extends EntityInlineEntityFormController {
+
+}
diff --git a/tests/inline_entity_form.test b/tests/inline_entity_form.test
new file mode 100644
index 0000000..0bb6cf1
--- /dev/null
+++ b/tests/inline_entity_form.test
@@ -0,0 +1,32 @@
+<?php
+
+/**
+ * @file
+ */
+
+class InlineEntityFormTestCase extends DrupalWebTestCase {
+
+  public static function getInfo() {
+    return array(
+      'name' => 'Inline Entity Form API Test',
+      'description' => 'Make sure the APIs work.',
+      'group' => 'Inline Entity Form',
+    );
+  }
+
+  public function setUp() {
+    // Enable any modules required for the test
+    parent::setUp(array('inline_entity_form', 'inline_entity_form_api_mock'));
+  }
+
+  public function testIEFControllerAPI() {
+    // Since we enabled inline_entity_form_api_mock module,
+    // a call to entity_get_info() will return our mock
+    // inline entity form controller for node.
+    $entity_info = entity_get_info('node');
+    $this->assertTrue(count($entity_info) > 0, 'There is entity info for node.');
+    $this->assertTrue(isset($entity_info['inline entity form']['controller']), 'Node has an inline entity form controller.');
+    $controller = $entity_info['inline entity form']['controller'];
+    $this->assertTrue($controller == 'MockInlineEntityFormController', 'The controller for node is: ' . $controller);
+  }
+}
diff --git a/tests/inline_entity_form_api_mock.info b/tests/inline_entity_form_api_mock.info
new file mode 100644
index 0000000..c7bc494
--- /dev/null
+++ b/tests/inline_entity_form_api_mock.info
@@ -0,0 +1,9 @@
+name = Inline Entity Form API Mock
+description = "Mock module for Inline Entity Form API Testing"
+package = Testing
+dependencies[] = inline_entity_form
+core = 7.x
+
+hidden = TRUE
+
+files[] = MockInlineEntityFormController.inc
diff --git a/tests/inline_entity_form_api_mock.module b/tests/inline_entity_form_api_mock.module
new file mode 100644
index 0000000..d21f89c
--- /dev/null
+++ b/tests/inline_entity_form_api_mock.module
@@ -0,0 +1,15 @@
+<?php
+
+/**
+ * @file
+ * Mock module to test Inline Entity Form API.
+ */
+
+/**
+ * Implements hook_inline_entity_form_controller_info().
+ */
+function inline_entity_form_api_mock_inline_entity_form_controller_info() {
+  return array(
+    'node' => 'MockInlineEntityFormController',
+  );
+}
