diff --git a/ds.module b/ds.module
index 687fb6c..479f316 100644
--- a/ds.module
+++ b/ds.module
@@ -27,7 +27,7 @@ define('DS_BLOCK_CONTENT', 3);
  * Implements hook_permission().
  */
 function ds_permission() {
-  return array(
+  $permissions = array(
     'admin_view_modes' => array(
       'title' => t('Administer view modes'),
       'description' => t('Create custom view modes for every entity.')
@@ -41,6 +41,8 @@ function ds_permission() {
       'description' => t('General permission for Display Suite settings pages.')
     ),
   );
+
+  return $permissions;
 }
 
 /**
@@ -811,7 +813,7 @@ function ds_field_attach_view_alter(&$build, $context) {
         '#bundle' => $bundle,
         '#entity_type' => $entity_type,
         '#view_mode' => $view_mode,
-        '#access' => TRUE,
+        '#access' => variable_get('ds_extras_field_permissions', FALSE) ? ds_extras_ds_field_access($key, $entity_type) : TRUE,
         '#items' => array(
           0 => array(
             'value' => $field_value,
diff --git a/modules/ds_extras/ds_extras.admin.inc b/modules/ds_extras/ds_extras.admin.inc
index 2e6e739..6a4655a 100644
--- a/modules/ds_extras/ds_extras.admin.inc
+++ b/modules/ds_extras/ds_extras.admin.inc
@@ -133,6 +133,13 @@ function ds_extras_settings($form) {
     '#default_value' => variable_get('ds_extras_hide_page_title', FALSE),
   );
 
+  $form['additional_settings']['fs4']['ds_extras_field_permissions'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Field permissions'),
+    '#description' => t('Hide or manually set the page title of the "Full content" view mode.'),
+    '#default_value' => variable_get('ds_extras_field_permissions', FALSE),
+  );
+
   if (module_exists('block')) {
     $form['additional_settings']['fs4']['ds_extras_region_to_block'] = array(
       '#type' => 'checkbox',
diff --git a/modules/ds_extras/ds_extras.module b/modules/ds_extras/ds_extras.module
index 8f2f00c..6c3ef5a 100644
--- a/modules/ds_extras/ds_extras.module
+++ b/modules/ds_extras/ds_extras.module
@@ -75,6 +75,7 @@ function ds_extras_entity_info() {
  * Implements hook_permission().
  */
 function ds_extras_permission() {
+  $permissions = array();
 
   // Extra check to make sure this doesn't get fired on install.
   if (variable_get('ds_extras_switch_view_mode', FALSE)) {
@@ -86,6 +87,18 @@ function ds_extras_permission() {
     }
     return $permissions;
   }
+
+  $entities = entity_get_info();
+  foreach ($entities as $entity_type => $info) {
+    $fields = ds_get_fields($entity_type);
+    foreach ($fields as $key => $finfo) {
+      $permissions['view ' . $key . ' on ' . $entity_type] = array(
+        'title' => t('View @field on @entity_type', array('@field' => $finfo['title'], '@entity_type' => $info['label'])),
+      );
+    }
+  }
+
+  return $permissions;
 }
 
 /**
@@ -134,6 +147,23 @@ function ds_extras_form_field_ui_display_overview_form_alter(&$form, &$form_stat
 }
 
 /**
+ * DS fields access.
+ *
+ * @param $field
+ *   The machine name of the field
+ * @param $entity_type
+ *   The name of the entity type.
+ */
+function ds_extras_ds_field_access($field, $entity_type) {
+
+  if (user_access('view ' . $field . ' on ' . $entity_type)) {
+    return TRUE;
+  }
+
+  return FALSE;
+}
+
+/**
  * Implements hook_field_attach_view_alter().
  */
 function ds_extras_field_attach_view_alter(&$build, $context) {
diff --git a/modules/ds_extras/ds_extras.registry.inc b/modules/ds_extras/ds_extras.registry.inc
index 635f17e..6ea7da1 100644
--- a/modules/ds_extras/ds_extras.registry.inc
+++ b/modules/ds_extras/ds_extras.registry.inc
@@ -172,7 +172,6 @@ function _ds_extras_module_implements_alter(&$implementations, $hook) {
 
   // Switch view mode
   $switch_hooks = array(
-    'permission',
     'form_node_form_alter',
   );
   if (!variable_get('ds_extras_switch_view_mode', FALSE) && in_array($hook, $switch_hooks)) {
