diff --git a/custom_breadcrumbs.admin.inc b/custom_breadcrumbs.admin.inc
index 9d043be..e48d7b3 100644
--- a/custom_breadcrumbs.admin.inc
+++ b/custom_breadcrumbs.admin.inc
@@ -142,3 +142,15 @@ function custom_breadcrumbs_form_delete($form, &$form_state) {
   _custom_breadcrumbs_delete_breadcrumb($form_state['values']['bid']);
   $form_state['redirect'] = 'admin/build/custom_breadcrumbs';
 }
+
+function custom_breadcrumbs_settings_form(){
+  $form = array();
+
+  $form['breadcrumb_microdata'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Generate microdata'),
+    '#default_value' => variable_get('breadcrumb_microdata', 0),
+  );
+
+  return system_settings_form($form);
+}
diff --git a/custom_breadcrumbs.module b/custom_breadcrumbs.module
index d03b364..732105d 100644
--- a/custom_breadcrumbs.module
+++ b/custom_breadcrumbs.module
@@ -20,6 +20,14 @@ function custom_breadcrumbs_menu() {
     'file' => 'custom_breadcrumbs.admin.inc',
   );
 
+  $items['admin/settings/custom_breadcrumbs'] = array(
+    'title' => 'Custom breadcrumbs',
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('custom_breadcrumbs_settings_form'),
+    'access arguments' => array('administer custom breadcrumbs'),
+    'file'	=> "custom_breadcrumbs.admin.inc",
+  );
+
   $items['admin/build/custom_breadcrumbs/add'] = array(
     'title' => 'Add custom breadcrumb',
     'type' => MENU_CALLBACK,
@@ -51,7 +59,11 @@ function custom_breadcrumbs_perm() {
  * Implementation of hook_theme().
  */
 function custom_breadcrumbs_theme() {
-  return array('custom_breadcrumbs_help_identifiers' => array('arguments' => array()));
+  return array(
+    'custom_breadcrumbs_help_identifiers' => array('arguments' => array()),
+    'custom_breadcrumbs_microdata_itemscope' => array('arguments' => array('content' => NULL)),
+    'custom_breadcrumbs_microdata_title' => array('arguments' => array('content' => NULL)),
+  );
 }
 
 function custom_breadcrumbs_nodeapi($node, $op, $teaser, $page) {
@@ -63,7 +75,8 @@ function custom_breadcrumbs_nodeapi($node, $op, $teaser, $page) {
       $titles = module_exists('token') ? token_replace($titles, 'node', $node) : $titles;
       $paths = module_exists('token') ? token_replace($paths, 'node', $node) : $paths;
 
-      $trail = array(l(t('Home'), '<front>'));
+      $trail = array(_custom_breadcrumbs_create_crumb(t('Home'), '<front>'));
+
       for ($i = 0; $i < count($titles); $i++) {
         $title = trim($titles[$i]);
         if (($title != '') && ($title != '<none>')) {
@@ -145,23 +158,35 @@ function _custom_breadcrumbs_delete_breadcrumb($bid) {
  *   The desired URI and/or special identifier
  */
 function _custom_breadcrumbs_create_crumb($title, $original_path) {
-  // Decode title to properly handle special characters.
-  $title = decode_entities($title);
+  $options = array();
+
   // Collapse double slashes to one.
   $original_path = preg_replace('/\/+/', '/', $original_path);
   // Removing leading and trailing slashes.
   $original_path = preg_replace('/^\/|\/+$/', '', $original_path);
   list($identifier, $path) = explode("|", $original_path, 2);
-  if (isset($path) && $path !== '') {
-    switch (trim($identifier)) {
+
+  if(variable_get('breadcrumb_microdata', 0)){
+    if($identifier != '<none>'){
+      $title = theme('custom_breadcrumbs_microdata_title', $title);
+    }
+
+    $options = array('html'=>TRUE,
+                     'attributes' => array(
+                       'itemprop' => 'url',
+                     ));
+  }
+
+  if ($path) {
+    switch ($identifier) {
       case '<pathauto>':
         if (module_exists('pathauto')) {
           module_load_include('inc', 'pathauto', 'pathauto');
-          $crumb = l($title, pathauto_cleanstring($path, FALSE));
+          $crumb = l($title, pathauto_cleanstring($path, FALSE), $options);
         }
         break;
       default:
-        $crumb = l($title, $original_path);
+        $crumb = l($title, $original_path, $options);
     }
   }
   else {
@@ -171,10 +196,14 @@ function _custom_breadcrumbs_create_crumb($title, $original_path) {
         $crumb = check_plain($title);
         break;
       default:
-        $crumb = l($title, $original_path);
+        $crumb = l($title, $original_path, $options);
     }
   }
 
+  if($identifier != '<none>'){
+    $crumb = theme('custom_breadcrumbs_microdata_itemscope', $crumb);
+  }
+
   return $crumb;
 }
 
@@ -201,3 +230,17 @@ function theme_custom_breadcrumbs_help_identifiers() {
 
   return theme('table', $headers, $rows, array('class' => 'description'));
 }
+
+/**
+ * Return container tag for microdata
+ */
+function theme_custom_breadcrumbs_microdata_itemscope($value){
+  return '<div itemscope itemtype="http://data-vocabulary.org/Breadcrumb" class="itemscope">'.$value.'</div>';
+}
+
+/**
+ * Return container title tag for microdata
+ */
+function theme_custom_breadcrumbs_microdata_title($value){
+  return '<span itemprop="title">'.$value.'</span>';
+}
