diff --git a/erpnext/e_commerce/doctype/website_item/website_item.py b/erpnext/e_commerce/doctype/website_item/website_item.py
index 028ee76..9f47260 100644
--- a/erpnext/e_commerce/doctype/website_item/website_item.py
+++ b/erpnext/e_commerce/doctype/website_item/website_item.py
@@ -203,7 +203,7 @@
 			# load variants
 			# also used in set_attribute_context
 			context.variants = frappe.get_all("Item",
-				filters={"variant_of": self.name, "show_variant_in_website": 1},
+				filters={"variant_of": self.name, "published_in_website": 1},
 				order_by="name asc")
 
 			variant = frappe.form_dict.variant
diff --git a/erpnext/e_commerce/product_grid.js b/erpnext/e_commerce/product_grid.js
index 638f017..8712a20 100644
--- a/erpnext/e_commerce/product_grid.js
+++ b/erpnext/e_commerce/product_grid.js
@@ -27,7 +27,7 @@
 			html += me.get_image_html(item, title);
 			html += me.get_card_body_html(item, title, me.settings);
 			html += `</div></div>`;
-		})
+		});
 
 		let $product_wrapper = this.products_section;
 		$product_wrapper.append(html);
@@ -36,7 +36,7 @@
 	get_image_html(item, title) {
 		let image = item.website_image || item.image;
 
-		if(image) {
+		if (image) {
 			return `
 				<div class="card-img-container">
 					<a href="/${ item.route || '#' }" style="text-decoration: none;">
@@ -85,11 +85,11 @@
 				<div class="product-title">
 					${ title || '' }
 		`;
-		if (item.in_stock) {
+		if (item.in_stock && settings.show_stock_availability) {
 			title_html += `<span class="indicator ${ item.in_stock } card-indicator"></span>`;
 		}
 		title_html += `</div></a>`;
-		return title_html
+		return title_html;
 	}
 
 	get_wishlist_icon(item) {
@@ -145,4 +145,4 @@
 			`;
 		}
 	}
-}
\ No newline at end of file
+};
\ No newline at end of file
diff --git a/erpnext/e_commerce/product_list.js b/erpnext/e_commerce/product_list.js
index e693f1e..2836c3a 100644
--- a/erpnext/e_commerce/product_list.js
+++ b/erpnext/e_commerce/product_list.js
@@ -27,7 +27,7 @@
 			html += me.get_image_html(item, title);
 			html += me.get_row_body_html(item, title, me.settings);
 			html += `</div>`;
-		})
+		});
 
 		let $product_wrapper = this.products_section;
 		$product_wrapper.append(html);
@@ -36,7 +36,7 @@
 	get_image_html(item, title) {
 		let image = item.website_image || item.image;
 
-		if(image) {
+		if (image) {
 			return `
 				<div class="col-2 border text-center rounded product-image" style="overflow: hidden; max-height: 200px;">
 					<a class="product-link product-list-link" href="/${ item.route || '#' }">
@@ -74,7 +74,7 @@
 				</a>
 		`;
 
-		if (item.in_stock) {
+		if (item.in_stock && settings.show_stock_availability) {
 			title_html += `<span class="indicator ${ item.in_stock } card-indicator"></span>`;
 		}
 		title_html += `</div>`;
@@ -92,7 +92,7 @@
 		return title_html;
 	}
 
-	get_item_details(item, settings) {
+	get_item_details(item) {
 		let details = `
 			<p class="product-code">
 				Item Code : ${ item.item_code }
@@ -104,7 +104,7 @@
 				${ item.formatted_price || '' }
 		`;
 
-		if(item.formatted_mrp) {
+		if (item.formatted_mrp) {
 			details += `
 				<small class="ml-1 text-muted">
 					<s>${ item.formatted_mrp }</s>
@@ -155,4 +155,4 @@
 		}
 	}
 
-}
+};
\ No newline at end of file
diff --git a/erpnext/e_commerce/product_view.js b/erpnext/e_commerce/product_view.js
index 923bdb1..f6727ca 100644
--- a/erpnext/e_commerce/product_view.js
+++ b/erpnext/e_commerce/product_view.js
@@ -14,7 +14,7 @@
 	}
 
 	prepare_view_toggler() {
-		if(!$("#list").length || !$("#image-view").length) {
+		if (!$("#list").length || !$("#image-view").length) {
 			this.render_view_toggler();
 			this.bind_view_toggler_actions();
 			this.set_view_state();
@@ -109,13 +109,13 @@
 			attribute_filters: attribute_filters,
 			item_group: this.item_group,
 			start: filters.start || null
-		}
+		};
 	}
 
 	add_paging_section(settings) {
 		$(".product-paging-area").remove();
 
-		if(this.products) {
+		if (this.products) {
 			let paging_html = `
 				<div class="row product-paging-area mt-5">
 					<div class="col-3">
@@ -126,13 +126,13 @@
 			let start = query_params.start ? cint(JSON.parse(query_params.start)) : 0;
 			let page_length = settings.products_per_page || 0;
 
-			if(start > 0) {
+			if (start > 0) {
 				paging_html += `
 					<button class="btn btn-default btn-prev" data-start="${ start - page_length }" style="float: left">
 						${ __("Prev") }
 					</button>`;
 			}
-			if(this.products.length > page_length || this.products.length == page_length) {
+			if (this.products.length > page_length || this.products.length == page_length) {
 				paging_html += `
 					<button class="btn btn-default btn-next" data-start="${ start + page_length }">
 						${ __("Next") }
@@ -171,7 +171,7 @@
 
 			$("#products-grid-area").addClass("hidden");
 			$("#products-list-area").removeClass("hidden");
-		})
+		});
 
 		$("#image-view").click(function() {
 			let $btn = $(this);
@@ -246,7 +246,7 @@
 	}
 
 	render_item_sub_categories(categories) {
-		if(categories) {
+		if (categories) {
 			let sub_group_html = `
 				<div class="sub-category-container">
 					<div class="heading"> ${ __('Sub Categories') } </div>
@@ -262,10 +262,10 @@
 						</div>
 					</a>
 				`;
-			})
+			});
 			sub_group_html += `</div>`;
 
 			$("#product-listing").prepend(sub_group_html);
 		}
 	}
-}
\ No newline at end of file
+};
\ No newline at end of file
diff --git a/erpnext/erpnext_integrations/doctype/amazon_mws_settings/amazon_methods.py b/erpnext/erpnext_integrations/doctype/amazon_mws_settings/amazon_methods.py
index 66826ba..c5b13c2 100644
--- a/erpnext/erpnext_integrations/doctype/amazon_mws_settings/amazon_methods.py
+++ b/erpnext/erpnext_integrations/doctype/amazon_mws_settings/amazon_methods.py
@@ -149,7 +149,6 @@
 	item.description = amazon_item_json.Product.AttributeSets.ItemAttributes.Title
 	item.brand = new_brand
 	item.manufacturer = new_manufacturer
-	item.web_long_description = amazon_item_json.Product.AttributeSets.ItemAttributes.Title
 
 	item.image = amazon_item_json.Product.AttributeSets.ItemAttributes.SmallImage.URL
 
