diff --git a/entityform.module b/entityform.module
index 10b055f..9c9568f 100644
--- a/entityform.module
+++ b/entityform.module
@@ -676,6 +676,54 @@ function entityform_views_api() {
   );
 }
 
+/**
+ * Implements hook_ctools_entity_context_alter().
+ */
+function entityform_ctools_entity_context_alter(&$plugin, &$entity, &$plugin_id) {
+  if ($plugin_id == 'entity_id:entityform_type') {
+    // Register alternative context callback for entityform_type.
+    // This is to allow the entityform_type name to be used in place of its ID.
+    $plugin['context'] = 'entityform_argument_entityform_type_id_context';
+  }
+}
+
+/**
+ * Discover if this argument gives us the entity we crave.
+ */
+function entityform_argument_entityform_type_id_context($arg = NULL, $conf = NULL, $empty = FALSE) {
+  $entity_type = explode(':', $conf['name']);
+  $entity_type = $entity_type[1];
+  // If unset it wants a generic, unfilled context.
+  if ($empty) {
+    return ctools_context_create_empty('entity:' . $entity_type);
+  }
+
+  // Convert entityform_type label to a loaded entityform_type object
+  // if the entityform_type name is provided.
+  if (is_string($arg)) {
+    $entityform_type = entityform_type_load($arg);
+
+    if (!empty($entityform_type->id)) {
+      $arg = $entityform_type->id;
+    }
+  }
+
+  // We can accept either an entity object or a pure id.
+  if (is_object($arg)) {
+    return ctools_context_create('entity:' . $entity_type, $arg);
+  }
+
+  if (!is_numeric($arg)) {
+    return FALSE;
+  }
+
+  $entity = entity_load($entity_type, array($arg));
+  if (!$entity) {
+    return FALSE;
+  }
+
+  return ctools_context_create('entity:' . $entity_type, $entity[$arg]);
+}
 
 /**
  * Implement hook_theme().
