diff --git a/erpnext/controllers/website_list_for_contact.py b/erpnext/controllers/website_list_for_contact.py
index 04d1bc5..73badc2 100644
--- a/erpnext/controllers/website_list_for_contact.py
+++ b/erpnext/controllers/website_list_for_contact.py
@@ -18,8 +18,8 @@
 		"get_list": get_transaction_list
 	}
 
+
 def get_transaction_list(doctype, txt=None, filters=None, limit_start=0, limit_page_length=20, order_by="modified"):
-	from frappe.www.list import get_list
 	user = frappe.session.user
 	key = None
 
@@ -45,16 +45,41 @@
 		filters.append((doctype, key, "in", parties))
 
 		if key:
-			return post_process(doctype, get_list(doctype, txt,
-				filters=filters, fields = "name",
-				limit_start=limit_start, limit_page_length=limit_page_length,
-				ignore_permissions=True,
-				order_by = "modified desc"))
+			return post_process(doctype, get_list_for_transactions(doctype, txt,
+				filters=filters, fields="name",limit_start=limit_start,
+				limit_page_length=limit_page_length,ignore_permissions=True,
+				order_by="modified desc"))
 		else:
 			return []
 
-	return post_process(doctype, get_list(doctype, txt, filters, limit_start, limit_page_length,
-		fields="name", order_by = "modified desc"))
+	return post_process(doctype, get_list_for_transactions(doctype, txt, filters, limit_start, limit_page_length,
+		fields="name", order_by="modified desc"))
+
+def get_list_for_transactions(doctype, txt, filters, limit_start, limit_page_length=20, ignore_permissions=False,fields=None, order_by=None):
+	from frappe.www.list import get_list
+	meta = frappe.get_meta(doctype)
+	data = []
+	or_filters = []
+
+	for d in get_list(doctype, txt, filters=filters, fields="name", limit_start=limit_start,
+		limit_page_length=limit_page_length, ignore_permissions=True, order_by="modified desc"):
+		data.append(d)
+
+	if txt:
+		if meta.get_field('items'):
+			if meta.get_field('items').options:
+			   child_doctype = meta.get_field('items').options
+			   for item in frappe.get_all(child_doctype, {"item_name": ['like', "%" + txt + "%"]}):
+					child = frappe.get_doc(child_doctype, item.name)
+					or_filters.append([doctype, "name", "=", child.parent])
+
+	if or_filters:
+		for r in frappe.get_list(doctype, fields=fields,filters=filters, or_filters=or_filters, limit_start=limit_start,
+			limit_page_length=limit_page_length, ignore_permissions=ignore_permissions,
+			order_by=order_by):
+			data.append(r)
+
+	return data
 
 def get_party_details(customers, suppliers):
 	if customers:
diff --git a/erpnext/selling/doctype/quotation/test_quotation.py b/erpnext/selling/doctype/quotation/test_quotation.py
index c642c47..d7d84c7 100644
--- a/erpnext/selling/doctype/quotation/test_quotation.py
+++ b/erpnext/selling/doctype/quotation/test_quotation.py
@@ -84,6 +84,43 @@
 		self.assertEquals(quotation.get("items")[0].rate, rate_with_margin)
 		si.save()
 
+	def test_create_two_quotations(self):
+		from erpnext.stock.doctype.item.test_item import make_item
+
+		first_item = make_item("_Test Laptop",
+							{"is_stock_item": 1, "expense_account": "_Test Account Cost for Goods Sold - _TC",
+							 "cost_center": "_Test Cost Center - _TC"})
+
+		second_item = make_item("_Test CPU",
+							{"is_stock_item": 1, "expense_account": "_Test Account Cost for Goods Sold - _TC",
+							 "cost_center": "_Test Cost Center - _TC"})
+
+		qo_item1 = [
+			{
+				"item_code": first_item.item_code,
+				"warehouse": "",
+				"qty": 2,
+				"rate": 400,
+				"delivered_by_supplier": 1,
+				"supplier": '_Test Supplier'
+			}
+		]
+
+		qo_item2 = [
+			{
+				"item_code": second_item.item_code,
+				"warehouse": "_Test Warehouse - _TC",
+				"qty": 2,
+				"rate": 300,
+				"conversion_factor": 1.0
+			}
+		]
+
+		first_qo = make_quotation(item_list=qo_item1, do_not_submit=True)
+		first_qo.submit()
+		sec_qo = make_quotation(item_list=qo_item2, do_not_submit=True)
+		sec_qo.submit()
+
 test_records = frappe.get_test_records('Quotation')
 
 def get_quotation_dict(customer=None, item_code=None):
@@ -103,3 +140,41 @@
 			}
 		]
 	}
+
+
+def make_quotation(**args):
+	qo = frappe.new_doc("Quotation")
+	args = frappe._dict(args)
+	if args.transaction_date:
+		qo.transaction_date = args.transaction_date
+
+	qo.company = args.company or "_Test Company"
+	qo.customer = args.customer or "_Test Customer"
+	qo.currency = args.currency or "INR"
+	if args.selling_price_list:
+		qo.selling_price_list = args.selling_price_list
+
+	if "warehouse" not in args:
+		args.warehouse = "_Test Warehouse - _TC"
+
+	if args.item_list:
+		for item in args.item_list:
+			qo.append("items", item)
+
+	else:
+		qo.append("items", {
+			"item_code": args.item or args.item_code or "_Test Item",
+			"warehouse": args.warehouse,
+			"qty": args.qty or 10,
+			"uom": args.uom or None,
+			"rate": args.rate or 100
+		})
+
+	qo.delivery_date = add_days(qo.transaction_date, 10)
+
+	if not args.do_not_save:
+		qo.insert()
+		if not args.do_not_submit:
+			qo.submit()
+
+	return qo
