refactored javascript models
diff --git a/accounts/doctype/budget_distribution/budget_distribution.js b/accounts/doctype/budget_distribution/budget_distribution.js
index c8bfe11..5abd525 100644
--- a/accounts/doctype/budget_distribution/budget_distribution.js
+++ b/accounts/doctype/budget_distribution/budget_distribution.js
@@ -21,7 +21,7 @@
     }
     
     $c('runserverobj',args={'method' : 'get_months', 'docs' : 
-		compress_doclist(make_doclist(doc.doctype, doc.name))},callback1);
+		wn.model.compress(make_doclist(doc.doctype, doc.name))},callback1);
   }
 }
 
diff --git a/accounts/doctype/journal_voucher/journal_voucher.js b/accounts/doctype/journal_voucher/journal_voucher.js
index 784a134..8c60838 100644
--- a/accounts/doctype/journal_voucher/journal_voucher.js
+++ b/accounts/doctype/journal_voucher/journal_voucher.js
@@ -33,14 +33,14 @@
 	if(!cur_frm.doc.__islocal || !cur_frm.doc.company) { return; }
 
 	doc = locals[doc.doctype][doc.name];
-	var fields_to_refresh = LocalDB.set_default_values(doc);
+	var fields_to_refresh = wn.model.set_default_values(doc);
 	if(fields_to_refresh) { refresh_many(fields_to_refresh); }
 
 	fields_to_refresh = null;
 	var children = getchildren('Journal Voucher Detail', doc.name, 'entries');
 	if(!children) { return; }
 	for(var i=0; i<children.length; i++) {
-		LocalDB.set_default_values(children[i]);
+		wn.model.set_default_values(children[i]);
 	}
 	refresh_field('entries');
 }
@@ -193,7 +193,7 @@
 		if(!children || children.length==0) {
 			$c('accounts.get_default_bank_account', {company: doc.company }, function(r, rt) {
 				if(!r.exc) {
-					var jvd = LocalDB.add_child(doc, 'Journal Voucher Detail', 'entries');
+					var jvd = wn.model.add_child(doc, 'Journal Voucher Detail', 'entries');
 					jvd.account = cstr(r.message);
 					refresh_field('entries');
 				}
diff --git a/accounts/doctype/purchase_invoice/purchase_invoice.js b/accounts/doctype/purchase_invoice/purchase_invoice.js
index 25b2601..1ab1bce 100644
--- a/accounts/doctype/purchase_invoice/purchase_invoice.js
+++ b/accounts/doctype/purchase_invoice/purchase_invoice.js
@@ -266,7 +266,7 @@
 }
 
 cur_frm.cscript.make_jv = function(doc, dt, dn, bank_account) {
-	var jv = LocalDB.create('Journal Voucher');
+	var jv = wn.model.make_new_doc_and_get_name('Journal Voucher');
 	jv = locals['Journal Voucher'][jv];
 	jv.voucher_type = 'Bank Voucher';
 	jv.remark = repl('Payment against voucher %(vn)s for %(rem)s', {vn:doc.name, rem:doc.remarks});
@@ -276,13 +276,13 @@
 	jv.company = doc.company;
 	
 	// debit to creditor
-	var d1 = LocalDB.add_child(jv, 'Journal Voucher Detail', 'entries');
+	var d1 = wn.model.add_child(jv, 'Journal Voucher Detail', 'entries');
 	d1.account = doc.credit_to;
 	d1.debit = doc.outstanding_amount;
 	d1.against_voucher = doc.name;
 	
 	// credit to bank
-	var d1 = LocalDB.add_child(jv, 'Journal Voucher Detail', 'entries');
+	var d1 = wn.model.add_child(jv, 'Journal Voucher Detail', 'entries');
 	d1.account = bank_account;
 	d1.credit = doc.outstanding_amount;
 	
diff --git a/accounts/doctype/sales_invoice/sales_invoice.js b/accounts/doctype/sales_invoice/sales_invoice.js
index a15d1d0..7c9b477 100644
--- a/accounts/doctype/sales_invoice/sales_invoice.js
+++ b/accounts/doctype/sales_invoice/sales_invoice.js
@@ -29,7 +29,7 @@
 // On Load
 // -------
 cur_frm.cscript.onload = function(doc,dt,dn) {
-	if(!doc.customer && doc.debit_to) Meta.get_field(dt, 'debit_to', dn).print_hide = 0;
+	if(!doc.customer && doc.debit_to) wn.meta.get_docfield(dt, 'debit_to', dn).print_hide = 0;
 	if (doc.__islocal) {
 		//if(!doc.voucher_date) set_multiple(dt,dn,{voucher_date:get_today()});
 		if(!doc.due_date) set_multiple(dt,dn,{due_date:get_today()});
@@ -322,9 +322,9 @@
 cur_frm.cscript['Make Delivery Note'] = function() {
 
 	var doc = cur_frm.doc
-	n = createLocal('Delivery Note');
+	n = wn.model.make_new_doc_and_get_name('Delivery Note');
 	$c('dt_map', args={
-		'docs':compress_doclist([locals['Delivery Note'][n]]),
+		'docs':wn.model.compress([locals['Delivery Note'][n]]),
 		'from_doctype':doc.doctype,
 		'to_doctype':'Delivery Note',
 		'from_docname':doc.name,
@@ -484,7 +484,7 @@
 // Make Journal Voucher
 // --------------------
 cur_frm.cscript.make_jv = function(doc, dt, dn, bank_account) {
-	var jv = LocalDB.create('Journal Voucher');
+	var jv = wn.model.make_new_doc_and_get_name('Journal Voucher');
 	jv = locals['Journal Voucher'][jv];
 	jv.voucher_type = 'Bank Voucher';
 
@@ -493,14 +493,14 @@
 	jv.fiscal_year = doc.fiscal_year;
 
 	// debit to creditor
-	var d1 = LocalDB.add_child(jv, 'Journal Voucher Detail', 'entries');
+	var d1 = wn.model.add_child(jv, 'Journal Voucher Detail', 'entries');
 	d1.account = doc.debit_to;
 	d1.credit = doc.outstanding_amount;
 	d1.against_invoice = doc.name;
 
 
 	// credit to bank
-	var d1 = LocalDB.add_child(jv, 'Journal Voucher Detail', 'entries');
+	var d1 = wn.model.add_child(jv, 'Journal Voucher Detail', 'entries');
 	d1.account = bank_account;
 	d1.debit = doc.outstanding_amount;
 
diff --git a/buying/doctype/purchase_common/purchase_common.js b/buying/doctype/purchase_common/purchase_common.js
index 4905006..f4cfc29 100644
--- a/buying/doctype/purchase_common/purchase_common.js
+++ b/buying/doctype/purchase_common/purchase_common.js
@@ -51,14 +51,14 @@
 	if(!cur_frm.doc.__islocal) { return; }
 
 	doc = locals[doc.doctype][doc.name];
-	var fields_to_refresh = LocalDB.set_default_values(doc);
+	var fields_to_refresh = wn.model.set_default_values(doc);
 	if(fields_to_refresh) { refresh_many(fields_to_refresh); }
 
 	fields_to_refresh = null;
 	var children = getchildren(cur_frm.cscript.tname, doc.name, cur_frm.cscript.fname);
 	if(!children) { return; }
 	for(var i=0; i<children.length; i++) {
-		LocalDB.set_default_values(children[i]);
+		wn.model.set_default_values(children[i]);
 	}
 	refresh_field(cur_frm.cscript.fname);
 	cur_frm.cscript.load_taxes(doc, dt, dn, callback);
diff --git a/buying/doctype/purchase_order/purchase_order.js b/buying/doctype/purchase_order/purchase_order.js
index b3f4dd7..b5a7405 100644
--- a/buying/doctype/purchase_order/purchase_order.js
+++ b/buying/doctype/purchase_order/purchase_order.js
@@ -122,9 +122,9 @@
 
 //========================= Make Purchase Receipt =======================================================
 cur_frm.cscript['Make Purchase Receipt'] = function() {
-	n = createLocal('Purchase Receipt');
+	n = wn.model.make_new_doc_and_get_name('Purchase Receipt');
 	$c('dt_map', args={
-		'docs':compress_doclist([locals['Purchase Receipt'][n]]),
+		'docs':wn.model.compress([locals['Purchase Receipt'][n]]),
 		'from_doctype': cur_frm.doc.doctype,
 		'to_doctype':'Purchase Receipt',
 		'from_docname':cur_frm.doc.name,
@@ -137,9 +137,9 @@
 
 //========================== Make Purchase Invoice =====================================================
 cur_frm.cscript['Make Purchase Invoice'] = function() {
-	n = createLocal('Purchase Invoice');
+	n = wn.model.make_new_doc_and_get_name('Purchase Invoice');
 	$c('dt_map', {
-		'docs':compress_doclist([locals['Purchase Invoice'][n]]),
+		'docs':wn.model.compress([locals['Purchase Invoice'][n]]),
 		'from_doctype':cur_frm.doc.doctype,
 		'to_doctype':'Purchase Invoice',
 		'from_docname': cur_frm.doc.name,
@@ -158,7 +158,7 @@
 	var check = confirm("Do you really want to STOP " + doc.name);
 
 	if (check) {
-		$c('runserverobj', args={'method':'update_status', 'arg': 'Stopped', 'docs': compress_doclist(make_doclist(doc.doctype, doc.name))}, function(r,rt) {
+		$c('runserverobj', args={'method':'update_status', 'arg': 'Stopped', 'docs': wn.model.compress(make_doclist(doc.doctype, doc.name))}, function(r,rt) {
 			cur_frm.refresh();
 		});	
 	}
@@ -171,7 +171,7 @@
 	var check = confirm("Do you really want to UNSTOP " + doc.name);
 
 	if (check) {
-		$c('runserverobj', args={'method':'update_status', 'arg': 'Submitted', 'docs': compress_doclist(make_doclist(doc.doctype, doc.name))}, function(r,rt) {
+		$c('runserverobj', args={'method':'update_status', 'arg': 'Submitted', 'docs': wn.model.compress(make_doclist(doc.doctype, doc.name))}, function(r,rt) {
 			cur_frm.refresh();
 		});	
 	}
diff --git a/buying/doctype/purchase_request/purchase_request.js b/buying/doctype/purchase_request/purchase_request.js
index 7a397b5..510762a 100644
--- a/buying/doctype/purchase_request/purchase_request.js
+++ b/buying/doctype/purchase_request/purchase_request.js
@@ -86,9 +86,9 @@
 // Make Purchase Order
 cur_frm.cscript['Make Purchase Order'] = function() {
 	var doc = cur_frm.doc;
-	n = createLocal('Purchase Order');
+	n = wn.model.make_new_doc_and_get_name('Purchase Order');
 	$c('dt_map', args={
-		'docs':compress_doclist([locals['Purchase Order'][n]]),
+		'docs':wn.model.compress([locals['Purchase Order'][n]]),
 		'from_doctype':doc.doctype,
 		'to_doctype':'Purchase Order',
 		'from_docname':doc.name,
@@ -106,7 +106,7 @@
 	var check = confirm("Do you really want to STOP this Purchase Request?");
 
 	if (check) {
-		$c('runserverobj', args={'method':'update_status', 'arg': 'Stopped', 'docs': compress_doclist(make_doclist(doc.doctype, doc.name))}, function(r,rt) {
+		$c('runserverobj', args={'method':'update_status', 'arg': 'Stopped', 'docs': wn.model.compress(make_doclist(doc.doctype, doc.name))}, function(r,rt) {
 			cur_frm.refresh();
 		});
 	}
@@ -119,7 +119,7 @@
 	var check = confirm("Do you really want to UNSTOP this Purchase Request?");
 	
 	if (check) {
-		$c('runserverobj', args={'method':'update_status', 'arg': 'Submitted','docs': compress_doclist(make_doclist(doc.doctype, doc.name))}, function(r,rt) {
+		$c('runserverobj', args={'method':'update_status', 'arg': 'Submitted','docs': wn.model.compress(make_doclist(doc.doctype, doc.name))}, function(r,rt) {
 			cur_frm.refresh();
 			
 		});
@@ -127,9 +127,9 @@
 }
 
 cur_frm.cscript.make_supplier_quotation = function() {
-	var new_sq_name = createLocal("Supplier Quotation");
+	var new_sq_name = wn.model.make_new_doc_and_get_name("Supplier Quotation");
 	$c("dt_map", {
-		"docs": compress_doclist([locals['Supplier Quotation'][new_sq_name]]),
+		"docs": wn.model.compress([locals['Supplier Quotation'][new_sq_name]]),
 		"from_doctype": cur_frm.doc.doctype,
 		"to_doctype": "Supplier Quotation",
 		"from_docname": cur_frm.doc.name,
diff --git a/buying/doctype/supplier/supplier.js b/buying/doctype/supplier/supplier.js
index 1b7f369..e527dbe 100644
--- a/buying/doctype/supplier/supplier.js
+++ b/buying/doctype/supplier/supplier.js
@@ -79,7 +79,7 @@
 			page_length: 2,
 			new_doctype: "Contact",
 			custom_new_doc: function(doctype) {
-				var contact = LocalDB.create('Contact');
+				var contact = wn.model.make_new_doc_and_get_name('Contact');
 				contact = locals['Contact'][contact];
 				contact.supplier = cur_frm.doc.name;
 				contact.supplier_name = cur_frm.doc.supplier_name;
diff --git a/buying/doctype/supplier_quotation/supplier_quotation.js b/buying/doctype/supplier_quotation/supplier_quotation.js
index 99ee20c..37bb625 100644
--- a/buying/doctype/supplier_quotation/supplier_quotation.js
+++ b/buying/doctype/supplier_quotation/supplier_quotation.js
@@ -49,9 +49,9 @@
 }
 
 cur_frm.cscript.make_purchase_order = function() {
-	var new_po_name = createLocal("Purchase Order");
+	var new_po_name = wn.model.make_new_doc_and_get_name("Purchase Order");
 	$c("dt_map", {
-		"docs": compress_doclist([locals['Purchase Order'][new_po_name]]),
+		"docs": wn.model.compress([locals['Purchase Order'][new_po_name]]),
 		"from_doctype": cur_frm.doc.doctype,
 		"to_doctype": "Purchase Order",
 		"from_docname": cur_frm.doc.name,
diff --git a/home/page/activity/activity.js b/home/page/activity/activity.js
index 90977be..6746919 100644
--- a/home/page/activity/activity.js
+++ b/home/page/activity/activity.js
@@ -36,7 +36,7 @@
 		
 		// feedtype
 		if(!data.feed_type) {
-			data.feed_type = get_doctype_label(data.doc_type);
+			data.feed_type = wn._(data.doc_type);
 			data.add_class = "label-info";
 			data.onclick = repl('onclick="window.location.href=\'#!List/%(feed_type)s\';"', data)
 		}
diff --git a/hr/doctype/employee/employee.js b/hr/doctype/employee/employee.js
index eab90cb..07cb9c1 100644
--- a/hr/doctype/employee/employee.js
+++ b/hr/doctype/employee/employee.js
@@ -53,7 +53,7 @@
 }
 
 cur_frm.cscript.make_salary_structure = function(doc,dt,dn,det){
-	var st = LocalDB.create('Salary Structure');
+	var st = wn.model.make_new_doc_and_get_name('Salary Structure');
 	st = locals['Salary Structure'][st];
 	st.employee = doc.name;
 	st.employee_name = doc.employee_name;
diff --git a/hr/doctype/leave_control_panel/leave_control_panel.js b/hr/doctype/leave_control_panel/leave_control_panel.js
index 67fe9b5..f3a635c 100644
--- a/hr/doctype/leave_control_panel/leave_control_panel.js
+++ b/hr/doctype/leave_control_panel/leave_control_panel.js
@@ -24,7 +24,7 @@
 // Validation For To Date
 // ================================================================================================
 cur_frm.cscript.to_date = function(doc, cdt, cdn) {
-  $c('runserverobj', args={'method':'to_date_validation','docs':compress_doclist(make_doclist(doc.doctype, doc.name))},
+  $c('runserverobj', args={'method':'to_date_validation','docs':wn.model.compress(make_doclist(doc.doctype, doc.name))},
     function(r, rt) {
     var doc = locals[cdt][cdn];
     if (r.message) {
diff --git a/hr/doctype/salary_manager/salary_manager.js b/hr/doctype/salary_manager/salary_manager.js
index afe7e70..d6dcc5c 100644
--- a/hr/doctype/salary_manager/salary_manager.js
+++ b/hr/doctype/salary_manager/salary_manager.js
@@ -28,7 +28,7 @@
 		if (r.message)
 			display_activity_log(r.message);
 	}
-	$c('runserverobj', args={'method':'create_sal_slip','docs':compress_doclist(make_doclist (cdt, cdn))},callback);
+	$c('runserverobj', args={'method':'create_sal_slip','docs':wn.model.compress(make_doclist (cdt, cdn))},callback);
 }
 
 
@@ -42,7 +42,7 @@
 			if (r.message)
 				display_activity_log(r.message);
 		}
-		$c('runserverobj', args={'method':'submit_salary_slip','docs':compress_doclist(make_doclist (cdt, cdn))},callback);
+		$c('runserverobj', args={'method':'submit_salary_slip','docs':wn.model.compress(make_doclist (cdt, cdn))},callback);
 	}
 }
 
@@ -59,7 +59,7 @@
 //-----------------------
 cur_frm.cscript.make_jv = function(doc, dt, dn) {
 	var call_back = function(r,rt){
-		var jv = LocalDB.create('Journal Voucher');
+		var jv = wn.model.make_new_doc_and_get_name('Journal Voucher');
 		jv = locals['Journal Voucher'][jv];
 		jv.voucher_type = 'Bank Voucher';
 		jv.user_remark = 'Payment of salary for the month: ' + doc.month + 'and fiscal year: ' + doc.fiscal_year;
@@ -68,12 +68,12 @@
 		jv.posting_date = dateutil.obj_to_str(new Date());
 
 		// credit to bank
-		var d1 = LocalDB.add_child(jv, 'Journal Voucher Detail', 'entries');
+		var d1 = wn.model.add_child(jv, 'Journal Voucher Detail', 'entries');
 		d1.account = r.message['default_bank_account'];
 		d1.credit = r.message['amount']
 
 		// debit to salary account
-		var d2 = LocalDB.add_child(jv, 'Journal Voucher Detail', 'entries');
+		var d2 = wn.model.add_child(jv, 'Journal Voucher Detail', 'entries');
 		d2.account = r.message['default_salary_account'];
 		d2.debit = r.message['amount']
 
diff --git a/hr/doctype/salary_structure/salary_structure.js b/hr/doctype/salary_structure/salary_structure.js
index 3692fe8..873ba17 100644
--- a/hr/doctype/salary_structure/salary_structure.js
+++ b/hr/doctype/salary_structure/salary_structure.js
@@ -42,9 +42,9 @@
   var doc = cur_frm.doc;  
   var callback = function(r,rt){
     ret = r.message;
-    n = createLocal("Salary Slip");
+    n = wn.model.make_new_doc_and_get_name("Salary Slip");
     $c('dt_map', args={
-      'docs':compress_doclist([locals["Salary Slip"][n]]),
+      'docs':wn.model.compress([locals["Salary Slip"][n]]),
       'from_doctype':'Salary Structure',
       'to_doctype':'Salary Slip',
       'from_docname':doc.name,
diff --git a/production/doctype/production_order/production_order.js b/production/doctype/production_order/production_order.js
index 7949757..4a1600d 100644
--- a/production/doctype/production_order/production_order.js
+++ b/production/doctype/production_order/production_order.js
@@ -70,7 +70,7 @@
 }
 
 cur_frm.cscript.make_se = function(doc, process) {
-  var se = LocalDB.create('Stock Entry');
+  var se = wn.model.make_new_doc_and_get_name('Stock Entry');
   se = locals['Stock Entry'][se];
   se.purpose = 'Production Order';
   se.process = process;
diff --git a/public/js/gantt_task.js b/public/js/gantt_task.js
index 066ad34..6b679cf 100644
--- a/public/js/gantt_task.js
+++ b/public/js/gantt_task.js
@@ -79,7 +79,7 @@
 			$('<button class="btn"><i class="icon icon-plus"></i>\
 				Create a new Task</button>').click(function() {
 				wn.model.with_doctype('Task', function() {
-					var new_name = LocalDB.create('Task');
+					var new_name = wn.model.make_new_doc_and_get_name('Task');
 					if(project)
 						locals.Task[new_name].project = project;
 					wn.set_route('Form', 'Task', new_name);
diff --git a/public/js/modules.js b/public/js/modules.js
index 9fa7f30..7dc8038 100644
--- a/public/js/modules.js
+++ b/public/js/modules.js
@@ -111,7 +111,7 @@
 	$(wrapper).find('[href*="List/"]').each(function() {
 		var href = $(this).attr('href');
 		var dt = href.split('/')[1];
-		if(wn.boot.profile.all_read.indexOf(get_label_doctype(dt))==-1) {
+		if(wn.boot.profile.all_read.indexOf(dt)==-1) {
 			replace_link(this);
 		}
 	});
@@ -128,7 +128,7 @@
 	$(wrapper).find('[href*="Form/"]').each(function() {
 		var href = $(this).attr('href');
 		var dt = href.split('/')[1];
-		if(wn.boot.profile.all_read.indexOf(get_label_doctype(dt))==-1) {
+		if(wn.boot.profile.all_read.indexOf(dt)==-1) {
 			replace_link(this);
 		}
 	});
diff --git a/selling/doctype/customer/customer.js b/selling/doctype/customer/customer.js
index d20b0c9..845f543 100644
--- a/selling/doctype/customer/customer.js
+++ b/selling/doctype/customer/customer.js
@@ -35,7 +35,7 @@
 	doc = locals[doc.doctype][doc.name];
 	if(!(doc.__islocal && doc.lead_name)) { return; }
 
-	var fields_to_refresh = LocalDB.set_default_values(doc);
+	var fields_to_refresh = wn.model.set_default_values(doc);
 	if(fields_to_refresh) { refresh_many(fields_to_refresh); }
 }
 
@@ -89,7 +89,7 @@
 			parent: cur_frm.fields_dict['contact_html'].wrapper,
 			page_length: 2,
 			custom_new_doc: function(doctype) {
-				var contact = LocalDB.create('Contact');
+				var contact = wn.model.make_new_doc_and_get_name('Contact');
 				contact = locals['Contact'][contact];
 				contact.customer = cur_frm.doc.name;
 				contact.customer_name = cur_frm.doc.customer_name;
diff --git a/selling/doctype/lead/lead.js b/selling/doctype/lead/lead.js
index e4b3a7d..9dd64de 100644
--- a/selling/doctype/lead/lead.js
+++ b/selling/doctype/lead/lead.js
@@ -83,15 +83,15 @@
 
 cur_frm.cscript['Create Customer'] = function(){
 	var doc = cur_frm.doc;
-	$c('runserverobj',args={ 'method':'check_status', 'docs':compress_doclist(make_doclist(doc.doctype, doc.name))},
+	$c('runserverobj',args={ 'method':'check_status', 'docs':wn.model.compress(make_doclist(doc.doctype, doc.name))},
 		function(r,rt){
 			if(r.message == 'Converted'){
 				msgprint("This lead is already converted to customer");
 			}
 			else{
-				n = createLocal("Customer");
+				n = wn.model.make_new_doc_and_get_name("Customer");
 				$c('dt_map', args={
-					'docs':compress_doclist([locals["Customer"][n]]),
+					'docs':wn.model.compress([locals["Customer"][n]]),
 					'from_doctype':'Lead',
 					'to_doctype':'Customer',
 					'from_docname':doc.name,
@@ -110,15 +110,15 @@
 // ===============================================================
 cur_frm.cscript['Create Opportunity'] = function(){
 	var doc = cur_frm.doc;
-	$c('runserverobj',args={ 'method':'check_status', 'docs':compress_doclist(make_doclist(doc.doctype, doc.name))},
+	$c('runserverobj',args={ 'method':'check_status', 'docs':wn.model.compress(make_doclist(doc.doctype, doc.name))},
 		function(r,rt){
 			if(r.message == 'Converted'){
 				msgprint("This lead is now converted to customer. Please create enquiry on behalf of customer");
 			}
 			else{
-				n = createLocal("Opportunity");
+				n = wn.model.make_new_doc_and_get_name("Opportunity");
 				$c('dt_map', args={
-					'docs':compress_doclist([locals["Opportunity"][n]]),
+					'docs':wn.model.compress([locals["Opportunity"][n]]),
 					'from_doctype':'Lead',
 					'to_doctype':'Opportunity',
 					'from_docname':doc.name,
diff --git a/selling/doctype/opportunity/opportunity.js b/selling/doctype/opportunity/opportunity.js
index 2b530ff..7092483 100644
--- a/selling/doctype/opportunity/opportunity.js
+++ b/selling/doctype/opportunity/opportunity.js
@@ -156,9 +156,9 @@
 
 // Create New Quotation
 cur_frm.cscript['Create Quotation'] = function(){
-	n = createLocal("Quotation");
+	n = wn.model.make_new_doc_and_get_name("Quotation");
 	$c('dt_map', args={
-		'docs':compress_doclist([locals["Quotation"][n]]),
+		'docs':wn.model.compress([locals["Quotation"][n]]),
 		'from_doctype':'Opportunity',
 		'to_doctype':'Quotation',
 		'from_docname':cur_frm.docname,
diff --git a/selling/doctype/quotation/quotation.js b/selling/doctype/quotation/quotation.js
index 7199132..40e1518 100644
--- a/selling/doctype/quotation/quotation.js
+++ b/selling/doctype/quotation/quotation.js
@@ -180,9 +180,9 @@
 	var doc = cur_frm.doc;
 
 	if (doc.docstatus == 1) {
-		var n = createLocal("Sales Order");
+		var n = wn.model.make_new_doc_and_get_name("Sales Order");
 		$c('dt_map', args={
-			'docs':compress_doclist([locals["Sales Order"][n]]),
+			'docs':wn.model.compress([locals["Sales Order"][n]]),
 			'from_doctype':'Quotation',
 			'to_doctype':'Sales Order',
 			'from_docname':doc.name,
diff --git a/selling/doctype/sales_common/sales_common.js b/selling/doctype/sales_common/sales_common.js
index c5eed98..de56a6c 100644
--- a/selling/doctype/sales_common/sales_common.js
+++ b/selling/doctype/sales_common/sales_common.js
@@ -46,14 +46,14 @@
 	if(!cur_frm.doc.__islocal) { return; }
 
 	doc = locals[doc.doctype][doc.name];
-	var fields_to_refresh = LocalDB.set_default_values(doc);
+	var fields_to_refresh = wn.model.set_default_values(doc);
 	if(fields_to_refresh) { refresh_many(fields_to_refresh); }
 
 	fields_to_refresh = null;
 	var children = getchildren(cur_frm.cscript.tname, doc.name, cur_frm.cscript.fname);
 	if(!children) { return; }
 	for(var i=0; i<children.length; i++) {
-		LocalDB.set_default_values(children[i]);
+		wn.model.set_default_values(children[i]);
 	}
 	refresh_field(cur_frm.cscript.fname);
 	cur_frm.cscript.load_taxes(doc, dt, dn, callback);
diff --git a/selling/doctype/sales_order/sales_order.js b/selling/doctype/sales_order/sales_order.js
index 8950a55..f232a37 100644
--- a/selling/doctype/sales_order/sales_order.js
+++ b/selling/doctype/sales_order/sales_order.js
@@ -77,7 +77,7 @@
 
 			// indent
 			if(!doc.order_type || (doc.order_type == 'Sales'))
-				cur_frm.add_custom_button('Make ' + get_doctype_label('Purchase Request'), cur_frm.cscript['Make Purchase Request']);
+				cur_frm.add_custom_button('Make ' + wn._('Purchase Request'), cur_frm.cscript['Make Purchase Request']);
 			
 			// sales invoice
 			if(flt(doc.per_billed, 2) < 100)
@@ -163,7 +163,7 @@
 
 //================ create new contact ============================================================================
 cur_frm.cscript.new_contact = function(){
-	tn = createLocal('Contact');
+	tn = wn.model.make_new_doc_and_get_name('Contact');
 	locals['Contact'][tn].is_customer = 1;
 	if(doc.customer) locals['Contact'][tn].customer = doc.customer;
 	loaddoc('Contact', tn);
@@ -222,9 +222,9 @@
 		$c_obj(make_doclist(doc.doctype, doc.name),'check_maintenance_schedule','',
 			function(r,rt){
 				if(r.message == 'No'){
-					n = createLocal("Maintenance Schedule");
+					n = wn.model.make_new_doc_and_get_name("Maintenance Schedule");
 					$c('dt_map', args={
-									'docs':compress_doclist([locals["Maintenance Schedule"][n]]),
+									'docs':wn.model.compress([locals["Maintenance Schedule"][n]]),
 									'from_doctype':'Sales Order',
 									'to_doctype':'Maintenance Schedule',
 									'from_docname':doc.name,
@@ -251,9 +251,9 @@
 		$c_obj(make_doclist(doc.doctype, doc.name),'check_maintenance_visit','',
 			function(r,rt){
 				if(r.message == 'No'){
-					n = createLocal("Maintenance Visit");
+					n = wn.model.make_new_doc_and_get_name("Maintenance Visit");
 					$c('dt_map', args={
-									'docs':compress_doclist([locals["Maintenance Visit"][n]]),
+									'docs':wn.model.compress([locals["Maintenance Visit"][n]]),
 									'from_doctype':'Sales Order',
 									'to_doctype':'Maintenance Visit',
 									'from_docname':doc.name,
@@ -277,9 +277,9 @@
 cur_frm.cscript['Make Purchase Request'] = function() {
 	var doc = cur_frm.doc;
 	if (doc.docstatus == 1) { 
-	n = createLocal("Purchase Request");
+	n = wn.model.make_new_doc_and_get_name("Purchase Request");
 	$c('dt_map', args={
-					'docs':compress_doclist([locals["Purchase Request"][n]]),
+					'docs':wn.model.compress([locals["Purchase Request"][n]]),
 					'from_doctype':'Sales Order',
 					'to_doctype':'Purchase Request',
 					'from_docname':doc.name,
@@ -298,9 +298,9 @@
 cur_frm.cscript['Make Delivery Note'] = function() {
 	var doc = cur_frm.doc;
 	if (doc.docstatus == 1) { 
-	n = createLocal("Delivery Note");
+	n = wn.model.make_new_doc_and_get_name("Delivery Note");
 	$c('dt_map', args={
-					'docs':compress_doclist([locals["Delivery Note"][n]]),
+					'docs':wn.model.compress([locals["Delivery Note"][n]]),
 					'from_doctype':'Sales Order',
 					'to_doctype':'Delivery Note',
 					'from_docname':doc.name,
@@ -319,9 +319,9 @@
 cur_frm.cscript['Make Sales Invoice'] = function() {
 	var doc = cur_frm.doc;
 
-	n = createLocal('Sales Invoice');
+	n = wn.model.make_new_doc_and_get_name('Sales Invoice');
 	$c('dt_map', args={
-		'docs':compress_doclist([locals['Sales Invoice'][n]]),
+		'docs':wn.model.compress([locals['Sales Invoice'][n]]),
 		'from_doctype':doc.doctype,
 		'to_doctype':'Sales Invoice',
 		'from_docname':doc.name,
@@ -341,7 +341,7 @@
 	var check = confirm("Are you sure you want to STOP " + doc.name);
 
 	if (check) {
-		$c('runserverobj', args={'method':'stop_sales_order', 'docs': compress_doclist(make_doclist(doc.doctype, doc.name))}, function(r,rt) {
+		$c('runserverobj', args={'method':'stop_sales_order', 'docs': wn.model.compress(make_doclist(doc.doctype, doc.name))}, function(r,rt) {
 			cur_frm.refresh();
 		});
 	}
@@ -355,7 +355,7 @@
 	var check = confirm("Are you sure you want to UNSTOP " + doc.name);
 
 	if (check) {
-		$c('runserverobj', args={'method':'unstop_sales_order', 'docs': compress_doclist(make_doclist(doc.doctype, doc.name))}, function(r,rt) {
+		$c('runserverobj', args={'method':'unstop_sales_order', 'docs': wn.model.compress(make_doclist(doc.doctype, doc.name))}, function(r,rt) {
 			cur_frm.refresh();
 		});
 	}
diff --git a/setup/doctype/contact_control/contact_control.js b/setup/doctype/contact_control/contact_control.js
index faadc6a..fe3c041 100755
--- a/setup/doctype/contact_control/contact_control.js
+++ b/setup/doctype/contact_control/contact_control.js
@@ -55,7 +55,7 @@
 // get sates on country trigger
 // -----------------------------
 cur_frm.cscript.get_states=function(doc,dt,dn){
-   $c('runserverobj', args={'method':'check_state', 'docs':compress_doclist(make_doclist(doc.doctype, doc.name))},
+   $c('runserverobj', args={'method':'check_state', 'docs':wn.model.compress(make_doclist(doc.doctype, doc.name))},
     function(r,rt){
       if(r.message) {
         set_field_options('state', r.message);
diff --git a/setup/doctype/sales_partner/sales_partner.js b/setup/doctype/sales_partner/sales_partner.js
index f5c084d..a0f138c 100644
--- a/setup/doctype/sales_partner/sales_partner.js
+++ b/setup/doctype/sales_partner/sales_partner.js
@@ -77,7 +77,7 @@
 			page_length: 2,
 			new_doctype: "Contact",
 			custom_new_doc: function(doctype) {
-				var contact = LocalDB.create('Contact');
+				var contact = wn.model.make_new_doc_and_get_name('Contact');
 				contact = locals['Contact'][contact];
 				contact.sales_partner = cur_frm.doc.name;
 				wn.set_route("Form", "Contact", contact.name);
diff --git a/setup/doctype/workflow_rule/workflow_rule.js b/setup/doctype/workflow_rule/workflow_rule.js
index 9fb2013..a506101 100644
--- a/setup/doctype/workflow_rule/workflow_rule.js
+++ b/setup/doctype/workflow_rule/workflow_rule.js
@@ -32,7 +32,7 @@
   var mydoc = doc
   
   var call_back_action = function(mydoc){
-    $c('runserverobj', args={'method':'field_label_list', 'docs':compress_doclist (make_doclist (mydoc.doctype,mydoc.name))},
+    $c('runserverobj', args={'method':'field_label_list', 'docs':wn.model.compress (make_doclist (mydoc.doctype,mydoc.name))},
     function(r, rt) {
       var doc = locals[mydoc.doctype][mydoc.name];
       cur_frm.fields_dict.workflow_action_details.grid.get_field("action_field").df.options = r.message;
@@ -41,7 +41,7 @@
   }
   
   var call_back_rule = function(mydoc){
-    $c('runserverobj', args={'method':'compare_field', 'docs':compress_doclist (make_doclist (mydoc.doctype,mydoc.name))},
+    $c('runserverobj', args={'method':'compare_field', 'docs':wn.model.compress (make_doclist (mydoc.doctype,mydoc.name))},
     function(r, rt) {
       var doc = locals[mydoc.doctype][mydoc.name];
       cur_frm.fields_dict.workflow_rule_details.grid.get_field("comparing_field").df.options = r.message;
@@ -50,7 +50,7 @@
     );
   }
   
-  $c('runserverobj', args={'method':'maindoc_field', 'docs':compress_doclist (make_doclist (doc.doctype,doc.name))},
+  $c('runserverobj', args={'method':'maindoc_field', 'docs':wn.model.compress (make_doclist (doc.doctype,doc.name))},
     function(r, rt) {
      var doc = locals[mydoc.doctype][mydoc.name];
      cur_frm.fields_dict.workflow_rule_details.grid.get_field("rule_field").df.options = r.message;
diff --git a/stock/doctype/delivery_note/delivery_note.js b/stock/doctype/delivery_note/delivery_note.js
index 837d52c..a80966a 100644
--- a/stock/doctype/delivery_note/delivery_note.js
+++ b/stock/doctype/delivery_note/delivery_note.js
@@ -128,7 +128,7 @@
 
 //================ create new contact ============================================================================
 cur_frm.cscript.new_contact = function(){
-	tn = createLocal('Contact');
+	tn = wn.model.make_new_doc_and_get_name('Contact');
 	locals['Contact'][tn].is_customer = 1;
 	if(doc.customer) locals['Contact'][tn].customer = doc.customer;
 	loaddoc('Contact', tn);
@@ -192,9 +192,9 @@
 //-----------------------------------Make Sales Invoice----------------------------------------------
 cur_frm.cscript['Make Sales Invoice'] = function() {
 	var doc = cur_frm.doc
-	n = createLocal('Sales Invoice');
+	n = wn.model.make_new_doc_and_get_name('Sales Invoice');
 	$c('dt_map', args={
-		'docs':compress_doclist([locals['Sales Invoice'][n]]),
+		'docs':wn.model.compress([locals['Sales Invoice'][n]]),
 		'from_doctype':doc.doctype,
 		'to_doctype':'Sales Invoice',
 		'from_docname':doc.name,
@@ -209,9 +209,9 @@
 cur_frm.cscript['Make Installation Note'] = function() {
 	var doc = cur_frm.doc;
 	if(doc.per_installed < 99.99){
-		n = createLocal('Installation Note');
+		n = wn.model.make_new_doc_and_get_name('Installation Note');
 		$c('dt_map', args={
-			'docs':compress_doclist([locals['Installation Note'][n]]),
+			'docs':wn.model.compress([locals['Installation Note'][n]]),
 			'from_doctype':doc.doctype,
 			'to_doctype':'Installation Note',
 			'from_docname':doc.name,
@@ -228,9 +228,9 @@
 //-----------------------------------Make Sales Invoice----------------------------------------------
 cur_frm.cscript['Make Packing Slip'] = function() {
 	var doc = cur_frm.doc
-	n = createLocal('Packing Slip');
+	n = wn.model.make_new_doc_and_get_name('Packing Slip');
 	$c('dt_map', args={
-		'docs':compress_doclist([locals['Packing Slip'][n]]),
+		'docs':wn.model.compress([locals['Packing Slip'][n]]),
 		'from_doctype':doc.doctype,
 		'to_doctype':'Packing Slip',
 		'from_docname':doc.name,
diff --git a/stock/doctype/purchase_receipt/purchase_receipt.js b/stock/doctype/purchase_receipt/purchase_receipt.js
index 9ed587b..b3efb14 100644
--- a/stock/doctype/purchase_receipt/purchase_receipt.js
+++ b/stock/doctype/purchase_receipt/purchase_receipt.js
@@ -24,7 +24,7 @@
 
 //========================== On Load ================================================================
 cur_frm.cscript.onload = function(doc, cdt, cdn) {
-	if(!doc.fiscal_year && doc.__islocal){ set_default_values(doc);}
+	if(!doc.fiscal_year && doc.__islocal){ wn.model.set_default_values(doc);}
 	if (!doc.posting_date) doc.posting_date = dateutil.obj_to_str(new Date());
 	if (!doc.transaction_date) doc.transaction_date = dateutil.obj_to_str(new Date());
 	if (!doc.status) doc.status = 'Draft';
@@ -107,7 +107,7 @@
 
 //================ create new contact ============================================================================
 cur_frm.cscript.new_contact = function(){
-	tn = createLocal('Contact');
+	tn = wn.model.make_new_doc_and_get_name('Contact');
 	locals['Contact'][tn].is_supplier = 1;
 	if(doc.supplier) locals['Contact'][tn].supplier = doc.supplier;
 	loaddoc('Contact', tn);
@@ -240,9 +240,9 @@
 
 // ================================ Make Purchase Invoice ==========================================
 cur_frm.cscript['Make Purchase Invoice'] = function() {
-	n = createLocal('Purchase Invoice');
+	n = wn.model.make_new_doc_and_get_name('Purchase Invoice');
 	$c('dt_map', args={
-		'docs':compress_doclist([locals['Purchase Invoice'][n]]),
+		'docs':wn.model.compress([locals['Purchase Invoice'][n]]),
 		'from_doctype': cur_frm.doc.doctype,
 		'to_doctype':'Purchase Invoice',
 		'from_docname': cur_frm.doc.name,
diff --git a/stock/doctype/sales_and_purchase_return_tool/sales_and_purchase_return_tool.js b/stock/doctype/sales_and_purchase_return_tool/sales_and_purchase_return_tool.js
index d57ff5d..7547b6a 100644
--- a/stock/doctype/sales_and_purchase_return_tool/sales_and_purchase_return_tool.js
+++ b/stock/doctype/sales_and_purchase_return_tool/sales_and_purchase_return_tool.js
@@ -120,7 +120,7 @@
 // map parent fields of stock entry
 //----------------------------------
 cur_frm.cscript.map_parent_fields = function(doc, cdt, cdn) {
-	var se = LocalDB.create('Stock Entry');
+	var se = wn.model.make_new_doc_and_get_name('Stock Entry');
 	se = locals['Stock Entry'][se];
 	se.posting_date = dateutil.obj_to_str(new Date());
 	se.transfer_date = dateutil.obj_to_str(new Date());
@@ -148,7 +148,7 @@
 cur_frm.cscript.map_child_fields = function(cl, se) {
 	for(var i = 0; i<cl.length; i++){
 		if (cl[i].returned_qty) {
-			var d1 = LocalDB.add_child(se, 'Stock Entry Detail', 'mtn_details');
+			var d1 = wn.model.add_child(se, 'Stock Entry Detail', 'mtn_details');
 			d1.detail_name = cl[i].detail_name;
 			d1.item_code = cl[i].item_code;
 			d1.description = cl[i].description;
@@ -167,7 +167,7 @@
 // Make excise voucher
 //-------------------------------
 cur_frm.cscript.make_excise_invoice = function(doc) {
-	var excise = LocalDB.create('Journal Voucher');
+	var excise = wn.model.make_new_doc_and_get_name('Journal Voucher');
 	excise = locals['Journal Voucher'][excise];
 	excise.voucher_type = 'Excise Voucher';
 	loaddoc('Journal Voucher',excise.name);
@@ -203,7 +203,7 @@
 // Make JV
 //--------------------------------
 cur_frm.cscript.make_jv = function(doc, dr_or_cr, children) {
-	var jv = LocalDB.create('Journal Voucher');
+	var jv = wn.model.make_new_doc_and_get_name('Journal Voucher');
 	jv = locals['Journal Voucher'][jv];
 	
 	jv.voucher_type = dr_or_cr;
@@ -216,7 +216,7 @@
 	// Add children
 	if(children) {
 		for(var i=0; i<children.length; i++) {
-			var ch = LocalDB.add_child(jv, 'Journal Voucher Detail', 'entries');
+			var ch = wn.model.add_child(jv, 'Journal Voucher Detail', 'entries');
 			$.extend(ch, children[i]);
 			ch.balance = fmt_money(ch.balance);
 		}
diff --git a/support/doctype/customer_issue/customer_issue.js b/support/doctype/customer_issue/customer_issue.js
index 81c10d4..835509f 100644
--- a/support/doctype/customer_issue/customer_issue.js
+++ b/support/doctype/customer_issue/customer_issue.js
@@ -71,9 +71,9 @@
 		$c_obj(make_doclist(doc.doctype, doc.name),'check_maintenance_visit','',
 			function(r,rt){
 				if(r.message == 'No'){
-					n = createLocal("Maintenance Visit");
+					n = wn.model.make_new_doc_and_get_name("Maintenance Visit");
 					$c('dt_map', args={
-						'docs':compress_doclist([locals["Maintenance Visit"][n]]),
+						'docs':wn.model.compress([locals["Maintenance Visit"][n]]),
 						'from_doctype':'Customer Issue',
 						'to_doctype':'Maintenance Visit',
 						'from_docname':doc.name,
diff --git a/support/doctype/maintenance_schedule/maintenance_schedule.js b/support/doctype/maintenance_schedule/maintenance_schedule.js
index 21d2e62..a931327 100644
--- a/support/doctype/maintenance_schedule/maintenance_schedule.js
+++ b/support/doctype/maintenance_schedule/maintenance_schedule.js
@@ -116,7 +116,7 @@
 
 cur_frm.cscript.generate_schedule = function(doc, cdt, cdn) {
   if (!doc.__islocal) {
-    $c('runserverobj', args={'method':'generate_schedule', 'docs':compress_doclist(make_doclist(cdt,cdn))},
+    $c('runserverobj', args={'method':'generate_schedule', 'docs':wn.model.compress(make_doclist(cdt,cdn))},
       function(r,rt){
         refresh_field('maintenance_schedule_detail');
       }
diff --git a/support/doctype/support_ticket/support_ticket.js b/support/doctype/support_ticket/support_ticket.js
index fdfbc1a..3e607fb 100644
--- a/support/doctype/support_ticket/support_ticket.js
+++ b/support/doctype/support_ticket/support_ticket.js
@@ -18,7 +18,6 @@
 
 $.extend(cur_frm.cscript, {
 	onload: function(doc, dt, dn) {
-		cur_frm.last_reload = new Date();
 		if(in_list(user_roles,'System Manager')) {
 			cur_frm.page_layout.footer.help_area.innerHTML = '<hr>\
 				<p><a href="#Form/Email Settings/Email Settings">Email Settings</a><br>\
@@ -27,11 +26,6 @@
 	},
 	
 	refresh: function(doc) {
-		if(new Date() - cur_frm.last_reload > 20000) {
-			cur_frm.last_reload = new Date();
-			cur_frm.reload_doc();
-			return;
-		}
 		erpnext.hide_naming_series();
 		cur_frm.cscript.make_listing(doc);
 		if(!doc.__islocal) {											
diff --git a/utilities/page/calendar/calendar.js b/utilities/page/calendar/calendar.js
index e7abbab..d62dc68 100644
--- a/utilities/page/calendar/calendar.js
+++ b/utilities/page/calendar/calendar.js
@@ -85,7 +85,7 @@
 			,['Text','Description']
 			,['HTML', 'Ref Link']
 			,['Check', 'Public Event']
-			,['Check', 'Cancel Event']
+			,['Check', 'Cancelled Event']
 			,['HTML', 'Event Link']
 			,['Button', 'Save']
 		])
@@ -106,7 +106,7 @@
 			this.widgets['Description'].value = cstr(this.ev.description);
 			
 			this.widgets['Public Event'].checked = false;
-			this.widgets['Cancel Event'].checked = false;
+			this.widgets['Cancelled Event'].checked = false;
 
 			if(this.ev.event_type=='Public')
 				this.widgets['Public Event'].checked = true;
@@ -134,7 +134,7 @@
 			
 			// save values
 			d.ev.description = d.widgets['Description'].value;
-			if(d.widgets['Cancel Event'].checked) 
+			if(d.widgets['Cancelled Event'].checked) 
 				d.ev.event_type='Cancel';
 			else if(d.widgets['Public Event'].checked) 
 				d.ev.event_type='Public';
@@ -154,7 +154,8 @@
 
 Calendar.prototype.save_event = function(doc) {
 	var me = this;
-	save_doclist('Event', doc.name, 'Save', function(r) { 
+	var doclist = new wn.model.DocList("Event", doc.name);
+	doclist.save("Save", function(r) {
 		var doc = locals['Event'][r.docname];
 		var cal = erpnext.calendar;
 		cal.cur_view.refresh();
@@ -162,15 +163,15 @@
 		// if cancelled, hide
 		if(doc.event_type=='Cancel') {
 			$(cal.events_by_name[doc.name].body).toggle(false);
-		}
-	});
+		}		
+	})
 }
 
 //------------------------------------------------------
 
 Calendar.prototype.add_event = function() {
 		
-	var ev = LocalDB.create('Event');
+	var ev = wn.model.make_new_doc_and_get_name('Event');
 	ev = locals['Event'][ev];
 	
 	ev.event_date = dateutil.obj_to_str(this.selected_date);