diff --git a/css/toolbar-overrides.css b/css/toolbar-overrides.css
new file mode 100644
index 0000000..1b20e2e
--- /dev/null
+++ b/css/toolbar-overrides.css
@@ -0,0 +1,17 @@
+/* Shift the "Hello <user>" and "Log out" links back to the right. */
+#toolbar div.toolbar-menu {
+  padding-right: 10px;
+}
+
+/* Have both the shortcuts and their "Edit shortcuts" link on the right. */
+#toolbar .toolbar-shortcuts,
+#toolbar a#edit-shortcuts {
+  float: right;
+}
+#toolbar .toolbar-shortcuts.toolbar-edit-toggle {
+  float: left;
+}
+#toolbar a#edit-shortcuts {
+  margin-left: 15px;
+  font-size: 80%;
+}
diff --git a/edit.info b/edit.info
index 4d40f61..43a56d4 100644
--- a/edit.info
+++ b/edit.info
@@ -4,7 +4,6 @@ package = Spark
 core = 7.x
 php = 5.3
 
-dependencies[] = navbar
 dependencies[] = entity
 dependencies[] = fape
 dependencies[] = iconfonts
diff --git a/includes/toolbar.inc b/includes/toolbar.inc
index eef224a..a38955e 100644
--- a/includes/toolbar.inc
+++ b/includes/toolbar.inc
@@ -1,7 +1,7 @@
 <?php
 /**
  * @file
- * Integrates the Edit module with the Navigation bar module.
+ * Integrates the Edit module with the Navigation bar or Shortcut module.
  *
  * Contains all the logic for altering the toolbar, including some hooks. Hence,
  * this include file must *always* be loaded by the .module file.
@@ -11,23 +11,65 @@
  * Implements hook_page_alter().
  */
 function edit_page_alter(&$page) {
+  if (!((module_exists('shortcut') && module_exists('toolbar')) || module_exists('navbar'))) {
+    // If the combination of shortcut+toolbar is not enabled or the navbar
+    // module is not enabled, users will not see anything of the UI, so inform
+    // them they need to enable either. Do this as a drupal_set_message() for
+    // now.
+    drupal_set_message(t('Edit module requires either Shortcut and Toolbar modules or the Mobile friendly navigation toolbar module to be enabled. See <a href="@url">@url</a> for integration with other modules.', array('@url' => 'http://drupal.org/node/1688166')), 'error');
+  }
+
   // Don't provide a view/edit toggle on admin pages, node/add and node/%/edit pages.
   if (arg(0) == 'admin' || (arg(0) == 'node' && arg(1) == 'add') || (arg(0) == 'node' && arg(2) == 'edit')) {
     return;
   }
 
-  // If the toolbar is available, add a pre-render function to display the
+  // NAVBAR module integration.
+  // If the navbar is available, add a pre-render function to display the
   // view/edit mode toggle, but only on node pages.
   // @todo: add support for other entity types.
   if (isset($page['page_top']['navbar']) && arg(0) == 'node') {
     $page['page_top']['navbar']['#pre_render'][] = 'edit_navbar_pre_render';
   }
+
+  // TOOLBAR module integration.
+  if (isset($page['page_top']['toolbar'])) {
+    // Remove the toolbar drawer toggle by overriding Toolbar module's
+    // pre-render function with our own implementation.
+    if (isset($page['page_top']['toolbar']['#pre_render'][0]) && $page['page_top']['toolbar']['#pre_render'][0] == 'toolbar_pre_render') {
+      $page['page_top']['toolbar']['#pre_render'][0] = 'edit_override_toolbar_pre_render';
+    }
+    // Replace the Shortcut module's toolbar pre-render function with our own
+    // implementation.
+    if (isset($page['page_top']['toolbar']['#pre_render'][1]) && $page['page_top']['toolbar']['#pre_render'][1] == 'shortcut_toolbar_pre_render') {
+      $page['page_top']['toolbar']['#pre_render'][1] = 'edit_override_shortcut_toolbar_pre_render';
+    }
+    // If the toolbar is available, add a pre-render function to display the
+    // view/edit mode toggle.
+    $page['page_top']['toolbar']['#pre_render'][] = 'edit_toolbar_pre_render';
+  }
+}
+
+/**
+ * Implements hook_module_implements_alter().
+ */
+function edit_module_implements_alter(&$implementations, $hook) {
+  // TOOLBAR module integration.
+  // Run Edit module's hook_page_alter() after the one in Shortcut module, but
+  // retain the ordering. We need this to be able to override Shortcut modules's
+  // #pre_render callback for rendering the shortcuts into the toolbar.
+  if ($hook == 'page_alter') {
+    unset($implementations['edit']);
+    $index = array_search('shortcut', array_keys($implementations));
+    $implementations = array_slice($implementations, 0, $index + 1) + array('edit' => FALSE) + array_slice($implementations, $index + 1);
+  }
 }
 
 /**
  * Pre-render function to add the view/edit mode toggle widget to the toolbar.
  */
 function edit_navbar_pre_render($navbar) {
+  // NAVBAR module integration.
 
   // If we have primary tabs and a View tab is present, remove that tab in favor
   // of our view/edit tabs. The edit tab is renamed elsewhere to avoid confusion.
@@ -39,10 +81,68 @@ function edit_navbar_pre_render($navbar) {
     }
   }
 
-  $navbar_drawer_prepend = array(
+  // Prepend edit module links to the navbar.
+  $navbar_drawer_prepend = edit_toggle_links();
+  $navbar['navbar_drawer'] = array_merge($navbar_drawer_prepend, $navbar['navbar_drawer']);
+  return $navbar;
+}
+
+/**
+ * Pre-render function to add the view/edit mode toggle widget to the toolbar.
+ */
+function edit_toolbar_pre_render($toolbar) {
+  // TOOLBAR module integration.
+  $toolbar['toolbar_drawer'][] = edit_toggle_links('toolbar-shortcuts toolbar-edit-toggle', '');
+  return $toolbar;
+}
+
+/**
+ * Overrides the Toolbar module's toolbar pre-render function.
+ */
+function edit_override_toolbar_pre_render($toolbar) {
+  // TOOLBAR module integration.
+
+  // The original.
+  $toolbar = toolbar_pre_render($toolbar);
+
+  // The toolbar should never be collapsed.
+  $_COOKIE['Drupal_toolbar_collapsed'] = 0;
+
+  // Now we remove the toolbar drawer toggle.
+  unset($toolbar['toolbar_toggle']);
+
+  $toolbar['#attached']['css'][] = drupal_get_path('module', 'edit') . '/css/toolbar-overrides.css';
+
+  return $toolbar;
+}
+
+/**
+ * Overrides the Shortcut module's toolbar pre-render function.
+ */
+function edit_override_shortcut_toolbar_pre_render($toolbar) {
+  // TOOLBAR module integration.
+
+  // The original.
+  $toolbar = shortcut_toolbar_pre_render($toolbar);
+
+  // Put the shortcuts themselves *after* their configure link in the HTML,
+  // because we'll float them right.
+  $shortcuts = array_shift($toolbar['toolbar_drawer'][0]);
+  array_push($toolbar['toolbar_drawer'][0], $shortcuts);
+
+  $toolbar['#attached']['css'][] = drupal_get_path('module', 'edit') . '/css/toolbar-overrides.css';
+
+  return $toolbar;
+}
+
+/**
+ * API to generate common toggle links for different toolbars.
+ */
+function edit_toggle_links($wrapper_classes = '', $ul_classes = 'tabs primary') {
+  return array(
     'view_edit_toggle' => array(
-      '#prefix' => '<h2 class="element-invisible">' . t('In-place edit operations') . '</h2><ul class="tabs primary" id="edit_view-edit-toggles">',
-      '#suffix' => '</ul>',
+      '#prefix' => '<div class="' . $wrapper_classes . '"><h2 class="element-invisible">' . t('In-place edit operations') . '</h2><ul class="' . $ul_classes . '" id="edit_view-edit-toggles">',
+      '#suffix' => '</ul></div>',
       'content' => array(
         array(
           '#theme' => 'menu_local_task',
@@ -54,20 +154,6 @@ function edit_navbar_pre_render($navbar) {
           '#link' => array('title' => t('Quick edit'), 'href' => '#', 'localized_options' => array('attributes' => array('class' => array('edit_view-edit-toggle', 'edit-edit')))),
         ),
       ),
-
-      // @todo Make this less hacky. We might end up using something other than
-      // radios.
-      /*'#markup' => '
-<div id="edit_view-edit-toggle" class="form-radios">
-  <div class="form-item form-type-radio">
-    <input type="radio" id="edit_view-edit-toggle--view" value="view" class="form-radio" name="edit_view_edit_toggle" checked="checked">
-    <label class="option" for="edit_view-edit-toggle--view">' . t('View') . '</label>
-  </div>
-  <div class="form-item form-type-radio">
-    <input type="radio" id="edit_view-edit-toggle--edit" value="edit" class="form-radio" name="edit_view_edit_toggle">
-    <label class="option" for="edit_view-edit-toggle--edit">' . t('Edit') . '</label>
-  </div>
-</div>',*/
       '#attached' => array(
         'library' => array(
           array('edit', 'edit.frontend'),
@@ -75,6 +161,4 @@ function edit_navbar_pre_render($navbar) {
       ),
     ),
   );
-  $navbar['navbar_drawer'] = array_merge($navbar_drawer_prepend, $navbar['navbar_drawer']);
-  return $navbar;
 }
diff --git a/js/edit.js b/js/edit.js
index 951596f..a235ea3 100644
--- a/js/edit.js
+++ b/js/edit.js
@@ -61,7 +61,9 @@ Drupal.edit.init = function() {
     var wasViewing = Drupal.edit.state.isViewing;
     var isViewing  = Drupal.edit.state.isViewing = $(this).hasClass('edit-view');
     // Swap active class among the two links.
+    $('a.edit_view-edit-toggle').removeClass('active');
     $('a.edit_view-edit-toggle').parent().removeClass('active');
+    $('a.edit_view-edit-toggle.edit-' + (isViewing ? 'view' : 'edit')).addClass('active');
     $('a.edit_view-edit-toggle.edit-' + (isViewing ? 'view' : 'edit')).parent().addClass('active');
 
     if (wasViewing && !isViewing) {
@@ -79,8 +81,8 @@ Drupal.edit.init = function() {
       // RTTs than needed. Instead, the server should support batch requests.
       console.log('Preloading forms that we might need!', Drupal.edit.state.queues.preload);
 
-      // Animations.
-      $('#edit_overlay').css('top', $('#navbar').outerHeight());
+      // Animations. Integrate with both navbar and toolbar.
+      $('#edit_overlay').css('top', $('#navbar, #toolbar').outerHeight());
       $('#edit_overlay').removeClass('edit-animate-invisible');
 
       // Disable contextual links in edit mode.
