diff --git a/docroot/sites/all/modules/contrib/entity_print/entity_print.module b/docroot/sites/all/modules/contrib/entity_print/entity_print.module
index e77e857..42ccb9d 100644
--- a/docroot/sites/all/modules/contrib/entity_print/entity_print.module
+++ b/docroot/sites/all/modules/contrib/entity_print/entity_print.module
@@ -54,16 +54,31 @@ function entity_print_menu()  {
  *   TRUE if they have access otherwise FALSE.
  */
 function entity_print_access($entity_type, $entity_id) {
-  // The user can't use our entity print module.
-  if (!user_access('entity print access')) {
-    return FALSE;
+  // Check if the user is allowed to use entity print for all entity types and bundles.
+  if (user_access('entity print access')) {
+    return entity_print_view_access($entity_type, $entity_id);
   }
+
+  // Check if the user is allowed to use entity print for the currently viewed entity type.
+  if (user_access('entity print access type '.$entity_type)) {
+    return entity_print_view_access($entity_type, $entity_id);
+  }
+
+  // Check if the user is allowed to use entity print for the currently viewed bundle.
+  // We have to load the entity to check for the bundle.
+  $entity = entity_load_single($entity_type, $entity_id);
+  if (user_access('entity print access bundle '.$entity->type)) {
+    return entity_print_view_access($entity_type, $entity_id);
+  }
+
+  return FALSE;
+}
+
+function entity_print_view_access($entity_type, $entity_id) {
   if ($entities = entity_load($entity_type, array($entity_id))) {
     $entity = array_pop($entities);
     return entity_access('view', $entity_type, $entity);
   }
-
-  return FALSE;
 }
 
 /**
@@ -245,20 +260,44 @@ function entity_print_theme($existing, $type, $theme, $path) {
  * Implements hook_permission().
  */
 function entity_print_permission() {
-  return array(
-    'entity print access' => array(
-      'title' => t('Use Entity Print'),
-      'description' => t('Allow a user to use entity print to view the generated PDF'),
-    ),
-    'administer entity print' => array(
-      'title' => t('Administer Entity Print'),
-      'description' => t('Allow users to administer the Entity Print settings.'),
-      // We make this restricted because you can set the path to the wkhtmltopdf
-      // binary from the settings page. It isn't vulnerable to injection but
-      // it's probably not a setting you want everyone configuring anyway.
-      'restrict access' => TRUE,
-    ),
+
+  // Administer entity print.
+  $permissions['administer entity print'] = array(
+    'title' => t('Administer Entity Print'),
+    'description' => t('Allow users to administer the Entity Print settings.'),
+    // We make this restricted because you can set the path to the wkhtmltopdf
+    // binary from the settings page. It isn't vulnerable to injection but
+    // it's probably not a setting you want everyone configuring anyway.
+    'restrict access' => TRUE,
   );
+
+  // Overall access.
+  $permissions['entity print access'] = array(
+    'title' => t('Use entity print for all entity types and bundles'),
+    'description' => t('Allow a user to use entity print to view the generated PDF.'),
+  );
+
+  // Create a permission for every entity type and bundle.
+  $entities = entity_get_info();
+  foreach($entities as $entity_key => $entity) {
+    $permissions['entity print access type '.$entity_key] = array(
+      'title' => t('Use entity print for all bundles of type "@entity_label"', array(
+        '@entity_label' => $entity['label'])
+      ),
+      'description' => t('Allow a user to use entity print to view the generated PDF.'),
+    );
+    foreach($entity['bundles'] as $bundle_key => $entity_bundle) {
+      $permissions['entity print access bundle '.$bundle_key] = array(
+        'title' => t('Use entity print for bundle "@entity_label - @entity_bundle_label"', array(
+          '@entity_label' => $entity['label'],
+          '@entity_bundle_label' => $entity_bundle['label'],
+        )),
+        'description' => t('Allow a user to use entity print to view the generated PDF.'),
+      );
+    }
+  }
+
+  return $permissions;
 }
 
 /**
diff --git a/docroot/sites/all/modules/contrib/entity_print/tests/entity_print.test b/docroot/sites/all/modules/contrib/entity_print/tests/entity_print.test
index 3e0970a..98b493d 100644
--- a/docroot/sites/all/modules/contrib/entity_print/tests/entity_print.test
+++ b/docroot/sites/all/modules/contrib/entity_print/tests/entity_print.test
@@ -20,7 +20,7 @@ class EntityPrintTest extends DrupalWebTestCase {
   public static function getInfo() {
     return array(
       'name' => t('Entity Print Tests'),
-      'description' => t('Test the css loading works.'),
+      'description' => t('Entity print css and permission tests.'),
       'group' => 'Entity Print',
     );
   }
@@ -70,29 +70,53 @@ class EntityPrintTest extends DrupalWebTestCase {
    * Test the access works for viewing the PDF's.
    */
   public function testEntityPrintAccess() {
-    // User with entity print access but not content access.
+
+    // User with global entity print access but not content access.
     $account = $this->drupalCreateUser(array('entity print access'));
     $this->drupalLogin($account);
     $this->drupalGet('entityprint/node/' . $this->node->nid . '/debug');
     $this->assertResponse(403, 'User with only the entity print access permission cannot view PDF.');
 
-    // User with access content but not entity print access.
+    // User with access content but not global entity print access.
     $account = $this->drupalCreateUser(array('access content'));
     $this->drupalLogin($account);
     $this->drupalGet('entityprint/node/' . $this->node->nid . '/debug');
     $this->assertResponse(403, 'User with access content but no entity print permission cannot view PDF.');
 
-    // User with both entity print and entity view.
+    // User with both global entity print access and entity view.
     $account = $this->drupalCreateUser(array('entity print access', 'access content'));
     $this->drupalLogin($account);
     $this->drupalGet('entityprint/node/' . $this->node->nid . '/debug');
     $this->assertResponse(200, 'User with both permissions can view the PDF.');
 
+    // User with entity type access permission and entity view.
+    $account = $this->drupalCreateUser(array('entity print access type node', 'access content'));
+    $this->drupalLogin($account);
+    $this->drupalGet('entityprint/node/' . $this->node->nid . '/debug');
+    $this->assertResponse(200, 'User with entity print type and access content permission is allowed to see the content.');
+
+    // User with different entity type access permission and entity view.
+    $account = $this->drupalCreateUser(array('entity print access type user', 'access content'));
+    $this->drupalLogin($account);
+    $this->drupalGet('entityprint/node/' . $this->node->nid . '/debug');
+    $this->assertResponse(403, 'User with different entity print type and access content permission is not allowed to see the content.');
+
+    // User with entity bundle access permission and entity view.
+    $account = $this->drupalCreateUser(array('entity print access bundle page', 'access content'));
+    $this->drupalLogin($account);
+    $this->drupalGet('entityprint/node/' . $this->node->nid . '/debug');
+    $this->assertResponse(200, 'User with entity print bundle and access content permission is allowed to see the content.');
+
+    // User with different bundle permission and entity view.
+    $account = $this->drupalCreateUser(array('entity print access bundle user', 'access content'));
+    $this->drupalLogin($account);
+    $this->drupalGet('entityprint/node/' . $this->node->nid . '/debug');
+    $this->assertResponse(403, 'User with different entity print bundle and access content permission is not allowed to see the content.');
+
     // User with neither permissions.
     $account = $this->drupalCreateUser(array());
     $this->drupalLogin($account);
     $this->drupalGet('entityprint/node/' . $this->node->nid . '/debug');
     $this->assertResponse(403, 'User with neither permission cannot view the PDF.');
   }
-
 }
