diff --git a/uc_order/uc_order.rules.inc b/uc_order/uc_order.rules.inc
index 2645b0e..1365eef 100644
--- a/uc_order/uc_order.rules.inc
+++ b/uc_order/uc_order.rules.inc
@@ -226,6 +226,31 @@ function uc_order_rules_condition_info() {
       ),
     ),
   );
+  $conditions['uc_order_condition_has_productclass'] = array(
+    'label' => t("Check an order's product classes"),
+    'group' => t('Order: Product'),
+    'base' => 'uc_order_condition_has_productclass',
+    'parameter' => array(
+      'order' => array(
+        'type' => 'uc_order',
+        'label' => t('Order'),
+      ),
+      'productclasses' => array(
+        'type' => 'list<text>',
+        'label' => t('Product Classes'),
+        'options list' => 'uc_order_condition_has_productclass_options',
+        'restriction' => 'input',
+      ),
+      'required' => array(
+        'type' => 'boolean',
+        'label' => t('Require selected product classes'),
+      ),
+      'forbidden' => array(
+        'type' => 'boolean',
+        'label' => t('Forbid other product classes'),
+      ),
+    ),
+  );
 
   return $conditions;
 }
@@ -379,6 +404,48 @@ function uc_order_condition_billing_country($order, $countries) {
 }
 
 /**
+ * Checks that the order has the selected combination of product classes.
+ */
+function uc_order_condition_has_productclass($order, $productclasses, $required, $forbidden) {
+  $order_productclasses = array();
+  foreach ($order->products as $product) {
+    $order_productclasses[] = $product->type;
+  }
+  $required_productclasses = array_intersect($productclasses, $order_productclasses);
+  if ($required) {
+    $required_check = ($required_productclasses == $productclasses);
+  }
+  else {
+    $required_check = (bool) count($required_productclasses);
+  }
+  if ($forbidden) {
+    $forbidden_productclasses = array_diff($order_productclasses, $productclasses);
+    $forbidden_check = (bool) count($forbidden_productclasses);
+  }
+  else {
+    $forbidden_check = FALSE;
+  }
+
+  return $required_check && !$forbidden_check;
+}
+
+/**
+ * Options callback.
+ *
+ * @see uc_order_condition_has_product_class()
+ */
+function uc_order_condition_has_productclass_options() {
+  $options = array();
+
+  $result = db_query('SELECT * FROM {uc_product_classes}');
+  foreach ($result as $class) {
+    $options += array($class->pcid => $class->name);
+  }
+
+  return $options;
+}
+
+/**
  * Checks that the order has the selected combination of products.
  */
 function uc_order_condition_has_products($order, $products, $required, $forbidden) {
@@ -410,7 +477,7 @@ function uc_order_condition_has_products($order, $products, $required, $forbidde
  */
 function uc_order_condition_has_products_options() {
   $options = array();
-  $result = db_query("SELECT nid FROM {uc_products}");
+  $result = db_query('SELECT nid FROM {uc_products}');
   foreach ($result as $row) {
     $options += uc_product_get_models($row->nid, FALSE);
   }
@@ -465,7 +532,7 @@ function uc_order_condition_count_products($order, $products, $count, $op) {
  */
 function uc_order_condition_products_options() {
   $options = array('all' => t('- All products -'));
-  $options += db_query("SELECT nid, model FROM {uc_products} ORDER BY model")->fetchAllKeyed();
+  $options += db_query('SELECT nid, model FROM {uc_products} ORDER BY model')->fetchAllKeyed();
 
   return $options;
 }
