diff --git a/addons/website_sale_stock/models/sale_order.py b/addons/website_sale_stock/models/sale_order.py
index e73bee0b6d7e77ae857bdd7485974c909d1f325a..ecc653f98d178bc4a30e7b506d092d35708bc873 100644
--- a/addons/website_sale_stock/models/sale_order.py
+++ b/addons/website_sale_stock/models/sale_order.py
@@ -22,7 +22,8 @@ class SaleOrder(models.Model):
                     new_val = super(SaleOrder, self)._cart_update(line.product_id.id, line.id, qty, 0, **kwargs)
                     values.update(new_val)
 
-                    if new_val['quantity']:
+                    # Make sure line still exists, it may have been deleted in super()_cartupdate because qty can be <= 0
+                    if line.exists() and new_val['quantity']:
                         line.warning_stock = _('You ask for %s products but only %s is available') % (cart_qty, new_val['quantity'])
                     else:
                         self.warning_stock = _("Some products became unavailable and your cart has been updated. We're sorry for the inconvenience.")
diff --git a/addons/website_sale_stock/static/src/js/website_sale_stock.js b/addons/website_sale_stock/static/src/js/website_sale_stock.js
index 90f8c9ce82399550f5d30b3d55e6a0b91d420249..2a3a7f8cc6feee95076974af1beeba3378f6e109 100644
--- a/addons/website_sale_stock/static/src/js/website_sale_stock.js
+++ b/addons/website_sale_stock/static/src/js/website_sale_stock.js
@@ -32,6 +32,7 @@ $('.oe_website_sale').each(function() {
         }
     });
 
+
     /* Renders a specific message concerning the stock of the product
         and its variants on the product website page.
     */
@@ -49,6 +50,9 @@ $('.oe_website_sale').each(function() {
                 var info = variant_ids[k][4];
                 if(_.contains(['always', 'threshold'], info['inventory_availability'])) {
                     info['virtual_available'] -= parseInt(info['cart_qty']);
+                    if (info['virtual_available'] < 0) {
+                        info['virtual_available'] = 0;
+                    }
                     // Handle case when manually write in input
                     if(qty > info['virtual_available']) {
                         $parent.find('input[name="add_qty"]').val(info['virtual_available'] || 1);
diff --git a/addons/website_sale_stock/views/website_sale_stock_templates.xml b/addons/website_sale_stock/views/website_sale_stock_templates.xml
index 9564d86f6a26478b60c720ec763712cd2b249a63..4892b0d853d79f2f7a5b582d1a8d65e175a91453 100644
--- a/addons/website_sale_stock/views/website_sale_stock_templates.xml
+++ b/addons/website_sale_stock/views/website_sale_stock_templates.xml
@@ -57,7 +57,7 @@
             <div class='availability_messages'/>
         </xpath>
         <xpath expr="//div[hasclass('js_cart_lines')]" position="after">
-          <t t-if='website_sale_order and not website_sale_order.website_order_line'>
+          <t t-if='website_sale_order'>
             <div t-if='website_sale_order._get_stock_warning(clear=False)' class="alert alert-warning">
               <strong>Warning!</strong> <t t-esc='website_sale_order._get_stock_warning()'/>
             </div>
diff --git a/addons/website_sale_stock_options/views/website_sale_stock_templates.xml b/addons/website_sale_stock_options/views/website_sale_stock_templates.xml
index e144b33afa119e5c1dc744eb65140b043c1f17bb..8f34365277f53a76cef2aa7911f01dcd0573bad1 100644
--- a/addons/website_sale_stock_options/views/website_sale_stock_templates.xml
+++ b/addons/website_sale_stock_options/views/website_sale_stock_templates.xml
@@ -3,7 +3,7 @@
     <!-- Shopping Cart Lines -->
     <template id="website_sale_stock_modal" inherit_id="website_sale_options.modal" name="Stocks Modal">
         <xpath expr="//input[@type='text'][hasclass('quantity')]" position="attributes">
-          <attribute name='t-att-data-max'>product.sudo().virtual_available - product.cart_qty</attribute>
+          <attribute name='t-att-data-max'>max(product.sudo().virtual_available - product.cart_qty, 1)</attribute>
         </xpath>
         <xpath expr="//div[hasclass('css_quantity')]" position="after">
           <div class='availability_messages'/>