diff --git a/classes/commerce_coupon.inc b/classes/commerce_coupon.inc
index d34661c..c056370 100644
--- a/classes/commerce_coupon.inc
+++ b/classes/commerce_coupon.inc
@@ -11,8 +11,12 @@ class CommerceCoupon extends Entity {
 
   public $is_active = TRUE;
   public $type;
-  
+
   public function __construct($values = array()) {
+    // Allow passing in the type entity.
+    if (isset($values['type']) && is_object($values['type'])) {
+      $values['type'] = $values['type']->type;
+    }
     parent::__construct($values, 'commerce_coupon');
   }
 }
diff --git a/commerce_coupon.info.inc b/commerce_coupon.info.inc
index 40cb402..46f33ae 100644
--- a/commerce_coupon.info.inc
+++ b/commerce_coupon.info.inc
@@ -22,7 +22,7 @@ function commerce_coupon_entity_property_info() {
   );
 
   $properties['type'] = array(
-    'type' => 'text',
+    'type' => 'commerce_coupon_type',
     'label' => t('Type'),
     'description' => t('The human readable name of the coupon type.'),
     'setter callback' => 'entity_property_verbatim_set',
@@ -41,24 +41,24 @@ function commerce_coupon_entity_property_info() {
     'schema field' => 'log_id',
   );
 
-  $properties['coupon_id'] = array(
-    'type' => 'integer',
-    'label' => t('Coupon ID', array(), array('context' => 'a drupal commerce coupon')),
-    'description' => t('The internal numeric ID of the coupon.'),
+  $properties['coupon'] = array(
+    'type' => 'commerce_coupon',
+    'label' => t('Coupon', array(), array('context' => 'a drupal commerce coupon')),
+    'description' => t('The associated coupon.'),
     'schema field' => 'coupon_id',
   );
 
-  $properties['uid'] = array(
-    'type' => 'integer',
-    'label' => t('User ID'),
-    'description' => t('The user id of the user which redeemed the coupon.'),
+  $properties['user'] = array(
+    'type' => 'user',
+    'label' => t('User'),
+    'description' => t('The user whose redeemed the coupon.'),
     'schema field' => 'uid',
   );
 
-  $properties['order_id'] = array(
-    'type' => 'integer',
-    'label' => t('Order ID'),
-    'description' => t('The order id on which this coupon log relies on.'),
+  $properties['order'] = array(
+    'type' => 'commerce_order',
+    'label' => t('Order'),
+    'description' => t('The order on which this coupon log relies on.'),
     'schema field' => 'order_id',
   );
 
diff --git a/modules/basic/commerce_coupon_basic.module b/modules/basic/commerce_coupon_basic.module
index 412707d..4db9693 100644
--- a/modules/basic/commerce_coupon_basic.module
+++ b/modules/basic/commerce_coupon_basic.module
@@ -244,7 +244,7 @@ function commerce_coupon_basic_apply_percentage_amounts($commerce_order) {
 
     $fields = $coupon->getPropertyInfo();
 
-    $component_name = 'commerce_coupon_apply_' . $coupon->type->value() . '_to_item_line';
+    $component_name = 'commerce_coupon_apply_' . $coupon->type->type->value() . '_to_item_line';
     if (isset($fields['commerce_coupon_percent_amount'])
       && $coupon->commerce_coupon_percent_amount->value() > 0
       && isset($components[$component_name])
