diff --git a/basic_cart.cart.inc b/basic_cart.cart.inc
index 5ae5d43..263944a 100644
--- a/basic_cart.cart.inc
+++ b/basic_cart.cart.inc
@@ -551,3 +551,35 @@ function basic_cart_checkout_thank_you() {
   return filter_xss($message);
 }
 
+/**
+ * Callback function for cart/quantity/plus/%.
+ *
+ * @param int $nid
+ *   Node id
+ */
+function basic_cart_quantity_plus($nid){
+  if(isset($_SESSION['basic_cart']['cart'][$nid])) {
+    $_SESSION['basic_cart']['cart'][$nid]->basic_cart_quantity++;
+  }
+  drupal_set_message(t('Shopping cart updated.'));
+  drupal_goto('cart');
+}
+
+/**
+ * Callback function for cart/quantity/minus/%.
+ *
+ * @param int $nid
+ *   Node id
+ */
+function basic_cart_quantity_minus($nid){
+  if(isset($_SESSION['basic_cart']['cart'][$nid])){
+    $node = &$_SESSION['basic_cart']['cart'][$nid];
+    if($node->basic_cart_quantity > 2){
+      $node->basic_cart_quantity--;
+    }else{
+      unset($node);
+    }
+  }
+  drupal_set_message(t('Shopping cart updated.'));
+  drupal_goto('cart');
+}
\ No newline at end of file
diff --git a/basic_cart.info b/basic_cart.info
index 4fc61c2..303edc3 100644
--- a/basic_cart.info
+++ b/basic_cart.info
@@ -5,7 +5,14 @@ core = 7.x
 stylesheets[all][] = basic_cart.css
 configure = admin/config/basic_cart/settings
 
+dependencies[] = number
+dependencies[] = text
+
 ; Views handlers
 files[] = views/basic_cart_handler_field_price.inc
 files[] = views/basic_cart_handler_field_addtocart.inc
-files[] = views/basic_cart_handler_filter_product.inc
\ No newline at end of file
+files[] = views/basic_cart_handler_field_removefromcart.inc
+files[] = views/basic_cart_handler_field_quantity.inc
+files[] = views/basic_cart_handler_filter_product.inc
+files[] = views/basic_cart_handler_filter_productincart.inc
+files[] = views/basic_cart_handle_area_totalprice.inc
diff --git a/basic_cart.module b/basic_cart.module
index 13ba982..1a07904 100644
--- a/basic_cart.module
+++ b/basic_cart.module
@@ -103,7 +103,23 @@ function basic_cart_menu() {
     'type' => MENU_CALLBACK,
     'file' => 'basic_cart.cart.inc',
   );
-
+  $items['cart/quantity/plus/%'] = array(
+    'title' => 'Product quantity plus',
+    'page callback' => 'basic_cart_quantity_plus',
+    'page arguments' => array(3),
+    'access arguments' => array('use basic cart'),
+    'type' => MENU_CALLBACK,
+    'file' => 'basic_cart.cart.inc',
+  );
+  $items['cart/quantity/minus/%'] = array(
+    'title' => 'Product quantity minus',
+    'page callback' => 'basic_cart_quantity_minus',
+    'page arguments' => array(3),
+    'access arguments' => array('use basic cart'),
+    'type' => MENU_CALLBACK,
+    'file' => 'basic_cart.cart.inc',
+  );
+  
   $items['checkout'] = array(
     'title' => 'Checkout',
     'description' => 'Checkout.',
diff --git a/views/basic_cart.views.inc b/views/basic_cart.views.inc
index 4816ed8..b661aa6 100644
--- a/views/basic_cart.views.inc
+++ b/views/basic_cart.views.inc
@@ -1,56 +1,125 @@
-<?php
-
-/**
- * @file
- * Views hooks for Basic_cart products.
- */
-
-/**
- * Implements hook_views_data_alter().
- */
-function basic_cart_views_data_alter(&$data) {
-  // alter a price field 
-  if (isset($data['field_data_price'])){
-    $data['field_data_price']['price']['group'] = t('Product');
-    $data['field_data_price']['price']['field']['handler'] = 'basic_cart_handler_field_price';
-    $data['field_data_price']['price']['field']['float'] = TRUE;
-    $data['field_data_price']['price']['field']['additional fields']['nid'] = array(
-                                                                                    'table' => 'node',
-                                                                                    'field' => 'nid'
-                                                                                    );
-    $data['field_data_price']['price']['field']['additional fields']['type'] = array(
-                                                                                    'table' => 'node',
-                                                                                    'field' => 'type'
-                                                                                    );
-  }
-  // we haven't own custom table, so alter node table
-  $data['node']['is_product'] = array(
-    'title' => t('Is a product'),
-    'group' => t('Product'),
-    'help' => t('Check for the fields provided by the Basic cart module.'),
-    'filter' => array(
-      'handler' => 'basic_cart_handler_filter_product',
-      'label' => t('Is a product'),
-    ),
-  );
-
-  $data['node']['addtocartlink'] = array(
-    'title' => t('Add to cart form'),
-    'help' => t("Form to put the product in the customer's cart."),
-    'group' => t('Product'),
-    'field' => array(
-      'additional fields' => array(
-        'nid' => array(
-          'table' => 'node',
-          'field' => 'nid',
-        ),
-        'type' => array(
-          'table' => 'node',
-          'field' => 'type',
-        ),
-      ),
-      'handler' => 'basic_cart_handler_field_addtocart',
-      'element type' => 'div',
-    ),
-  );
-}
+<?php
+
+/**
+ * @file
+ * Views hooks for Basic_cart products.
+ */
+
+/**
+ * Implements hook_views_data().
+ */
+function basic_cart_views_data() {
+  $data['basic_cart__global']['table']['group'] = t('Product');
+  $data['basic_cart__global']['table']['join'] = array(
+    '#global' => array(),
+  );
+  $data['basic_cart__global']['total'] = array(
+    'title' => t('Total price'),
+    'help' => t('Provide total price of products in cart.'),
+    'area' => array(
+      'handler' => 'basic_cart_views_handler_area_totalprice',
+    ),
+  );
+                                          
+  return $data;
+}
+
+/**
+ * Implements hook_views_data_alter().
+ */
+function basic_cart_views_data_alter(&$data) {
+  // alter a price field 
+  if (isset($data['field_data_price'])){
+    $data['field_data_price']['price']['group'] = t('Product');
+    $data['field_data_price']['price']['field']['handler'] = 'basic_cart_handler_field_price';
+    $data['field_data_price']['price']['field']['float'] = TRUE;
+    $data['field_data_price']['price']['field']['additional fields']['nid'] = array(
+                                                                                    'table' => 'node',
+                                                                                    'field' => 'nid'
+                                                                                    );
+    $data['field_data_price']['price']['field']['additional fields']['type'] = array(
+                                                                                    'table' => 'node',
+                                                                                    'field' => 'type'
+                                                                                    );
+  }
+
+  // Filters
+  // we haven't own custom table, so alter node table
+  $data['node']['is_product'] = array(
+    'title' => t('Is a product'),
+    'group' => t('Product'),
+    'help' => t('Check for the fields provided by the Basic cart module.'),
+    'filter' => array(
+      'handler' => 'basic_cart_handler_filter_product',
+      'label' => t('Is a product'),
+    ),
+  );
+  $data['node']['product_in_a_cart'] = array(
+    'title' => t('In a cart'),
+    'group' => t('Product'),
+    'help' => t('Check for exist product in cart.'),
+    'filter' => array(
+      'handler' => 'basic_cart_views_handler_filter_product_in_cart',
+      'label' => t('In a cart'),
+    ),
+  );
+
+  $data['node']['addtocartlink'] = array(
+    'title' => t('Add to cart form'),
+    'help' => t("Form to put the product in the customer's cart."),
+    'group' => t('Product'),
+    'field' => array(
+      'additional fields' => array(
+        'nid' => array(
+          'table' => 'node',
+          'field' => 'nid',
+        ),
+        'type' => array(
+          'table' => 'node',
+          'field' => 'type',
+        ),
+      ),
+      'handler' => 'basic_cart_handler_field_addtocart',
+      'element type' => 'div',
+    ),
+  );
+
+  $data['node']['removefromcartlink'] = array(
+    'title' => t('Remove from cart link'),
+    'help' => t("Link to remove the product from the customer's cart."),
+    'group' => t('Product'),
+    'field' => array(
+      'additional fields' => array(
+        'nid' => array(
+          'table' => 'node',
+          'field' => 'nid',
+        ),
+        'type' => array(
+          'table' => 'node',
+          'field' => 'type',
+        ),
+      ),
+      'handler' => 'basic_cart_views_handler_field_removefromcart',
+      'element type' => 'div',
+    ),
+  );
+  $data['node']['quantity'] = array(
+    'title' => t('Product quantity in cart'),
+    'help' => t("Links for decrement and increment of product quantity in cart."),
+    'group' => t('Product'),
+    'field' => array(
+      'additional fields' => array(
+        'nid' => array(
+          'table' => 'node',
+          'field' => 'nid',
+        ),
+        'type' => array(
+          'table' => 'node',
+          'field' => 'type',
+        ),
+      ),
+      'handler' => 'basic_cart_views_handler_field_quantity',
+      'element type' => 'div',
+    ),
+  );
+}
diff --git a/views/basic_cart_handle_area_totalprice.inc b/views/basic_cart_handle_area_totalprice.inc
new file mode 100644
index 0000000..48df561
--- /dev/null
+++ b/views/basic_cart_handle_area_totalprice.inc
@@ -0,0 +1,65 @@
+<?php
+/**
+ * @file
+ * Views handler: Total price.
+ */
+   
+/**
+  * Displays the total price of a products in a cart.
+  */
+class basic_cart_views_handler_area_totalprice extends views_handler_area_text {
+
+  function option_definition() {
+    $options = parent::option_definition();
+    $options['content'] = array(
+      'default' => 'Total price: @format_price',
+      'translatable' => TRUE,
+      'format_key' => 'format'
+    );
+    $options['format'] = array('default' => NULL);
+    $options['tokenize'] = array('default' => FALSE, 'bool' => TRUE);
+    return $options;
+  }
+                        
+  function options_form(&$form, &$form_state) {
+    parent::options_form($form, $form_state);
+    $variables = array(
+      'items' => array(
+        '@raw_price -- raw initial price',
+        '@raw_vat -- raw vat',
+        '@raw_total --raw total price',
+        '@format_price -- format initial price. Example: '.basic_cart_price_format(12345),
+        '@format_vat -- format vat. Example: '.basic_cart_price_format(12345),
+        '@format_total -- format total price. Example: '.basic_cart_price_format(12345),
+      ),
+    );
+    $list = theme('item_list', $variables);
+    $form['content']['#description'] = t('The following tokens are supported:') . $list;
+  }
+                                                                                                                                      
+  /**
+    * Overrides views_handler_area_text::render().
+    */
+  function render($empty = FALSE) {
+    $basic_cart_price = basic_cart_get_total_price();
+    $raw_price = $basic_cart_price->price;
+    $raw_vat = $basic_cart_price->vat;
+    $raw_total = $basic_cart_price->total;
+    $format_price = basic_cart_price_format($raw_price);
+    $format_vat = basic_cart_price_format($raw_vat);
+    $format_total = basic_cart_price_format($raw_total);
+
+    $items = array('raw_price', 'raw_vat', 'raw_total', 'format_price', 'format_vat', 'format_total');
+    $replacements = array();
+    foreach ($items as $item) {
+      $replacements["@$item"] = ${$item};
+    }
+    $content = $this->options['content'];
+    $content = str_replace(array_keys($replacements), array_values($replacements), $content);
+
+    $format = isset($this->options['format']) ? $this->options['format'] : filter_default_format();
+    if (!$empty || !empty($this->options['empty'])) {
+      return $this->render_textarea($content, $format);
+    }
+  }
+}                          
diff --git a/views/basic_cart_handler_field_quantity.inc b/views/basic_cart_handler_field_quantity.inc
new file mode 100644
index 0000000..9be578f
--- /dev/null
+++ b/views/basic_cart_handler_field_quantity.inc
@@ -0,0 +1,41 @@
+<?php
+
+/**
+ * @file
+ * Views handler: Field "Quantity".
+ */
+
+/**
+ * Displays the simpler links for change product quantity.
+ */
+class basic_cart_views_handler_field_quantity extends views_handler_field {
+
+  /**
+   * Overrides views_handler_field::query().
+   */
+  function query() {
+    $this->ensure_my_table();
+    $this->add_additional_fields();
+  }
+
+  /**
+   * Overrides views_handler_field::render().
+   */
+  function render($values) {
+    if (basic_cart_is_product($values->{$this->aliases['type']})) {
+      $nid = $values->{$this->aliases['nid']};
+      $quantity = 0;
+      if(isset($_SESSION['basic_cart']['cart'][$nid])){
+        $quantity = $_SESSION['basic_cart']['cart'][$nid]->basic_cart_quantity;
+      }
+      $options = array(
+        '!plus_url' => url('cart/quantity/plus/'.$nid),
+        '!minus_url' => url('cart/quantity/minus/'.$nid),
+        '!count' => $quantity,
+      );
+      return t('Quantity: <span class="minus"><a href="!minus_url">-</a></span> '.
+               '<span class="count">!count</span> '.
+               '<span class="plus"><a href="!plus_url">+</a></span>', $options);
+    }
+  }
+}
diff --git a/views/basic_cart_handler_field_removefromcart.inc b/views/basic_cart_handler_field_removefromcart.inc
new file mode 100644
index 0000000..2ebc5ba
--- /dev/null
+++ b/views/basic_cart_handler_field_removefromcart.inc
@@ -0,0 +1,29 @@
+<?php
+
+/**
+ * @file
+ * Views handler: Simpler "Remove from cart" link as a field.
+ */
+
+/**
+ * Displays the simpler Add to cart link like the catalog.
+ */
+class basic_cart_views_handler_field_removefromcart extends views_handler_field {
+
+  /**
+   * Overrides views_handler_field::query().
+   */
+  function query() {
+    $this->ensure_my_table();
+    $this->add_additional_fields();
+  }
+
+  /**
+   * Overrides views_handler_field::render().
+   */
+  function render($values) {
+    if (basic_cart_is_product($values->{$this->aliases['type']})) {
+      return l(t('Remove from cart'), 'cart/remove/'.$values->{$this->aliases['nid']});
+    }
+  }
+}
diff --git a/views/basic_cart_handler_filter_productincart.inc b/views/basic_cart_handler_filter_productincart.inc
new file mode 100644
index 0000000..61f087d
--- /dev/null
+++ b/views/basic_cart_handler_filter_productincart.inc
@@ -0,0 +1,24 @@
+<?php
+
+/**
+ * @file
+ * Views handler: Node filter on "in cart".
+ */
+
+/**
+ * Filters cart nodes.
+ */
+class basic_cart_views_handler_filter_product_in_cart extends views_handler_filter_boolean_operator {
+
+  /**
+   * Overrides views_handler_field::query().
+   */
+  function query() {
+    $nids = array_keys(basic_cart_get_cart());
+    if(!$nids){
+      $nids = array(0);
+    }
+    $this->query->add_field('node', 'nid');
+    $this->query->add_where($this->options['group'], 'node.nid', $nids, empty($this->value)? 'NOT IN' : 'IN');
+  }
+}
\ No newline at end of file
