diff --git a/term_level.info b/term_level.info
index 2064df8..34d9ef1 100755
--- a/term_level.info
+++ b/term_level.info
@@ -2,4 +2,5 @@ name = Term Level Field
 description = Field type for assigning terms with a level to an entity.
 core = 7.x
 files[] = term_level.module
-dependencies[] = taxonomy
\ No newline at end of file
+files[] = term_level.migrate.inc
+dependencies[] = taxonomy
diff --git a/term_level.migrate.inc b/term_level.migrate.inc
new file mode 100644
index e69de29..a4b2121 100755
--- /dev/null
+++ b/term_level.migrate.inc
@@ -0,0 +1,66 @@
+<?php
+/**
+ * @file
+ * Term Level Migrate hooks and implementation.
+ */
+
+/*
+ * Implements hook_migrate_api().
+ */
+function term_level_migrate_api() {
+  return array(
+    'api' => 2,
+    'field handlers' => array(
+      'MigrateTermLevelFieldHandler',
+    )
+  );
+}
+
+/**
+ * Primary value passed to this field must be tid of the referenced term.
+ *
+ * Subfields are used to specify the level.
+ *
+ * @code
+ *   $arguments = array('level' => array('source_field' => 'term_level'));
+ *   $this->addFieldMapping('field_term_level', 'term_tid')
+ *        ->arguments($arguments);
+ * @endcode
+ */
+class MigrateTermLevelFieldHandler extends MigrateFieldHandler {
+  public function __construct() {
+    $this->registerTypes(array('term_level'));
+  }
+
+  public function fields($type) {
+    return array(
+      'level' => t("Subfield: The term's level"),
+    );
+  }
+
+  public function prepare($entity, array $field_info, array $instance, array $values) {
+    $arguments = array();
+    if (isset($values['arguments'])) {
+      $arguments = array_filter($values['arguments']);
+      unset($values['arguments']);
+    }
+    $language = $this->getFieldLanguage($entity, $field_info, $arguments);
+
+    // Setup the standard Field API array for saving.
+    $delta = 0;
+    foreach ($values as $value) {
+      $return[$language][$delta] = array('tid' => $value);
+      if (isset($arguments['level'])) {
+        if (is_array($arguments['level'])) {
+          $return[$language][$delta]['level'] = $arguments['level'][$delta];
+        }
+        else {
+          $return[$language][$delta]['level'] = $arguments['level'];
+        }
+      }
+      $delta++;
+    }
+
+    return isset($return) ? $return : NULL;
+  }
+}
\ No newline at end of file
