diff --git a/commerce_coupon.module b/commerce_coupon.module
index be90b7c..c2abec6 100644
--- a/commerce_coupon.module
+++ b/commerce_coupon.module
@@ -144,14 +144,46 @@ function commerce_coupon_commerce_checkout_pane_info() {
  * Access callback for coupon types.
  */
 function commerce_coupon_type_access($op, $type = NULL, $account = NULL) {
-  return user_access('administer coupon types', $account);
+  if (user_access('administer coupons types', $account)) {
+    return TRUE;
+  }
+  if ($op == 'view') {
+    if (user_access('view coupons types')) {
+      return TRUE;
+    }
+  }
+
+  if ($op == 'create' && user_access('create coupons types')) {
+    return TRUE;
+  }
+
+  if (($op == 'update' || $op == 'delete') && user_access('edit coupons types')) {
+    return TRUE;
+  }
+  return FALSE;
 }
 
 /**
  * Access callback for coupons
  */
 function commerce_coupon_access($op, $type = NULL, $account = NULL) {
-  return user_access('administer coupons', $account);
+  if (user_access('administer coupons', $account)) {
+    return TRUE;
+  }
+  if ($op == 'view') {
+    if (user_access('view coupons')) {
+      return TRUE;
+    }
+  }
+
+  if ($op == 'create' && user_access('create coupons')) {
+    return TRUE;
+  }
+
+  if (($op == 'update' || $op == 'delete') && user_access('edit coupons')) {
+    return TRUE;
+  }
+  return FALSE;
 }
 
 /**
@@ -168,10 +200,36 @@ function commerce_coupon_permission() {
     'administer coupon types' => array(
       'title' => t('Administer Coupon Types'),
       'description' => t('Allows users to manage coupon types.'),
+      'restricted' => TRUE,
+    ),
+    'create coupon types' => array(
+      'title' => t('Create Coupon Types'),
+      'description' => t('Allows users to create coupon types.'),
+    ),
+    'edit coupon types' => array(
+      'title' => t('View Coupon Types'),
+      'description' => t('Allows users to edit coupon types.'),
+    ),
+    'view coupon types' => array(
+      'title' => t('View Coupon Types'),
+      'description' => t('Allows users to view coupon types.'),
     ),
     'administer coupons' => array(
       'title' => t('Administer Coupons'),
       'description' => t('Allows users to manage coupons.'),
+      'restricted' => TRUE,
+    ),
+    'create coupon' => array(
+      'title' => t('Create Coupons'),
+      'description' => t('Allows users to create coupons.'),
+    ),
+    'edit coupon' => array(
+      'title' => t('Edit Coupons'),
+      'description' => t('Allows users to edit coupons.'),
+    ),
+    'view coupon' => array(
+      'title' => t('View Coupons'),
+      'description' => t('Allows users to view coupons.'),
     ),
   );
   return $permissions;
