diff --git a/menu_token.admin.inc b/menu_token.admin.inc
index 1cfcf44..720a5bd 100644
--- a/menu_token.admin.inc
+++ b/menu_token.admin.inc
@@ -200,8 +200,9 @@ function menu_token_form_menu_edit_item_submit($form, &$form_state) {
         }
       }
     }
-	if (!$stored) {
-		
+	if (!array_key_exists("uuid", $values['options'])) {
+		module_load_include("module", "uuid", "uuid");
+		$values['options']['uuid'] = uuid_uuid();
 	}
   }
 }
diff --git a/menu_token.features.inc b/menu_token.features.inc
new file mode 100644
index 0000000..96f50cb
--- /dev/null
+++ b/menu_token.features.inc
@@ -0,0 +1,168 @@
+<?php
+
+
+function menu_token_features_export_options() {
+	
+	$menu_links = menu_parent_options(array_reverse(menu_get_menus()), NULL);
+	
+	  $options = array();
+	  foreach ($menu_links as $key => $name) {
+		
+	    list($menu_name, $mlid) = explode(':', $key, 2);
+	
+	    if ($mlid != 0) {
+	      $link = menu_link_load($mlid);
+	      $options[menu_token_features_identifier($link)] = "{$menu_name}: {$name}";
+	    }
+	  }
+	return $options;
+}
+
+function menu_token_features_identifier($link) {
+	
+	if (!array_key_exists("uuid", $link['options'])) {
+		module_load_include("module", "menu_token", "menu_token");
+		$link['options']['uuid'] = _menu_token_generate_uuid($link['mlid']);
+	}
+	return "menu-token-".$link['options']['uuid'];
+}
+
+function menu_token_features_menu_item_load($identifier) {
+	$link =  db_fetch_array(db_query("SELECT mt.uuid, menu_name, mt.mlid as mlid, plid, mt.link_path as link_path, router_path, link_title, options, module, hidden, external, has_children, expanded, weight FROM {menu_links} ml left join {menu_token} mt on mt.mlid = ml.mlid WHERE mt.uuid = '%s'", $identifier));
+	
+	if (is_array($link) && count($link)) {
+		$link['options'] = unserialize($link['options']);
+		return $link; 
+	} else return FALSE;
+}
+
+
+/**
+ * Implementation of hook_features_export().
+ */
+function menu_token_features_export($data, &$export, $module_name = '') {
+	
+  // Default hooks are provided by the feature module so we need to add
+  // it as a dependency.
+  $export['dependencies']['features'] = 'features';
+  $export['dependencies']['menu'] = 'menu';
+  $export['dependencies']['uuid'] = 'uuid';
+  $export['dependencies']['menu_token'] = 'menu_token';
+
+  // Collect a link to module map
+  $pipe = array();
+  foreach ($data as $identifier) {
+    if ($link = menu_token_features_menu_item_load($identifier)) {
+      
+        //$export['features']['menu_token'][$identifier] = "{$link['menu_name']}: {$link['link_title']}";
+        $export['features']['menu_token'][$identifier] = $identifier;
+      
+      // For now, exclude a variety of common menus from automatic export.
+      // They may still be explicitly included in a Feature if the builder
+      // chooses to do so.
+      if (!in_array($link['menu_name'], array('features', 'primary-links', 'secondary-links', 'navigation', 'admin', 'devel'))) {
+        $pipe['menu_custom'][] = $link['menu_name'];
+      }
+    }
+  }
+  return $pipe;
+}
+
+
+/**
+ * Implementation of hook_features_export_render()
+ */
+function menu_token_features_export_render($module, $data) {
+	
+  $code = array();
+  $code[] = '  $menu_token_defaults = array();';
+  $code[] = '';
+  $translatables = array();
+if ($module== "menu_token") {
+	print_r($data);
+	exit();
+}
+
+  foreach ($data as $identifier) {
+	$link = menu_token_features_menu_item_load($identifier);
+    if (is_array($link)) {
+      // Replace plid with a parent path.
+      if (!empty($link['plid']) && $parent = menu_link_load($link['plid'])) {
+			module_load_include("module", "menu_token", "menu_token");
+        $link['parent_uuid'] = $parent['options']['uuid'];
+      }
+      unset($link['plid']);
+      unset($link['mlid']);
+
+      $code[] = "  // Exported menu link: {$identifier}";
+      $code[] = "  \$menu_token_defaults['{$identifier}'] = ". features_var_export($link, '  ') .";";
+      $translatables[] = $link['link_title'];
+    } else {
+		$code[] = " \$menu_token_defaults['{$identifier}'] = array('one' => 'item');";
+	}
+  }
+  if (!empty($translatables)) {
+    $code[] = features_translatables_export($translatables, '  ');
+  }
+
+  $code[] = '';
+  $code[] = '  return $menu_token_defaults;';
+  $code = implode("\n", $code);
+  return array('menu_token_defaults' => $code);
+}
+
+
+
+function menu_token_features_revert($module) {
+
+	menu_token_features_rebuild($module);
+}
+
+function menu_token_features_rebuild($module){
+	
+	if ($menu_tokens = features_get_default('menu_token', $module)) {
+    	menu_token_features_rebuild_ordered($menu_tokens);
+  	}
+}
+
+function menu_token_features_rebuild_ordered($menu_links, $reset = FALSE) {
+	
+	foreach($menu_links as $identifier => $link) {
+		menu_token_item_feature_save($identifier, $menu_links);
+	}
+}
+
+function menu_token_item_feature_save($identifier, &$menu_items) {
+	
+	//is there a parent?
+	if (array_key_exists("parent_uuid", $menu_items[$identifier])) {
+		//does the parent exist?
+		$parent = menu_token_features_menu_item_load($menu_items[$identifier]['parent_uuid']);
+		if (!empty($parent)) {
+			$menu_items[$identifier]['plid'] = $parent['mlid'];
+		} else {
+			if (array_key_exists($menu_items[$identifier]['parent_uuid'], $menu_items)) {
+			    $menu_items[$identifier]['plid'] = menu_token_item_feature_save($menu_items[$identifier]['parent_uuid'], $menu_items);
+			}
+		}
+		
+	} else {
+		$menu_items[$identifier]['plid'] = 0;
+	}
+	if(array_key_exists("menu_token_link_path", $menu_items[$identifier]['options'])) {
+		$menu_items[$identifier]['link_path'] = "<front>";
+		}
+    $menu_items[$identifier]['mlid'] = menu_link_save($menu_items[$identifier]);
+	$result = db_fetch_array(db_query("select * from {menu_token} where mlid= %d", $menu_items[$identifier]['mlid']));
+	  if (!empty($result)) {
+		db_query("update {menu_token} set (mlid, link_path, uuid) values (%d, '%s', '%s')", 
+			$menu_items[$identifier]['mlid'], $menu_items[$identifier]['options']['menu_token_link_path'], $identifier);
+	} else {
+		db_query("insert into {menu_token} (mlid, link_path, uuid) values (%d, '%s', '%s')", 
+			$menu_items[$identifier]['mlid'], $menu_items[$identifier]['options']['menu_token_link_path'], $identifier);
+	}
+	
+	return $menu_items[$identifier]['mlid'];
+}
+
+
diff --git a/menu_token.info b/menu_token.info
index d8a6a8a..0df1a21 100644
--- a/menu_token.info
+++ b/menu_token.info
@@ -3,5 +3,6 @@ description = "Provides tokens in menu items(links)."
 dependencies[] = token
 dependencies[] = ctools
 dependencies[] = menu
+dependencies[] = uuid
 
 core = 6.x
diff --git a/menu_token.install b/menu_token.install
index 58d2b2d..25ede40 100644
--- a/menu_token.install
+++ b/menu_token.install
@@ -24,7 +24,14 @@ function menu_token_schema() {
         'not null' => TRUE,
         'default' => '',
       ),
-    ),
+	 "uuid" => array(
+			'type' => 'varchar',
+	        'length' => 64,
+	        'not null' => true,
+	        'default' => '',
+	        'description' => 'The Universally Unique Identifier.',
+		)
+	),
     'primary key' => array('mlid'),
   );
 
@@ -63,7 +70,7 @@ function menu_token_update_6000() {
         'description' => t('The actual path with tokens'),
         'type' => 'varchar',
         'length' => 255,
-        'not null' => TRUE,
+        'not null' => true,
         'default' => '',
       ),
     ),
@@ -93,6 +100,10 @@ function menu_token_update_6000() {
 
 
 function menu_token_update_6001() {
+	$schema = menu_token_schema();
+	$ret = array();
+	
+	db_add_field($ret, "menu_token", "uuid", $schema['menu_token']['fields']['uuid']);
 	$q = db_query('SELECT * FROM {menu_token}');
 	while($result = db_fetch_array($q)) {
 		$q2 = db_fetch_array(db_query("select options from {menu_links} where mlid = %d", $result['mlid']));
@@ -103,7 +114,13 @@ function menu_token_update_6001() {
 		if (!array_key_exists("attributes", $options)) {
 			$options['attributes'] = array("title" => "");
 		}
+		if (!array_key_exists("uuid", $options)) {
+			module_load_include("module", "uuid", "uuid");
+			$options['uuid'] = uuid_uuid();
+		}
+		$ret[] = db_query("update {menu_token} set uuid='%s' where mlid= %d",  $options['uuid'], $result['mlid']);
 		$ret[] = db_query("update {menu_links} set options = '%s' where mlid = %d", serialize($options), $result['mlid']);
 	}
   return $ret;
-}
\ No newline at end of file
+}
+
diff --git a/menu_token.module b/menu_token.module
index 5dca310..17e799f 100644
--- a/menu_token.module
+++ b/menu_token.module
@@ -7,6 +7,22 @@
 
 module_load_include('inc', 'menu_token');
 module_load_include('inc', 'menu_token', 'menu_token.admin');
+module_load_include("inc", "menu_token", "menu_token.features");
+
+
+function menu_token_features_api() {
+	module_load_include("inc", "menu_token", "menu_token.features");
+	return array(
+	  'menu_token' => array(
+      	'name' => t('Menu Token Links'),
+	      'default_hook' => 'menu_token_defaults',
+	      'default_file' => FEATURES_DEFAULTS_INCLUDED,
+	      'features_source' => TRUE,
+	      'file' => drupal_get_path("module","menu_token")."/menu_token.features.inc"
+		)
+	);
+}
+
 
 /**
  * Implementation of hook_theme().
@@ -215,4 +231,29 @@ function _menu_token_url_is_external($path) {
   return $colonpos !== FALSE && !preg_match('![/?#]!', substr($path, 0, $colonpos)) && check_url($path) == $path;
 }
 
+/* generate a UUID for menu item, Save it to the options array, and return it */
+
+function _menu_token_generate_uuid($mlid) {
+	$optResult = db_fetch_array(db_query("select options from {menu_links} where mlid = #d", $mlid));
+	$options = unserialize($optResult);
+	if (! array_key_exists('uuid', $options)) {
+		module_load_include("module", "uuid", "uuid");
+		$options['uuid'] = uuid_uuid();
+	}
+	if (!array_key_exists("attributes", $options)) {
+		$options['attributes'] = array("title" => "");
+	}
+	$tokenResult = db_fetch_array(db_query("select uuid from {menu_token} where mlid = #d", $mlid));
+	if (empty($tokenResult)) {
+		$res = db_query("insert into {menu_token} (mlid, uuid) values (%d, '%s');", $mlid, $options['uuid']);
+	} elseif($tokenResult['uuid'] != $options['uuid']) {
+		$res = db_query("update {menu_token} set uuid = '%s' where mlid = %d", $options['uuid'], $mlid );
+	}
+	db_query("update {menu_links} set options = '%s' where mlid = %d", serialize($options), $mlid);
+	return $options['uuid'];
+}
 
+function menu_token_find_menu_link_by_uuid($uuid) {
+	$result = db_fetch_array(db_query("select mlid from {menu_token} where uuid = '%s'", $uuid));
+	return menu_link_load($result['mlid']);
+}
\ No newline at end of file

