diff --git a/erpnext/accounts/doctype/account/account.js b/erpnext/accounts/doctype/account/account.js
index f4f2b8a..76a1e56 100644
--- a/erpnext/accounts/doctype/account/account.js
+++ b/erpnext/accounts/doctype/account/account.js
@@ -18,7 +18,7 @@
 	
 	if(doc.group_or_ledger=='Ledger') {
 		frappe.model.with_doc("Accounts Settings", "Accounts Settings", function (name) {
-			var accounts_settings = frappe.model.get_doc("Accounts Settings", name);
+			var accounts_settings = frappe.get_doc("Accounts Settings", name);
 			var display = accounts_settings["frozen_accounts_modifier"] 
 				&& in_list(user_roles, accounts_settings["frozen_accounts_modifier"]);
 			
diff --git a/erpnext/accounts/doctype/journal_voucher/journal_voucher.js b/erpnext/accounts/doctype/journal_voucher/journal_voucher.js
index fc042ba..e8e513d 100644
--- a/erpnext/accounts/doctype/journal_voucher/journal_voucher.js
+++ b/erpnext/accounts/doctype/journal_voucher/journal_voucher.js
@@ -39,7 +39,7 @@
 		$.each([["against_voucher", "Purchase Invoice", "credit_to"], 
 			["against_invoice", "Sales Invoice", "debit_to"]], function(i, opts) {
 				me.frm.set_query(opts[0], "entries", function(doc, cdt, cdn) {
-					var jvd = frappe.model.get_doc(cdt, cdn);
+					var jvd = frappe.get_doc(cdt, cdn);
 					frappe.model.validate_missing(jvd, "account");
 					return {
 						filters: [
@@ -52,7 +52,7 @@
 		});
 		
 		this.frm.set_query("against_jv", "entries", function(doc, cdt, cdn) {
-			var jvd = frappe.model.get_doc(cdt, cdn);
+			var jvd = frappe.get_doc(cdt, cdn);
 			frappe.model.validate_missing(jvd, "account");
 			
 			return {
@@ -63,7 +63,7 @@
 	},
 	
 	against_voucher: function(doc, cdt, cdn) {
-		var d = frappe.model.get_doc(cdt, cdn);
+		var d = frappe.get_doc(cdt, cdn);
 		if (d.against_voucher && !flt(d.debit)) {
 			this.get_outstanding({
 				'doctype': 'Purchase Invoice', 
@@ -73,7 +73,7 @@
 	},
 	
 	against_invoice: function(doc, cdt, cdn) {
-		var d = frappe.model.get_doc(cdt, cdn);
+		var d = frappe.get_doc(cdt, cdn);
 		if (d.against_invoice && !flt(d.credit)) {
 			this.get_outstanding({
 				'doctype': 'Sales Invoice', 
@@ -83,7 +83,7 @@
 	},
 	
 	against_jv: function(doc, cdt, cdn) {
-		var d = frappe.model.get_doc(cdt, cdn);
+		var d = frappe.get_doc(cdt, cdn);
 		if (d.against_jv && !flt(d.credit) && !flt(d.debit)) {
 			this.get_outstanding({
 				'doctype': 'Journal Voucher', 
@@ -138,7 +138,7 @@
 
 cur_frm.cscript.update_totals = function(doc) {
 	var td=0.0; var tc =0.0;
-	var el = getchildren('Journal Voucher Detail', doc.name, 'entries');
+	var el = doc.entries || [];
 	for(var i in el) {
 		td += flt(el[i].debit, 2);
 		tc += flt(el[i].credit, 2);
diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js
index be1f3b2..a45af20 100644
--- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js
+++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js
@@ -108,7 +108,7 @@
 	},
 	
 	entries_add: function(doc, cdt, cdn) {
-		var row = frappe.model.get_doc(cdt, cdn);
+		var row = frappe.get_doc(cdt, cdn);
 		this.frm.script_manager.copy_from_first_row("entries", row, ["expense_account", "cost_center"]);
 	}
 });
@@ -184,7 +184,7 @@
 cur_frm.cscript.expense_account = function(doc, cdt, cdn){
 	var d = locals[cdt][cdn];
 	if(d.idx == 1 && d.expense_account){
-		var cl = getchildren('Purchase Invoice Item', doc.name, 'entries', doc.doctype);
+		var cl = doc.entries || [];
 		for(var i = 0; i < cl.length; i++){
 			if(!cl[i].expense_account) cl[i].expense_account = d.expense_account;
 		}
@@ -205,7 +205,7 @@
 cur_frm.cscript.cost_center = function(doc, cdt, cdn){
 	var d = locals[cdt][cdn];
 	if(d.idx == 1 && d.cost_center){
-		var cl = getchildren('Purchase Invoice Item', doc.name, 'entries', doc.doctype);
+		var cl = doc.entries || [];
 		for(var i = 0; i < cl.length; i++){
 			if(!cl[i].cost_center) cl[i].cost_center = d.cost_center;
 		}
diff --git a/erpnext/accounts/doctype/purchase_taxes_and_charges_master/purchase_taxes_and_charges_master.js b/erpnext/accounts/doctype/purchase_taxes_and_charges_master/purchase_taxes_and_charges_master.js
index 2027a7b..bc0a912 100644
--- a/erpnext/accounts/doctype/purchase_taxes_and_charges_master/purchase_taxes_and_charges_master.js
+++ b/erpnext/accounts/doctype/purchase_taxes_and_charges_master/purchase_taxes_and_charges_master.js
@@ -41,7 +41,7 @@
 		return doc_field.print_hide;
 	}
 
-	var cl = getchildren('Purchase Taxes and Charges', doc.name, 'other_charges');
+	var cl = doc.other_charges || [];
 
 	// outer table
 	var out='<div><table class="noborder" style="width:100%">\
diff --git a/erpnext/accounts/doctype/sales_invoice/pos.js b/erpnext/accounts/doctype/sales_invoice/pos.js
index fc6190a..ff996cc 100644
--- a/erpnext/accounts/doctype/sales_invoice/pos.js
+++ b/erpnext/accounts/doctype/sales_invoice/pos.js
@@ -293,8 +293,7 @@
 		
 		// check whether the item is already added
 		if (no_of_items != 0) {
-			$.each(frappe.model.get_children(this.frm.doctype + " Item", this.frm.doc.name, 
-				this.frm.cscript.fname,	this.frm.doctype), function(i, d) {
+			$.each(this.frm.doc[this.frm.cscript.fname] || [], function(i, d) {
 				if (d.item_code == item_code) {
 					caught = true;
 					if (serial_no)
@@ -335,8 +334,7 @@
 	},
 	update_qty: function(item_code, qty) {
 		var me = this;
-		$.each(frappe.model.get_children(this.frm.doctype + " Item", this.frm.doc.name, 
-			this.frm.cscript.fname, this.frm.doctype), function(i, d) {
+		$.each(this.frm.doc[this.frm.cscript.fname] || [], function(i, d) {
 			if (d.item_code == item_code) {
 				if (qty == 0) {
 					frappe.model.clear_doc(d.doctype, d.name);
@@ -387,8 +385,7 @@
 		var me = this;
 		var $items = this.wrapper.find("#cart tbody").empty();
 
-		$.each(frappe.model.get_children(this.frm.doctype + " Item", this.frm.doc.name, 
-			this.frm.cscript.fname, this.frm.doctype), function(i, d) {
+		$.each(this.frm.doc[this.frm.cscript.fname] || [], function(i, d) {
 
 			$(repl('<tr id="%(item_code)s" data-selected="false">\
 					<td>%(item_code)s%(item_name)s</td>\
@@ -422,8 +419,7 @@
 	},
 	show_taxes: function() {
 		var me = this;
-		var taxes = frappe.model.get_children(this.sales_or_purchase + " Taxes and Charges", 
-			this.frm.doc.name, this.frm.cscript.other_fname, this.frm.doctype);
+		var taxes = this.frm.doc[this.frm.cscript.other_fname] || [];
 		$(this.wrapper).find(".tax-table")
 			.toggle((taxes && taxes.length) ? true : false)
 			.find("tbody").empty();
@@ -544,8 +540,7 @@
 			}
 		}
 
-		var child = frappe.model.get_children(this.frm.doctype + " Item", this.frm.doc.name, 
-			this.frm.cscript.fname, this.frm.doctype);
+		var child = this.frm.doc[this.frm.cscript.fname] || [];
 
 		$.each(child, function(i, d) {
 			for (var i in selected_items) {
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js
index ebde867..077c913 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js
@@ -199,7 +199,7 @@
 	},
 	
 	entries_add: function(doc, cdt, cdn) {
-		var row = frappe.model.get_doc(cdt, cdn);
+		var row = frappe.get_doc(cdt, cdn);
 		this.frm.script_manager.copy_from_first_row("entries", row, ["income_account", "cost_center"]);
 	},
 	
diff --git a/erpnext/accounts/doctype/sales_taxes_and_charges_master/sales_taxes_and_charges_master.js b/erpnext/accounts/doctype/sales_taxes_and_charges_master/sales_taxes_and_charges_master.js
index 6f35f4a..f4b425b 100644
--- a/erpnext/accounts/doctype/sales_taxes_and_charges_master/sales_taxes_and_charges_master.js
+++ b/erpnext/accounts/doctype/sales_taxes_and_charges_master/sales_taxes_and_charges_master.js
@@ -54,7 +54,7 @@
 	
 	out ='';
 	if (!doc.print_without_amount) {
-		var cl = getchildren('Sales Taxes and Charges', doc.name, 'other_charges');
+		var cl = doc.other_charges || [];
 
 		// outer table	
 		var out='<div><table class="noborder" style="width:100%"><tr><td style="width: 60%"></td><td>';
diff --git a/erpnext/buying/doctype/purchase_common/purchase_common.js b/erpnext/buying/doctype/purchase_common/purchase_common.js
index 14f1843..e18b3ef 100644
--- a/erpnext/buying/doctype/purchase_common/purchase_common.js
+++ b/erpnext/buying/doctype/purchase_common/purchase_common.js
@@ -78,7 +78,7 @@
 	},
 	
 	price_list_rate: function(doc, cdt, cdn) {
-		var item = frappe.model.get_doc(cdt, cdn);
+		var item = frappe.get_doc(cdt, cdn);
 		frappe.model.round_floats_in(item, ["price_list_rate", "discount_percentage"]);
 		
 		item.rate = flt(item.price_list_rate * (1 - item.discount_percentage / 100.0),
@@ -92,7 +92,7 @@
 	},
 	
 	rate: function(doc, cdt, cdn) {
-		var item = frappe.model.get_doc(cdt, cdn);
+		var item = frappe.get_doc(cdt, cdn);
 		frappe.model.round_floats_in(item, ["rate", "discount_percentage"]);
 		
 		if(item.price_list_rate) {
@@ -107,7 +107,7 @@
 	
 	uom: function(doc, cdt, cdn) {
 		var me = this;
-		var item = frappe.model.get_doc(cdt, cdn);
+		var item = frappe.get_doc(cdt, cdn);
 		if(item.item_code && item.uom) {
 			return this.frm.call({
 				method: "erpnext.buying.utils.get_conversion_factor",
@@ -132,7 +132,7 @@
 	
 	conversion_factor: function(doc, cdt, cdn) {
 		if(frappe.meta.get_docfield(cdt, "stock_qty", cdn)) {
-			var item = frappe.model.get_doc(cdt, cdn);
+			var item = frappe.get_doc(cdt, cdn);
 			frappe.model.round_floats_in(item, ["qty", "conversion_factor"]);
 			item.stock_qty = flt(item.qty * item.conversion_factor, precision("stock_qty", item));
 			refresh_field("stock_qty", item.name, item.parentfield);
@@ -140,7 +140,7 @@
 	},
 	
 	warehouse: function(doc, cdt, cdn) {
-		var item = frappe.model.get_doc(cdt, cdn);
+		var item = frappe.get_doc(cdt, cdn);
 		if(item.item_code && item.warehouse) {
 			return this.frm.call({
 				method: "erpnext.buying.utils.get_projected_qty",
@@ -154,7 +154,7 @@
 	},
 	
 	project_name: function(doc, cdt, cdn) {
-		var item = frappe.model.get_doc(cdt, cdn);
+		var item = frappe.get_doc(cdt, cdn);
 		if(item.project_name) {
 			$.each(this.frm.doc[this.fname],
 				function(i, other_item) { 
diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.js b/erpnext/buying/doctype/purchase_order/purchase_order.js
index 410deeb..1dfb78e 100644
--- a/erpnext/buying/doctype/purchase_order/purchase_order.js
+++ b/erpnext/buying/doctype/purchase_order/purchase_order.js
@@ -170,7 +170,7 @@
 
 	out ='';
 	
-	var cl = getchildren('Purchase Order Item',doc.name,'po_details');
+	var cl = doc.po_details || [];
 
 	// outer table	
 	var out='<div><table class="noborder" style="width:100%"><tr><td style="width: 50%"></td><td>';
diff --git a/erpnext/buying/doctype/supplier/supplier.js b/erpnext/buying/doctype/supplier/supplier.js
index cfe526f..05288c3 100644
--- a/erpnext/buying/doctype/supplier/supplier.js
+++ b/erpnext/buying/doctype/supplier/supplier.js
@@ -17,7 +17,7 @@
 		cur_frm.cscript.make_contact(doc,dt,dn);
 		
 		cur_frm.communication_view = new frappe.views.CommunicationList({
-			list: frappe.model.get("Communication", {"supplier": doc.name}),
+			list: frappe.get_list("Communication", {"supplier": doc.name}),
 			parent: cur_frm.fields_dict.communication_html.wrapper,
 			doc: doc
 		})		
diff --git a/erpnext/controllers/js/contact_address_common.js b/erpnext/controllers/js/contact_address_common.js
index 6a66469..d06f6a0 100644
--- a/erpnext/controllers/js/contact_address_common.js
+++ b/erpnext/controllers/js/contact_address_common.js
@@ -23,7 +23,7 @@
 				"Installation Note", "Opportunity", "Customer Issue", "Maintenance Visit",
 				"Maintenance Schedule"]
 				.indexOf(doctype)!==-1) {
-				var refdoc = frappe.model.get_doc(doctype, docname);
+				var refdoc = frappe.get_doc(doctype, docname);
 
 				if(refdoc.doctype == "Quotation" ? refdoc.quotation_to=="Customer" : true) {
 					cur_frm.set_value("customer", refdoc.customer || refdoc.name);
@@ -34,7 +34,7 @@
 			}
 			if(["Supplier", "Supplier Quotation", "Purchase Order", "Purchase Invoice", "Purchase Receipt"]
 				.indexOf(doctype)!==-1) {
-				var refdoc = frappe.model.get_doc(doctype, docname);
+				var refdoc = frappe.get_doc(doctype, docname);
 				cur_frm.set_value("supplier", refdoc.supplier || refdoc.name);
 				cur_frm.set_value("supplier_name", refdoc.supplier_name);
 				if(cur_frm.doc.doctype==="Address")
@@ -42,7 +42,7 @@
 			}
 			if(["Lead", "Quotation"]
 				.indexOf(doctype)!==-1) {
-				var refdoc = frappe.model.get_doc(doctype, docname);
+				var refdoc = frappe.get_doc(doctype, docname);
 				
 				if(refdoc.doctype == "Quotation" ? refdoc.quotation_to=="Lead" : true) {
 					cur_frm.set_value("lead", refdoc.lead || refdoc.name);
diff --git a/erpnext/hr/doctype/appraisal/appraisal.js b/erpnext/hr/doctype/appraisal/appraisal.js
index 5bcb96d..a87607c 100644
--- a/erpnext/hr/doctype/appraisal/appraisal.js
+++ b/erpnext/hr/doctype/appraisal/appraisal.js
@@ -32,7 +32,7 @@
 
 cur_frm.cscript.calculate_total_score = function(doc,cdt,cdn){
 	//return get_server_fields('calculate_total','','',doc,cdt,cdn,1);
-	var val = getchildren('Appraisal Goal', doc.name, 'appraisal_details', doc.doctype);
+	var val = doc.appraisal_details || [];
 	var total =0;
 	for(var i = 0; i<val.length; i++){
 		total = flt(total)+flt(val[i].score_earned)
@@ -61,7 +61,7 @@
 }
 
 cur_frm.cscript.calculate_total = function(doc,cdt,cdn){
-	var val = getchildren('Appraisal Goal', doc.name, 'appraisal_details', doc.doctype);
+	var val = doc.appraisal_details || [];
 	var total =0;
 	for(var i = 0; i<val.length; i++){
 		total = flt(total)+flt(val[i].score_earned);
diff --git a/erpnext/hr/doctype/expense_claim/expense_claim.js b/erpnext/hr/doctype/expense_claim/expense_claim.js
index 9c54fd6..a399d5f 100644
--- a/erpnext/hr/doctype/expense_claim/expense_claim.js
+++ b/erpnext/hr/doctype/expense_claim/expense_claim.js
@@ -69,8 +69,7 @@
 }
 
 cur_frm.cscript.clear_sanctioned = function(doc) {
-	var val = getchildren('Expense Claim Detail', doc.name, 
-		'expense_voucher_details', doc.doctype);
+	var val = doc.expense_voucher_details || [];
 	for(var i = 0; i<val.length; i++){
 		val[i].sanctioned_amount ='';
 	}
diff --git a/erpnext/hr/doctype/job_applicant/job_applicant.js b/erpnext/hr/doctype/job_applicant/job_applicant.js
index f0fe443..6186535 100644
--- a/erpnext/hr/doctype/job_applicant/job_applicant.js
+++ b/erpnext/hr/doctype/job_applicant/job_applicant.js
@@ -15,7 +15,7 @@
 	},
 	make_listing: function(doc) {
 		cur_frm.communication_view = new frappe.views.CommunicationList({
-			list: frappe.model.get("Communication", {"parent": doc.name, "parenttype": "Job Applicant"}),
+			list: frappe.get_list("Communication", {"parent": doc.name, "parenttype": "Job Applicant"}),
 			parent: cur_frm.fields_dict['thread_html'].wrapper,
 			doc: doc,
 			recipients: doc.email_id
diff --git a/erpnext/hr/doctype/salary_slip/salary_slip.js b/erpnext/hr/doctype/salary_slip/salary_slip.js
index e8aa638..3c11f9d 100644
--- a/erpnext/hr/doctype/salary_slip/salary_slip.js
+++ b/erpnext/hr/doctype/salary_slip/salary_slip.js
@@ -65,7 +65,7 @@
 // Calculate earning total
 // ------------------------------------------------------------------------
 var calculate_earning_total = function(doc, dt, dn) {
-	var tbl = getchildren('Salary Slip Earning', doc.name, 'earning_details', doc.doctype);
+	var tbl = doc.earning_details || [];
 
 	var total_earn = 0;
 	for(var i = 0; i < tbl.length; i++){
@@ -82,7 +82,7 @@
 // Calculate deduction total
 // ------------------------------------------------------------------------
 var calculate_ded_total = function(doc, dt, dn) {
-	var tbl = getchildren('Salary Slip Deduction', doc.name, 'deduction_details', doc.doctype);
+	var tbl = doc.deduction_details || [];
 
 	var total_ded = 0;
 	for(var i = 0; i < tbl.length; i++){
diff --git a/erpnext/hr/doctype/salary_structure/salary_structure.js b/erpnext/hr/doctype/salary_structure/salary_structure.js
index fc70455..0cfb6c4 100644
--- a/erpnext/hr/doctype/salary_structure/salary_structure.js
+++ b/erpnext/hr/doctype/salary_structure/salary_structure.js
@@ -4,8 +4,8 @@
 cur_frm.add_fetch('employee', 'company', 'company');
 
 cur_frm.cscript.onload = function(doc, dt, dn){
-  e_tbl = getchildren('Salary Structure Earning', doc.name, 'earning_details', doc.doctype);
-  d_tbl = getchildren('Salary Structure Deduction', doc.name, 'deduction_details', doc.doctype);
+  e_tbl = doc.earning_details || [];
+  d_tbl = doc.deduction_details || [];
   if (e_tbl.length == 0 && d_tbl.length == 0)
     return $c_obj(doc,'make_earn_ded_table','', function(r, rt) { refresh_many(['earning_details', 'deduction_details']);});
 }
@@ -39,8 +39,8 @@
 }
 
 var calculate_totals = function(doc, cdt, cdn) {
-  var tbl1 = getchildren('Salary Structure Earning', doc.name, 'earning_details', doc.doctype);
-  var tbl2 = getchildren('Salary Structure Deduction', doc.name, 'deduction_details', doc.doctype);
+  var tbl1 = doc.earning_details || [];
+  var tbl2 = doc.deduction_details || [];
   
   var total_earn = 0; var total_ded = 0;
   for(var i = 0; i < tbl1.length; i++){
diff --git a/erpnext/manufacturing/doctype/bom/bom.js b/erpnext/manufacturing/doctype/bom/bom.js
index 363ab75..d0e9cc7 100644
--- a/erpnext/manufacturing/doctype/bom/bom.js
+++ b/erpnext/manufacturing/doctype/bom/bom.js
@@ -34,7 +34,7 @@
 }
 
 var set_operation_no = function(doc) {
-	var op_table = getchildren('BOM Operation', doc.name, 'bom_operations');
+	var op_table = doc.bom_operations || [];
 	var operations = [];
 
 	for (var i=0, j=op_table.length; i<j; i++) {
@@ -45,7 +45,7 @@
 	frappe.meta.get_docfield("BOM Item", "operation_no", 
 		cur_frm.docname).options = operations.join("\n");
 	
-	$.each(getchildren("BOM Item", doc.name, "bom_materials"), function(i, v) {
+	$.each(doc.bom_materials || [], function(i, v) {
 		if(!inList(operations, cstr(v.operation_no))) v.operation_no = null;
 	});
 	
@@ -132,7 +132,7 @@
 }
 
 var calculate_op_cost = function(doc) {	
-	var op = getchildren('BOM Operation', doc.name, 'bom_operations');
+	var op = doc.bom_operations || [];
 	total_op_cost = 0;
 	for(var i=0;i<op.length;i++) {
 		op_cost =	flt(flt(op[i].hour_rate) * flt(op[i].time_in_mins) / 60, 2);
@@ -144,7 +144,7 @@
 }
 
 var calculate_rm_cost = function(doc) {	
-	var rm = getchildren('BOM Item', doc.name, 'bom_materials');
+	var rm = doc.bom_materials || [];
 	total_rm_cost = 0;
 	for(var i=0;i<rm.length;i++) {
 		amt =	flt(rm[i].rate) * flt(rm[i].qty);
diff --git a/erpnext/public/js/controllers/stock_controller.js b/erpnext/public/js/controllers/stock_controller.js
index 9f793e4..65b81bb 100644
--- a/erpnext/public/js/controllers/stock_controller.js
+++ b/erpnext/public/js/controllers/stock_controller.js
@@ -39,7 +39,7 @@
 	copy_account_in_all_row: function(doc, dt, dn, fieldname) {
 		var d = locals[dt][dn];
 		if(d[fieldname]){
-			var cl = getchildren(this.frm.cscript.tname, doc.name, this.frm.cscript.fname, doc.doctype);
+			var cl = doc[this.frm.cscript.fname] || [];
 			for(var i = 0; i < cl.length; i++) {
 				if(!cl[i][fieldname]) cl[i][fieldname] = d[fieldname];
 			}
diff --git a/erpnext/public/js/transaction.js b/erpnext/public/js/transaction.js
index 22c3c3a..cb868b2 100644
--- a/erpnext/public/js/transaction.js
+++ b/erpnext/public/js/transaction.js
@@ -113,7 +113,7 @@
 	
 	item_code: function(doc, cdt, cdn) {
 		var me = this;
-		var item = frappe.model.get_doc(cdt, cdn);
+		var item = frappe.get_doc(cdt, cdn);
 		if(item.item_code || item.barcode || item.serial_no) {
 			if(!this.validate_company_and_party()) {
 				cur_frm.fields_dict[me.frm.cscript.fname].grid.grid_rows[item.idx - 1].remove();
@@ -156,7 +156,7 @@
 
 	serial_no: function(doc, cdt, cdn) {
 		var me = this;
-		var item = frappe.model.get_doc(cdt, cdn);
+		var item = frappe.get_doc(cdt, cdn);
 
 		if (item.serial_no) {
 			if (!item.item_code) {
@@ -262,7 +262,7 @@
 	get_exchange_rate: function(from_currency, to_currency, callback) {
 		var exchange_name = from_currency + "-" + to_currency;
 		frappe.model.with_doc("Currency Exchange", exchange_name, function(name) {
-			var exchange_doc = frappe.model.get_doc("Currency Exchange", exchange_name);
+			var exchange_doc = frappe.get_doc("Currency Exchange", exchange_name);
 			callback(exchange_doc ? flt(exchange_doc.exchange_rate) : 0);
 		});
 	},
@@ -304,7 +304,7 @@
 	},
 
 	row_id: function(doc, cdt, cdn) {
-		var tax = frappe.model.get_doc(cdt, cdn);
+		var tax = frappe.get_doc(cdt, cdn);
 		try {
 			this.validate_on_previous_row(tax);
 			this.calculate_taxes_and_totals();
@@ -339,7 +339,7 @@
 	},
 	
 	included_in_print_rate: function(doc, cdt, cdn) {
-		var tax = frappe.model.get_doc(cdt, cdn);
+		var tax = frappe.get_doc(cdt, cdn);
 		try {
 			this.validate_on_previous_row(tax);
 			this.validate_inclusive_tax(tax);
diff --git a/erpnext/public/js/utils.js b/erpnext/public/js/utils.js
index 9f7f278..868ea0e 100644
--- a/erpnext/public/js/utils.js
+++ b/erpnext/public/js/utils.js
@@ -7,7 +7,7 @@
 		if(!company && cur_frm)
 			company = cur_frm.doc.company;
 		if(company)
-			return frappe.model.get_doc(":Company", company).default_currency || frappe.boot.sysdefaults.currency;
+			return frappe.get_doc(":Company", company).default_currency || frappe.boot.sysdefaults.currency;
 		else
 			return frappe.boot.sysdefaults.currency;
 	},
diff --git a/erpnext/selling/doctype/lead/lead.js b/erpnext/selling/doctype/lead/lead.js
index c942be1..570a5e0 100644
--- a/erpnext/selling/doctype/lead/lead.js
+++ b/erpnext/selling/doctype/lead/lead.js
@@ -41,7 +41,7 @@
 		}
 		
 		cur_frm.communication_view = new frappe.views.CommunicationList({
-			list: frappe.model.get("Communication", {"parenttype": "Lead", "parent":this.frm.doc.name}),
+			list: frappe.get_list("Communication", {"parenttype": "Lead", "parent":this.frm.doc.name}),
 			parent: this.frm.fields_dict.communication_html.wrapper,
 			doc: this.frm.doc,
 			recipients: this.frm.doc.email_id
diff --git a/erpnext/selling/doctype/opportunity/opportunity.js b/erpnext/selling/doctype/opportunity/opportunity.js
index 06cf4b1..1dc4c1e 100644
--- a/erpnext/selling/doctype/opportunity/opportunity.js
+++ b/erpnext/selling/doctype/opportunity/opportunity.js
@@ -30,7 +30,7 @@
 
 		if(!this.frm.doc.__islocal) {
 			cur_frm.communication_view = new frappe.views.CommunicationList({
-				list: frappe.model.get("Communication", {"opportunity": this.frm.doc.name}),
+				list: frappe.get_list("Communication", {"opportunity": this.frm.doc.name}),
 				parent: cur_frm.fields_dict.communication_html.wrapper,
 				doc: this.frm.doc,
 				recipients: this.frm.doc.contact_email
diff --git a/erpnext/selling/doctype/quotation/quotation.js b/erpnext/selling/doctype/quotation/quotation.js
index 28a588a..ff0894a 100644
--- a/erpnext/selling/doctype/quotation/quotation.js
+++ b/erpnext/selling/doctype/quotation/quotation.js
@@ -55,7 +55,7 @@
 
 		if (!doc.__islocal) {
 			cur_frm.communication_view = new frappe.views.CommunicationList({
-				list: frappe.model.get("Communication", {"parent": doc.name, "parenttype": "Quotation"}),
+				list: frappe.get_list("Communication", {"parent": doc.name, "parenttype": "Quotation"}),
 				parent: cur_frm.fields_dict.communication_html.wrapper,
 				doc: doc,
 				recipients: doc.contact_email
diff --git a/erpnext/selling/doctype/sales_order/sales_order.js b/erpnext/selling/doctype/sales_order/sales_order.js
index 727cca8..9d43065 100644
--- a/erpnext/selling/doctype/sales_order/sales_order.js
+++ b/erpnext/selling/doctype/sales_order/sales_order.js
@@ -86,7 +86,7 @@
 	},
 	
 	warehouse: function(doc, cdt, cdn) {
-		var item = frappe.model.get_doc(cdt, cdn);
+		var item = frappe.get_doc(cdt, cdn);
 		if(item.item_code && item.warehouse) {
 			return this.frm.call({
 				method: "erpnext.selling.utils.get_available_qty",
diff --git a/erpnext/selling/sales_common.js b/erpnext/selling/sales_common.js
index 6859567..ce2a798 100644
--- a/erpnext/selling/sales_common.js
+++ b/erpnext/selling/sales_common.js
@@ -70,7 +70,7 @@
 		
 		if(this.frm.fields_dict[this.fname].grid.get_field('batch_no')) {
 			this.frm.set_query("batch_no", this.fname, function(doc, cdt, cdn) {
-				var item = frappe.model.get_doc(cdt, cdn);
+				var item = frappe.get_doc(cdt, cdn);
 				if(!item.item_code) {
 					frappe.throw(frappe._("Please enter Item Code to get batch no"));
 				} else {
@@ -128,7 +128,7 @@
 	},
 	
 	price_list_rate: function(doc, cdt, cdn) {
-		var item = frappe.model.get_doc(cdt, cdn);
+		var item = frappe.get_doc(cdt, cdn);
 		frappe.model.round_floats_in(item, ["price_list_rate", "discount_percentage"]);
 		
 		item.rate = flt(item.price_list_rate * (1 - item.discount_percentage / 100.0),
@@ -138,7 +138,7 @@
 	},
 	
 	discount_percentage: function(doc, cdt, cdn) {
-		var item = frappe.model.get_doc(cdt, cdn);
+		var item = frappe.get_doc(cdt, cdn);
 		if(!item.price_list_rate) {
 			item.discount_percentage = 0.0;
 		} else {
@@ -147,7 +147,7 @@
 	},
 	
 	rate: function(doc, cdt, cdn) {
-		var item = frappe.model.get_doc(cdt, cdn);
+		var item = frappe.get_doc(cdt, cdn);
 		frappe.model.round_floats_in(item, ["rate", "price_list_rate"]);
 		
 		if(item.price_list_rate) {
@@ -188,7 +188,7 @@
 	},
 	
 	allocated_percentage: function(doc, cdt, cdn) {
-		var sales_person = frappe.model.get_doc(cdt, cdn);
+		var sales_person = frappe.get_doc(cdt, cdn);
 		
 		if(sales_person.allocated_percentage) {
 			sales_person.allocated_percentage = flt(sales_person.allocated_percentage,
@@ -203,7 +203,7 @@
 	},
 	
 	warehouse: function(doc, cdt, cdn) {
-		var item = frappe.model.get_doc(cdt, cdn);
+		var item = frappe.get_doc(cdt, cdn);
 		if(item.item_code && item.warehouse) {
 			return this.frm.call({
 				method: "erpnext.selling.utils.get_available_qty",
@@ -565,7 +565,7 @@
 // Help for Sales BOM items
 var set_sales_bom_help = function(doc) {
 	if(!cur_frm.fields_dict.packing_list) return;
-	if (getchildren('Packed Item', doc.name, 'packing_details').length) {
+	if ((doc.packing_details || []).length) {
 		$(cur_frm.fields_dict.packing_list.row.wrapper).toggle(true);
 		
 		if (inList(['Delivery Note', 'Sales Invoice'], doc.doctype)) {
diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.js b/erpnext/stock/doctype/delivery_note/delivery_note.js
index 3a9ef8d..f94a118 100644
--- a/erpnext/stock/doctype/delivery_note/delivery_note.js
+++ b/erpnext/stock/doctype/delivery_note/delivery_note.js
@@ -166,7 +166,7 @@
 
 	out ='';
 	
-	var cl = getchildren('Delivery Note Item',doc.name,'delivery_note_details');
+	var cl = doc.delivery_note_details || [];
 
 	// outer table	
 	var out='<div><table class="noborder" style="width:100%"><tr><td style="width: 50%"></td><td>';
@@ -204,7 +204,7 @@
 	cur_frm.cscript.expense_account = function(doc, cdt, cdn){
 		var d = locals[cdt][cdn];
 		if(d.expense_account) {
-			var cl = getchildren('Delivery Note Item', doc.name, cur_frm.cscript.fname, doc.doctype);
+			var cl = doc[cur_frm.cscript.fname] || [];
 			for(var i = 0; i < cl.length; i++){
 				if(!cl[i].expense_account) cl[i].expense_account = d.expense_account;
 			}
@@ -227,7 +227,7 @@
 	cur_frm.cscript.cost_center = function(doc, cdt, cdn){
 		var d = locals[cdt][cdn];
 		if(d.cost_center) {
-			var cl = getchildren('Delivery Note Item', doc.name, cur_frm.cscript.fname, doc.doctype);
+			var cl = doc[cur_frm.cscript.fname] || [];
 			for(var i = 0; i < cl.length; i++){
 				if(!cl[i].cost_center) cl[i].cost_center = d.cost_center;
 			}
diff --git a/erpnext/stock/doctype/packing_slip/packing_slip.js b/erpnext/stock/doctype/packing_slip/packing_slip.js
index f00fa77..ff1e1f0 100644
--- a/erpnext/stock/doctype/packing_slip/packing_slip.js
+++ b/erpnext/stock/doctype/packing_slip/packing_slip.js
@@ -59,7 +59,7 @@
 
 cur_frm.cscript.validate_calculate_item_details = function(doc) {
 	doc = locals[doc.doctype][doc.name];
-	var ps_detail = getchildren('Packing Slip Item', doc.name, 'item_details');
+	var ps_detail = doc.item_details || [];
 
 	cur_frm.cscript.validate_duplicate_items(doc, ps_detail);
 	cur_frm.cscript.calc_net_total_pkg(doc, ps_detail);
diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js
index f067d9c..88dff1a 100644
--- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js
+++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js
@@ -47,7 +47,7 @@
 	},
 	
 	received_qty: function(doc, cdt, cdn) {
-		var item = frappe.model.get_doc(cdt, cdn);
+		var item = frappe.get_doc(cdt, cdn);
 		frappe.model.round_floats_in(item, ["qty", "received_qty"]);
 
 		item.qty = (item.qty < item.received_qty) ? item.qty : item.received_qty;
@@ -55,7 +55,7 @@
 	},
 	
 	qty: function(doc, cdt, cdn) {
-		var item = frappe.model.get_doc(cdt, cdn);
+		var item = frappe.get_doc(cdt, cdn);
 		frappe.model.round_floats_in(item, ["qty", "received_qty"]);
 		
 		if(!(item.received_qty || item.rejected_qty) && item.qty) {
@@ -74,7 +74,7 @@
 	},
 	
 	rejected_qty: function(doc, cdt, cdn) {
-		var item = frappe.model.get_doc(cdt, cdn);
+		var item = frappe.get_doc(cdt, cdn);
 		frappe.model.round_floats_in(item, ["received_qty", "rejected_qty"]);
 		
 		if(item.rejected_qty > item.received_qty) {
diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.js b/erpnext/stock/doctype/stock_entry/stock_entry.js
index 535fcb7..6ee3922 100644
--- a/erpnext/stock/doctype/stock_entry/stock_entry.js
+++ b/erpnext/stock/doctype/stock_entry/stock_entry.js
@@ -105,9 +105,9 @@
 				},
 				callback: function(r) {
 					if (!r.exc) {
-						for(d in getchildren('Stock Entry Detail', me.frm.doc.name, 'mtn_details')) {
+						$.each(doc.mtn_details || [], function(i, d) {
 							if(!d.expense_account) d.expense_account = r.message;
-						}
+						});
 					}
 				}
 			});
@@ -225,7 +225,7 @@
 	},
 
 	mtn_details_add: function(doc, cdt, cdn) {
-		var row = frappe.model.get_doc(cdt, cdn);
+		var row = frappe.get_doc(cdt, cdn);
 		this.frm.script_manager.copy_from_first_row("mtn_details", row, 
 			["expense_account", "cost_center"]);
 		
@@ -388,7 +388,7 @@
 }
 
 cur_frm.cscript.validate_items = function(doc) {
-	cl = getchildren('Stock Entry Detail', doc.name, 'mtn_details');
+	cl = doc.mtn_details || [];
 	if (!cl.length) {
 		msgprint(frappe._("Item table can not be blank"));
 		validated = false;
diff --git a/erpnext/support/doctype/support_ticket/support_ticket.js b/erpnext/support/doctype/support_ticket/support_ticket.js
index 034fa86..c186535 100644
--- a/erpnext/support/doctype/support_ticket/support_ticket.js
+++ b/erpnext/support/doctype/support_ticket/support_ticket.js
@@ -34,7 +34,7 @@
 	make_listing: function(doc) {
 		var wrapper = cur_frm.fields_dict['thread_html'].wrapper;
 		
-		var comm_list = frappe.model.get("Communication", {"parent": doc.name, "parenttype":"Support Ticket"})
+		var comm_list = frappe.get_list("Communication", {"parent": doc.name, "parenttype":"Support Ticket"})
 		
 		if(!comm_list.length) {
 			comm_list.push({
diff --git a/erpnext/utilities/doctype/contact/contact.js b/erpnext/utilities/doctype/contact/contact.js
index eb7681f..f2a2fdc 100644
--- a/erpnext/utilities/doctype/contact/contact.js
+++ b/erpnext/utilities/doctype/contact/contact.js
@@ -5,7 +5,7 @@
 
 cur_frm.cscript.refresh = function(doc) {
 	cur_frm.communication_view = new frappe.views.CommunicationList({
-		list: frappe.model.get("Communication", {"parent": doc.name, "parenttype": "Contact"}),
+		list: frappe.get_list("Communication", {"parent": doc.name, "parenttype": "Contact"}),
 		parent: cur_frm.fields_dict.communication_html.wrapper,
 		doc: doc,
 		recipients: doc.email_id
