diff --git a/platform/commonUI/browse/bundle.js b/platform/commonUI/browse/bundle.js
index bf76295b18..4715440b76 100644
--- a/platform/commonUI/browse/bundle.js
+++ b/platform/commonUI/browse/bundle.js
@@ -170,6 +170,10 @@ define([
                 }
             ],
             "representations": [
+                {
+                    "key": "view-region",
+                    "templateUrl": "templates/view-object.html"
+                },
                 {
                     "key": "browse-object",
                     "template": browseObjectTemplate,
diff --git a/platform/commonUI/browse/res/templates/browse-object.html b/platform/commonUI/browse/res/templates/browse-object.html
index 562f8bdf6a..35d0d58f3f 100644
--- a/platform/commonUI/browse/res/templates/browse-object.html
+++ b/platform/commonUI/browse/res/templates/browse-object.html
@@ -47,11 +47,6 @@
         <div ng-if="isEditable" class="holder l-flex-col flex-elem grows l-object-wrapper-inner">
             <!-- Toolbar and Save/Cancel buttons -->
             <div class="l-edit-controls flex-elem l-flex-row flex-align-end">
-                <mct-toolbar name="mctToolbar"
-                             structure="toolbar.structure"
-                             ng-model="toolbar.state"
-                             class="flex-elem grows">
-                </mct-toolbar>
                 <mct-representation key="'edit-action-buttons'"
                                     mct-object="domainObject"
                                     class='flex-elem conclude-editing'>
diff --git a/platform/commonUI/browse/res/templates/browse.html b/platform/commonUI/browse/res/templates/browse.html
index 3d3f22bd7d..5b74709b2e 100644
--- a/platform/commonUI/browse/res/templates/browse.html
+++ b/platform/commonUI/browse/res/templates/browse.html
@@ -63,7 +63,7 @@
                     <mct-split-pane class='l-object-and-inspector contents abs' anchor='right'>
                         <div class='split-pane-component t-object pane primary-pane left'>
                             <mct-representation mct-object="navigatedObject"
-                                                key="'browse-object'"
+                                                key="'view-region'"
                                                 class="abs holder holder-object">
                             </mct-representation>
                         </div>
@@ -71,7 +71,7 @@
                         <mct-splitter class="splitter-inspect mobile-hide flush-right edge-shdw"></mct-splitter>
 
                         <div class="split-pane-component t-inspect pane right mobile-hide">
-                            <mct-representation key="'object-inspector'"
+                            <mct-representation key="'inspector-region'"
                                                 mct-object="navigatedObject"
                                                 ng-model="treeModel">
                             </mct-representation>
diff --git a/platform/commonUI/browse/res/templates/view-object.html b/platform/commonUI/browse/res/templates/view-object.html
new file mode 100644
index 0000000000..b670e1645e
--- /dev/null
+++ b/platform/commonUI/browse/res/templates/view-object.html
@@ -0,0 +1,33 @@
+<!--
+ Open MCT Web, Copyright (c) 2014-2015, United States Government
+ as represented by the Administrator of the National Aeronautics and Space
+ Administration. All rights reserved.
+
+ Open MCT Web is licensed under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+ http://www.apache.org/licenses/LICENSE-2.0.
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ License for the specific language governing permissions and limitations
+ under the License.
+
+ Open MCT Web includes source code licensed under additional open source
+ licenses. See the Open Source Licenses file (LICENSES.md) included with
+ this source code distribution or the Licensing information page available
+ at runtime from the About dialog for additional information.
+-->
+<!--
+ A representation that allows the 'View' region of an object view to change
+ dynamically (eg. between browse and edit modes). Values correspond to a
+ representation key, and currently defaults to 'browse-object'.
+
+ In the case of edit, the EditRepresenter will change this to editable
+ representation of the object as needed.
+ -->
+<mct-representation mct-object="domainObject"
+                    key="viewRegionTemplate || 'browse-object'"
+                    class="abs holder holder-object">
+</mct-representation>
diff --git a/platform/commonUI/browse/src/BrowseController.js b/platform/commonUI/browse/src/BrowseController.js
index d1d5aa92cc..9f1834f80d 100644
--- a/platform/commonUI/browse/src/BrowseController.js
+++ b/platform/commonUI/browse/src/BrowseController.js
@@ -60,13 +60,6 @@ define(
                 ($route.current.params.ids || defaultPath).split("/")
             );
 
-            function isDirty(){
-                var editorCapability = $scope.navigatedObject &&
-                        $scope.navigatedObject.getCapability("editor"),
-                    hasChanges = editorCapability && editorCapability.dirty();
-                return hasChanges;
-            }
-
             function updateRoute(domainObject) {
                 var priorRoute = $route.current,
                     // Act as if params HADN'T changed to avoid page reload
@@ -83,9 +76,7 @@ define(
                 // urlService.urlForLocation used to adjust current
                 // path to new, addressed, path based on
                 // domainObject
-                $location.path(urlService.urlForLocation("browse",
-                    domainObject.hasCapability('editor') ?
-                        domainObject.getOriginalObject() : domainObject));
+                $location.path(urlService.urlForLocation("browse", domainObject));
 
             }
 
@@ -97,17 +88,15 @@ define(
                     return;
                 }
 
-                if (isDirty() && !confirm(CONFIRM_MSG)) {
-                    $scope.treeModel.selectedObject = $scope.navigatedObject;
-                    navigationService.setNavigation($scope.navigatedObject);
-                } else {
-                    if ($scope.navigatedObject && $scope.navigatedObject.hasCapability("editor")){
-                        $scope.navigatedObject.getCapability("editor").cancel();
-                    }
+                if (navigationService.setNavigation(domainObject)) {
                     $scope.navigatedObject = domainObject;
                     $scope.treeModel.selectedObject = domainObject;
-                    navigationService.setNavigation(domainObject);
                     updateRoute(domainObject);
+                } else {
+                    //If navigation was unsuccessful (ie. blocked), reset
+                    // the selected object in the tree to the currently
+                    // navigated object
+                    $scope.treeModel.selectedObject = $scope.navigatedObject ;
                 }
             }
 
@@ -184,18 +173,13 @@ define(
                 selectedObject: navigationService.getNavigation()
             };
 
-            $scope.beforeUnloadWarning = function() {
-                return isDirty() ?
-                    "Unsaved changes will be lost if you leave this page." :
-                    undefined;
-            };
-
             // Listen for changes in navigation state.
             navigationService.addListener(setNavigation);
 
-            // Also listen for changes which come from the tree
+            // Also listen for changes which come from the tree. Changes in
+            // the tree will trigger a change in browse navigation state.
             $scope.$watch("treeModel.selectedObject", setNavigation);
-            
+
             // Clean up when the scope is destroyed
             $scope.$on("$destroy", function () {
                 navigationService.removeListener(setNavigation);
diff --git a/platform/commonUI/browse/src/navigation/NavigationService.js b/platform/commonUI/browse/src/navigation/NavigationService.js
index 87e5582ef7..e2b7168b3c 100644
--- a/platform/commonUI/browse/src/navigation/NavigationService.js
+++ b/platform/commonUI/browse/src/navigation/NavigationService.js
@@ -37,7 +37,7 @@ define(
          */
         function NavigationService() {
             this.navigated = undefined;
-            this.callbacks = [];
+            this.callbacks = {};
         }
 
         /**
@@ -53,12 +53,20 @@ define(
          * @param {DomainObject} domainObject the domain object to navigate to
          */
         NavigationService.prototype.setNavigation = function (value) {
+            var canNavigate = true;
             if (this.navigated !== value) {
-                this.navigated = value;
-                this.callbacks.forEach(function (callback) {
-                    callback(value);
-                });
+                canNavigate = (this.callbacks['before'] || [])
+                    .reduce(function (previous, callback) {
+                        return callback(value) && previous;
+                    }, true);
+                if (canNavigate) {
+                    this.navigated = value;
+                    this.callbacks['after'].forEach(function (callback) {
+                        callback(value);
+                    });
+                }
             }
+            return canNavigate;
         };
 
         /**
@@ -67,9 +75,13 @@ define(
          * this changes.
          * @param {function} callback the callback to invoke when
          *        navigation state changes
+         * @param {string} [event=after] the navigation event to listen to.
+         * One of 'before' or 'after'.
          */
-        NavigationService.prototype.addListener = function (callback) {
-            this.callbacks.push(callback);
+        NavigationService.prototype.addListener = function (callback, event) {
+            event = event || 'after';
+            this.callbacks[event] = this.callbacks[event] || [];
+            this.callbacks[event].push(callback);
         };
 
         /**
@@ -77,9 +89,12 @@ define(
          * @param {function} callback the callback which should
          *        no longer be invoked when navigation state
          *        changes
+         * @param {string} [event=after] the navigation event to the
+         * callback is registered to. One of 'before' or 'after'.
          */
-        NavigationService.prototype.removeListener = function (callback) {
-            this.callbacks = this.callbacks.filter(function (cb) {
+        NavigationService.prototype.removeListener = function (callback, event) {
+            event = event || 'after';
+            this.callbacks[event] = this.callbacks[event].filter(function (cb) {
                 return cb !== callback;
             });
         };
diff --git a/platform/commonUI/edit/bundle.js b/platform/commonUI/edit/bundle.js
index c4b0da1798..9fc0c98939 100644
--- a/platform/commonUI/edit/bundle.js
+++ b/platform/commonUI/edit/bundle.js
@@ -26,6 +26,7 @@ define([
     "./src/controllers/EditActionController",
     "./src/controllers/EditPanesController",
     "./src/controllers/ElementsController",
+    "./src/controllers/EditObjectController",
     "./src/directives/MCTBeforeUnload",
     "./src/actions/LinkAction",
     "./src/actions/EditAction",
@@ -48,6 +49,7 @@ define([
     EditActionController,
     EditPanesController,
     ElementsController,
+    EditObjectController,
     MCTBeforeUnload,
     LinkAction,
     EditAction,
@@ -106,6 +108,13 @@ define([
                     "depends": [
                         "$scope"
                     ]
+                },
+                {
+                    "key": "EditObjectController",
+                    "implementation": EditObjectController,
+                    "depends": [
+                        "$scope"
+                    ]
                 }
             ],
             "directives": [
@@ -206,6 +215,9 @@ define([
                     "template": editObjectTemplate,
                     "uses": [
                         "view"
+                    ],
+                    "gestures": [
+                        "drop"
                     ]
                 },
                 {
diff --git a/platform/commonUI/edit/res/templates/edit-object.html b/platform/commonUI/edit/res/templates/edit-object.html
index 71dc233a82..7b2f32e1b3 100644
--- a/platform/commonUI/edit/res/templates/edit-object.html
+++ b/platform/commonUI/edit/res/templates/edit-object.html
@@ -19,50 +19,52 @@
  this source code distribution or the Licensing information page available
  at runtime from the About dialog for additional information.
 -->
-<mct-representation key="'topbar-edit'"
-                    mct-object="domainObject"
-                    ng-model="representation">
-</mct-representation>
-<div class="holder edit-area abs">
-    <mct-split-pane class='contents abs' anchor='right'>
-        <div class='split-pane-component pane left edit-main'>
-            <mct-toolbar name="mctToolbar"
-                         structure="toolbar.structure"
-                         ng-model="toolbar.state">
-            </mct-toolbar>
-            <mct-representation key="representation.selected.key"
-                                toolbar="toolbar"
-                                mct-object="representation.selected.key && domainObject"
-                                class="holder abs object-holder work-area">
+<div class="abs l-flex-col" ng-controller="BrowseObjectController">
+    <div ng-controller="EditObjectController as editObjectController"
+         mct-before-unload="editObjectController.getUnloadWarning()"
+         class="holder flex-elem l-flex-row object-browse-bar ">
+        <div class="items-select left flex-elem l-flex-row grows">
+            <mct-representation key="'back-arrow'"
+                                mct-object="domainObject"
+                                class="flex-elem l-back"></mct-representation>
+            <mct-representation key="'object-header'"
+                                mct-object="domainObject"
+                                class="l-flex-row flex-elem grows object-header">
             </mct-representation>
         </div>
-        <mct-splitter></mct-splitter>
-        <div
-            class='split-pane-component pane right edit-objects menus-to-left'
-            ng-controller='EditPanesController as editPanes'
-            >
-            <mct-split-pane class='contents abs' anchor='bottom'>
-                <div
-                    class="abs pane top accordion"
-                    ng-controller="ToggleController as toggle"
-                    >
-                    <mct-container key="accordion" label="Library">
-                        <mct-representation key="'tree'"
-                                            mct-object="editPanes.getRoot()">
-                        </mct-representation>
-                    </mct-container>
-                </div>
-                <mct-splitter></mct-splitter>
-                <div
-                    class="abs pane bottom accordion"
-                    ng-controller="ToggleController as toggle"
-                    >
-                    <mct-container key="accordion" label="Elements">
-                        <mct-representation key="'edit-elements'" mct-object="domainObject">
-                        </mct-representation>
-                    </mct-container>
-                </div>
-            </mct-split-pane>
+        <div class="btn-bar right l-flex-row flex-elem flex-justify-end flex-fixed">
+            <mct-representation key="'switcher'"
+                                mct-object="domainObject"
+                                ng-model="representation">
+            </mct-representation>
+            <!-- Temporarily, on mobile, the action buttons are hidden-->
+            <mct-representation key="'action-group'"
+                                mct-object="domainObject"
+                                parameters="{ category: 'view-control' }"
+                                class="mobile-hide">
+            </mct-representation>
         </div>
-    </mct-split-pane>
+    </div>
+    <div class="holder l-flex-col flex-elem grows l-object-wrapper">
+        <div class="holder l-flex-col flex-elem grows l-object-wrapper-inner">
+            <!-- Toolbar and Save/Cancel buttons -->
+            <div class="l-edit-controls flex-elem l-flex-row flex-align-end">
+                <mct-toolbar name="mctToolbar"
+                             structure="toolbar.structure"
+                             ng-model="toolbar.state"
+                             class="flex-elem grows">
+                </mct-toolbar>
+                <mct-representation key="'edit-action-buttons'"
+                                    mct-object="domainObject"
+                                    class='flex-elem conclude-editing'>
+                </mct-representation>
+
+            </div>
+            <mct-representation key="representation.selected.key"
+                                mct-object="representation.selected.key && domainObject"
+                                class="abs flex-elem grows object-holder-main scroll"
+                                toolbar="toolbar">
+            </mct-representation>
+        </div><!--/ l-object-wrapper-inner -->
+    </div>
 </div>
diff --git a/platform/commonUI/edit/res/templates/edit.html b/platform/commonUI/edit/res/templates/edit.html
index 07a677bce8..489eed822b 100644
--- a/platform/commonUI/edit/res/templates/edit.html
+++ b/platform/commonUI/edit/res/templates/edit.html
@@ -21,7 +21,7 @@
 -->
 <div content="jquery-wrapper"
      class="abs holder-all edit-mode"
-     ng-controller="EditController as editMode"
+     ng-controller="EditObjectController as editMode"
      mct-before-unload="editMode.getUnloadWarning()">
 
     <mct-representation key="'edit-object'" mct-object="editMode.navigatedObject()">
diff --git a/platform/commonUI/edit/res/templates/inspector-edit.html b/platform/commonUI/edit/res/templates/inspector-edit.html
new file mode 100644
index 0000000000..5f3e4d522e
--- /dev/null
+++ b/platform/commonUI/edit/res/templates/inspector-edit.html
@@ -0,0 +1,80 @@
+<!--
+ Open MCT Web, Copyright (c) 2014-2015, United States Government
+ as represented by the Administrator of the National Aeronautics and Space
+ Administration. All rights reserved.
+
+ Open MCT Web is licensed under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+ http://www.apache.org/licenses/LICENSE-2.0.
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ License for the specific language governing permissions and limitations
+ under the License.
+
+ Open MCT Web includes source code licensed under additional open source
+ licenses. See the Open Source Licenses file (LICENSES.md) included with
+ this source code distribution or the Licensing information page available
+ at runtime from the About dialog for additional information.
+-->
+<span class="l-inspect" ng-controller="ObjectInspectorController as controller">
+    <div ng-controller="PaneController as modelPaneEdit">
+        <mct-split-pane class='abs contents split-layout' anchor='bottom'>
+            <div class="split-pane-component pane top">
+                <div class="abs holder holder-inspector l-flex-col">
+                    <div class="pane-header flex-elem">Inspection</div>
+                    <ul class="flex-elem grows vscroll">
+                        <li>
+                            <em>Properties</em>
+                            <div class="inspector-properties"
+                                 ng-repeat="data in metadata"
+                                 ng-class="{ first:$index === 0 }">
+                                <div class="label">{{ data.name }}</div>
+                                <div class="value">{{ data.value }}</div>
+                            </div>
+                        </li>
+                        <li ng-if="contextutalParents.length > 0">
+                            <em title="The location of this linked object.">Location</em>
+                            <span class="inspector-location"
+                                  ng-repeat="parent in contextutalParents"
+                                  ng-class="{ last:($index + 1) === contextualParents.length }">
+                                <mct-representation key="'label'"
+                                                    mct-object="parent"
+                                                    ng-model="ngModel"
+                                                    ng-click="ngModel.selectedObject = parent"
+                                                    class="location-item">
+                                </mct-representation>
+                            </span>
+                        </li>
+                        <li ng-if="primaryParents.length > 0">
+                            <em title="The location of the original object that this was linked from.">Original Location</em>
+                            <span class="inspector-location"
+                                  ng-repeat="parent in primaryParents"
+                                  ng-class="{ last:($index + 1) === primaryParents.length }">
+                                <mct-representation key="'label'"
+                                                    mct-object="parent"
+                                                    ng-model="ngModel"
+                                                    ng-click="ngModel.selectedObject = parent"
+                                                    class="location-item">
+                                </mct-representation>
+                            </span>
+                        </li>
+                    </ul>
+                </div><!--/ holder-inspector -->
+            </div><!--/ split-pane-component -->
+            <mct-splitter class="splitter-inspect-panel mobile-hide"></mct-splitter>
+            <div class="split-pane-component pane bottom">
+                <div class="abs holder holder-elements l-flex-col">
+                    <em class="flex-elem">Elements</em>
+                    <mct-representation
+                            key="'edit-elements'"
+                            mct-object="domainObject"
+                            class="flex-elem holder grows vscroll current-elements">
+                    </mct-representation>
+                </div>
+            </div>
+        </mct-split-pane>
+    </div><!--/ PaneController -->
+</span>
diff --git a/platform/commonUI/edit/src/actions/EditAction.js b/platform/commonUI/edit/src/actions/EditAction.js
index 6b8ba3e042..d771f75dd4 100644
--- a/platform/commonUI/edit/src/actions/EditAction.js
+++ b/platform/commonUI/edit/src/actions/EditAction.js
@@ -72,13 +72,26 @@ define(
          * Enter edit mode.
          */
         EditAction.prototype.perform = function () {
-            var editableObject;
+            var self = this;
             if (!this.domainObject.hasCapability("editor")) {
-                editableObject = new EditableDomainObject(this.domainObject, this.$q);
-                editableObject.getCapability('status').set('editing', true);
-                this.navigationService.setNavigation(editableObject);
+                //TODO: This is only necessary because the drop gesture is
+                // wrapping the object itself, need to refactor this later.
+                // All responsibility for switching into edit mode should be
+                // in the edit action, and not duplicated in the gesture
+                this.domainObject = new EditableDomainObject(this.domainObject, this.$q);
             }
-            //this.$location.path("/edit");
+            this.navigationService.setNavigation(this.domainObject);
+            this.domainObject.getCapability('status').set('editing', true);
+
+            //Register a listener to automatically cancel this edit action
+            //if the user navigates away from this object.
+            function cancelEditing(navigatedTo){
+                if (!navigatedTo || navigatedTo.getId() !== self.domainObject.getId()) {
+                    self.domainObject.getCapability('editor').cancel();
+                    self.navigationService.removeListener(cancelEditing);
+                }
+            }
+            this.navigationService.addListener(cancelEditing);
         };
 
         /**
diff --git a/platform/commonUI/edit/src/controllers/EditObjectController.js b/platform/commonUI/edit/src/controllers/EditObjectController.js
new file mode 100644
index 0000000000..eb5d494cac
--- /dev/null
+++ b/platform/commonUI/edit/src/controllers/EditObjectController.js
@@ -0,0 +1,65 @@
+/*****************************************************************************
+ * Open MCT Web, Copyright (c) 2014-2015, United States Government
+ * as represented by the Administrator of the National Aeronautics and Space
+ * Administration. All rights reserved.
+ *
+ * Open MCT Web is licensed under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0.
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ *
+ * Open MCT Web includes source code licensed under additional open source
+ * licenses. See the Open Source Licenses file (LICENSES.md) included with
+ * this source code distribution or the Licensing information page available
+ * at runtime from the About dialog for additional information.
+ *****************************************************************************/
+/*global define,Promise*/
+
+/**
+ * This bundle implements Edit mode.
+ * @namespace platform/commonUI/edit
+ */
+define(
+    [],
+    function () {
+        "use strict";
+
+        /**
+         * Controller which is responsible for populating the scope for
+         * Edit mode
+         * @memberof platform/commonUI/edit
+         * @constructor
+         */
+        function EditObjectController($scope) {
+            this.scope = $scope;
+        }
+
+        /**
+         * Get the warning to show if the user attempts to navigate
+         * away from Edit mode while unsaved changes are present.
+         * @returns {string} the warning to show, or undefined if
+         *          there are no unsaved changes
+         */
+        EditObjectController.prototype.getUnloadWarning = function () {
+            var navigatedObject = this.scope.domainObject,
+                editorCapability = navigatedObject &&
+                    navigatedObject.getCapability("editor"),
+                statusCapability = navigatedObject &&
+                    navigatedObject.getCapability("status"),
+                hasChanges = statusCapability && statusCapability.get('editing')
+                    && editorCapability && editorCapability.dirty();
+
+            return hasChanges ?
+                "Unsaved changes will be lost if you leave this page." :
+                undefined;
+        };
+
+        return EditObjectController;
+    }
+);
diff --git a/platform/commonUI/edit/src/directives/MCTBeforeUnload.js b/platform/commonUI/edit/src/directives/MCTBeforeUnload.js
index 3e7501c788..226e85f4a0 100644
--- a/platform/commonUI/edit/src/directives/MCTBeforeUnload.js
+++ b/platform/commonUI/edit/src/directives/MCTBeforeUnload.js
@@ -35,7 +35,7 @@ define(
          * @constructor
          * @param $window the window
          */
-        function MCTBeforeUnload($window) {
+        function MCTBeforeUnload($window, navigationService) {
             var unloads = [],
                 oldBeforeUnload = $window.onbeforeunload;
 
@@ -57,6 +57,7 @@ define(
 
                 // Stop using this unload expression
                 function removeUnload() {
+                    navigationService.removeListener(checkNavigationEvent, "before");
                     unloads = unloads.filter(function (callback) {
                         return callback !== unload;
                     });
@@ -65,17 +66,28 @@ define(
                     }
                 }
 
-                // Show a dialog before allowing a location change
-                function checkLocationChange(event) {
+                function shouldAllowNavigation(){
                     // Get an unload message (if any)
                     var warning = unload();
                     // Prompt the user if there's an unload message
-                    if (warning && !$window.confirm(warning)) {
-                        // ...and prevent the route change if it was confirmed
+                    return !warning || $window.confirm(warning);
+                }
+
+                // Show a dialog before allowing a location change
+                function checkLocationChange(event) {
+                    if (!shouldAllowNavigation()) {
+                        // Prevent the route change if it was confirmed
                         event.preventDefault();
                     }
                 }
 
+                // Show a dialog before allowing a location change
+                function checkNavigationEvent(event) {
+                    // Return a false value to the navigationService to
+                    // indicate that the navigation event should be prevented
+                    return shouldAllowNavigation();
+                }
+
                 // If this is the first active instance of this directive,
                 // register as the window's beforeunload handler
                 if (unloads.length === 0) {
@@ -90,6 +102,8 @@ define(
 
                 // Also handle route changes
                 scope.$on("$locationChangeStart", checkLocationChange);
+
+                navigationService.addListener(checkNavigationEvent, "before");
             }
 
             return {
diff --git a/platform/commonUI/edit/src/representers/EditRepresenter.js b/platform/commonUI/edit/src/representers/EditRepresenter.js
index 0844f65e67..e53318c1b0 100644
--- a/platform/commonUI/edit/src/representers/EditRepresenter.js
+++ b/platform/commonUI/edit/src/representers/EditRepresenter.js
@@ -49,6 +49,7 @@ define(
             var self = this;
 
             this.scope = scope;
+            this.listenHandle = undefined;
 
             // Mutate and persist a new version of a domain object's model.
             function doPersist(model) {
@@ -100,10 +101,13 @@ define(
             // Place the "commit" method in the scope
             scope.commit = commit;
             scope.setEditable = setEditable;
+
         }
 
         // Handle a specific representation of a specific domain object
         EditRepresenter.prototype.represent = function represent(representation, representedObject) {
+            var scope = this.scope,
+                self = this;
             // Track the key, to know which view configuration to save to.
             this.key = (representation || {}).key;
             // Track the represented object
@@ -113,11 +117,26 @@ define(
 
             // Ensure existing watches are released
             this.destroy();
+
+            /**
+             * Listen for changes in object state. If the object becomes
+             * editable then change the view and inspector regions
+             * object representation accordingly
+             */
+            this.listenHandle = this.domainObject.getCapability('status').listen(function(statuses){
+                if (statuses.indexOf('editing')!=-1){
+                    scope.viewRegionTemplate = 'edit-object';
+                    scope.inspectorRegionTemplate = 'inspector-edit'
+                } else {
+                    delete scope.viewRegionTemplate;
+                }
+            });
         };
 
         // Respond to the destruction of the current representation.
         EditRepresenter.prototype.destroy = function destroy() {
             // Nothing to clean up
+            this.listenHandle && this.listenHandle();
         };
 
         return EditRepresenter;
diff --git a/platform/commonUI/general/res/templates/inspector-browse.html b/platform/commonUI/general/res/templates/inspector-browse.html
new file mode 100644
index 0000000000..3a7a60f516
--- /dev/null
+++ b/platform/commonUI/general/res/templates/inspector-browse.html
@@ -0,0 +1,64 @@
+<!--
+ Open MCT Web, Copyright (c) 2014-2015, United States Government
+ as represented by the Administrator of the National Aeronautics and Space
+ Administration. All rights reserved.
+
+ Open MCT Web is licensed under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+ http://www.apache.org/licenses/LICENSE-2.0.
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ License for the specific language governing permissions and limitations
+ under the License.
+
+ Open MCT Web includes source code licensed under additional open source
+ licenses. See the Open Source Licenses file (LICENSES.md) included with
+ this source code distribution or the Licensing information page available
+ at runtime from the About dialog for additional information.
+-->
+<span class="l-inspect" ng-controller="ObjectInspectorController as controller">
+    <div class="abs holder holder-inspector l-flex-col">
+        <div class="pane-header flex-elem">Inspection</div>
+        <ul class="flex-elem grows vscroll">
+            <li>
+                <em>Properties</em>
+                <div class="inspector-properties"
+                     ng-repeat="data in metadata"
+                     ng-class="{ first:$index === 0 }">
+                    <div class="label">{{ data.name }}</div>
+                    <div class="value">{{ data.value }}</div>
+                </div>
+            </li>
+            <li ng-if="contextutalParents.length > 0">
+                <em title="The location of this linked object.">Location</em>
+                <span class="inspector-location"
+                      ng-repeat="parent in contextutalParents"
+                      ng-class="{ last:($index + 1) === contextualParents.length }">
+                    <mct-representation key="'label'"
+                                        mct-object="parent"
+                                        ng-model="ngModel"
+                                        ng-click="ngModel.selectedObject = parent"
+                                        class="location-item">
+                    </mct-representation>
+                </span>
+            </li>
+            <li ng-if="primaryParents.length > 0">
+                <em title="The location of the original object that this was linked from.">Original Location</em>
+                <span class="inspector-location"
+                      ng-repeat="parent in primaryParents"
+                      ng-class="{ last:($index + 1) === primaryParents.length }">
+                    <mct-representation key="'label'"
+                                        mct-object="parent"
+                                        ng-model="ngModel"
+                                        ng-click="ngModel.selectedObject = parent"
+                                        class="location-item">
+                    </mct-representation>
+                </span>
+            </li>
+        </ul>
+    </div><!--/ holder-inspector -->
+    </div><!--/ PaneController -->
+</span>
diff --git a/platform/representation/src/gestures/DropGesture.js b/platform/representation/src/gestures/DropGesture.js
index 1b7881a770..225211c3bd 100644
--- a/platform/representation/src/gestures/DropGesture.js
+++ b/platform/representation/src/gestures/DropGesture.js
@@ -165,16 +165,18 @@ define(
                     if (shouldCreateVirtualPanel(domainObject, selectedObject)){
                         editableDomainObject = createVirtualPanel(domainObject, selectedObject);
                         if (editableDomainObject) {
-                            navigationService.setNavigation(editableDomainObject);
+                            editableDomainObject.getCapability('action').perform('edit');
+                            //navigationService.setNavigation(editableDomainObject);
                             broadcastDrop(id, event);
-                            editableDomainObject.getCapability('status').set('editing', true);
+                            //editableDomainObject.getCapability('status').set('editing', true);
                         }
                     } else {
                         $q.when(action && action.perform()).then(function (result) {
                             //Don't go into edit mode for folders
                             if (domainObjectType!=='folder') {
-                                navigationService.setNavigation(editableDomainObject);
-                                editableDomainObject.getCapability('status').set('editing', true);
+                               // navigationService.setNavigation(editableDomainObject);
+                                //editableDomainObject.getCapability('status').set('editing', true);
+                                editableDomainObject.getCapability('action').perform('edit');
                             }
                             broadcastDrop(id, event);
                         });