diff --git a/erpnext/stock/doctype/item/item.js b/erpnext/stock/doctype/item/item.js
index 477d306..e95babe 100644
--- a/erpnext/stock/doctype/item/item.js
+++ b/erpnext/stock/doctype/item/item.js
@@ -9,7 +9,7 @@
 		if (frm.doc.variant_of){
 			frm.fields_dict["attributes"].grid.set_column_disp("attribute_value", true);
 		}
-		
+
 	},
 
 	refresh: function(frm) {
@@ -34,7 +34,7 @@
 			frm.add_custom_button(__("Show Variants"), function() {
 				frappe.set_route("List", "Item", {"variant_of": frm.doc.name});
 			}, "icon-list", "btn-default");
-			
+
 			frm.add_custom_button(__("Make Variant"), function() {
 				erpnext.item.make_variant()
 			}, "icon-list", "btn-default");
@@ -57,7 +57,7 @@
 		}
 
 		erpnext.item.toggle_reqd(frm);
-		
+
 		erpnext.item.toggle_attributes(frm);
 	},
 
@@ -93,7 +93,7 @@
 	is_stock_item: function(frm) {
 		erpnext.item.toggle_reqd(frm);
 	},
-	
+
 	has_variants: function(frm) {
 		erpnext.item.toggle_attributes(frm);
 	}
@@ -193,10 +193,10 @@
 			validated = 0;
 		}
 	},
-	
+
 	make_variant: function(doc) {
 		var fields = []
-		
+
 		for(var i=0;i< cur_frm.doc.attributes.length;i++){
 			var fieldtype, desc;
 			var row = cur_frm.doc.attributes[i];
@@ -221,8 +221,8 @@
 			title: __("Make Variant"),
 			fields: fields
 		});
-		
-		d.set_primary_action(__("Make"), function() {	
+
+		d.set_primary_action(__("Make"), function() {
 			args = d.get_values();
 			if(!args) return;
 			frappe.call({
@@ -234,8 +234,8 @@
 				callback: function(r) {
 					// returns variant item
 					if (r.message) {
-						var variant = r.message[0];
-						var msgprint_dialog = frappe.msgprint(__("Item Variant {0} already exists with same attributes", 
+						var variant = r.message;
+						var msgprint_dialog = frappe.msgprint(__("Item Variant {0} already exists with same attributes",
 							[repl('<a href="#Form/Item/%(item_encoded)s" class="strong variant-click">%(item)s</a>', {
 								item_encoded: encodeURIComponent(variant),
 								item: variant
@@ -251,7 +251,7 @@
 							method:"erpnext.stock.doctype.item.item.create_variant",
 							args: {
 								"item": cur_frm.doc.name,
-								"param": d.get_values()
+								"args": d.get_values()
 							},
 							callback: function(r) {
 								var doclist = frappe.model.sync(r.message);
@@ -262,17 +262,17 @@
 				}
 			});
 		});
-				
+
 		d.show();
 
 		$.each(d.fields_dict, function(i, field) {
-			
+
 			if(field.df.fieldtype !== "Data") {
 				return;
 			}
 
 			$(field.input_area).addClass("ui-front");
-			
+
 			field.$input.autocomplete({
 				minLength: 0,
 				minChars: 0,
diff --git a/erpnext/stock/doctype/item/item.py b/erpnext/stock/doctype/item/item.py
index f465cc6..20a064b 100644
--- a/erpnext/stock/doctype/item/item.py
+++ b/erpnext/stock/doctype/item/item.py
@@ -352,8 +352,8 @@
 				args[d.attribute] = d.attribute_value
 
 			variant = get_variant(self.variant_of, args)
-			if variant and variant[0][0] != self.name:
-				frappe.throw(_("Item variant {0} exists with same attributes").format(variant[0][0]), ItemVariantExistsError)
+			if variant and variant != self.name:
+				frappe.throw(_("Item variant {0} exists with same attributes").format(variant), ItemVariantExistsError)
 
 def validate_end_of_life(item_code, end_of_life=None, verbose=1):
 	if not end_of_life:
@@ -572,8 +572,10 @@
 				return variant.name
 
 @frappe.whitelist()
-def create_variant(item, param):
-	args = json.loads(param)
+def create_variant(item, args):
+	if isinstance(args, basestring):
+		args = json.loads(args)
+
 	variant = frappe.new_doc("Item")
 	variant_attributes = []
 	for d in args:
@@ -581,9 +583,12 @@
 			"attribute": d,
 			"attribute_value": args[d]
 		})
+
 	variant.set("attributes", variant_attributes)
 	template = frappe.get_doc("Item", item)
 	copy_attributes_to_variant(template, variant)
+	make_variant_item_code(template, variant)
+
 	return variant
 
 def copy_attributes_to_variant(item, variant):
@@ -600,3 +605,34 @@
 		variant.description += "\n"
 		for d in variant.attributes:
 			variant.description += "<p>" + d.attribute + ": " + cstr(d.attribute_value) + "</p>"
+
+def make_variant_item_code(template, variant):
+	"""Uses template's item code and abbreviations to make variant's item code"""
+	if variant.item_code:
+		return
+
+	abbreviations = []
+	for attr in variant.attributes:
+		item_attribute = frappe.db.sql("""select i.numeric_values, v.abbr
+			from `tabItem Attribute` i left join `tabItem Attribute Value` v
+				on (i.name=v.parent)
+			where i.name=%(attribute)s and v.attribute_value=%(attribute_value)s""", {
+				"attribute": attr.attribute,
+				"attribute_value": attr.attribute_value
+			}, as_dict=True)
+
+		if not item_attribute:
+			# somehow an invalid item attribute got used
+			return
+
+		if item_attribute[0].numeric_values:
+			# don't generate item code if one of the attributes is numeric
+			return
+
+		abbreviations.append(item_attribute[0].abbr)
+
+	if abbreviations:
+		variant.item_code = "{0}-{1}".format(template.item_code, "-".join(abbreviations))
+
+	if variant.item_code:
+		variant.item_name = variant.item_code
