diff --git a/commerce_autosku.commerce.inc b/commerce_autosku.commerce.inc
index 175e385..a04100f 100644
--- a/commerce_autosku.commerce.inc
+++ b/commerce_autosku.commerce.inc
@@ -77,7 +77,7 @@ function commerce_autosku_commerce_product_presave($product) {
     elseif (empty($product->sku) || _commerce_autosku_is_temporary_sku($product->sku) || $settings['advanced']['update_existing']) {
 
       // Generate the SKU.
-      $product->sku = commerce_autosku_generate_sku($product, $settings['pattern'], $settings['advanced']['case']);
+      $product->sku = commerce_autosku_generate_sku($product, $settings['pattern'], $settings['advanced']['case'], $settings['advanced']['replacement']);
     }
   }
 }
diff --git a/commerce_autosku.install b/commerce_autosku.install
index 45609de..009c079 100644
--- a/commerce_autosku.install
+++ b/commerce_autosku.install
@@ -11,6 +11,7 @@ function commerce_autosku_schema() {
   'export' => array(
     'key' => 'product_type',
     'key name' => 'Product Type',
+    'object factory' => '_commerce_autosku_object_factory',
     'api' => array(
       'owner' => 'commerce_autosku',
       'api' => 'autosku_pattern',
diff --git a/commerce_autosku.module b/commerce_autosku.module
index ac90e30..d973173 100644
--- a/commerce_autosku.module
+++ b/commerce_autosku.module
@@ -104,6 +104,14 @@ function commerce_autosku_form_commerce_product_ui_product_type_form_alter(&$for
     ),
     '#default_value' => $advanced['case'],
   );
+  $autosku['advanced']['replacement'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Replacement Character'),
+    '#size' => 2,
+    '#description' => t('The character to use as a replacement for any disallowed characters.'),
+    '#element_validate' => array('commerce_autosku_element_validate_replacement'),
+    '#default_value' => $advanced['replacement'],
+  );
 }
 
 function commerce_autosku_element_validate_sku_pattern(&$element, &$form_state) {
@@ -125,6 +133,12 @@ function commerce_autosku_element_validate_sku_pattern(&$element, &$form_state)
   }
 }
 
+function commerce_autosku_element_validate_replacement(&$element, &$form_state) {
+  if(preg_match(COMMERCE_AUTOSKU_DISALLOWED, $element['#value'])) {
+    form_error($element, t('Replacement character is not allowed.'));
+  }
+}
+
 /**
  * Implements hook_form_FORM_ID_alter().
  */
@@ -189,17 +203,18 @@ function _commerce_autosku_default_settings() {
     'update_existing' => TRUE,
     'hide_sku' => TRUE,
     'case' => 'original',
+    'replacement' => '',
   );
 }
 
 /**
  * API helper to reduce a SKU to a set of allowed characters.
  */
-function commerce_autosku_cleanstring($string) {
+function commerce_autosku_cleanstring($string, $replacement = '') {
   if (module_exists('transliteration')) {
     $string = transliteration_get($string);
   }
-  return preg_replace(COMMERCE_AUTOSKU_DISALLOWED, COMMERCE_AUTOSKU_REPLACEMENT, $string);
+  return preg_replace(COMMERCE_AUTOSKU_DISALLOWED, $replacement, $string);
 }
 
 /**
@@ -232,11 +247,11 @@ function commerce_autosku_features_pipe_commerce_product_type_alter(&$pipe, $dat
  *   A string containing a unique SKU for the product pass in using the given
  *   pattern with a numeric suffix in the event of a pre-existing matching SKU.
  */
-function commerce_autosku_generate_sku($product, $pattern, $case = 'original') {
+function commerce_autosku_generate_sku($product, $pattern, $case = 'original', $replacement = '') {
   // Create the new SKU using token replacement, clean out illegitimate values,
   // and trim it to the maximum SKU length - 255 characters.
   $sku = token_replace($pattern, array('commerce-product' => $product), array('clear' => TRUE));
-  $sku = commerce_autosku_cleanstring($sku);
+  $sku = commerce_autosku_cleanstring($sku, $replacement);
   $sku = drupal_substr($sku, 0, 255);
 
   // Adjust the casing as specified.
@@ -257,11 +272,24 @@ function commerce_autosku_generate_sku($product, $pattern, $case = 'original') {
     $i = 0;
 
     do {
-      $sku = drupal_substr($original_sku, 0, (255 - drupal_strlen(COMMERCE_AUTOSKU_REPLACEMENT . $i)));
-      $sku = commerce_autosku_cleanstring($sku . COMMERCE_AUTOSKU_REPLACEMENT . $i);
+      $sku = drupal_substr($original_sku, 0, (255 - drupal_strlen($replacement . $i)));
+      $sku = commerce_autosku_cleanstring($sku . $replacement . $i, $replacement);
       $i++;
     } while (!commerce_product_validate_sku_unique($sku, $product->product_id));
   }
 
   return $sku;
 }
+
+/**
+ * CTools export object factory callback to merge in default
+ * advanced settings.
+ *
+ * This lets us depend on having default values for the advanced
+ * settings that have been added since this module was released.
+ */
+function _commerce_autosku_object_factory($schema, $data) {
+  $pattern = _ctools_export_unpack_object($schema, $data);
+  $pattern->advanced += _commerce_autosku_default_settings();
+  return $pattern;
+}
\ No newline at end of file
diff --git a/commerce_autosku.test b/commerce_autosku.test
index c987c12..4497498 100644
--- a/commerce_autosku.test
+++ b/commerce_autosku.test
@@ -175,6 +175,34 @@ class CommerceAutoSkuTest extends CommerceBaseTestCase {
     $product = $this->commerceProductLoadWithReset(1);
     $this->assertIdentical('simpletest', $product->sku, t('SKU was lowercased.'));
 
+    // Test replacement character.
+    $edit['product_type[autosku][advanced][replacement]'] = '-';
+    $this->productTypeSubmit($edit);
+
+    $product_edit = array('title' => 'Simple*Test', 'commerce_price[' . LANGUAGE_NONE . '][0][amount]' => 500);
+    $this->drupalPost('admin/commerce/products/1/edit', $product_edit, 'Save product');
+    $product = $this->commerceProductLoadWithReset(1);
+    $this->assertIdentical('simple-test', $product->sku, 'Configured replacement character was used.');
+  }
+
+  /**
+   * Test that the default advanced settings are merged into loaded records
+   * that may not have all of the advanced settings.
+   */
+  public function testCommerceAutoSKUAdvancedDefaults() {
+    ctools_include('export');
+    $pattern = ctools_export_crud_new('commerce_autosku_patterns');
+    $pattern->product_type = 'nonexistent_product_type';
+    $pattern->pattern = '[commerce-product:title]';
+    $pattern->advanced = array(
+      'hide_sku' => FALSE,
+      'case' => 0,
+    );
+    ctools_export_crud_save('commerce_autosku_patterns', $pattern);
+
+    $pattern = ctools_export_crud_load('commerce_autosku_patterns', 'nonexistent_product_type');
+    $this->assertIdentical($pattern->advanced['replacement'], '', 'Replacement character is included in loaded record.');
+    $this->assertIdentical($pattern->advanced['hide_sku'], FALSE, 'Explicitly saved settings override defaults.');
   }
 
   /**
