diff --git a/file_entity.install b/file_entity.install
index 7686f71..14472a4 100644
--- a/file_entity.install
+++ b/file_entity.install
@@ -219,3 +219,17 @@ function file_entity_update_7101() {
  * Empty update function to trigger an entity cache rebuild.
  */
 function file_entity_update_7102() { }
+
+/**
+ * Moving basic view, edit, delete files functionality from Media module.
+ */
+function file_entity_update_7103() {
+  // admin media => admin file
+  db_update('role_permission')
+    ->fields(array(
+      'permission' => 'administer files',
+      'module' => 'file_entity'))
+    ->condition('permission', 'administer media')
+    ->execute();
+
+}
diff --git a/file_entity.module b/file_entity.module
index 3492cb0..2511bbb 100644
--- a/file_entity.module
+++ b/file_entity.module
@@ -27,9 +27,17 @@ function file_entity_help($path, $arg) {
 }
 
 /**
+ * Access callback for files.
+ */
+function file_entity_access($op) {
+  return (user_access('administer files') || user_access($op . ' file'));
+}
+
+/**
  * Implements hook_menu().
  */
 function file_entity_menu() {
+  // File Configuration
   $items['admin/config/media/file-types'] = array(
     'title' => 'File types',
     'description' => 'Manage files used on your site.',
@@ -41,6 +49,41 @@ function file_entity_menu() {
     'title' => 'Manage file types',
     'description' => 'Manage files used on your site.',
   );
+  // general view, edit, delete for files
+  $items['file/%file'] = array(
+    'page callback' => 'file_entity_view_page',
+    'page arguments' => array(1),
+    'access callback' => 'file_entity_access',
+    'access arguments' => array('view'),
+    'file' => 'file_entity.pages.inc',
+  );
+  $items['file/%file/view'] = array(
+    'title' => 'View',
+    'type' => MENU_DEFAULT_LOCAL_TASK,
+    'weight' => -10,
+  );
+  $items['file/%file/edit'] = array(
+    'title' => 'Edit',
+    'page callback' => 'file_entity_page_edit',
+    'page arguments'  => array(1),
+    'access callback' => 'file_entity_access',
+    'access arguments' => array('edit'),
+    'weight' => 0,
+    'type' => MENU_LOCAL_TASK,
+    'context' => MENU_CONTEXT_PAGE | MENU_CONTEXT_INLINE,
+    'file' => 'file_entity.pages.inc',
+  );
+  $items['file/%file/delete'] = array(
+    'title' => 'Delete',
+    'page callback' => 'file_entity_page_delete',
+    'page arguments'  => array(1),
+    'access callback' => 'file_entity_access',
+    'access arguments' => array('edit'),
+    'weight' => 1,
+    'type' => MENU_LOCAL_TASK,
+    'context' => MENU_CONTEXT_PAGE | MENU_CONTEXT_INLINE,
+    'file' => 'file_entity.pages.inc',
+  );
 
   // Attach a "Manage file display" tab to each file type in the same way that
   // Field UI attaches "Manage fields" and "Manage display" tabs. Note that
@@ -95,6 +138,36 @@ function file_entity_menu() {
 }
 
 /**
+ * Implement hook_permission().
+ */
+function file_entity_permission() {
+  return array(
+    'administer files' => array(
+      'title' => t('Administer files'),
+      'description' => t('Add, edit or delete files and administer settings.'),
+    ),
+    'view file' => array(
+      'title' => t('View file'),
+      'description' => t('View all files.'),
+    ),
+    'edit file' => array(
+      'title' => t('Edit file'),
+      'description' => t('Edit all files.'),
+    ),
+  );
+}
+/**
+ * Implements hook_admin_paths().
+ */
+function media_admin_paths() {
+  $paths = array(
+    'file/*/edit' => TRUE,
+    'file/*/delete' => TRUE,
+  );
+  return $paths;
+}
+
+/**
  * Implements hook_theme().
  */
 function file_entity_theme() {
diff --git a/file_entity.pages.inc b/file_entity.pages.inc
new file mode 100644
index 0000000..cbaddae
--- /dev/null
+++ b/file_entity.pages.inc
@@ -0,0 +1,180 @@
+<?php
+/**
+ * @file
+ * Supports file operations including View, Edit, and Delete.
+ */
+
+/**
+ * Menu callback; view a single file entity.
+ */
+function file_entity_view_page($file) {
+  // @todo Implement granular editorial access: http://drupal.org/node/696970.
+  //   In the meantime, protect information about private files from being
+  //   discovered by unprivileged users. File IDs are autoincrement, so one can
+  //   attempt discovery by trying to access different media/ID paths. See also
+  //   media_browser_list(). This logic potentially belongs within
+  //   media_access(), but that would require extending that function's
+  //   signature to accept a $file paramter, and this is temporary code anyway.
+  if (!user_access('administer files') && (file_uri_scheme($file->uri) === 'private')) {
+    return MENU_ACCESS_DENIED;
+  }
+
+  drupal_set_title($file->filename);
+  return file_view($file, 'media_original');
+}
+
+/**
+ * Menu callback; presents the Media editing form.
+ */
+function file_entity_page_edit($file) {
+  drupal_set_title(t('<em>Edit @type</em> @title', array('@type' => $file->type, '@title' => $file->filename)), PASS_THROUGH);
+  return drupal_get_form('file_entity_edit', $file);
+}
+
+/**
+ * Form builder: Builds the edit file form.
+ */
+function file_entity_edit($form, $form_state, $file) {
+  $form_state['file'] = $file;
+  field_attach_form('file', $file, $form, $form_state);
+
+  $form['preview'] = file_view_file($file, 'media_preview');
+  $form['preview']['#weight'] = -10;
+
+  // Add the buttons.
+  $form['actions'] = array('#type' => 'actions');
+  $form['actions']['delete'] = array(
+    '#type' => 'submit',
+    '#value' => t('Delete'),
+    '#weight' => 15,
+    '#submit' => array('file_entity_delete_submit'),
+  );
+
+  $form['actions']['submit'] = array(
+    '#type' => 'submit',
+    '#value' => t('Save'),
+    '#weight' => 5,
+    '#submit' => array('file_entity_edit_submit'),
+  );
+
+  // Add internal file properties needed by media_edit_validate().
+  foreach (array('fid', 'type') as $key) {
+    $form[$key] = array('#type' => 'value', '#value' => $file->$key);
+  }
+
+  return $form;
+}
+
+/**
+ * Form validation handler for the file entity edit form.
+ */
+function file_entity_edit_validate($form, &$form_state) {
+  entity_form_field_validate('file', $form, $form_state);
+}
+
+/**
+ * Form submit handler for the media submit form.
+ */
+function file_entity_edit_submit($form, &$form_state) {
+  $file = $form_state['file'];
+  entity_form_submit_build_entity('file', $file, $form, $form_state);
+  file_save($file);
+  $form_state['redirect'] = 'file/' . $file->fid;
+}
+
+/**
+ * Menu callback; shows delete confirmation form.
+ */
+function file_entity_page_delete($file) {
+  drupal_set_title(t('<em>Delete @type</em> @title', array('@type' => $file->type, '@title' => $file->filename)), PASS_THROUGH);
+  // Don't bother showing the form if the item is in use, since we won't allow
+  // them to delete it anyway.
+  $references = file_usage_list($file);
+  if (!empty($references)) {
+    return t('The file %title is in use and cannot be deleted.', array('%title' => $file->filename));
+  }
+  else {
+    $files = array($file->fid => $file);
+    return drupal_get_form('file_entity_multiple_delete_confirm', $files, '<front>', 'media/' . $file->fid);
+  }
+}
+
+/**
+ * Form submit handler for the Delete button on the media edit form.
+ */
+function file_entity_delete_submit($form, &$form_state) {
+  $fid = $form_state['values']['fid'];
+  $destination = array();
+  if (isset($_GET['destination'])) {
+    $destination = drupal_get_destination();
+    unset($_GET['destination']);
+  }
+  $form_state['redirect'] = array('file/' . $fid . '/delete', array('query' => $destination));
+}
+
+/**
+ * Confirm the request to delete files.
+ */
+function file_entity_multiple_delete_confirm($form, &$form_state, $files, $redirect_on_success = NULL, $redirect_on_cancel = NULL) {
+  $form['files'] = array('#tree' => TRUE);
+  $form['file_titles'] = array('#theme' => 'item_list');
+  foreach ($files as $fid => $value) {
+    $title = db_query('SELECT filename FROM {file_managed} WHERE fid = :fid', array(':fid' => $fid))->fetchField();
+    $form['files'][$fid] = array(
+      '#type' => 'value',
+      '#value' => $fid,
+    );
+    $form['file_titles']['#items'][] = check_plain($title);
+  }
+  $form['operation'] = array('#type' => 'hidden', '#value' => 'delete');
+  if (isset($redirect_on_success)) {
+    $form['redirect_on_success'] = array(
+      '#type' => 'value',
+      '#value' => $redirect_on_success,
+    );
+  }
+  $form['#submit'][] = 'file_entity_multiple_delete_confirm_submit';
+
+  $confirm_question = format_plural(count($files),
+                                  'Are you sure you want to delete this item?',
+                                  'Are you sure you want to delete these items?');
+
+  return confirm_form($form,
+    $confirm_question,
+    isset($redirect_on_cancel) ? $redirect_on_cancel : current_path(),
+    t('This action cannot be undone.'),
+    t('Delete'),
+    t('Cancel'));
+}
+
+/**
+ * Attempt to delete files and notify the user of the result.
+ */
+function file_entity_multiple_delete_confirm_submit($form, &$form_state) {
+  if ($form_state['values']['confirm']) {
+    $results = array();
+    $files = array_keys($form_state['values']['files']);
+    foreach ($files as $fid) {
+      $file = file_load($fid);
+      $files[$fid] = $file;
+      $results[$fid] = file_delete($file);
+    }
+    // The result of file_delete can be an array if the file is in use, or TRUE/FALSE.
+    foreach ($results as $fid => $result) {
+      if (is_array($result)) {
+        drupal_set_message(t('The file @title is in use and cannot be deleted.', array('@title' => $files[$fid]->filename)), 'warning');
+      }
+      elseif (!$result) {
+        drupal_set_message(t('The file @title was not deleted due to an error.', array('@title' => $files[$fid]->filename)), 'error');
+      }
+      else {
+        $message = t('File @title was deleted', array('@title' => $files[$fid]->filename));
+        watchdog('media', $message);
+        drupal_set_message($message);
+      }
+    }
+    if (isset($form_state['values']['redirect_on_success'])) {
+      $form_state['redirect'] = $form_state['values']['redirect_on_success'];
+    }
+  }
+}
