diff --git a/file_admin.module b/file_admin.module
index 9186a8e..b283f82 100644
--- a/file_admin.module
+++ b/file_admin.module
@@ -36,19 +36,6 @@ define('FILE_NOT_STICKY', 0);
 define('FILE_STICKY', 1);
 
 /**
- * Implements hook_permission().
- */
-function file_admin_permission() {
-  $perms = array(
-    'view own unpublished media' => array(
-      'title' => t('View own unpublished media'),
-    ),
-  );
-
-  return $perms;
-}
-
-/**
  * Implements hook_entity_insert().
  *
  * Set created timestamp when entity is created.
@@ -64,6 +51,19 @@ function file_admin_entity_presave($entity, $type) {
 }
 
 /**
+ * Implements hook_file_access().
+ *
+ * Restrict access to unpublished files.
+ */
+function file_admin_file_access($op, $file, $account) {
+  if ($op == 'view' && isset($file->published) && $file->published == FILE_NOT_PUBLISHED && !((user_access('bypass file access', $account) || $file->uid == $account->uid && user_access('view own private files', $account)))) {
+    return FILE_ACCESS_DENY;
+  }
+
+  return FILE_ACCESS_IGNORE;
+}
+
+/**
  * Implements hook_menu().
  *
  * @see file_entity_menu().
diff --git a/includes/file_admin.views.inc b/includes/file_admin.views.inc
index 27abced..0015bae 100644
--- a/includes/file_admin.views.inc
+++ b/includes/file_admin.views.inc
@@ -103,7 +103,7 @@ function file_admin_views_data_alter(&$data) {
  */
 function file_admin_views_query_substitutions() {
   return array(
-    '***ADMINISTER_FILES***' => intval(user_access('administer files')),
-    '***VIEW_OWN_UNPUBLISHED_MEDIA***' => intval(user_access('view own unpublished media')),
+    '***BYPASS_FILE_ACCESS***' => intval(user_access('bypass file access')),
+    '***VIEW_OWN_PRIVATE_FILES***' => intval(user_access('view own private files')),
   );
 }
diff --git a/includes/file_admin_filter_media_status.inc b/includes/file_admin_filter_media_status.inc
index 20f0e13..9c31ee1 100644
--- a/includes/file_admin_filter_media_status.inc
+++ b/includes/file_admin_filter_media_status.inc
@@ -9,6 +9,6 @@ class views_handler_filter_file_admin extends views_handler_filter {
 
   function query() {
     $table = $this->ensure_my_table();
-    $this->query->add_where_expression($this->options['group'], "$table.published = 1 OR ($table.uid = ***CURRENT_USER*** AND ***CURRENT_USER*** <> 0 AND ***VIEW_OWN_UNPUBLISHED_MEDIA*** = 1) OR ***ADMINISTER_FILES*** = 1");
+    $this->query->add_where_expression($this->options['group'], "$table.published = 1 OR ($table.uid = ***CURRENT_USER*** AND ***CURRENT_USER*** <> 0 AND ***VIEW_OWN_PRIVATE_FILES*** = 1) OR ***BYPASS_FILE_ACCESS*** = 1");
   }
 }
