diff --git a/schemaorg.module b/schemaorg.module
index f1af76d..d01771e 100644
--- a/schemaorg.module
+++ b/schemaorg.module
@@ -7,6 +7,97 @@
  */
 
 /**
+ * Implements hook_menu().
+ */
+function schemaorg_menu() {
+  $items['admin/config/services/schemaorg_templates'] = array(
+    'title'            => 'Schema.org templates',
+    'description'      => 'Import templates from schema.org.',
+    'page callback'    => 'drupal_get_form',
+    'page arguments'   => array('schemaorg_template_import_form'),
+    'access arguments' => array('access content overview'),
+  );
+  return $items;
+}
+
+function schemaorg_template_import_form($form, &$form_state) {
+  $form['type'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Type'),
+    '#required' => TRUE,
+    '#description' => t('Specify the type you want to associated to this content type e.g. Article, Blog, etc.'),
+    '#attributes' => array('class' => array('schemaorg-autocomplete-types')),
+  );
+  $form['#attached']['library'][] = array('system', 'ui.autocomplete');
+  $form['#attached']['css'][] = drupal_get_path('module', 'schemaorg') . '/css/schemaorg.jquery.ui.theme.css';
+  $form['#attached']['js'][] = drupal_get_path('module', 'schemaorg') . '/js/schemaorg.js';
+  $form['#attached']['js'][] =  array(
+          'data' => array('schemaorgapiTermsPath' => base_path() . drupal_get_path('module', 'schemaorg') . '/js/schemaorg.terms.json'),
+          'type' => 'setting'
+  );
+
+  $form['submit'] = array(
+    '#type' => 'submit',
+    '#value' => 'Generate template',
+  );
+
+  return $form;
+}
+
+function schemaorg_template_import_form_submit($form, &$form_state) {
+  $data = json_decode(file_get_contents(DRUPAL_ROOT . '/' . drupal_get_path('module', 'schemaorg') . "/js/all.json"));
+  $schemaorg_type = $form_state['values']['type'];
+
+  $types = array(
+    array(
+      'type' => $schemaorg_type,
+      'name' => $data->types->$schemaorg_type->label,
+      'description' => $data->types->$schemaorg_type->comment_plain,
+      'base' => 'node_content',
+      'custom' => 1,
+      'modified' => 1,
+      'locked' => 0,
+    ),
+  );
+
+  foreach ($types as $type) {
+    $type = node_type_set_defaults($type);
+    node_type_save($type);
+  }
+
+  foreach ($data->types->$schemaorg_type->properties as $property) {
+    if (!field_info_field('field_sorg_' . strtolower($property))) {
+      $field = array(
+        'field_name' => 'field_sorg_' . strtolower($property),
+        'type' => 'text',
+      );
+      field_create_field($field);
+    }
+
+    $instance = array(
+      'field_name' => 'field_ssorg1_' . strtolower($property),
+      'entity_type' => 'node',
+      'label' => $property,
+      'bundle' => $schemaorg_type,
+      'description' => $data->properties->$property->comment_plain,
+      'widget' => array(
+        'type' => 'text_textfield',
+        'module' => 'text',
+      ),
+      'display' => array(
+        'default' => array(
+          'type' => 'text_default',
+          'module' => 'text',
+        ),
+      ),
+    );
+    field_create_instance($instance);
+  }
+
+  drupal_set_message('Built template for ' . $data->types->$schemaorg_type->label . ' from schema.org');
+}
+
+/**
  * Implements hook_help().
  */
 function schemaorg_help($path, $arg) {
