diff --git a/commerce_wishlist.admin.inc b/commerce_wishlist.admin.inc
index a4783ed..5e9c557 100644
--- a/commerce_wishlist.admin.inc
+++ b/commerce_wishlist.admin.inc
@@ -11,15 +11,15 @@
 function commerce_wishlist_admin_form($form, &$form_state) {
   $form['commerce_wishlist_weight'] = array(
     '#type' => 'textfield',
-    '#title' => t('Button/link weight'),
-    '#description' => t('Set the position of the button/link "Add to wishlist".'),
+    '#title' => t('Button/Link weight'),
+    '#description' => t('Set the weight of the button/link in the "Add to cart" form.'),
     '#default_value' => variable_get('commerce_wishlist_weight', 0),
     '#required' => TRUE,
   );
   $form['commerce_wishlist_element'] = array(
     '#type' => 'select',
     '#title' => t('"Add to wishlist" element'),
-    '#options' => array('link' => t('Ajax link'), 'button' => t('Button')),
+    '#options' => array('link' => t('Link'), 'button' => t('Button')),
     '#description' => t('The way "Add to wishlist" element will be displayed. Either as a button or link.'),
     '#default_value' => variable_get('commerce_wishlist_element', 'button'),
   );
@@ -30,6 +30,29 @@ function commerce_wishlist_admin_form($form, &$form_state) {
     '#description' => t('Enable "Add to wishlist" element for these product types.'),
     '#default_value' => variable_get('commerce_wishlist_product_types', array()),
   );
+  $form['commerce_wishlist_use_ajax'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Use Ajax'),
+    '#description' => t('Use ajax for add/remove from wishlist.'),
+    '#default_value' => variable_get('commerce_wishlist_use_ajax', 0),
+    '#states' => array(
+      'visible' => array(
+        ':input[name="commerce_wishlist_element"]' => array('value' => 'link'),
+      ),
+    ),
+  );
+  $form['commerce_wishlist_anonymous_wishlist'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Display "Add to Wishlist" for anonymous users'),
+    '#description' => t('This will allow anonymous users to add items to a wishlist that will be attached to their account when they log in. Admins will have to grant anonymous users "Manage own wish list" <a href="@permission">permission</a>.', array('@permission' => url('admin/people/permissions'))),
+    '#default_value' => variable_get('commerce_wishlist_anonymous_wishlist', 0),
+  );
+  $form['commerce_wishlist_show_remove'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Show "Remove from Wishlist"'),
+    '#description' => t('Show the Remove from Wishlist, instead of already in wishlist'),
+    '#default_value' => variable_get('commerce_wishlist_show_remove', 0),
+  );
 
   return system_settings_form($form);
 }
diff --git a/commerce_wishlist.install b/commerce_wishlist.install
index d0c5151..8964ada 100644
--- a/commerce_wishlist.install
+++ b/commerce_wishlist.install
@@ -168,6 +168,8 @@ function commerce_wishlist_uninstall() {
   variable_del('commerce_wishlist_element');
   variable_del('commerce_wishlist_product_types');
   variable_del('commerce_wishlist_weight');
+  variable_del('commerce_wishlist_anonymous_wishlist');
+  variable_del('commerce_wishlist_show_remove');
 
   field_delete_field('commerce_wishlist_visibility');
 }
diff --git a/commerce_wishlist.module b/commerce_wishlist.module
index 3c91237..099a991 100644
--- a/commerce_wishlist.module
+++ b/commerce_wishlist.module
@@ -23,34 +23,36 @@ define('COMMERCE_WISHLIST_VISIBILITY_PUBLIC', 2);
 function commerce_wishlist_menu() {
   $items = array();
 
-  $items['user/%user/wishlist/nojs/remove/%commerce_line_item'] = array(
+  $items['wishlist/nojs/remove/%commerce_product'] = array(
     'page callback' => 'commerce_wishlist_product_remove_page',
-    'page arguments' => array(5, 1),
-    'access callback' => 'commerce_wishlist_user_access',
-    'access arguments' => array(1, 'update'),
+    'page arguments' => array(3),
+    'access arguments' => array('manage own wish list'),
     'type' => MENU_CALLBACK,
   );
-  $items['user/%user/wishlist/ajax/remove/%commerce_line_item'] = array(
+  $items['wishlist/ajax/remove/%commerce_product'] = array(
     'page callback' => 'commerce_wishlist_product_remove_ajax',
-    'page arguments' => array(5, 1),
-    'access callback' => 'commerce_wishlist_user_access',
-    'access arguments' => array(1, 'update'),
+    'page arguments' => array(3),
+    'access arguments' => array('manage own wish list'),
     'type' => MENU_CALLBACK,
   );
-  $items['user/%user/wishlist/nojs/add/%commerce_product'] = array(
+  $items['wishlist/nojs/add/%commerce_product'] = array(
     'page callback' => 'commerce_wishlist_product_add_page',
-    'page arguments' => array(5, 1),
-    'access callback' => 'commerce_wishlist_user_access',
-    'access arguments' => array(1, 'update'),
+    'page arguments' => array(3),
+    'access arguments' => array('manage own wish list'),
     'type' => MENU_CALLBACK,
   );
-  $items['user/%user/wishlist/ajax/add/%commerce_product'] = array(
+  $items['wishlist/ajax/add/%commerce_product'] = array(
     'page callback' => 'commerce_wishlist_product_add_ajax',
-    'page arguments' => array(5, 1),
-    'access callback' => 'commerce_wishlist_user_access',
-    'access arguments' => array(1, 'update'),
+    'page arguments' => array(3),
+    'access arguments' => array('manage own wish list'),
     'type' => MENU_CALLBACK,
   );
+  $items['wishlist'] = array(
+    'title' => 'Wishlist',
+    'page callback' => 'commerce_wishlist_view',
+    'access arguments' => array('manage own wish list'),
+    'type' => MENU_LOCAL_TASK,
+  );
   $items['user/%user/wishlist'] = array(
     'title callback' => 'commerce_wishlist_view_user_wishlist_title',
     'title arguments' => array(1),
@@ -172,15 +174,30 @@ function commerce_wishlist_view_user_wishlist_title($wishlist_user) {
   }
 }
 
+function commerce_wishlist_view() {
+  global $user;
+  // Default to displaying an empty message.
+  $content = theme('commerce_wishlist_empty_page');
+
+  // First check to make sure we have a valid order.
+  if ($order = commerce_wishlist_order_load($user->uid)) {
+    $wrapper = entity_metadata_wrapper('commerce_order', $order);
+    // Only show the wishlist form if we found product line items.
+    if (commerce_line_items_quantity($wrapper->commerce_line_items, commerce_product_line_item_types()) > 0) {
+
+      // Add the form for editing the cart contents.
+      $content = commerce_embed_view('commerce_wishlist_page', 'default', array($order->order_id), 'wishlist');
+    }
+  }
+  return $content;
+}
+
+
 /**
  * Helper function to determine a wishlist's usability.
  */
 function commerce_wishlist_is_public($wishlist) {
-  if (!empty($wishlist->commerce_wishlist_visibility[LANGUAGE_NONE][0]['value'])
-      && $wishlist->commerce_wishlist_visibility[LANGUAGE_NONE][0]['value'] == '2') {
-    return TRUE;
-  }
-  return FALSE;
+  return !empty($wishlist->commerce_wishlist_visibility[LANGUAGE_NONE][0]['value']) && $wishlist->commerce_wishlist_visibility[LANGUAGE_NONE][0]['value'] == '2';
 }
 
 /**
@@ -233,6 +250,13 @@ function commerce_wishlist_theme($existing, $type, $theme, $path) {
     'commerce_wishlist_product_add_link' => array(
       'variables' => array('product_id' => NULL, 'user' => NULL),
     ),
+    'commerce_wishlist_remove_from_wishlist_link' => array(
+      'variables' => array(
+        'line_item_id' => NULL,
+        'text' => t('Remove from Wishlist'),
+        'destination' => '',
+      ),
+    ),
     'commerce_wishlist_already_in_wishlist_link' => array(
       'variables' => array('user_id' => NULL),
     ),
@@ -300,23 +324,42 @@ function commerce_wishlist_form_alter(&$form, &$form_state, $form_id) {
       return;
     }
 
-    // If it's already in the wishlist, show the already in wishlist link.
-    // Otherwise, show the button or link as configured.
-    if (commerce_wishlist_user_has_product_in_wishlist($product_id)) {
-      $form['add_to_wishlist'] = array(
-        '#markup' => theme('commerce_wishlist_already_in_wishlist_link', array('user_id' => $user->uid)),
-        '#weight' => variable_get('commerce_wishlist_weight', 0),
-      );
-    }
-    elseif (variable_get('commerce_wishlist_element', 'button') == 'button') {
-      $form += commerce_wishlist_add_form();
-    }
-    else {
-      // Add the "Add to wishlist" link to the form.
-      $form['add_to_wishlist'] = array(
-        '#markup' => theme('commerce_wishlist_product_add_link', array('product_id' => $product_id, 'user' => $user)),
-        '#weight' => variable_get('commerce_wishlist_weight', 0),
-      );
+    //show the wishlist widget if you have permission or show for anonymous with login functionality
+    if (user_access('manage own wish list') || (($user->uid == 0) && variable_get('commerce_wishlist_anonymous_wishlist', 0))) {
+      // If it's already in the wishlist, show the already in wishlist link.
+      // Otherwise, show the button or link as configured.
+      if (commerce_wishlist_user_has_product_in_wishlist($product_id)) {
+        if (variable_get('commerce_wishlist_show_remove', 0)) {
+          if (variable_get('commerce_wishlist_element', 'button') == 'button') {
+            $form += commerce_wishlist_remove_form();
+          }
+          else {
+            $form['add_to_wishlist'] = array(
+              '#markup' => theme('commerce_wishlist_remove_from_wishlist_link', array('product_id' => $product_id)),
+              '#weight' => variable_get('commerce_wishlist_weight', 0),
+            );
+          }
+        }
+        else {
+          $form['add_to_wishlist'] = array(
+            '#markup' => theme('commerce_wishlist_already_in_wishlist_link', array('user_id' => $user->uid)),
+            '#weight' => variable_get('commerce_wishlist_weight', 0),
+          );
+        }
+      }
+      elseif (variable_get('commerce_wishlist_element', 'button') == 'button') {
+        $form += commerce_wishlist_add_form();
+      }
+      else {
+        // Add the "Add to wishlist" link to the form.
+        $form['add_to_wishlist'] = array(
+          '#markup' => theme('commerce_wishlist_product_add_link', array(
+            'product_id' => $product_id,
+            'user' => $user,
+          )),
+          '#weight' => variable_get('commerce_wishlist_weight', 0),
+        );
+      }
     }
   }
 
@@ -340,8 +383,8 @@ function commerce_wishlist_commerce_checkout_complete($order) {
         // Invoke appropriate event.
         $account = user_load($wishlist_product['user_id']);
         $product = commerce_product_load($wishlist_product['product_id']);
-        $node    = node_load($wishlist_product['node_id']);
-        rules_invoke_event('commerce_wishlist_event_product_purchased', $account, $product, $node, $order);
+//        $node = node_load($wishlist_product['node_id']);
+        rules_invoke_event('commerce_wishlist_event_product_purchased', $account, $product, $order);
       }
     }
   }
@@ -363,7 +406,7 @@ function commerce_wishlist_add_to_cart_remove($form, &$form_state) {
  */
 function commerce_wishlist_views_api() {
   return array(
-    'api'  => 3,
+    'api' => 3,
     'path' => drupal_get_path('module', 'commerce_wishlist') . '/includes/views',
   );
 }
@@ -514,7 +557,7 @@ function commerce_wishlist_share_submit($form, &$form_state) {
  */
 function theme_commerce_wishlist_already_in_wishlist_link(&$variables) {
   return t('Already in <a class="in-wishlist" href="@url">your wish list</a>.', array(
-    '@url' => url('user/' . $variables['user_id'] . '/wishlist'),
+    '@url' => commerce_wishlist_build_wishlist_url($variables['user_id']),
   ));
 }
 
@@ -524,7 +567,7 @@ function theme_commerce_wishlist_already_in_wishlist_link(&$variables) {
 function theme_commerce_wishlist_added_to_wishlist_link(&$variables) {
   return t('Added to <a class="in-wishlist" href="@url">your wish list</a>.', array(
     '@title' => $variables['product']->title,
-    '@url' => url('user/' . $variables['user_id'] . '/wishlist'),
+    '@url' => url('wishlist'),
   ));
 }
 
@@ -535,22 +578,32 @@ function theme_commerce_wishlist_product_add_link($variables) {
   $user = $variables['user'];
   $product_id = $variables['product_id'];
 
-  $url = 'user/' . $user->uid . '/wishlist/nojs/add/' . $product_id;
-  $params = array(
-    'attributes' => array(
-      'class' => array('ajax' => 'use-ajax', 'add-to-wishlist'),
-      'id' => 'add-wishlist-' . $product_id,
-    ),
-    'query' => array(
-      'destination' => $_GET['q'],
-      'token' => drupal_get_token(),
-    ),
-  );
+  if (variable_get('commerce_wishlist_use_ajax', 0)) {
+    drupal_add_library('system', 'drupal.ajax');
+    $url = 'wishlist/ajax/add/' . $product_id;
+    $params = array(
+      'attributes' => array(
+        'class' => array('ajax' => 'use-ajax', 'add-to-wishlist'),
+        'id' => 'add-wishlist-' . $product_id,
+      ),
+    );
+  }
+  else {
+    $url = 'wishlist/nojs/add/' . $product_id;
+    $params = array(
+      'attributes' => array(
+        'id' => 'add-wishlist-' . $product_id,
+      ),
+      'query' => array(
+        'destination' => $_GET['q'],
+      ),
+    );
+  }
 
   // If the current user is not logged in, build a different link that
   // points to the login page and lists all other relevant details
   // (product ID, node ID and original URL) in query string.
-  if ($user->uid == 0) {
+  if ($user->uid == 0 && !variable_get('commerce_wishlist_anonymous_wishlist', 0)) {
     unset($params['attributes']['class']['ajax'], $params['query']);
     $params['query']['wishlist_product'] = $product_id;
     $params['query']['destination'] = $_GET['q'];
@@ -560,6 +613,36 @@ function theme_commerce_wishlist_product_add_link($variables) {
 }
 
 /**
+ * Remove From Wishlist theme callback
+ */
+function theme_commerce_wishlist_remove_from_wishlist_link($variables) {
+  //no-ajax is used to remove ajax from views list
+  if (empty($variables['no-ajax']) && (variable_get('commerce_wishlist_use_ajax', 0))) {
+    drupal_add_library('system', 'drupal.ajax');
+    $url = 'wishlist/ajax/remove/' . $variables['product_id'];
+    $params = array(
+      'attributes' => array(
+        'class' => array('use-ajax', 'remove-from-wishlist'),
+        'id' => 'remove-wishlist-' . $variables['product_id'],
+      ),
+    );
+  }
+  else {
+    $url = 'wishlist/nojs/remove/' . $variables['product_id'];
+    $params = array(
+      'attributes' => array(
+        'id' => 'remove-wishlist-' . $variables['product_id'],
+      ),
+      'query' => array(
+        'destination' => $_GET['q'],
+      ),
+    );
+  }
+
+  return l($variables['text'], $url, $params);
+}
+
+/**
  * Theme callback for page title on user's wishlist page.
  *
  * The reason this is created as a separate themeable function is that depending
@@ -616,17 +699,6 @@ function commerce_wishlist_user_access($account, $operation, $wishlist = NULL) {
     return FALSE;
   }
 
-  if ($operation == 'update') {
-    if ($account->uid == $user->uid && user_access('manage own wish list')) {
-      return TRUE;
-    }
-    // Check if the wish list owner and the user who is trying to edit the wish
-    // list are the same, and if they have permission to manage own wish list.
-    return ($account->uid == $user->uid
-      && user_access('manage own wish list')
-      && $wishlist->uid == $account->uid);
-  }
-
   return FALSE;
 }
 
@@ -669,7 +741,7 @@ function commerce_wishlist_product_added_to_cart($form, &$form_state) {
   // back the changes.
   $line_item = commerce_line_item_load($form_state['line_item']->line_item_id);
   $line_item->data['wishlist_products'][] = array(
-    'user_id'    => $form_state['values']['uid'],
+    'user_id' => $form_state['values']['uid'],
     'product_id' => $form_state['values']['product_id'],
   );
 
@@ -707,7 +779,7 @@ function commerce_wishlist_add_form_validate($form, &$form_state) {
   global $user;
   if ($form_state['triggering_element']['#name'] == 'commerce-wishlist-add-product') {
     // Verify if the user is logged in.
-    if (!$user->uid) {
+    if (!user_access('manage own wish list') && (!$user->uid) && variable_get('commerce_wishlist_anonymous_wishlist', 0)) {
       $_SESSION['commerce_wishlist']['product_id'] = $form_state['values']['product_id'];
       form_set_error('add_to_wishlist',
         t('Please <a href="@login">log in</a> or <a href="@register">register</a> to add this product to your wish list.',
@@ -726,29 +798,63 @@ function commerce_wishlist_add_form_validate($form, &$form_state) {
 }
 
 /**
+ * Submit callback for commerce_cart_add_to_cart_form().
+ *
+ * Override of commerce_cart_add_to_cart_form_submit to add wishlist additional
+ * functionality.
+ */
+function commerce_wishlist_add_form_submit($form, &$form_state) {
+  global $user;
+
+  $product = commerce_product_load($form_state['values']['product_id']);
+  commerce_wishlist_product_add($product, NULL, NULL, $form_state['line_item']->data['context']['display_path']);
+
+  drupal_set_message(t('Product <em>@product</em> has been added to <a href="@url">your wish list</a>.', array(
+    '@product' => $product->title,
+    '@url' => commerce_wishlist_build_wishlist_url($user->uid),
+  )));
+}
+
+/**
+ * Form callback for removing an item from your wishlist.
+ */
+function commerce_wishlist_remove_form() {
+  $form['remove_from_wishlist'] = array(
+    '#type' => 'submit',
+    '#value' => t('Remove from Wishlist'),
+    '#weight' => variable_get('commerce_wishlist_weight', 0),
+    '#name' => 'commerce-wishlist-remove-product',
+    '#attributes' => array('class' => array('commerce-wishlist')),
+    '#validate' => array('commerce_wishlist_remove_form_validate'),
+    '#submit' => array('commerce_wishlist_remove_form_submit'),
+  );
+
+  return $form;
+}
+
+/**
+ * Validate callback for commerce_wishlist_remove_form().
+ */
+function commerce_wishlist_remove_form_validate($form, &$form_state) {
+  if ($form_state['triggering_element']['#name'] == 'commerce-wishlist-remove-product') {
+    if (!commerce_wishlist_user_has_product_in_wishlist($form_state['values']['product_id'])) {
+      form_set_error('remove_from_wishlist', t('This product is not in your wishlist.'));
+    }
+  }
+}
+
+/**
  * Implements hook_user_login().
+ *
+ * When a user logs into the site, if they have a wishlist order it should
+ * be merged into the user account wishlist.
  */
 function commerce_wishlist_user_login(&$edit, $account) {
-  // If someone has a product ID in their session, go ahead and add it to their
-  // wish list when the log in.
-  if (!empty($_SESSION['commerce_wishlist']['product_id'])) {
-    $product_id = $_SESSION['commerce_wishlist']['product_id'];
-    $product = commerce_product_load($product_id);
-    if (!commerce_wishlist_user_has_product_in_wishlist($product_id, $account->uid)) {
-      commerce_wishlist_product_add($product, NULL, $account->uid);
-      drupal_set_message(t('Product <em>@product</em> has been added to <a href="@url">your wish list</a>.', array(
-        '@product' => $product->title,
-        '@url' => url('user/' . $account->uid . '/wishlist', array('absolute' => TRUE)),
-      )));
-    }
-    else {
-      drupal_set_message(t('Product <em>@product</em> was already in <a href="@url">your wish list</a>.', array(
-        '@product' => $product->title,
-        '@url' => url('user/' . $account->uid . '/wishlist', array('absolute' => TRUE)),
-      )), 'error');
-    }
+  // Get the user's anonymous wishlist order if it exists.
+  if ($wishlist = commerce_wishlist_order_load()) {
+    // Convert it to an authenticated cart.
+    commerce_wishlist_order_convert($wishlist, $account);
   }
-  unset($_SESSION['commerce_wishlist']);
 }
 
 /**
@@ -763,72 +869,87 @@ function commerce_wishlist_menu_contextual_links_alter(&$links, $router_item, $r
 }
 
 /**
- * Submit callback for commerce_cart_add_to_cart_form().
+ * Submit callback for commerce_wishlist_remove_form().
  *
  * Override of commerce_cart_add_to_cart_form_submit to add wishlist additional
- * functionality.
+ * functionality
  */
-function commerce_wishlist_add_form_submit($form, &$form_state) {
+function commerce_wishlist_remove_form_submit($form, &$form_state) {
   global $user;
-
   $product = commerce_product_load($form_state['values']['product_id']);
-  commerce_wishlist_product_add($product, NULL, NULL, $form_state['line_item']->data['context']['display_path']);
 
-  drupal_set_message(t('Product <em>@product</em> has been added to <a href="@url">your wish list</a>.', array(
+  if ($line_item = commerce_wishlist_user_has_product_in_wishlist($product->product_id)) {
+    commerce_wishlist_product_remove_line_item($line_item);
+  }
+
+  drupal_set_message(t('Product <em>@product</em> has been removed from <a href="@url">your wishlist</a>.', array(
     '@product' => $product->title,
-    '@url' => url('user/' . $user->uid . '/wishlist', array('absolute' => TRUE)),
+    '@url' => commerce_wishlist_build_wishlist_url($user->uid),
   )));
 }
 
 /**
  * Page callback: handle deletion of a wish list item.
  *
- * @param object $line_item
- *   The wish list product line item.
- * @param object $account
- *   The account.
+ * @param object $product
+ *   The product to remove from the wishlist.
  */
-function commerce_wishlist_product_remove_page($line_item, $account) {
-  commerce_wishlist_product_remove_line_item($line_item, $account);
+function commerce_wishlist_product_remove_page($product) {
+  global $user;
+  if ($line_item = commerce_wishlist_user_has_product_in_wishlist($product->product_id)) {
+    commerce_wishlist_product_remove_line_item($line_item);
+  }
+  drupal_set_message(t('Product <em>@product</em> has been removed from <a href="@url">your wishlist</a>.', array(
+    '@product' => $product->title,
+    '@url' => commerce_wishlist_build_wishlist_url($user->uid),
+  )));
+
   drupal_goto();
 }
 
 /**
- * Ajax callback to handle deletion of wish list item.
+ * Page callback: Ajax product remove.
  *
- * @param object $line_item
- *   The wish list product line item.
- * @param object $account
- *   The account.
+ * @param object $product
+ *   The product to remove from the wishlist.
  */
-function commerce_wishlist_product_remove_ajax($line_item, $account) {
-  $product_id = commerce_product_load($line_item->commerce_product[LANGUAGE_NONE][0]['product_id']);
-  commerce_wishlist_product_remove_line_item($line_item, $account);
-  $link = theme('commerce_wishlist_product_add_link', array('product_id' => $product_id, 'user' => $account));
-  $commands = array(ajax_command_replace('a#add-wishlist-' . $product_id, $link));
+function commerce_wishlist_product_remove_ajax($product) {
+  if ($line_item = commerce_wishlist_user_has_product_in_wishlist($product->product_id)) {
+    commerce_wishlist_product_remove_line_item($line_item);
+  }
+  $link = theme('commerce_wishlist_product_add_link', array(
+    'product_id' => $product->product_id,
+    'user' => user_load($product->uid),
+  ));
+  $commands = array(ajax_command_replace('a#remove-wishlist-' . $product->product_id, $link));
   ajax_deliver(array('#type' => 'ajax', '#commands' => $commands));
 }
 
 /**
  * Menu callback: Perform various actions (add to wishlist etc).
  */
-function commerce_wishlist_product_add_page($product, $user) {
-  if (isset($_GET['token']) && drupal_valid_token($_GET['token'])) {
-    if (!commerce_wishlist_user_has_product_in_wishlist($product->product_id, $user->uid)) {
-      $display_path = '';
-      if ($_GET['destination'] != '') {
-        $display_path = $_GET['destination'];
-      }
-      commerce_wishlist_product_add($product, NULL, $user->uid, $display_path);
+function commerce_wishlist_product_add_page($product) {
+  global $user;
+  if (!commerce_wishlist_user_has_product_in_wishlist($product->product_id)) {
+    $display_path = '';
+    if ($_GET['destination'] != '') {
+      $display_path = $_GET['destination'];
     }
+    commerce_wishlist_product_add($product, NULL, $user->uid, $display_path);
   }
+  drupal_set_message(t('Product <em>@product</em> has been added to <a href="@url">your wish list</a>.', array(
+    '@product' => $product->title,
+    '@url' => commerce_wishlist_build_wishlist_url($user->uid),
+  )));
+
   drupal_goto();
 }
 
 /**
  * Page callback: Ajax product add.
  */
-function commerce_wishlist_product_add_ajax($product, $user) {
+function commerce_wishlist_product_add_ajax($product) {
+  global $user;
   if (!commerce_wishlist_user_has_product_in_wishlist($product->product_id, $user->uid)) {
     $display_path = '';
     if ($_GET['destination'] != '') {
@@ -837,7 +958,9 @@ function commerce_wishlist_product_add_ajax($product, $user) {
     commerce_wishlist_product_add($product, NULL, $user->uid, $display_path);
   }
 
-  $link = theme('commerce_wishlist_added_to_wishlist_link', array('user_id' => $user->uid));
+  $link = variable_get('commerce_wishlist_show_remove', 0)
+    ? theme('commerce_wishlist_remove_from_wishlist_link', array('product_id' => $product->product_id))
+    : theme('commerce_wishlist_already_in_wishlist_link', array('user_id' => $user->uid));
   $commands = array(ajax_command_replace('a#add-wishlist-' . $product->product_id, $link));
   ajax_deliver(array('#type' => 'ajax', '#commands' => $commands));
 }
@@ -852,15 +975,6 @@ function commerce_wishlist_product_add_ajax($product, $user) {
  *   The fully loaded shopping cart order or FALSE if nonexistent.
  */
 function commerce_wishlist_order_load($uid = 0) {
-  if ($uid == 0) {
-    global $user;
-    $uid = $user->uid;
-  }
-
-  if ($uid == 0) {
-    return FALSE;
-  }
-
   // Retrieve the order ID for the specified user's current shopping cart.
   $order_id = commerce_wishlist_order_id($uid);
 
@@ -919,7 +1033,25 @@ function commerce_wishlist_order_id($uid = 0) {
   if ($uid) {
     // Look for the user's most recent shopping cart order, although they
     // should never really have more than one.
-    $cart_order_ids[$uid] = db_query('SELECT order_id FROM {commerce_order} WHERE uid = :uid AND status IN (:status_ids) ORDER BY order_id DESC', array(':uid' => $uid, ':status_ids' => $status_ids))->fetchField();
+    $cart_order_ids[$uid] = db_query('SELECT order_id FROM {commerce_order} WHERE uid = :uid AND status IN (:status_ids) ORDER BY order_id DESC', array(
+      ':uid' => $uid,
+      ':status_ids' => $status_ids,
+    ))->fetchField();
+  }
+  else {
+    // Otherwise look for a shopping cart order ID in the session.
+    if (commerce_wishlist_order_session_exists()) {
+      // We can't trust a user's IP address to remain the same, especially since// it may be derived from a proxy server and not the actual client. As of
+      // Commerce 1.4, this query no longer restricts order IDs based on IP
+      // address, instead trusting Drupal to prevent session hijacking.
+      $cart_order_ids[$uid] = db_query('SELECT order_id FROM {commerce_order} WHERE order_id IN (:order_ids) AND uid = 0 AND status IN (:status_ids) ORDER BY order_id DESC', array(
+        ':order_ids' => commerce_wishlist_order_session_order_ids(),
+        ':status_ids' => $status_ids,
+      ))->fetchField();
+    }
+    else {
+      $cart_order_ids[$uid] = FALSE;
+    }
   }
 
   return $cart_order_ids[$uid];
@@ -952,10 +1084,7 @@ function commerce_wishlist_product_add($product, $wishlist = NULL, $uid = NULL,
     $uid = $user->uid;
   }
 
-  // First attempt to load the customer's shopping cart order.
-  if ($wishlist === NULL) {
-    $wishlist = commerce_wishlist_order_load($uid);
-  }
+  $wishlist = commerce_wishlist_order_load($uid);
 
   // If no wish list exists, create one now.
   if (empty($wishlist)) {
@@ -963,7 +1092,7 @@ function commerce_wishlist_product_add($product, $wishlist = NULL, $uid = NULL,
   }
 
   // Return if it's already in there.
-  if (commerce_wishlist_user_has_product_in_wishlist($product->product_id, $uid)) {
+  if (commerce_wishlist_user_has_product_in_wishlist($product->product_id)) {
     return FALSE;
   }
 
@@ -1010,6 +1139,11 @@ function commerce_wishlist_order_new($uid, $type = 'commerce_order') {
   // Save it so it gets an order ID and return the full object.
   commerce_order_save($order);
 
+  // If the user is not logged in, ensure the order ID is stored in the session.
+  if (!$uid) {
+    commerce_wishlist_order_session_save($order->order_id);
+  }
+
   return $order;
 }
 
@@ -1031,40 +1165,27 @@ function commerce_wishlist_commerce_cart_order_is_cart($order, &$is_cart) {
  *
  * @param int $product_id
  *   The product ID.
- * @param int|null $uid
+ * @param array|null $wishlist
  *   The UID of the user or NULL for the current user.
  *
- * @return bool
- *   TRUE if the product exists, FALSE otherwise.
+ * @return bool|array
+ *   The product if the it exists, FALSE otherwise.
  */
-function commerce_wishlist_user_has_product_in_wishlist($product_id, $uid = NULL, $wishlist = NULL) {
-  if ($uid === NULL) {
-    global $user;
-    $uid = $user->uid;
-  }
-
-  if ($uid === 0) {
-    return FALSE;
-  }
-
-  // Load all wish lists.
-  $a = new EntityFieldQuery();
-  $a->entityCondition('entity_type', 'commerce_order', '=')
-    ->propertyCondition('status', array('wishlist'), 'IN')
-    ->propertyCondition('uid', $uid, '=');
-
-  $results = $a->execute();
+function commerce_wishlist_user_has_product_in_wishlist($product_id, $wishlist = NULL) {
+  global $user;
+  $uid = $user->uid;
 
-  if (!isset($results['commerce_order'])) {
-    return FALSE;
+  if (empty($wishlist)) {
+    $wishlist = commerce_wishlist_order_id($uid);
   }
+  $wishlist = array($wishlist);
 
-  foreach (commerce_order_load_multiple(array_keys($results['commerce_order'])) as $order) {
+  foreach (commerce_order_load_multiple($wishlist) as $order) {
     $order_wrapper = entity_metadata_wrapper('commerce_order', $order);
     foreach ($order_wrapper->commerce_line_items as $wrapper_line_item) {
       if (in_array('commerce_product', array_keys($wrapper_line_item->getPropertyInfo()))) {
         if ($wrapper_line_item->commerce_product->product_id->value() == $product_id) {
-          return TRUE;
+          return $wrapper_line_item->value();
         }
       }
     }
@@ -1092,10 +1213,6 @@ function commerce_wishlist_product_remove_line_item($line_item, $account = NULL,
     $account = $user;
   }
 
-  if ($account->uid === 0) {
-    return;
-  }
-
   if ($wishlist === NULL) {
     // Get the default wish list.
     $wishlist = commerce_wishlist_order_load($account->uid);
@@ -1135,10 +1252,6 @@ function commerce_wishlist_product_remove($product, $account = NULL, $wishlist =
     $account = $user;
   }
 
-  if ($account->uid === 0) {
-    return;
-  }
-
   if ($wishlist === NULL) {
     // Get the default wish list.
     $wishlist = commerce_wishlist_order_load($account->uid);
@@ -1164,6 +1277,164 @@ function commerce_wishlist_product_remove($product, $account = NULL, $wishlist =
 }
 
 /**
+ * Implements hook_commerce_entity_access_condition_commerce_order_alter().
+ *
+ * This alter hook allows the Commerce Wishlist module to add conditions to the query used to
+ * determine if a user has view access to a given order. The Commerce Wishlist module will* always grant users access to view their own carts (independent of any
+ * permission settings) and also grants anonymous users access to view their
+ * completed orders if they've been given the permission.
+ */
+function commerce_wishlist_commerce_entity_access_condition_commerce_order_alter(&$conditions, $context) {
+  // Find the user's cart order ID and anonymous user's completed orders.
+  $current_order_id = commerce_wishlist_order_id($context['account']->uid);
+  $completed_order_ids = commerce_cart_order_session_order_ids(TRUE);
+
+  // Always give the current user access to their own wishlist regardless of order
+  // view permissions.
+  if (!empty($current_order_id)) {
+    $conditions->condition($context['base_table'] . '.order_id', $current_order_id);
+  }
+
+  return;
+}
+
+/**
+ * Saves an order ID to the appropriate wishlist orders session variable.
+ *
+ * @param $order_id
+ *   The order ID to save to the array.
+ */
+function commerce_wishlist_order_session_save($order_id) {
+
+  if (empty($_SESSION['commerce_wishlist_orders'])) {
+    $_SESSION['commerce_wishlist_orders'] = array($order_id);
+  }
+  elseif (!in_array($order_id, $_SESSION['commerce_wishlist_orders'])) {
+    $_SESSION['commerce_wishlist_orders'][] = $order_id;
+  }
+}
+
+/**
+ * Checks to see if any order ID or a specific order ID exists in the session.
+ *
+ * @param $order_id
+ *   Optionally specify an order ID to look for in the commerce_cart_orders
+ *     session variable; defaults to NULL.
+ * @return
+ *   Boolean indicating whether or not any cart order ID exists in the session
+ *     or if the specified order ID exists in the session.
+ */
+function commerce_wishlist_order_session_exists($order_id = NULL) {
+
+  // If an order was specified, look for it in the array.
+  if (!empty($order_id)) {
+    return !empty($_SESSION['commerce_wishlist_orders']) && in_array($order_id, $_SESSION['commerce_wishlist_orders']);
+  }
+  else {
+    // Otherwise look for any value.
+    return !empty($_SESSION['commerce_wishlist_orders']);
+  }
+}
+
+/**
+ * Deletes all order IDs or a specific order ID from the cart orders session
+ *   variable.
+ *
+ * @param $order_id
+ *   The order ID to remove from the array or NULL to delete the variable.
+ */
+function commerce_wishlist_order_session_delete($order_id = NULL) {
+
+  if (!empty($_SESSION['commerce_wishlist_orders'])) {
+    if (!empty($order_id)) {
+      $_SESSION['commerce_wishlist_orders'] = array_diff($_SESSION['commerce_wishlist_orders'], array($order_id));
+    }
+    else {
+      unset($_SESSION['commerce_wishlist_orders']);
+    }
+  }
+}
+
+/**
+ * Returns an array of cart order IDs stored in the session.
+ *
+ * @return
+ *   An array of applicable cart order IDs or an empty array if none exist.
+ */
+function commerce_wishlist_order_session_order_ids() {
+  return empty($_SESSION['commerce_wishlist_orders']) ? array() : $_SESSION['commerce_wishlist_orders'];
+}
+
+/**
+ * Themes an empty wishlist page.
+ */
+function theme_commerce_wishlist_empty_page() {
+  return '<div class="wishlist-empty-page">' . t('Your wishlist is empty.') . '</div>';
+}
+
+/**
+ * Converts an anonymous commerce wishlist order to an authenticated wishlist.
+ *
+ * @param $order
+ *   The anonymous wishlist to convert to an authenticated wishlist.
+ * @param $account
+ *   The user account the wishlist will belong to.
+ *
+ * @return
+ *   The updated order's wrapper or FALSE if the order was not converted,
+ *     meaning it was not an anonymous wishlist order to begin with.
+ */
+function commerce_wishlist_order_convert($anonymous_wishlist_order, $account) {
+  // Only convert wishlists that are currently anonmyous wishlists.
+  if ($anonymous_wishlist_order->uid == 0) {
+    //get account wishlist if exists
+    if ($account_wishlist = commerce_wishlist_order_load($account->uid)) {
+      //wrap orders
+      $anonymous_wishlist_wrapper = entity_metadata_wrapper('commerce_order', $anonymous_wishlist_order);
+      $acount_wishlist_wrapper = entity_metadata_wrapper('commerce_order', $account_wishlist);
+
+      $existing_prods = array();
+      // Get existing products from the account wishlist
+      foreach ($acount_wishlist_wrapper->commerce_line_items as $line_item) {
+        $existing_prods[] = $line_item->commerce_product->product_id->value();
+      }
+
+      //Move all products in account wishlist which are not there already
+      foreach ($anonymous_wishlist_wrapper->commerce_line_items as $line_item) {
+        // If not in array, the account wishlist didn have the product
+        if (!in_array($line_item->commerce_product->product_id->value(), $existing_prods)) {
+
+          // change the order id for the line item
+          $line_item->order_id = $acount_wishlist_wrapper->order_id->value();
+          // Not sure if this was needed but it didnt hurt
+          $line_item->save();
+          // add the line item to the new order
+          $acount_wishlist_wrapper->commerce_line_items[] = $line_item;
+        }
+      }
+      //delete anonymous order
+      $anonymous_wishlist_wrapper->commerce_line_items = array();
+      $anonymous_wishlist_wrapper->delete();
+    }
+    else {
+      // Update the uid and e-mail address to match the current account since
+      // there currently is no way to specify a custom e-mail address per order.
+      $anonymous_wishlist_order->uid = $account->uid;
+      $anonymous_wishlist_order->mail = $account->mail;
+      $acount_wishlist_wrapper = entity_metadata_wrapper('commerce_order', $anonymous_wishlist_order);
+
+    }
+    // Allow other modules to operate on the converted order and then save.
+    module_invoke_all('commerce_wishlist_order_convert', $acount_wishlist_wrapper, $account);
+    $acount_wishlist_wrapper->save();
+
+    return $acount_wishlist_wrapper;
+  }
+
+  return FALSE;
+}
+
+/**
  * Return a wish list for a given hash.
  *
  * @param string $hash
@@ -1203,7 +1474,8 @@ function commerce_wishlist_add_wishlist_url($wishlist) {
   // Avoid collisions.
   do {
     $hash_to_use = commerce_wishlist_generate_url_hash($wishlist);
-  } while (commerce_wishlist_hash_load($hash_to_use) !== FALSE);
+  }
+  while (commerce_wishlist_hash_load($hash_to_use) !== FALSE);
 
   db_insert('commerce_wishlist_share')
     ->fields(array(
@@ -1279,3 +1551,16 @@ function commerce_wishlist_generate_url_hash($wishlist) {
     time(),
   ))), 16, 36), 0, COMMERCE_WISHLIST_HASH_LENGTH);
 }
+
+/**
+ * Build a path variable to the user's wishlist by uid
+ *
+ * @param int $uid
+ *  The user's id
+ *
+ * @return string
+ *  The path to view the user's wishlist
+ */
+function commerce_wishlist_build_wishlist_url($uid) {
+  return $uid ? url('user/' . $uid . '/wishlist') : url('wishlist');
+}
diff --git a/includes/views/commerce_wishlist.views_default.inc b/includes/views/commerce_wishlist.views_default.inc
index ec49ea2..82aae36 100644
--- a/includes/views/commerce_wishlist.views_default.inc
+++ b/includes/views/commerce_wishlist.views_default.inc
@@ -22,7 +22,8 @@ function commerce_wishlist_views_default_views_alter(&$views) {
             // our value since it probably won't want wishlists.
             if (isset($filter_options['field']) && isset($filter_options['operator'])
               && $filter_options['field'] == 'state' && $filter_options['operator'] == 'not in'
-              && in_array('cart', $filter_options['value'])) {
+              && in_array('cart', $filter_options['value'])
+            ) {
               $views[$name]->display[$display_name]->display_options['filters'][$filter_key]['value']['wishlist'] = 'wishlist';
             }
           }
@@ -45,15 +46,15 @@ function commerce_wishlist_views_default_views() {
   $view->name = 'commerce_wishlist_page';
   $view->description = '';
   $view->tag = 'default';
-  $view->base_table = 'commerce_line_item';
-  $view->human_name = 'User wish list';
+  $view->base_table = 'commerce_order';
+  $view->human_name = 'User wishlist';
   $view->core = 7;
   $view->api_version = '3.0';
   $view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */
 
   /* Display: Master */
   $handler = $view->new_display('default', 'Master', 'default');
-  $handler->display->display_options['title'] = 'User wish list';
+  $handler->display->display_options['title'] = 'User wishlist';
   $handler->display->display_options['use_more_always'] = FALSE;
   $handler->display->display_options['access']['type'] = 'none';
   $handler->display->display_options['cache']['type'] = 'none';
@@ -64,42 +65,60 @@ function commerce_wishlist_views_default_views() {
   $handler->display->display_options['pager']['options']['items_per_page'] = '25';
   $handler->display->display_options['style_plugin'] = 'table';
   $handler->display->display_options['style_options']['columns'] = array(
-    'line_item_id' => 'line_item_id',
+    'order_id' => 'order_id',
+    'commerce_display_path' => 'commerce_display_path',
+    'line_item_title' => 'line_item_title',
+    'wishlist_remove' => 'wishlist_remove',
+    'wishlist_add_to_cart' => 'wishlist_add_to_cart',
   );
-  $handler->display->display_options['style_options']['default'] = '-1';
+  $handler->display->display_options['style_options']['default'] = ' - 1';
   $handler->display->display_options['style_options']['info'] = array(
-    'line_item_id' => array(
+    'order_id' => array(
       'sortable' => 0,
       'default_sort_order' => 'asc',
       'align' => '',
       'separator' => '',
       'empty_column' => 0,
     ),
+    'commerce_display_path' => array(
+      'sortable' => 0,
+      'default_sort_order' => 'asc',
+      'align' => '',
+      'separator' => '',
+      'empty_column' => 0,
+    ),
+    'line_item_title' => array(
+      'align' => '',
+      'separator' => '',
+      'empty_column' => 0,
+    ),
+    'wishlist_remove' => array(
+      'align' => '',
+      'separator' => '',
+      'empty_column' => 0,
+    ),
+    'wishlist_add_to_cart' => array(
+      'align' => '',
+      'separator' => '',
+      'empty_column' => 0,
+    ),
   );
-  /* No results behavior: Global: Text area */
-  $handler->display->display_options['empty']['area']['id'] = 'area';
-  $handler->display->display_options['empty']['area']['table'] = 'views';
-  $handler->display->display_options['empty']['area']['field'] = 'area';
-  $handler->display->display_options['empty']['area']['label'] = 'No items in wish list';
-  $handler->display->display_options['empty']['area']['empty'] = TRUE;
-  $handler->display->display_options['empty']['area']['content'] = 'There are no items in your wish list.';
-  $handler->display->display_options['empty']['area']['format'] = 'plain_text';
-  /* Relationship: Commerce Line Item: Order ID */
-  $handler->display->display_options['relationships']['order_id']['id'] = 'order_id';
-  $handler->display->display_options['relationships']['order_id']['table'] = 'commerce_line_item';
-  $handler->display->display_options['relationships']['order_id']['field'] = 'order_id';
-  $handler->display->display_options['relationships']['order_id']['required'] = TRUE;
+  /* Relationship: Commerce Order: Referenced line items */
+  $handler->display->display_options['relationships']['commerce_line_items_line_item_id']['id'] = 'commerce_line_items_line_item_id';
+  $handler->display->display_options['relationships']['commerce_line_items_line_item_id']['table'] = 'field_data_commerce_line_items';
+  $handler->display->display_options['relationships']['commerce_line_items_line_item_id']['field'] = 'commerce_line_items_line_item_id';
+  $handler->display->display_options['relationships']['commerce_line_items_line_item_id']['required'] = TRUE;
   /* Field: Commerce Line item: Display path */
   $handler->display->display_options['fields']['commerce_display_path']['id'] = 'commerce_display_path';
   $handler->display->display_options['fields']['commerce_display_path']['table'] = 'field_data_commerce_display_path';
   $handler->display->display_options['fields']['commerce_display_path']['field'] = 'commerce_display_path';
+  $handler->display->display_options['fields']['commerce_display_path']['relationship'] = 'commerce_line_items_line_item_id';
   $handler->display->display_options['fields']['commerce_display_path']['exclude'] = TRUE;
   /* Field: Commerce Line Item: Title */
   $handler->display->display_options['fields']['line_item_title']['id'] = 'line_item_title';
   $handler->display->display_options['fields']['line_item_title']['table'] = 'commerce_line_item';
   $handler->display->display_options['fields']['line_item_title']['field'] = 'line_item_title';
-  $handler->display->display_options['fields']['line_item_title']['alter']['make_link'] = TRUE;
-  $handler->display->display_options['fields']['line_item_title']['alter']['path'] = '[commerce_display_path]';
+  $handler->display->display_options['fields']['line_item_title']['relationship'] = 'commerce_line_items_line_item_id';
   /* Field: Commerce Line Item: Created date */
   $handler->display->display_options['fields']['created']['id'] = 'created';
   $handler->display->display_options['fields']['created']['table'] = 'commerce_line_item';
@@ -107,45 +126,53 @@ function commerce_wishlist_views_default_views() {
   $handler->display->display_options['fields']['created']['label'] = 'Added';
   $handler->display->display_options['fields']['created']['date_format'] = 'medium';
   $handler->display->display_options['fields']['created']['second_date_format'] = 'long';
+  $handler->display->display_options['fields']['created']['relationship'] = 'commerce_line_items_line_item_id';
   /* Field: Commerce Line Item: Remove */
   $handler->display->display_options['fields']['wishlist_remove']['id'] = 'wishlist_remove';
   $handler->display->display_options['fields']['wishlist_remove']['table'] = 'commerce_line_item';
   $handler->display->display_options['fields']['wishlist_remove']['field'] = 'wishlist_remove';
-  $handler->display->display_options['fields']['wishlist_remove']['label'] = '';
-  $handler->display->display_options['fields']['wishlist_remove']['element_label_colon'] = FALSE;
+  $handler->display->display_options['fields']['wishlist_remove']['relationship'] = 'commerce_line_items_line_item_id';
   /* Field: Commerce Line Item: Add to Cart */
   $handler->display->display_options['fields']['wishlist_add_to_cart']['id'] = 'wishlist_add_to_cart';
   $handler->display->display_options['fields']['wishlist_add_to_cart']['table'] = 'commerce_line_item';
   $handler->display->display_options['fields']['wishlist_add_to_cart']['field'] = 'wishlist_add_to_cart';
   $handler->display->display_options['fields']['wishlist_add_to_cart']['label'] = '';
   $handler->display->display_options['fields']['wishlist_add_to_cart']['element_label_colon'] = FALSE;
+  $handler->display->display_options['fields']['wishlist_add_to_cart']['show_quantity'] = 1;
+  $handler->display->display_options['fields']['wishlist_add_to_cart']['default_quantity'] = '1';
+  $handler->display->display_options['fields']['wishlist_add_to_cart']['combine'] = 1;
+  $handler->display->display_options['fields']['wishlist_add_to_cart']['display_path'] = 0;
+  $handler->display->display_options['fields']['wishlist_add_to_cart']['line_item_type'] = 0;
+  $handler->display->display_options['fields']['wishlist_add_to_cart']['remove_from_wishlist'] = 0;
   /* Contextual filter: Commerce Order: Order ID */
   $handler->display->display_options['arguments']['order_id']['id'] = 'order_id';
   $handler->display->display_options['arguments']['order_id']['table'] = 'commerce_order';
   $handler->display->display_options['arguments']['order_id']['field'] = 'order_id';
-  $handler->display->display_options['arguments']['order_id']['relationship'] = 'order_id';
+  $handler->display->display_options['arguments']['order_id']['default_action'] = 'order_id';
   $handler->display->display_options['arguments']['order_id']['default_argument_type'] = 'fixed';
   $handler->display->display_options['arguments']['order_id']['summary']['number_of_records'] = '0';
   $handler->display->display_options['arguments']['order_id']['summary']['format'] = 'default_summary';
   $handler->display->display_options['arguments']['order_id']['summary_options']['items_per_page'] = '25';
-  /* Filter criterion: Commerce Order: Order state */
-  $handler->display->display_options['filters']['state']['id'] = 'state';
-  $handler->display->display_options['filters']['state']['table'] = 'commerce_order';
-  $handler->display->display_options['filters']['state']['field'] = 'state';
-  $handler->display->display_options['filters']['state']['relationship'] = 'order_id';
-  $handler->display->display_options['filters']['state']['value'] = array(
+  /* Filter criterion: Commerce Order: Order type */
+  $handler->display->display_options['filters']['type']['id'] = 'type';
+  $handler->display->display_options['filters']['type']['table'] = 'commerce_order';
+  $handler->display->display_options['filters']['type']['field'] = 'type';
+  $handler->display->display_options['filters']['type']['value'] = array(
+    'commerce_order' => 'commerce_order',
+  );
+  /* Filter criterion: Commerce Order: Order status */
+  $handler->display->display_options['filters']['status']['id'] = 'status';
+  $handler->display->display_options['filters']['status']['table'] = 'commerce_order';
+  $handler->display->display_options['filters']['status']['field'] = 'status';
+  $handler->display->display_options['filters']['status']['value'] = array(
     'wishlist' => 'wishlist',
   );
-  $handler->display->display_options['filters']['state']['expose']['operator_id'] = 'state_op';
-  $handler->display->display_options['filters']['state']['expose']['label'] = 'Order state';
-  $handler->display->display_options['filters']['state']['expose']['operator'] = 'state_op';
-  $handler->display->display_options['filters']['state']['expose']['identifier'] = 'state';
   $views[$view->name] = $view;
 
   // Administrative views.
   $view = new view();
   $view->name = 'admin_wishlist';
-  $view->description = 'Display a list of orders for the store admin.';
+  $view->description = 'Display a list of orders for the store admin . ';
   $view->tag = 'commerce';
   $view->base_table = 'commerce_order';
   $view->human_name = 'Wish Lists';
@@ -231,7 +258,7 @@ function commerce_wishlist_views_default_views() {
   $handler->display->display_options['empty']['empty_text']['id'] = 'empty_text';
   $handler->display->display_options['empty']['empty_text']['table'] = 'commerce_order';
   $handler->display->display_options['empty']['empty_text']['field'] = 'empty_text';
-  $handler->display->display_options['empty']['empty_text']['add_path'] = 'admin/commerce/orders/add';
+  $handler->display->display_options['empty']['empty_text']['add_path'] = 'admin / commerce / orders / add';
   /* Relationship: Commerce Order: Owner */
   $handler->display->display_options['relationships']['uid']['id'] = 'uid';
   $handler->display->display_options['relationships']['uid']['table'] = 'commerce_order';
@@ -306,7 +333,7 @@ function commerce_wishlist_views_default_views() {
   $handler->display->display_options['empty']['text']['table'] = 'views';
   $handler->display->display_options['empty']['text']['field'] = 'area';
   $handler->display->display_options['empty']['text']['empty'] = TRUE;
-  $handler->display->display_options['empty']['text']['content'] = 'There are currently no wish lists.';
+  $handler->display->display_options['empty']['text']['content'] = 'There are currently no wish lists . ';
   $handler->display->display_options['empty']['text']['format'] = 'plain_text';
   $handler->display->display_options['defaults']['filter_groups'] = FALSE;
   $handler->display->display_options['defaults']['filters'] = FALSE;
@@ -321,7 +348,7 @@ function commerce_wishlist_views_default_views() {
   $handler->display->display_options['filters']['state']['expose']['use_operator'] = TRUE;
   $handler->display->display_options['filters']['state']['expose']['operator'] = 'state_op';
   $handler->display->display_options['filters']['state']['expose']['identifier'] = 'state';
-  $handler->display->display_options['path'] = 'admin/commerce/orders/wishlists';
+  $handler->display->display_options['path'] = 'admin / commerce / orders / wishlists';
   $handler->display->display_options['menu']['type'] = 'tab';
   $handler->display->display_options['menu']['title'] = 'Wish lists';
   $handler->display->display_options['menu']['weight'] = '0';
@@ -337,7 +364,7 @@ function commerce_wishlist_views_default_views() {
     t('Asc'),
     t('Desc'),
     t('Items per page'),
-    t('- All -'),
+    t(' - All - '),
     t('Offset'),
     t('« first'),
     t('‹ previous'),
@@ -349,13 +376,13 @@ function commerce_wishlist_views_default_views() {
     t('User'),
     t('Total'),
     t('Number of Products'),
-    t('.'),
+    t(' . '),
     t(','),
     t('Last updated'),
     t('Operations'),
     t('Order state'),
     t('Wish lists'),
-    t('There are currently no wish lists.'),
+    t('There are currently no wish lists . '),
   );
 
   $views[$view->name] = $view;
diff --git a/includes/views/handlers/commerce_wishlist_handler_field_remove.inc b/includes/views/handlers/commerce_wishlist_handler_field_remove.inc
index 6a5bc19..75fb0f9 100644
--- a/includes/views/handlers/commerce_wishlist_handler_field_remove.inc
+++ b/includes/views/handlers/commerce_wishlist_handler_field_remove.inc
@@ -27,22 +27,18 @@ class commerce_wishlist_handler_field_remove extends views_handler_field {
 
   function render($values) {
     // Ensure the user has access to remove this product from wishlist.
-    global $user;
     $line_item_id = $this->get_value($values);
     $line_item = commerce_line_item_load($line_item_id);
+    $product_id = $line_item->commerce_product['und'][0]['product_id'];
 
-    $account = user_load($user->uid);
-    $wishlist_id = $line_item->order_id;
-    $wishlist = commerce_order_load($wishlist_id);
-
-    if (commerce_wishlist_user_access($account, 'update', $wishlist)) {
+    if (user_access('manage own wish list')) {
       $text = !empty($this->options['text']) ? $this->options['text'] : t('Remove');
 
-      $destination = drupal_get_destination();
-
-      return l($text, 'user/' . $wishlist->uid . '/wishlist/nojs/remove/' . $line_item_id, (array(
-        'query' => $destination,
-      )));
+      return theme('commerce_wishlist_remove_from_wishlist_link', array(
+        'product_id' => $product_id,
+        'text' => $text,
+        'no-ajax' => TRUE,
+      ));
     }
 
     return '';
