diff --git a/panelizer.module b/panelizer.module
index 6e6b4ee..baceb86 100644
--- a/panelizer.module
+++ b/panelizer.module
@@ -542,8 +542,8 @@ function panelizer_entity_plugin_switcher_page($entity_type, $op) {
 
   // Load the $plugin information
   if ($handler = panelizer_entity_plugin_get_handler($entity_type)) {
-    $method = 'page_' . $op;
-    if (method_exists($handler, $method)) {
+    $method = 'page_operation_' . $op;
+    if (is_callable(array($handler, $method))) {
       // replace the first two arguments:
       $args[0] = $js;
       $args[1] = $_POST;
diff --git a/plugins/entity/PanelizerEntityDefault.class.php b/plugins/entity/PanelizerEntityDefault.class.php
index cda4296..89961bc 100644
--- a/plugins/entity/PanelizerEntityDefault.class.php
+++ b/plugins/entity/PanelizerEntityDefault.class.php
@@ -304,37 +304,15 @@ abstract class PanelizerEntityDefault implements PanelizerEntityInterface {
           'weight' => $weight++,
         ) + $base;
 
-        $items[$this->plugin['entity path'] . "/panelizer/$view_mode/content"] = array(
-          'title' => 'Content',
-          'page callback' => 'panelizer_entity_plugin_switcher_page',
-          'page arguments' => array($this->entity_type, 'content', $position, $view_mode),
-          'access arguments' => array($this->entity_type, 'access', 'admin', $position, 'content', $view_mode),
-          'weight' => 14,
-        ) + $base;
-
-        $items[$this->plugin['entity path'] . "/panelizer/$view_mode/layout"] = array(
-          'title' => 'Layout',
-          'page callback' => 'panelizer_entity_plugin_switcher_page',
-          'page arguments' => array($this->entity_type, 'layout', $position, $view_mode),
-          'access arguments' => array($this->entity_type, 'access', 'admin', $position, 'layout', $view_mode),
-          'weight' => 13,
-        ) + $base;
-
-        $items[$this->plugin['entity path'] . "/panelizer/$view_mode/context"] = array(
-          'title' => 'Context',
-          'page callback' => 'panelizer_entity_plugin_switcher_page',
-          'page arguments' => array($this->entity_type, 'context', $position, $view_mode),
-          'access arguments' => array($this->entity_type, 'access', 'admin', $position, 'context', $view_mode),
-          'weight' => 12,
-        ) + $base;
-
-        $items[$this->plugin['entity path'] . "/panelizer/$view_mode/settings"] = array(
-          'title' => 'Settings',
-          'page callback' => 'panelizer_entity_plugin_switcher_page',
-          'page arguments' => array($this->entity_type, 'settings', $position, $view_mode),
-          'access arguments' => array($this->entity_type, 'access', 'admin', $position, 'settings', $view_mode),
-          'weight' => 11,
-        ) + $base;
+        foreach ($this->operations() as $operation => $operation_info) {
+          $items[$this->plugin['entity path'] . "/panelizer/$view_mode/$operation"] = array(
+            'title' => $operation_info['title'],
+            'page callback' => 'panelizer_entity_plugin_switcher_page',
+            'page arguments' => array($this->entity_type, $operation, $position, $view_mode),
+            'access arguments' => array($this->entity_type, 'access', 'admin', $position, $operation, $view_mode),
+            'weight' => $weight++,
+          ) + $base;
+        }
       }
     }
 
@@ -1214,9 +1192,24 @@ abstract class PanelizerEntityDefault implements PanelizerEntityInterface {
   }
 
   /**
+   * Return list of operations.
+   */
+  function operations() {
+    $operations = array(
+      'settings' => array('title' => 'settings'),
+      'context' => array('title' => 'context'),
+      'layout' => array('title' => 'layout'),
+      'content' => array('title' => 'content'),
+    );
+    drupal_alter('panelizer_operations', $operations);
+
+    return $operations;
+  }
+
+  /**
    * Switched page callback to give the overview page
    */
-  function page_overview($js, $input, $entity) {
+  function page_operation_overview($js, $input, $entity) {
     $header = array(
       t('View mode'),
       t('Status'),
@@ -1253,29 +1246,13 @@ abstract class PanelizerEntityDefault implements PanelizerEntityInterface {
 
       if ($panelized) {
         $links_array = array();
-        if ($this->panelizer_access('settings', $entity, $view_mode)) {
-          $links_array['settings'] = array(
-            'title' => t('settings'),
-            'href' => $base_url . '/' . $view_mode . '/settings',
-          );
-        }
-        if ($this->panelizer_access('context', $entity, $view_mode)) {
-          $links_array['context'] = array(
-            'title' => t('context'),
-            'href' => $base_url . '/' . $view_mode . '/context',
-          );
-        }
-        if ($this->panelizer_access('layout', $entity, $view_mode)) {
-          $links_array['layout'] = array(
-            'title' => t('layout'),
-            'href' => $base_url . '/' . $view_mode . '/layout',
-          );
-        }
-        if ($this->panelizer_access('content', $entity, $view_mode)) {
-          $links_array['content'] = array(
-            'title' => t('content'),
-            'href' => $base_url . '/' . $view_mode . '/content',
-          );
+        foreach ($this->operations() as $operation => $operation_info) {
+          if ($this->panelizer_access($operation, $entity, $view_mode)) {
+            $links_array[$operation] = array(
+              'title' => $operation_info['title'],
+              'href' => $base_url . '/' . $view_mode . '/' . $operation,
+            );
+          }
         }
       }
       else {
@@ -1357,29 +1334,13 @@ abstract class PanelizerEntityDefault implements PanelizerEntityInterface {
    */
   function make_fake_tabs($base_url, $bundle, $view_mode, $output) {
     $links_array = array();
-    if ($this->panelizer_access('settings', $bundle, $view_mode)) {
-      $links_array['panelizer-settings'] = array(
-        'title' => t('Settings'),
-        'href' => $base_url,
-      );
-    }
-    if ($this->panelizer_access('context', $bundle, $view_mode)) {
-      $links_array['panelizer-context'] = array(
-        'title' => t('Context'),
-        'href' => $base_url . '/context',
-      );
-    }
-    if ($this->panelizer_access('layout', $bundle, $view_mode)) {
-      $links_array['panelizer-layout'] = array(
-        'title' => t('Layout'),
-        'href' => $base_url . '/layout',
-      );
-    }
-    if ($this->panelizer_access('content', $bundle, $view_mode)) {
-      $links_array['panelizer-content'] = array(
-        'title' => t('Content'),
-        'href' => $base_url . '/content',
-      );
+    foreach ($this->operations() as $operation => $operation_info) {
+      if ($this->panelizer_access($operation, $bundle, $view_mode)) {
+        $links_array[$operation] = array(
+          'title' => $operation_info['title'],
+          'href' => $base_url . '/' . $operation,
+        );
+      }
     }
 
     // Only render if > 1 link, just like core.
@@ -1413,7 +1374,7 @@ abstract class PanelizerEntityDefault implements PanelizerEntityInterface {
   /**
    * Switched page callback to give the settings form.
    */
-  function page_settings($js, $input, $entity, $view_mode) {
+  function page_operation_settings($js, $input, $entity, $view_mode) {
     list($entity_id, $revision_id, $bundle) = entity_extract_ids($this->entity_type, $entity);
 
     if (empty($entity->panelizer[$view_mode])) {
@@ -1472,7 +1433,22 @@ abstract class PanelizerEntityDefault implements PanelizerEntityInterface {
     return $this->wrap_entity_panelizer_pages($entity, $view_mode, $output);
   }
 
-  function page_context($js, $input, $entity, $view_mode) {
+  /**
+   * Call operation callback.
+   */
+  function __call($method, $args) {
+    // Operation shoudl start with 'page_operation_'.
+    if (strpos($method, 'page_operation_') === 0) {
+      $operation = substr($method, 15);
+      $operations = $this->operations();
+      if (isset($operations[$operation]) && isset($operations[$operation]['callback']) && function_exists($operations[$operation]['callback'])) {
+        $args[] = $this;
+        return call_user_func_array($operations[$operation]['callback'], $args);
+      }
+    }
+  }
+
+  function page_operation_context($js, $input, $entity, $view_mode) {
     list($entity_id, $revision_id, $bundle) = entity_extract_ids($this->entity_type, $entity);
 
     $cache_key = $entity_id . '.' . $view_mode;
@@ -1510,7 +1486,7 @@ abstract class PanelizerEntityDefault implements PanelizerEntityInterface {
     return $this->wrap_entity_panelizer_pages($entity, $view_mode, $output);
   }
 
-  function page_layout($js, $input, $entity, $view_mode, $step = NULL, $layout = NULL) {
+  function page_operation_layout($js, $input, $entity, $view_mode, $step = NULL, $layout = NULL) {
     $panelizer = $entity->panelizer[$view_mode];
     if (empty($panelizer)) {
       return MENU_NOT_FOUND;
@@ -1544,7 +1520,7 @@ abstract class PanelizerEntityDefault implements PanelizerEntityInterface {
     return $this->wrap_entity_panelizer_pages($entity, $view_mode, $output);
   }
 
-  function page_content($js, $input, $entity, $view_mode) {
+  function page_operation_content($js, $input, $entity, $view_mode) {
     $panelizer = $entity->panelizer[$view_mode];
     if (empty($panelizer)) {
       return MENU_NOT_FOUND;
