diff --git a/commerce_features.module b/commerce_features.module
index 1b06ca0..d389ae2 100644
--- a/commerce_features.module
+++ b/commerce_features.module
@@ -14,12 +14,23 @@ function commerce_features_features_api() {
       'name' => t('Commerce product types'),
       'feature_source' => TRUE,
       'default_hook' => 'commerce_product_default_types',
-  		'file' => drupal_get_path('module', 'commerce_features') .'/commerce_product_type.features.inc',
+      'file' => drupal_get_path('module', 'commerce_features') .'/commerce_product_type.features.inc',
+    ),
+    'commerce_tax_type' => array(
+      'name' => t('Commerce tax types'),
+      'features_source' => TRUE,
+      'default_hook' => 'commerce_tax_default_types',
+      'file' => drupal_get_path('module', 'commerce_features') .'/commerce_tax_type.features.inc',
+    ),
+    'commerce_tax_rate' => array(
+      'name' => t('Commerce tax rates'),
+      'features_source' => TRUE,
+      'default_hook' => 'commerce_tax_default_rates',
+      'file' => drupal_get_path('module', 'commerce_features') .'/commerce_tax_rate.features.inc',
     ),
   );
 }
 
-
 /**
  * Implements hook_menu_alter().
  *
@@ -32,4 +43,37 @@ function commerce_features_menu_alter(&$items) {
       unset($items['admin/commerce/products/types/' . $type_arg . '/delete']);
     }
   }
-}
\ No newline at end of file
+
+  foreach (module_implements('commerce_tax_default_rates') as $module) {
+    foreach (module_invoke($module, 'commerce_tax_default_rates') as $name => $tax_rate) {
+      $name_arg = strtr($name, '_', '-');
+      $items['admin/commerce/config/taxes/rates/' . $name_arg] = array(
+        'title callback' => 'commerce_tax_ui_tax_rate_title',
+        'title arguments' => array($name),
+        'description' => 'Edit a tax rate.',
+        'page callback' => 'drupal_get_form',
+        'page arguments' => array('commerce_tax_ui_tax_rate_form', $tax_rate),
+        'access arguments' => array('administer taxes'),
+        'file' => drupal_get_path('module', 'commerce_tax') . '/includes/commerce_tax_ui.admin.inc',
+      );
+      $items['admin/commerce/config/taxes/rates/' . $name_arg . '/edit'] = array(
+        'title' => 'Edit',
+        'type' => MENU_DEFAULT_LOCAL_TASK,
+        'context' => MENU_CONTEXT_PAGE | MENU_CONTEXT_INLINE,
+        'weight' => 0,
+      );
+    }
+  }
+}
+
+/**
+ * Implements hook_commerce_tax_rate_info_alter().
+ */
+function commerce_features_commerce_tax_rate_info_alter(&$tax_rates) {
+  // Default all commerce_features defined rates to appear in the admin list.
+  foreach ($tax_rates as $name => &$tax_rate) {
+    if ($tax_rate['module'] == 'commerce_features') {
+      $tax_rate += array('admin_list' => ($tax_rate['module'] == 'commerce_features'));
+    }
+  }
+}
diff --git a/commerce_tax_rate.features.inc b/commerce_tax_rate.features.inc
new file mode 100644
index 0000000..4a38910
--- /dev/null
+++ b/commerce_tax_rate.features.inc
@@ -0,0 +1,93 @@
+<?php
+
+/**
+ * Implements hook_features_export().
+ */
+function commerce_tax_rate_features_export($data, &$export, $module_name = '') {
+  $pipe = array();
+
+  $export['dependencies']['features'] = 'features';
+  $export['dependencies']['commerce_features'] = 'commerce_features';
+  $export['dependencies']['commerce_tax_ui'] = 'commerce_tax_ui';
+  $export['dependencies']['rules'] = 'rules';
+
+  // Get the list of the commerce rates and export them plus the rules
+  // component which is related.
+  $info = commerce_tax_rates();
+  foreach ($data as $rate) {
+    $export['dependencies'][$info[$rate]['module']] = $info[$rate]['module'];
+    $export['features']['commerce_tax_rate'][$rate] = $rate;
+    $export['features']['rules_config']['commerce_tax_rate_' . $rate] = 'commerce_tax_rate_' . $rate;
+  }
+  return $pipe;
+}
+
+/**
+ * Implements hook_features_export_options().
+ */
+function commerce_tax_rate_features_export_options() {
+  $feature_rates = array();
+  $tax_rates = commerce_tax_rates();
+  if (!empty($tax_rates)) {
+    foreach($tax_rates as $rate) {
+      $feature_rates[$rate['name']] = $rate['display_title'];
+    }
+  }
+  return $feature_rates;
+}
+
+/**
+ * Implements hook_features_export_render().
+ */
+function commerce_tax_rate_features_export_render($module, $data, $export = NULL) {
+  $info = commerce_tax_rates();
+
+  $output = array();
+  $output[] = '  $items = array(';
+  foreach ($data as $type) {
+    if (isset($info[$type]) && $tax_rate = $info[$type]) {
+      $output[] = "    '{$type}' => " . features_var_export($tax_rate) . ",";
+    }
+
+  }
+  $output[] = '  );';
+  $output[] = '  return $items;';
+  $output = implode("\n", $output);
+  return array('commerce_tax_default_rates' => $output);
+}
+
+/**
+ * Implements hook_features_revert().
+ */
+function commerce_tax_rate_features_revert($module = NULL) {
+  // Get default tax rates.
+  if (module_hook($module, 'commerce_tax_default_rates')) {
+    $default_rates = module_invoke($module, 'commerce_tax_default_rates');
+    $existing_rates = commerce_tax_rates();
+    foreach ($default_rates as $rate) {
+      // Add / or update
+      if (!isset($existing_rates[$rate['name']])) {
+        $rate['is_new'] = TRUE;
+      }
+      // Use UI function because it provides already the logic we need
+      module_invoke('commerce_tax_ui', 'tax_rate_save', $rate, TRUE);
+    }
+  }
+  else {
+    drupal_set_message(t('Could not load default tax rates.'), 'error');
+    return FALSE;
+  }
+
+  // Re-Cache
+  commerce_tax_rates_reset();
+
+  menu_rebuild();
+  return TRUE;
+}
+
+/**
+ * Implements hook_features_rebuild().
+ */
+function commerce_tax_rate_features_rebuild($module) {
+  return commerce_tax_rate_features_revert($module);
+}
diff --git a/commerce_tax_type.features.inc b/commerce_tax_type.features.inc
new file mode 100644
index 0000000..9032dfe
--- /dev/null
+++ b/commerce_tax_type.features.inc
@@ -0,0 +1,89 @@
+<?php
+
+/**
+ * Implements hook_features_export().
+ */
+function commerce_tax_type_features_export($data, &$export, $module_name = '') {
+  $pipe = array();
+
+  $export['dependencies']['features'] = 'features';
+  $export['dependencies']['commerce_tax'] = 'commerce_tax';
+  $export['dependencies']['rules'] = 'rules';
+
+  // Get the list of the commerce types and export them plus the rules
+  // component which is related.
+  $info = commerce_tax_types();
+  foreach ($data as $type) {
+    $export['dependencies'][$info[$type]['module']] = $info[$type]['module'];
+    $export['features']['commerce_tax_type'][$type] = $type;
+  }
+  return $pipe;
+}
+
+/**
+ * Implements hook_features_export_options().
+ */
+function commerce_tax_type_features_export_options() {
+  $feature_types = array();
+  $tax_types = commerce_tax_types();
+  if (!empty($tax_types)) {
+    foreach($tax_types as $type) {
+      $feature_types[$type['name']] = $type['display_title'];
+    }
+  }
+  return $feature_types;
+}
+
+/**
+ * Implements hook_features_export_render().
+ */
+function commerce_tax_type_features_export_render($module, $data, $export = NULL) {
+  $info = commerce_tax_types();
+  $output = array();
+  $output[] = '  $items = array(';
+  foreach ($data as $type) {
+    if (isset($info[$type]) && $tax_type = $info[$type]) {
+      $output[] = "    '{$type}' => " . features_var_export($tax_type) . ",";
+    }
+  }
+  $output[] = '  );';
+  $output[] = '  return $items;';
+  $output = implode("\n", $output);
+  return array('commerce_tax_default_types' => $output);
+}
+
+/**
+ * Implements hook_features_revert().
+ */
+function commerce_tax_type_features_revert($module = NULL) {
+  // Get default tax types
+  if (module_hook($module, 'commerce_tax_default_types')) {
+    $default_types = module_invoke($module, 'commerce_tax_default_types');
+    $existing_types = commerce_tax_types();
+    foreach ($default_types as $type) {
+      // Add / or update
+      if (!isset($existing_types[$type['type']])) {
+        $type['is_new'] = TRUE;
+      }
+      // Use UI function because it provides already the logic we need
+      module_invoke('commerce_tax_ui', 'tax_type_save', $type);
+    }
+  }
+  else {
+    drupal_set_message(t('Could not load default tax types.'), 'error');
+    return FALSE;
+  }
+
+  // Re-Cache
+  commerce_tax_types_reset();
+
+  menu_rebuild();
+  return TRUE;
+}
+
+/**
+ * Implements hook_features_rebuild().
+ */
+function commerce_tax_type_features_rebuild($module) {
+  return commerce_tax_type_features_revert($module);
+}
