diff --git a/commerce_discount.module b/commerce_discount.module
index 04cd5a2..bd52c71 100644
--- a/commerce_discount.module
+++ b/commerce_discount.module
@@ -676,6 +676,53 @@ function commerce_discount_compatibility_strategies() {
 }
 
 /**
+ * Returns the compatibility strategy for the given discount.
+ *
+ * @param \CommerceDiscount $discount
+ *   A Commerce Discount object with a commerce_compatibility_strategy field.
+ *
+ * @return string
+ *   The discount's compatibility strategy or 'any' if none is set.
+ */
+function commerce_discount_get_compatibility_strategy($discount) {
+  $discount_wrapper = entity_metadata_wrapper('commerce_discount', $discount);
+  $strategy = $discount_wrapper->commerce_compatibility_strategy->value();
+
+  // If the compatibility strategy is not set, default to 'any'.
+  if (empty($strategy)) {
+    $strategy = 'any';
+  }
+
+  // Note that if the field is set to an unknown value, we still return it. The
+  // default condition for evaluating discount compatibility will pass through
+  // unknown discount strategies, so modules that set them are responsible also
+  // to evaluate them on behalf of all discounts.
+  return $strategy;
+}
+
+/**
+ * Returns the compatibility selection for the given discount.
+ *
+ * @param \CommerceDiscount $discount
+ *   A Commerce Discount object with a commerce_compatibility_selection field.
+ *
+ * @return int[]
+ *   An array of discount IDs selected for the discount's compatibility strategy
+ *   or an empty array if none are selected (or a non-array value is found).
+ */
+function commerce_discount_get_compatibility_selection($discount) {
+  $discount_wrapper = entity_metadata_wrapper('commerce_discount', $discount);
+  $selection = $discount_wrapper->commerce_compatibility_selection->raw();
+
+  // Ensure the selection is an array.
+  if (!is_array($selection)) {
+    $selection = array();
+  }
+
+  return $selection;
+}
+
+/**
  * Returns a list of discounts applied to make a particular price as determined
  * by its price components.
  *
@@ -684,7 +731,7 @@ function commerce_discount_compatibility_strategies() {
  *
  * @return array
  */
-function commerce_discount_applied_to_price($price) {
+function commerce_discount_get_discounts_applied_to_price($price) {
   $applied_discounts = array();
 
   // Return early if the price has no components.
diff --git a/commerce_discount.rules.inc b/commerce_discount.rules.inc
index f813b22..9631dc2 100644
--- a/commerce_discount.rules.inc
+++ b/commerce_discount.rules.inc
@@ -352,19 +352,17 @@ function commerce_discount_compatibility_check(EntityDrupalWrapper $order_wrappe
   }
 
   // Get the strategy from the compatibility strategy field.
-  $discount_wrapper = entity_metadata_wrapper('commerce_discount', $discount);
-  $strategy = $discount_wrapper->commerce_compatibility_strategy->value();
+  $strategy = commerce_discount_get_compatibility_strategy($discount);
 
   // Determine which discounts have been applied to the order thus far.
   $order_total = $order_wrapper->commerce_order_total->value();
-  $applied_discounts = commerce_discount_applied_to_price($order_total);
+  $applied_discounts = commerce_discount_get_discounts_applied_to_price($order_total);
 
   // Ensure none of them indicate they are incompatible with the current one.
   foreach ($applied_discounts as $applied_discount_id => $applied_discount_name) {
     // Determine the strategy of the existing discount.
     $existing_discount = entity_load_single('commerce_discount', $applied_discount_name);
-    $existing_discount_wrapper = entity_metadata_wrapper('commerce_discount', $existing_discount);
-    $existing_strategy = $existing_discount_wrapper->commerce_compatibility_strategy->value();
+    $existing_strategy = commerce_discount_get_compatibility_strategy($existing_discount);
 
     // If the discount is compatible with any other discount, continue on.
     if ($existing_strategy == 'any') {
@@ -377,7 +375,7 @@ function commerce_discount_compatibility_check(EntityDrupalWrapper $order_wrappe
     }
 
     // Get the selected discount value from the existing discount.
-    $existing_selection = $existing_discount_wrapper->commerce_compatibility_selection->raw();
+    $existing_selection = commerce_discount_get_compatibility_selection($existing_discount);
 
     // If the discount is incompatible with select discounts and the current
     // discount was selected, return FALSE.
@@ -399,7 +397,7 @@ function commerce_discount_compatibility_check(EntityDrupalWrapper $order_wrappe
   }
 
   // Get the selected discount value from the disocunt being evaluated.
-  $selection = $discount_wrapper->commerce_compatibility_selection->raw();
+  $selection = commerce_discount_get_compatibility_selection($discount);
 
   // If the discount is not compatible with selected discounts, ensure they
   // are not on the order.
diff --git a/commerce_discount.test b/commerce_discount.test
index 6913791..851aa0c 100644
--- a/commerce_discount.test
+++ b/commerce_discount.test
@@ -157,7 +157,7 @@ class CommerceDiscountTestBase extends CommerceBaseTestCase {
     // components in its order total array.
     $order_wrapper = entity_metadata_wrapper('commerce_order', $order);
     $order_total = $order_wrapper->commerce_order_total->value();
-    $applied_discounts = commerce_discount_applied_to_price($order_total);
+    $applied_discounts = commerce_discount_get_discounts_applied_to_price($order_total);
 
     // Look for the given discount in the list of applied discounts.
     return in_array($discount_name, $applied_discounts);
diff --git a/includes/commerce_discount.admin.inc b/includes/commerce_discount.admin.inc
index e5887e0..2d8c53a 100644
--- a/includes/commerce_discount.admin.inc
+++ b/includes/commerce_discount.admin.inc
@@ -240,6 +240,11 @@ function commerce_discount_form($form, &$form_state, CommerceDiscount $commerce_
     $field_form['#attributes']['class'][] = 'commerce-discount-box';
   }
 
+  // Ensure the compatibility strategy field has a default value.
+  if (empty($form['commerce_discount_fields']['commerce_compatibility_strategy']['#default_value'])) {
+    $form['commerce_discount_fields']['commerce_compatibility_strategy']['#default_value'] = 'any';
+  }
+
   // Add visibility states to the discount compatibility selection field.
   $form['commerce_discount_fields']['commerce_compatibility_selection']['#states'] = array(
     'visible' => array(
