Merge branch 'develop'
diff --git a/erpnext/__version__.py b/erpnext/__version__.py
index f4a63fa..68def1b 100644
--- a/erpnext/__version__.py
+++ b/erpnext/__version__.py
@@ -1,2 +1,2 @@
 from __future__ import unicode_literals
-__version__ = '6.5.1'
+__version__ = '6.5.2'
diff --git a/erpnext/accounts/doctype/gl_entry/gl_entry.json b/erpnext/accounts/doctype/gl_entry/gl_entry.json
index 936d346..5f07df9 100644
--- a/erpnext/accounts/doctype/gl_entry/gl_entry.json
+++ b/erpnext/accounts/doctype/gl_entry/gl_entry.json
@@ -162,6 +162,7 @@
    "oldfieldtype": "Currency", 
    "options": "Company:company:default_currency", 
    "permlevel": 0, 
+   "precision": "", 
    "print_hide": 0, 
    "read_only": 0, 
    "report_hide": 0, 
@@ -186,6 +187,7 @@
    "oldfieldtype": "Currency", 
    "options": "Company:company:default_currency", 
    "permlevel": 0, 
+   "precision": "", 
    "print_hide": 0, 
    "read_only": 0, 
    "report_hide": 0, 
@@ -415,7 +417,7 @@
    "ignore_user_permissions": 0, 
    "in_filter": 1, 
    "in_list_view": 0, 
-   "label": "Is Opening",  
+   "label": "Is Opening", 
    "no_copy": 0, 
    "oldfieldname": "is_opening", 
    "oldfieldtype": "Select", 
@@ -439,7 +441,7 @@
    "ignore_user_permissions": 0, 
    "in_filter": 0, 
    "in_list_view": 0, 
-   "label": "Is Advance",  
+   "label": "Is Advance", 
    "no_copy": 0, 
    "oldfieldname": "is_advance", 
    "oldfieldtype": "Select", 
@@ -511,7 +513,7 @@
  "is_submittable": 0, 
  "issingle": 0, 
  "istable": 0, 
- "modified": "2015-10-02 07:38:51.117114", 
+ "modified": "2015-10-20 12:10:59.771050", 
  "modified_by": "Administrator", 
  "module": "Accounts", 
  "name": "GL Entry", 
diff --git a/erpnext/accounts/doctype/journal_entry_account/journal_entry_account.json b/erpnext/accounts/doctype/journal_entry_account/journal_entry_account.json
index ebd4842..f2c1575 100644
--- a/erpnext/accounts/doctype/journal_entry_account/journal_entry_account.json
+++ b/erpnext/accounts/doctype/journal_entry_account/journal_entry_account.json
@@ -276,7 +276,7 @@
    "label": "Exchange Rate", 
    "no_copy": 0, 
    "permlevel": 0, 
-   "precision": "", 
+   "precision": "6", 
    "print_hide": 1, 
    "read_only": 0, 
    "report_hide": 0, 
@@ -345,6 +345,7 @@
    "oldfieldtype": "Currency", 
    "options": "Company:company:default_currency", 
    "permlevel": 0, 
+   "precision": "", 
    "print_hide": 1, 
    "read_only": 1, 
    "report_hide": 0, 
@@ -412,6 +413,7 @@
    "oldfieldtype": "Currency", 
    "options": "Company:company:default_currency", 
    "permlevel": 0, 
+   "precision": "", 
    "print_hide": 1, 
    "read_only": 1, 
    "report_hide": 0, 
@@ -451,7 +453,7 @@
    "ignore_user_permissions": 0, 
    "in_filter": 0, 
    "in_list_view": 0, 
-   "label": "Reference Type",  
+   "label": "Reference Type", 
    "no_copy": 0, 
    "options": "\nSales Invoice\nPurchase Invoice\nJournal Entry\nSales Order\nPurchase Order\nExpense Claim", 
    "permlevel": 0, 
@@ -517,7 +519,7 @@
    "ignore_user_permissions": 0, 
    "in_filter": 0, 
    "in_list_view": 0, 
-   "label": "Is Advance",  
+   "label": "Is Advance", 
    "no_copy": 1, 
    "oldfieldname": "is_advance", 
    "oldfieldtype": "Select", 
@@ -563,7 +565,7 @@
  "is_submittable": 0, 
  "issingle": 0, 
  "istable": 1, 
- "modified": "2015-10-02 07:38:54.406370", 
+ "modified": "2015-10-20 12:10:22.203395", 
  "modified_by": "Administrator", 
  "module": "Accounts", 
  "name": "Journal Entry Account", 
diff --git a/erpnext/controllers/item_variant.py b/erpnext/controllers/item_variant.py
index 38536cf..5890b5d 100644
--- a/erpnext/controllers/item_variant.py
+++ b/erpnext/controllers/item_variant.py
@@ -51,7 +51,7 @@
 				frappe.throw(_("Increment for Attribute {0} cannot be 0").format(attribute))
 
 			is_in_range = from_range <= flt(value) <= to_range
-			precision = len(cstr(increment).split(".")[-1].rstrip("0"))
+			precision = max(len(cstr(v).split(".")[-1].rstrip("0")) for v in (value, increment))
 			#avoid precision error by rounding the remainder
 			remainder = flt((flt(value) - from_range) % increment, precision)
 
@@ -60,7 +60,7 @@
 			if not (is_in_range and is_incremental):
 				frappe.throw(_("Value for Attribute {0} must be within the range of {1} to {2} in the increments of {3}")\
 					.format(attribute, from_range, to_range, increment), InvalidItemAttributeValueError)
-				
+
 		elif value not in attribute_values.get(attribute, []):
 			frappe.throw(_("Value {0} for Attribute {1} does not exist in the list of valid Item Attribute Values").format(
 				value, attribute))
@@ -125,12 +125,11 @@
 	from frappe.model import no_value_fields
 	for field in item.meta.fields:
 		if field.fieldtype not in no_value_fields and (not field.no_copy)\
-			and field.fieldname not in ("item_code", "item_name"):
+			and field.fieldname not in ("item_code", "item_name", "show_in_website"):
 			if variant.get(field.fieldname) != item.get(field.fieldname):
 				variant.set(field.fieldname, item.get(field.fieldname))
 	variant.variant_of = item.name
 	variant.has_variants = 0
-	variant.show_in_website = 0
 	if variant.attributes:
 		variant.description += "\n"
 		for d in variant.attributes:
diff --git a/erpnext/hooks.py b/erpnext/hooks.py
index fed054c..defbfbc 100644
--- a/erpnext/hooks.py
+++ b/erpnext/hooks.py
@@ -29,7 +29,7 @@
 """
 app_icon = "icon-th"
 app_color = "#e74c3c"
-app_version = "6.5.1"
+app_version = "6.5.2"
 github_link = "https://github.com/frappe/erpnext"
 
 error_report_email = "support@erpnext.com"
diff --git a/erpnext/hr/doctype/holiday_list/holiday_list_calendar.js b/erpnext/hr/doctype/holiday_list/holiday_list_calendar.js
index d7e9adc..dee64de 100644
--- a/erpnext/hr/doctype/holiday_list/holiday_list_calendar.js
+++ b/erpnext/hr/doctype/holiday_list/holiday_list_calendar.js
@@ -14,7 +14,8 @@
 			"fieldtype": "Link",
 			"fieldname": "fiscal_year",
 			"options": "Fiscal Year",
-			"label": __("Fiscal Year")
+			"label": __("Fiscal Year"),
+			"default": frappe.defaults.get_user_default("fiscal_year")
 		}
 	],
 	get_events_method: "erpnext.hr.doctype.holiday_list.holiday_list.get_events"
diff --git a/erpnext/patches.txt b/erpnext/patches.txt
index 6045e77..6c299d8 100644
--- a/erpnext/patches.txt
+++ b/erpnext/patches.txt
@@ -224,5 +224,8 @@
 execute:frappe.delete_doc_if_exists("DocType", "Applicable Territory")
 execute:frappe.delete_doc_if_exists("DocType", "Shopping Cart Price List")
 execute:frappe.delete_doc_if_exists("DocType", "Shopping Cart Taxes and Charges Master")
+
 erpnext.patches.v6_4.set_user_in_contact
 erpnext.patches.v6_4.make_image_thumbnail
+
+erpnext.patches.v6_5.show_in_website_for_template_item
diff --git a/erpnext/patches/v6_5/__init__.py b/erpnext/patches/v6_5/__init__.py
new file mode 100644
index 0000000..baffc48
--- /dev/null
+++ b/erpnext/patches/v6_5/__init__.py
@@ -0,0 +1 @@
+from __future__ import unicode_literals
diff --git a/erpnext/patches/v6_5/show_in_website_for_template_item.py b/erpnext/patches/v6_5/show_in_website_for_template_item.py
new file mode 100644
index 0000000..48040ee
--- /dev/null
+++ b/erpnext/patches/v6_5/show_in_website_for_template_item.py
@@ -0,0 +1,15 @@
+from __future__ import unicode_literals
+import frappe
+import frappe.website.render
+
+def execute():
+	for item_code in frappe.db.sql_list("""select distinct variant_of from `tabItem`
+		where variant_of is not null and variant_of !='' and show_in_website=1"""):
+
+		item = frappe.get_doc("Item", item_code)
+		item.db_set("show_in_website", 1, update_modified=False)
+
+		item.get_route()
+		item.db_set("page_name", item.page_name, update_modified=False)
+
+	frappe.website.render.clear_cache()
diff --git a/erpnext/selling/doctype/sales_order/test_sales_order.py b/erpnext/selling/doctype/sales_order/test_sales_order.py
index ba5f025..4fa88d4 100644
--- a/erpnext/selling/doctype/sales_order/test_sales_order.py
+++ b/erpnext/selling/doctype/sales_order/test_sales_order.py
@@ -240,9 +240,9 @@
 		from erpnext.stock.doctype.item.test_item import make_item
 		from erpnext.selling.doctype.product_bundle.test_product_bundle import make_product_bundle
 
-		make_item("_Test Service Product Bundle", {"is_stock_item": 0, "is_sales_item": 1})
-		make_item("_Test Service Product Bundle Item 1", {"is_stock_item": 0, "is_sales_item": 1})
-		make_item("_Test Service Product Bundle Item 2", {"is_stock_item": 0, "is_sales_item": 1})
+		make_item("_Test Service Product Bundle", {"is_stock_item": 0, "is_pro_applicable": 0, "is_sales_item": 1})
+		make_item("_Test Service Product Bundle Item 1", {"is_stock_item": 0, "is_pro_applicable": 0, "is_sales_item": 1})
+		make_item("_Test Service Product Bundle Item 2", {"is_stock_item": 0, "is_pro_applicable": 0, "is_sales_item": 1})
 
 		make_product_bundle("_Test Service Product Bundle",
 			["_Test Service Product Bundle Item 1", "_Test Service Product Bundle Item 2"])
@@ -256,9 +256,9 @@
 		from erpnext.stock.doctype.item.test_item import make_item
 		from erpnext.selling.doctype.product_bundle.test_product_bundle import make_product_bundle
 
-		make_item("_Test Mix Product Bundle", {"is_stock_item": 0, "is_sales_item": 1})
+		make_item("_Test Mix Product Bundle", {"is_stock_item": 0, "is_pro_applicable": 0, "is_sales_item": 1})
 		make_item("_Test Mix Product Bundle Item 1", {"is_stock_item": 1, "is_sales_item": 1})
-		make_item("_Test Mix Product Bundle Item 2", {"is_stock_item": 0, "is_sales_item": 1})
+		make_item("_Test Mix Product Bundle Item 2", {"is_stock_item": 0, "is_pro_applicable": 0, "is_sales_item": 1})
 
 		make_product_bundle("_Test Mix Product Bundle",
 			["_Test Mix Product Bundle Item 1", "_Test Mix Product Bundle Item 2"])
@@ -267,7 +267,7 @@
 
 	def test_auto_insert_price(self):
 		from erpnext.stock.doctype.item.test_item import make_item
-		make_item("_Test Item for Auto Price List", {"is_stock_item": 0, "is_sales_item": 1})
+		make_item("_Test Item for Auto Price List", {"is_stock_item": 0, "is_pro_applicable": 0, "is_sales_item": 1})
 		frappe.db.set_value("Stock Settings", None, "auto_insert_price_list_rate_if_missing", 1)
 
 		item_price = frappe.db.get_value("Item Price", {"price_list": "_Test Price List",
diff --git a/erpnext/setup/doctype/email_digest/templates/default.html b/erpnext/setup/doctype/email_digest/templates/default.html
index cf35e46..3aad202 100644
--- a/erpnext/setup/doctype/email_digest/templates/default.html
+++ b/erpnext/setup/doctype/email_digest/templates/default.html
@@ -12,7 +12,7 @@
 
 <h1 style="{{ h1 }}">{{ title }}</h1>
 <h4 style="font-weight: normal; color: {{ text_muted }}; margin-top: 7px; font-size: 16px; margin-top: 7px;">
-    <p>{% if frequency == "Daily "%}
+    <p>{% if frequency == "Daily" %}
         {{ frappe.format_date(future_from_date) }}
     {% else %}
         {{ frappe.format_date(future_from_date) }} - {{ frappe.format_date(future_to_date) }}
diff --git a/erpnext/shopping_cart/cart.py b/erpnext/shopping_cart/cart.py
index 22f920f..68bfd95 100644
--- a/erpnext/shopping_cart/cart.py
+++ b/erpnext/shopping_cart/cart.py
@@ -292,6 +292,7 @@
 			"customer_group": get_shopping_cart_settings().default_customer_group,
 			"territory": get_root_of("Territory")
 		})
+		customer.ignore_mandatory = True
 		customer.insert(ignore_permissions=True)
 
 		contact = frappe.new_doc("Contact")
@@ -300,6 +301,7 @@
 			"first_name": fullname,
 			"email_id": user
 		})
+		contact.ignore_mandatory = True
 		contact.insert(ignore_permissions=True)
 
 		return customer
diff --git a/erpnext/shopping_cart/product.py b/erpnext/shopping_cart/product.py
index d7795d2..6a6cb69 100644
--- a/erpnext/shopping_cart/product.py
+++ b/erpnext/shopping_cart/product.py
@@ -14,25 +14,11 @@
 	if not is_cart_enabled():
 		return {}
 
-	cart_quotation = _get_cart_quotation()
-
-	price_list = cart_quotation.selling_price_list
-
-	warehouse = frappe.db.get_value("Item", item_code, "website_warehouse")
-	if warehouse:
-		in_stock = frappe.db.sql("""select actual_qty from tabBin where
-			item_code=%s and warehouse=%s""", (item_code, warehouse))
-		if in_stock:
-			in_stock = in_stock[0][0] > 0 and 1 or 0
-	else:
-		in_stock = -1
-
-	price = price_list and frappe.db.sql("""select price_list_rate, currency from
-		`tabItem Price` where item_code=%s and price_list=%s""",
-		(item_code, price_list), as_dict=1) or []
-
-	price = price and price[0] or None
 	qty = 0
+	cart_quotation = _get_cart_quotation()
+	template_item_code = frappe.db.get_value("Item", item_code, "variant_of")
+	in_stock = get_qty_in_stock(item_code, template_item_code)
+	price = get_price(item_code, template_item_code, cart_quotation.selling_price_list)
 
 	if price:
 		price["formatted_price"] = fmt_money(price["price_list_rate"], currency=price["currency"])
@@ -52,3 +38,31 @@
 		"uom": frappe.db.get_value("Item", item_code, "stock_uom"),
 		"qty": qty
 	}
+
+def get_qty_in_stock(item_code, template_item_code):
+	warehouse = frappe.db.get_value("Item", item_code, "website_warehouse")
+	if not warehouse and template_item_code and template_item_code != item_code:
+		warehouse = frappe.db.get_value("Item", template_item_code, "website_warehouse")
+
+	if warehouse:
+		in_stock = frappe.db.sql("""select actual_qty from tabBin where
+			item_code=%s and warehouse=%s""", (item_code, warehouse))
+		if in_stock:
+			in_stock = in_stock[0][0] > 0 and 1 or 0
+
+	else:
+		in_stock = -1
+
+	return in_stock
+
+def get_price(item_code, template_item_code, price_list):
+	if price_list:
+		price = frappe.get_all("Item Price", fields=["price_list_rate", "currency"],
+			filters={"price_list": price_list, "item_code": item_code})
+
+		if not price:
+			price = frappe.get_all("Item Price", fields=["price_list_rate", "currency"],
+				filters={"price_list": price_list, "item_code": template_item_code})
+
+		if price:
+			return price[0]
diff --git a/erpnext/stock/doctype/item/item.json b/erpnext/stock/doctype/item/item.json
index e761653..b36e34c 100644
--- a/erpnext/stock/doctype/item/item.json
+++ b/erpnext/stock/doctype/item/item.json
@@ -1647,7 +1647,7 @@
    "allow_on_submit": 0, 
    "bold": 0, 
    "collapsible": 0, 
-   "default": "", 
+   "default": "1", 
    "depends_on": "", 
    "description": "", 
    "fieldname": "is_pro_applicable", 
@@ -2113,7 +2113,7 @@
  "issingle": 0, 
  "istable": 0, 
  "max_attachments": 1, 
- "modified": "2015-10-19 03:04:49.445770", 
+ "modified": "2015-10-20 12:14:43.315827", 
  "modified_by": "Administrator", 
  "module": "Stock", 
  "name": "Item", 
diff --git a/erpnext/stock/doctype/item/item.py b/erpnext/stock/doctype/item/item.py
index faae960..99f6417 100644
--- a/erpnext/stock/doctype/item/item.py
+++ b/erpnext/stock/doctype/item/item.py
@@ -4,6 +4,7 @@
 from __future__ import unicode_literals
 import frappe
 import json
+import urllib
 from frappe import msgprint, _
 from frappe.utils import cstr, flt, cint, getdate, now_datetime, formatdate
 from frappe.website.website_generator import WebsiteGenerator
@@ -79,6 +80,7 @@
 		self.validate_name_with_item_group()
 		self.update_item_price()
 		self.update_variants()
+		self.update_template_item()
 
 	def make_thumbnail(self):
 		"""Make a thumbnail of `website_image`"""
@@ -86,11 +88,16 @@
 			self.thumbnail = None
 
 		if self.website_image and not self.thumbnail:
-			file_doc = frappe.get_doc("File", {
-				"file_url": self.website_image,
-				"attached_to_doctype": "Item",
-				"attached_to_name": self.name
-			})
+			file_doc = None
+
+			try:
+				file_doc = frappe.get_doc("File", {
+					"file_url": self.website_image,
+					"attached_to_doctype": "Item",
+					"attached_to_name": self.name
+				})
+			except frappe.DoesNotExistError:
+				pass
 
 			# for CSV import
 			if not file_doc:
@@ -108,18 +115,59 @@
 				self.thumbnail = file_doc.thumbnail_url
 
 	def get_context(self, context):
+		if self.variant_of:
+			# redirect to template page!
+			template_item = frappe.get_doc("Item", self.variant_of)
+			frappe.flags.redirect_location = template_item.get_route() + "?variant=" + urllib.quote(self.name)
+			raise frappe.Redirect
+
 		context.parent_groups = get_parent_item_groups(self.item_group) + \
 			[{"name": self.name}]
-		if self.slideshow:
-			context.update(get_slideshow(self))
 
+		self.set_variant_context(context)
+
+		self.set_attribute_context(context)
+
+		context.parents = self.get_parents(context)
+
+		return context
+
+	def set_variant_context(self, context):
+		if self.has_variants:
+			context.no_cache = True
+
+			# load variants
+			# also used in set_attribute_context
+			context.variants = frappe.get_all("Item",
+				filters={"variant_of": self.name, "show_in_website": 1}, order_by="name asc")
+
+			variant = frappe.form_dict.variant
+			if not variant:
+				# the case when the item is opened for the first time from its list
+				variant = context.variants[0]
+
+			context.variant = frappe.get_doc("Item", variant)
+
+			for fieldname in ("website_image", "web_long_description", "description",
+				"website_specifications"):
+				if context.variant.get(fieldname):
+					value = context.variant.get(fieldname)
+					if isinstance(value, list):
+						value = [d.as_dict() for d in value]
+
+					context[fieldname] = value
+
+		if self.slideshow:
+			if context.variant and context.variant.slideshow:
+				context.update(get_slideshow(context.variant))
+			else:
+				context.update(get_slideshow(self))
+
+	def set_attribute_context(self, context):
 		if self.has_variants:
 			attribute_values_available = {}
 			context.attribute_values = {}
-
-			# load variants
-			context.variants = frappe.get_all("Item",
-				filters={"variant_of": self.name, "show_in_website": 1})
+			context.selected_attributes = {}
 
 			# load attributes
 			for v in context.variants:
@@ -131,6 +179,9 @@
 					if attr.attribute_value not in values:
 						values.append(attr.attribute_value)
 
+					if v.name==context.variant.name:
+						context.selected_attributes[attr.attribute] = attr.attribute_value
+
 			# filter attributes, order based on attribute table
 			for attr in self.attributes:
 				values = context.attribute_values.setdefault(attr.attribute, [])
@@ -144,10 +195,6 @@
 
 			context.variant_info = json.dumps(context.variants)
 
-		context.parents = self.get_parents(context)
-
-		return context
-
 	def check_warehouse_is_set_for_stock_item(self):
 		if self.is_stock_item==1 and not self.default_warehouse and frappe.get_all("Warehouse"):
 			frappe.msgprint(_("Default Warehouse is mandatory for stock Item."),
@@ -355,6 +402,16 @@
 			frappe.db.sql("""update `tabBOM Explosion Item` set description = %s where
 				item_code = %s and docstatus < 2""",(self.description, self.name))
 
+	def update_template_item(self):
+		"""Set Show in Website for Template Item if True for its Variant"""
+		if self.variant_of and self.show_in_website:
+			template_item = frappe.get_doc("Item", self.variant_of)
+
+			if not template_item.show_in_website:
+				template_item.show_in_website = 1
+				template_item.flags.ignore_permissions = True
+				template_item.save()
+
 	def update_variants(self):
 		if self.has_variants:
 			updated = []
diff --git a/erpnext/stock/doctype/landed_cost_item/landed_cost_item.json b/erpnext/stock/doctype/landed_cost_item/landed_cost_item.json
index 3dbe794..24a57f6 100644
--- a/erpnext/stock/doctype/landed_cost_item/landed_cost_item.json
+++ b/erpnext/stock/doctype/landed_cost_item/landed_cost_item.json
@@ -1,227 +1,227 @@
 {
- "allow_copy": 0, 
- "allow_import": 0, 
- "allow_rename": 0, 
- "creation": "2013-02-22 01:28:02", 
- "custom": 0, 
- "docstatus": 0, 
- "doctype": "DocType", 
+ "allow_copy": 0,
+ "allow_import": 0,
+ "allow_rename": 0,
+ "creation": "2013-02-22 01:28:02",
+ "custom": 0,
+ "docstatus": 0,
+ "doctype": "DocType",
  "fields": [
   {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "fieldname": "item_code", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "in_filter": 0, 
-   "in_list_view": 1, 
-   "label": "Item Code", 
-   "no_copy": 0, 
-   "options": "Item", 
-   "permlevel": 0, 
-   "print_hide": 0, 
-   "read_only": 1, 
-   "report_hide": 0, 
-   "reqd": 1, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0, 
+   "allow_on_submit": 0,
+   "bold": 0,
+   "collapsible": 0,
+   "fieldname": "item_code",
+   "fieldtype": "Link",
+   "hidden": 0,
+   "ignore_user_permissions": 0,
+   "in_filter": 0,
+   "in_list_view": 1,
+   "label": "Item Code",
+   "no_copy": 0,
+   "options": "Item",
+   "permlevel": 0,
+   "print_hide": 0,
+   "read_only": 1,
+   "report_hide": 0,
+   "reqd": 1,
+   "search_index": 0,
+   "set_only_once": 0,
+   "unique": 0,
    "width": "100px"
-  }, 
+  },
   {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "fieldname": "description", 
-   "fieldtype": "Data", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "in_filter": 0, 
-   "in_list_view": 1, 
-   "label": "Description", 
-   "no_copy": 0, 
-   "oldfieldname": "description", 
-   "oldfieldtype": "Data", 
-   "permlevel": 0, 
-   "print_hide": 0, 
-   "print_width": "300px", 
-   "read_only": 1, 
-   "report_hide": 0, 
-   "reqd": 1, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0, 
+   "allow_on_submit": 0,
+   "bold": 0,
+   "collapsible": 0,
+   "fieldname": "description",
+   "fieldtype": "Text Editor",
+   "hidden": 0,
+   "ignore_user_permissions": 0,
+   "in_filter": 0,
+   "in_list_view": 1,
+   "label": "Description",
+   "no_copy": 0,
+   "oldfieldname": "description",
+   "oldfieldtype": "Data",
+   "permlevel": 0,
+   "print_hide": 0,
+   "print_width": "300px",
+   "read_only": 1,
+   "report_hide": 0,
+   "reqd": 1,
+   "search_index": 0,
+   "set_only_once": 0,
+   "unique": 0,
    "width": "120px"
-  }, 
+  },
   {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "fieldname": "purchase_receipt", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "in_filter": 0, 
-   "in_list_view": 0, 
-   "label": "Purchase Receipt", 
-   "no_copy": 1, 
-   "options": "Purchase Receipt", 
-   "permlevel": 0, 
-   "print_hide": 1, 
-   "read_only": 1, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
+   "allow_on_submit": 0,
+   "bold": 0,
+   "collapsible": 0,
+   "fieldname": "purchase_receipt",
+   "fieldtype": "Link",
+   "hidden": 0,
+   "ignore_user_permissions": 0,
+   "in_filter": 0,
+   "in_list_view": 0,
+   "label": "Purchase Receipt",
+   "no_copy": 1,
+   "options": "Purchase Receipt",
+   "permlevel": 0,
+   "print_hide": 1,
+   "read_only": 1,
+   "report_hide": 0,
+   "reqd": 0,
+   "search_index": 0,
+   "set_only_once": 0,
    "unique": 0
-  }, 
+  },
   {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "fieldname": "col_break2", 
-   "fieldtype": "Column Break", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "in_filter": 0, 
-   "in_list_view": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "print_hide": 0, 
-   "read_only": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
+   "allow_on_submit": 0,
+   "bold": 0,
+   "collapsible": 0,
+   "fieldname": "col_break2",
+   "fieldtype": "Column Break",
+   "hidden": 0,
+   "ignore_user_permissions": 0,
+   "in_filter": 0,
+   "in_list_view": 0,
+   "no_copy": 0,
+   "permlevel": 0,
+   "print_hide": 0,
+   "read_only": 0,
+   "report_hide": 0,
+   "reqd": 0,
+   "search_index": 0,
+   "set_only_once": 0,
    "unique": 0
-  }, 
+  },
   {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "fieldname": "qty", 
-   "fieldtype": "Float", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "in_filter": 0, 
-   "in_list_view": 1, 
-   "label": "Qty", 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "print_hide": 0, 
-   "read_only": 1, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
+   "allow_on_submit": 0,
+   "bold": 0,
+   "collapsible": 0,
+   "fieldname": "qty",
+   "fieldtype": "Float",
+   "hidden": 0,
+   "ignore_user_permissions": 0,
+   "in_filter": 0,
+   "in_list_view": 1,
+   "label": "Qty",
+   "no_copy": 0,
+   "permlevel": 0,
+   "print_hide": 0,
+   "read_only": 1,
+   "report_hide": 0,
+   "reqd": 0,
+   "search_index": 0,
+   "set_only_once": 0,
    "unique": 0
-  }, 
+  },
   {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "fieldname": "rate", 
-   "fieldtype": "Currency", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "in_filter": 0, 
-   "in_list_view": 0, 
-   "label": "Rate", 
-   "no_copy": 0, 
-   "options": "Company:company:default_currency", 
-   "permlevel": 0, 
-   "print_hide": 0, 
-   "read_only": 1, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
+   "allow_on_submit": 0,
+   "bold": 0,
+   "collapsible": 0,
+   "fieldname": "rate",
+   "fieldtype": "Currency",
+   "hidden": 0,
+   "ignore_user_permissions": 0,
+   "in_filter": 0,
+   "in_list_view": 0,
+   "label": "Rate",
+   "no_copy": 0,
+   "options": "Company:company:default_currency",
+   "permlevel": 0,
+   "print_hide": 0,
+   "read_only": 1,
+   "report_hide": 0,
+   "reqd": 0,
+   "search_index": 0,
+   "set_only_once": 0,
    "unique": 0
-  }, 
+  },
   {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "fieldname": "amount", 
-   "fieldtype": "Currency", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "in_filter": 0, 
-   "in_list_view": 1, 
-   "label": "Amount", 
-   "no_copy": 0, 
-   "oldfieldname": "amount", 
-   "oldfieldtype": "Currency", 
-   "options": "Company:company:default_currency", 
-   "permlevel": 0, 
-   "print_hide": 0, 
-   "read_only": 1, 
-   "report_hide": 0, 
-   "reqd": 1, 
-   "search_index": 0, 
-   "set_only_once": 0, 
+   "allow_on_submit": 0,
+   "bold": 0,
+   "collapsible": 0,
+   "fieldname": "amount",
+   "fieldtype": "Currency",
+   "hidden": 0,
+   "ignore_user_permissions": 0,
+   "in_filter": 0,
+   "in_list_view": 1,
+   "label": "Amount",
+   "no_copy": 0,
+   "oldfieldname": "amount",
+   "oldfieldtype": "Currency",
+   "options": "Company:company:default_currency",
+   "permlevel": 0,
+   "print_hide": 0,
+   "read_only": 1,
+   "report_hide": 0,
+   "reqd": 1,
+   "search_index": 0,
+   "set_only_once": 0,
    "unique": 0
-  }, 
+  },
   {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "fieldname": "applicable_charges", 
-   "fieldtype": "Currency", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "in_filter": 0, 
-   "in_list_view": 1, 
-   "label": "Applicable Charges", 
-   "no_copy": 0, 
-   "options": "Company:company:default_currency", 
-   "permlevel": 0, 
-   "print_hide": 0, 
-   "read_only": 1, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
+   "allow_on_submit": 0,
+   "bold": 0,
+   "collapsible": 0,
+   "fieldname": "applicable_charges",
+   "fieldtype": "Currency",
+   "hidden": 0,
+   "ignore_user_permissions": 0,
+   "in_filter": 0,
+   "in_list_view": 1,
+   "label": "Applicable Charges",
+   "no_copy": 0,
+   "options": "Company:company:default_currency",
+   "permlevel": 0,
+   "print_hide": 0,
+   "read_only": 1,
+   "report_hide": 0,
+   "reqd": 0,
+   "search_index": 0,
+   "set_only_once": 0,
    "unique": 0
-  }, 
+  },
   {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "fieldname": "purchase_receipt_item", 
-   "fieldtype": "Data", 
-   "hidden": 1, 
-   "ignore_user_permissions": 0, 
-   "in_filter": 0, 
-   "in_list_view": 0, 
-   "label": "Purchase Receipt Item", 
-   "no_copy": 1, 
-   "permlevel": 0, 
-   "print_hide": 1, 
-   "read_only": 1, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
+   "allow_on_submit": 0,
+   "bold": 0,
+   "collapsible": 0,
+   "fieldname": "purchase_receipt_item",
+   "fieldtype": "Data",
+   "hidden": 1,
+   "ignore_user_permissions": 0,
+   "in_filter": 0,
+   "in_list_view": 0,
+   "label": "Purchase Receipt Item",
+   "no_copy": 1,
+   "permlevel": 0,
+   "print_hide": 1,
+   "read_only": 1,
+   "report_hide": 0,
+   "reqd": 0,
+   "search_index": 0,
+   "set_only_once": 0,
    "unique": 0
   }
- ], 
- "hide_heading": 0, 
- "hide_toolbar": 0, 
- "idx": 1, 
- "in_create": 0, 
- "in_dialog": 0, 
- "is_submittable": 0, 
- "issingle": 0, 
- "istable": 1, 
- "modified": "2015-10-02 07:38:54.612684", 
- "modified_by": "Administrator", 
- "module": "Stock", 
- "name": "Landed Cost Item", 
- "owner": "wasim@webnotestech.com", 
- "permissions": [], 
- "read_only": 0, 
+ ],
+ "hide_heading": 0,
+ "hide_toolbar": 0,
+ "idx": 1,
+ "in_create": 0,
+ "in_dialog": 0,
+ "is_submittable": 0,
+ "issingle": 0,
+ "istable": 1,
+ "modified": "2015-10-20 12:16:35.511560",
+ "modified_by": "Administrator",
+ "module": "Stock",
+ "name": "Landed Cost Item",
+ "owner": "wasim@webnotestech.com",
+ "permissions": [],
+ "read_only": 0,
  "read_only_onload": 0
-}
\ No newline at end of file
+}
diff --git a/erpnext/stock/doctype/stock_entry/test_stock_entry.py b/erpnext/stock/doctype/stock_entry/test_stock_entry.py
index 252deaa..8a1f8c7 100644
--- a/erpnext/stock/doctype/stock_entry/test_stock_entry.py
+++ b/erpnext/stock/doctype/stock_entry/test_stock_entry.py
@@ -566,14 +566,14 @@
 		stock_entry = frappe.get_doc(make_stock_entry(production_order.name, "Manufacture", 1))
 		stock_entry.insert()
 		self.assertTrue("_Test Variant Item-S" in [d.item_code for d in stock_entry.items])
-		
+
 	def test_same_serial_nos_in_repack_or_manufacture_entries(self):
 		s1 = make_serialized_item(target_warehouse="_Test Warehouse - _TC")
 		serial_nos = s1.get("items")[0].serial_no
-		
-		s2 = make_stock_entry(item_code="_Test Serialized Item With Series", source="_Test Warehouse - _TC", 
+
+		s2 = make_stock_entry(item_code="_Test Serialized Item With Series", source="_Test Warehouse - _TC",
 			qty=2, basic_rate=100, purpose="Repack", serial_no=serial_nos, do_not_save=True)
-			
+
 		s2.append("items", {
 			"item_code": "_Test Serialized Item",
 			"t_warehouse": "_Test Warehouse - _TC",
@@ -584,7 +584,7 @@
 			"cost_center": "_Test Cost Center - _TC",
 			"serial_no": serial_nos
 		})
-		
+
 		s2.submit()
 		s2.cancel()
 
diff --git a/erpnext/stock/reorder_item.py b/erpnext/stock/reorder_item.py
index 51dd8c1..d4b0a20 100644
--- a/erpnext/stock/reorder_item.py
+++ b/erpnext/stock/reorder_item.py
@@ -15,21 +15,37 @@
 
 def _reorder_item():
 	material_requests = {"Purchase": {}, "Transfer": {}}
-
-	item_warehouse_projected_qty = get_item_warehouse_projected_qty()
-
-	warehouse_company = frappe._dict(frappe.db.sql("""select name, company from `tabWarehouse`"""))
+	warehouse_company = frappe._dict(frappe.db.sql("""select name, company from `tabWarehouse`
+		where disabled=0"""))
 	default_company = (frappe.defaults.get_defaults().get("company") or
 		frappe.db.sql("""select name from tabCompany limit 1""")[0][0])
 
+	items_to_consider = frappe.db.sql_list("""select name from `tabItem` item
+		where is_stock_item=1 and has_variants=0
+			and (is_purchase_item=1 or is_sub_contracted_item=1)
+			and (end_of_life is null or end_of_life='0000-00-00' or end_of_life > %(today)s)
+			and ((re_order_level is not null and re_order_level > 0)
+				or exists (select name from `tabItem Reorder` ir where ir.parent=item.name)
+				or (variant_of is not null and variant_of != ''
+					and exists (select name from `tabItem Reorder` ir where ir.parent=item.variant_of))
+			)""",
+		{"today": nowdate()})
+
+	if not items_to_consider:
+		return
+
+	item_warehouse_projected_qty = get_item_warehouse_projected_qty(items_to_consider)
+
 	def add_to_material_request(item_code, warehouse, reorder_level, reorder_qty, material_request_type):
-		if warehouse not in item_warehouse_projected_qty[item_code]:
-			# likely a disabled warehouse or a warehouse where BIN does not exist
+		if warehouse not in warehouse_company:
+			# a disabled warehouse
 			return
 
 		reorder_level = flt(reorder_level)
 		reorder_qty = flt(reorder_qty)
-		projected_qty = item_warehouse_projected_qty[item_code][warehouse]
+
+		# projected_qty will be 0 if Bin does not exist
+		projected_qty = flt(item_warehouse_projected_qty.get(item_code, {}).get(warehouse))
 
 		if reorder_level and projected_qty < reorder_level:
 			deficiency = reorder_level - projected_qty
@@ -44,7 +60,7 @@
 				"reorder_qty": reorder_qty
 			})
 
-	for item_code in item_warehouse_projected_qty:
+	for item_code in items_to_consider:
 		item = frappe.get_doc("Item", item_code)
 
 		if item.variant_of and not item.get("reorder_levels"):
@@ -62,18 +78,13 @@
 	if material_requests:
 		return create_material_request(material_requests)
 
-def get_item_warehouse_projected_qty():
+def get_item_warehouse_projected_qty(items_to_consider):
 	item_warehouse_projected_qty = {}
 
 	for item_code, warehouse, projected_qty in frappe.db.sql("""select item_code, warehouse, projected_qty
-		from tabBin where ifnull(item_code, '') != '' and ifnull(warehouse, '') != ''
-		and exists (select name from `tabItem`
-			where `tabItem`.name = `tabBin`.item_code and
-			is_stock_item=1 and (is_purchase_item=1 or is_sub_contracted_item=1) and
-			(ifnull(end_of_life, '0000-00-00')='0000-00-00' or end_of_life > %s))
-		and exists (select name from `tabWarehouse`
-			where `tabWarehouse`.name = `tabBin`.warehouse
-			and ifnull(disabled, 0)=0)""", nowdate()):
+		from tabBin where item_code in ({0})
+			and (warehouse != "" and warehouse is not null)"""\
+		.format(", ".join(["%s"] * len(items_to_consider))), items_to_consider):
 
 		item_warehouse_projected_qty.setdefault(item_code, {})[warehouse] = flt(projected_qty)
 
diff --git a/erpnext/stock/report/stock_projected_qty/stock_projected_qty.py b/erpnext/stock/report/stock_projected_qty/stock_projected_qty.py
index d7dcb23..348cca2 100644
--- a/erpnext/stock/report/stock_projected_qty/stock_projected_qty.py
+++ b/erpnext/stock/report/stock_projected_qty/stock_projected_qty.py
@@ -6,48 +6,58 @@
 from frappe import _
 
 def execute(filters=None):
-	columns = get_columns()
-		
-	data = frappe.db.sql("""select 
-			item.name, item.item_name, description, item_group, brand, warehouse, item.stock_uom, 
-			actual_qty, planned_qty, indented_qty, ordered_qty, reserved_qty, 
-			projected_qty, item.re_order_level, item.re_order_qty, 
-			(item.re_order_level - projected_qty) as shortage_qty
-		from `tabBin` bin, 
-			(select name, company from tabWarehouse 
-				{warehouse_conditions}) wh,
-			(select name, item_name, description, stock_uom, item_group, 
-				brand, re_order_level, re_order_qty 
-				from `tabItem` {item_conditions}) item
-		where item_code = item.name and warehouse = wh.name
-		order by item.name, wh.name"""\
-		.format(item_conditions=get_item_conditions(filters),
-			warehouse_conditions=get_warehouse_conditions(filters)), filters)
-	
-	return columns, data
-	
+	filters = frappe._dict(filters or {})
+	return get_columns(), get_data(filters)
+
 def get_columns():
-	return [_("Item Code") + ":Link/Item:140", _("Item Name") + "::100", _("Description") + "::200", 
-		_("Item Group") + ":Link/Item Group:100", _("Brand") + ":Link/Brand:100", _("Warehouse") + ":Link/Warehouse:120", 
-		_("UOM") + ":Link/UOM:100", _("Actual Qty") + ":Float:100", _("Planned Qty") + ":Float:100", 
-		_("Requested Qty") + ":Float:110", _("Ordered Qty") + ":Float:100", _("Reserved Qty") + ":Float:100", 
-		_("Projected Qty") + ":Float:100", _("Reorder Level") + ":Float:100", _("Reorder Qty") + ":Float:100", 
+	return [_("Item Code") + ":Link/Item:140", _("Item Name") + "::100", _("Description") + "::200",
+		_("Item Group") + ":Link/Item Group:100", _("Brand") + ":Link/Brand:100", _("Warehouse") + ":Link/Warehouse:120",
+		_("UOM") + ":Link/UOM:100", _("Actual Qty") + ":Float:100", _("Planned Qty") + ":Float:100",
+		_("Requested Qty") + ":Float:110", _("Ordered Qty") + ":Float:100", _("Reserved Qty") + ":Float:100",
+		_("Projected Qty") + ":Float:100", _("Reorder Level") + ":Float:100", _("Reorder Qty") + ":Float:100",
 		_("Shortage Qty") + ":Float:100"]
-	
-def get_item_conditions(filters):
-	conditions = []
-	if filters.get("item_code"):
-		conditions.append("name=%(item_code)s")
-	if filters.get("brand"):
-		conditions.append("brand=%(brand)s")
-	
-	return "where {}".format(" and ".join(conditions)) if conditions else ""
-	
-def get_warehouse_conditions(filters):
-	conditions = []
-	if filters.get("company"):
-		conditions.append("company=%(company)s")
-	if filters.get("warehouse"):
-		conditions.append("name=%(warehouse)s")
-		
-	return "where {}".format(" and ".join(conditions)) if conditions else ""
\ No newline at end of file
+
+def get_data(filters):
+	item_map = {}
+	warehouse_company = {}
+	data = []
+
+	for bin in get_bin_list(filters):
+		item = item_map.setdefault(bin.item_code, frappe.get_doc("Item", bin.item_code))
+		company = warehouse_company.setdefault(bin.warehouse, frappe.db.get_value("Warehouse", bin.warehouse, "company"))
+
+		if filters.brand and filters.brand != item.brand:
+			continue
+
+		elif filters.company and filters.company != company:
+			continue
+
+		re_order_level = re_order_qty = 0
+
+		if bin.warehouse==item.default_warehouse:
+			re_order_level = item.re_order_level or 0
+			re_order_qty = item.re_order_qty or 0
+
+		for d in item.get("reorder_levels"):
+			if d.warehouse == bin.warehouse:
+				re_order_level = d.warehouse_reorder_level
+				re_order_qty = d.warehouse_reorder_qty
+
+		data.append([item.name, item.item_name, item.description, item.item_group, item.brand, bin.warehouse,
+			item.stock_uom, bin.actual_qty, bin.planned_qty, bin.indented_qty, bin.ordered_qty, bin.reserved_qty,
+			bin.projected_qty, re_order_level, re_order_qty, re_order_level - bin.projected_qty])
+
+	return data
+
+def get_bin_list(filters):
+	bin_filters = frappe._dict()
+	if filters.item_code:
+		bin_filters.item_code = filters.item_code
+	if filters.warehouse:
+		bin_filters.warehouse = filters.warehouse
+
+	bin_list = frappe.get_all("Bin", fields=["item_code", "warehouse",
+		"actual_qty", "planned_qty", "indented_qty", "ordered_qty", "reserved_qty", "projected_qty"],
+		filters=bin_filters, order_by="item_code, warehouse")
+
+	return bin_list
diff --git a/erpnext/support/doctype/issue/issue.js b/erpnext/support/doctype/issue/issue.js
index f92e4e6..28617cb 100644
--- a/erpnext/support/doctype/issue/issue.js
+++ b/erpnext/support/doctype/issue/issue.js
@@ -1,4 +1,8 @@
 frappe.ui.form.on("Issue", {
+	"onload": function(frm) {
+		frm.email_field = "raised_by";
+	},
+
 	"refresh": function(frm) {
 		if(frm.doc.status==="Open") {
 			frm.add_custom_button("Close", function() {
diff --git a/erpnext/templates/generators/item.html b/erpnext/templates/generators/item.html
index f24b1a6..ccb992b 100644
--- a/erpnext/templates/generators/item.html
+++ b/erpnext/templates/generators/item.html
@@ -38,8 +38,11 @@
                             <select class="form-control"
                                 style="max-width: 140px"
                                 data-attribute="{{ d.attribute }}">
-                            {% for value in attribute_values[d.attribute] %}
-                            <option value="{{ value }}">{{ _(value) }}</option>
+							{% for value in attribute_values[d.attribute] %}
+                            <option value="{{ value }}"
+								{% if selected_attributes and selected_attributes[d.attribute]==value -%} selected {%- endif %}>
+								{{ _(value) }}
+							</option>
                             {% endfor %}
                             </select>
                         </div>
@@ -71,13 +74,13 @@
 				</div>
 			</div>
 		</div>
-		{% if doc.get({"doctype":"Item Website Specification"}) -%}
-		<div class="row" style="margin-top: 20px">
+		{% if website_specifications -%}
+		<div class="row item-website-specification" style="margin-top: 20px">
 			<div class="col-md-12">
 				<h4>{{ _("Specifications") }}</h4>
+
 				<table class="table table-bordered" style="width: 100%">
-				{% for d in doc.get(
-					{"doctype":"Item Website Specification"}) -%}
+				{% for d in website_specifications -%}
 					<tr>
 						<td style="width: 30%;">{{ d.label }}</td>
 						<td>{{ d.description }}</td>
diff --git a/erpnext/templates/includes/product_page.js b/erpnext/templates/includes/product_page.js
index 7468ffe..2345de4 100644
--- a/erpnext/templates/includes/product_page.js
+++ b/erpnext/templates/includes/product_page.js
@@ -9,7 +9,7 @@
 		type: "POST",
 		method: "erpnext.shopping_cart.product.get_product_info",
 		args: {
-			item_code: "{{ name }}"
+			item_code: get_item_code()
 		},
 		callback: function(r) {
 			$(".item-cart").toggleClass("hide", !!!r.message.price);
@@ -63,6 +63,15 @@
 			},
 		});
 	});
+
+	$("[itemscope] .item-view-attribute select").on("change", function() {
+		var item_code = encodeURIComponent(get_item_code());
+		if (window.location.search.indexOf(item_code)!==-1) {
+			return;
+		}
+
+		frappe.load_via_ajax(window.location.pathname + "?variant=" + item_code);
+	});
 });
 
 var toggle_update_cart = function(qty) {
diff --git a/erpnext/utilities/doctype/rename_tool/rename_tool.js b/erpnext/utilities/doctype/rename_tool/rename_tool.js
index 7a91456..2632ddd 100644
--- a/erpnext/utilities/doctype/rename_tool/rename_tool.js
+++ b/erpnext/utilities/doctype/rename_tool/rename_tool.js
@@ -8,7 +8,6 @@
 			method: "erpnext.utilities.doctype.rename_tool.rename_tool.get_doctypes",
 			callback: function(r) {
 				frm.set_df_property("select_doctype", "options", r.message);
-				frm.cscript.setup_upload();
 			}
 		});
 	},
diff --git a/erpnext/utilities/doctype/rename_tool/rename_tool.py b/erpnext/utilities/doctype/rename_tool/rename_tool.py
index 3f6f3e3..18cfebe 100644
--- a/erpnext/utilities/doctype/rename_tool/rename_tool.py
+++ b/erpnext/utilities/doctype/rename_tool/rename_tool.py
@@ -51,5 +51,6 @@
 				rename_log.append("<span style='color: RED'>" + \
 					_("Failed: ") + row[0] + " -> " + row[1] + "</span>")
 				rename_log.append("<span style='margin-left: 20px;'>" + repr(e) + "</span>")
+				frappe.db.rollback()
 
 	return rename_log
diff --git a/setup.py b/setup.py
index 0241b70..6af4e32 100644
--- a/setup.py
+++ b/setup.py
@@ -1,6 +1,6 @@
 from setuptools import setup, find_packages
 
-version = "6.5.1"
+version = "6.5.2"
 
 with open("requirements.txt", "r") as f:
 	install_requires = f.readlines()