diff --git a/accounts/doctype/receivable_voucher/receivable_voucher.js b/accounts/doctype/receivable_voucher/receivable_voucher.js
index a25d311..e773a95 100644
--- a/accounts/doctype/receivable_voucher/receivable_voucher.js
+++ b/accounts/doctype/receivable_voucher/receivable_voucher.js
@@ -18,10 +18,10 @@
 		if(!doc.voucher_date) set_multiple(dt,dn,{voucher_date:get_today()});
 		if(!doc.due_date) set_multiple(dt,dn,{due_date:get_today()});
 		if(!doc.posting_date) set_multiple(dt,dn,{posting_date:get_today()});
-		
+
 		//for previously created sales invoice, set required field related to pos
 		if(doc.is_pos ==1) cur_frm.cscript.is_pos(doc, dt, dn);
-	
+
  	    hide_field(['customer_address','contact_person','customer_name','address_display','contact_display','contact_mobile','contact_email','territory','customer_group']);
   }
 }
@@ -37,10 +37,10 @@
 			}
 		);
 	}
-	
+
 	if(!doc.customer && doc.__islocal) {
 		// new -- load default taxes
-		cur_frm.cscript.load_taxes(doc, cdt, cdn);		
+		cur_frm.cscript.load_taxes(doc, cdt, cdn);
 	}
 }
 
@@ -61,19 +61,19 @@
 
   // Show / Hide button
   cur_frm.clear_custom_buttons();
-    
-  if(doc.docstatus==1) { 
+
+  if(doc.docstatus==1) {
     cur_frm.add_custom_button('View Ledger', cur_frm.cscript['View Ledger Entry']);
     cur_frm.add_custom_button('Send SMS', cur_frm.cscript['Send SMS']);
     unhide_field('Repair Outstanding Amt');
-    
+
     if(doc.is_pos==1 && doc.update_stock!=1)
       cur_frm.add_custom_button('Make Delivery', cur_frm.cscript['Make Delivery Note']);
-  
+
     if(doc.outstanding_amount!=0)
       cur_frm.add_custom_button('Make Payment Entry', cur_frm.cscript['Make Bank Voucher']);
   }
-  else  
+  else
     hide_field('Repair Outstanding Amt');
   cur_frm.cscript.is_opening(doc, dt, dn);
   cur_frm.cscript.hide_fields(doc, cdt, cdn);
@@ -117,13 +117,13 @@
       var doc = locals[cur_frm.doctype][cur_frm.docname];
       get_server_fields('get_debit_to','','',doc, dt, dn, 0);
       cur_frm.refresh();
-  }   
+  }
 
-  if(doc.customer) $c_obj(make_doclist(doc.doctype, doc.name), 'get_default_customer_address', '', callback);  
+  if(doc.customer) $c_obj(make_doclist(doc.doctype, doc.name), 'get_default_customer_address', '', callback);
   if(doc.customer) unhide_field(['customer_address','contact_person','customer_name','address_display','contact_display','contact_mobile','contact_email','territory','customer_group']);
 }
 
-cur_frm.cscript.customer_address = cur_frm.cscript.contact_person = function(doc,dt,dn) {    
+cur_frm.cscript.customer_address = cur_frm.cscript.contact_person = function(doc,dt,dn) {
   if(doc.customer) get_server_fields('get_customer_address', JSON.stringify({customer: doc.customer, address: doc.customer_address, contact: doc.contact_person}),'', doc, dt, dn, 1);
 }
 
@@ -152,15 +152,15 @@
   var callback2 = function(r,rt) {
       var doc = locals[cur_frm.doctype][cur_frm.docname];
       cur_frm.refresh();
-  }   
-  
+  }
+
   var callback = function(r,rt) {
-      var doc = locals[cur_frm.doctype][cur_frm.docname];    
+      var doc = locals[cur_frm.doctype][cur_frm.docname];
       if(doc.customer) $c_obj(make_doclist(dt,dn), 'get_default_customer_address', '', callback2);
       if(doc.customer) unhide_field(['customer_address','contact_person','customer_name','address_display','contact_display','contact_mobile','contact_email','territory','customer_group']);
       cur_frm.refresh();
   }
-  
+
   if(doc.debit_to && doc.posting_date){
     get_server_fields('get_cust_and_due_date','','',doc,dt,dn,1,callback);
   }
@@ -187,13 +187,13 @@
 //Set debit and credit to zero on adding new row
 //----------------------------------------------
 cur_frm.fields_dict['entries'].grid.onrowadd = function(doc, cdt, cdn){
-  
+
   cl = getchildren('RV Detail', doc.name, cur_frm.cscript.fname, doc.doctype);
   acc = '';
   cc = '';
 
   for(var i = 0; i<cl.length; i++) {
-    
+
     if (cl[i].idx == 1){
       acc = cl[i].income_account;
       cc = cl[i].cost_center;
@@ -221,7 +221,7 @@
 
 // Get Items based on SO or DN Selected
 cur_frm.cscript['Get Items'] = function(doc, dt, dn) {
-  var callback = function(r,rt) { 
+  var callback = function(r,rt) {
 	  unhide_field(['customer_address','contact_person','customer_name','address_display','contact_display','contact_mobile','contact_email','territory','customer_group']);
 	  cur_frm.refresh();
   }
@@ -335,10 +335,10 @@
 // Delivery Note
 // --------------
 cur_frm.fields_dict.delivery_note_main.get_query = function(doc) {
-  if (doc.customer)	
-    return 'SELECT DISTINCT `tabDelivery Note`.`name` FROM `tabDelivery Note` WHERE `tabDelivery Note`.company = "' + doc.company + '" and `tabDelivery Note`.`docstatus` = 1 and ifnull(`tabDelivery Note`.per_billed,0) < 100 and `tabDelivery Note`.`customer` =  "' + doc.customer + '" and `tabDelivery Note`.%(key)s LIKE "%s" ORDER BY `tabDelivery Note`.`name` DESC LIMIT 50';    
+  if (doc.customer)
+    return 'SELECT DISTINCT `tabDelivery Note`.`name` FROM `tabDelivery Note` WHERE `tabDelivery Note`.company = "' + doc.company + '" and `tabDelivery Note`.`docstatus` = 1 and ifnull(`tabDelivery Note`.per_billed,0) < 100 and `tabDelivery Note`.`customer` =  "' + doc.customer + '" and `tabDelivery Note`.%(key)s LIKE "%s" ORDER BY `tabDelivery Note`.`name` DESC LIMIT 50';
   else
-    return 'SELECT DISTINCT `tabDelivery Note`.`name` FROM `tabDelivery Note` WHERE `tabDelivery Note`.company = "' + doc.company + '" and `tabDelivery Note`.`docstatus` = 1 and ifnull(`tabDelivery Note`.per_billed,0) < 100 and `tabDelivery Note`.%(key)s LIKE "%s" ORDER BY `tabDelivery Note`.`name` DESC LIMIT 50';        
+    return 'SELECT DISTINCT `tabDelivery Note`.`name` FROM `tabDelivery Note` WHERE `tabDelivery Note`.company = "' + doc.company + '" and `tabDelivery Note`.`docstatus` = 1 and ifnull(`tabDelivery Note`.per_billed,0) < 100 and `tabDelivery Note`.%(key)s LIKE "%s" ORDER BY `tabDelivery Note`.`name` DESC LIMIT 50';
 }
 
 
@@ -393,18 +393,18 @@
   jv.company = doc.company;
   jv.remark = repl('Payment received against invoice %(vn)s for %(rem)s', {vn:doc.name, rem:doc.remarks});
   jv.fiscal_year = doc.fiscal_year;
-  
+
   // debit to creditor
   var d1 = LocalDB.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');
   d1.debit = doc.outstanding_amount;
-  
+
   loaddoc('Journal Voucher', jv.name);
 }
 
diff --git a/patches/patch.py b/patches/patch.py
index 6bb134f..a7c2511 100644
--- a/patches/patch.py
+++ b/patches/patch.py
@@ -2,7 +2,7 @@
 # ========================
 
 
-last_patch = 351
+last_patch = 352
 
 #-------------------------------------------
 
@@ -268,7 +268,7 @@
 		delete_doc('Custom Script', 'Profile-Client')
 		delete_doc('Custom Script', 'Event-Client')
 		delete_doc('Custom Script', 'File-Server')
-	
+
 		# reload profile with new fields for security
 		delete_doc('DocType', 'Profile')
 		reload_doc('core', 'doctype', 'profile')
@@ -277,3 +277,13 @@
 		reload_doc('stock', 'doctype', 'item_customer_detail')
 	elif patch_no == 351:
 		reload_doc('home', 'page', 'dashboard')
+	elif patch_no == 352:
+		reload_doc('setup', 'doctype','feature_setup')
+		reload_doc('stock','doctype','item')
+		sql("update tabDocField set label='Produced Qty',description='Updated after finished goods are transferred to FG Warehouse through Stock Entry' where parent='Production Order' and fieldname='produced_qty'")
+		rs = sql("select fieldname from tabDocField where parent='Features Setup' and fieldname is not null")
+		from webnotes.model.doc import Document
+		m = Document('Features Setup')
+		for d in rs:
+			m.fields[d[0]] = 1
+		m.save()
\ No newline at end of file
diff --git a/production/doctype/production_order/production_order.py b/production/doctype/production_order/production_order.py
index 570c802..0cc64e5 100644
--- a/production/doctype/production_order/production_order.py
+++ b/production/doctype/production_order/production_order.py
@@ -13,7 +13,7 @@
 get_value = webnotes.conn.get_value
 in_transaction = webnotes.conn.in_transaction
 convert_to_lists = webnotes.conn.convert_to_lists
-	
+
 # -----------------------------------------------------------------------------------------
 
 
@@ -21,7 +21,7 @@
   def __init__(self, doc, doclist=[]):
     self.doc = doc
     self.doclist = doclist
-  
+
   # Autoname
   def autoname(self):
     p = self.doc.fiscal_year
@@ -35,7 +35,7 @@
             'default_bom' : item and item[0]['default_bom'] or ''
     }
     return ret
-    
+
   def validate(self):
     if not self.doc.production_item :
       msgprint("Please enter Production Item")
@@ -62,7 +62,7 @@
       if flt(bom_detail[0]['docstatus']) != 1:
         msgprint("BOM := '%s' is not Submitted BOM." % self.doc.bom_no)
         raise Exception
-  
+
   def update_status(self, status):
     # Set Status
     if status == 'Stopped':
@@ -78,7 +78,7 @@
     # Update Planned Qty of Production Item
     qty = (flt(self.doc.qty) - flt(self.doc.produced_qty)) * ((status == 'Stopped') and -1 or 1)
     get_obj('Warehouse', self.doc.fg_warehouse).update_bin(0, 0, 0, 0, flt(qty), self.doc.production_item, now())
-    
+
     # Acknowledge user
     msgprint(self.doc.doctype + ": " + self.doc.name + " has been %s and status has been updated as %s." % (cstr(status), cstr(self.doc.status)))
 
@@ -99,6 +99,6 @@
 
     # Set Status AS "Submitted"
     set(self.doc,'status', 'Cancelled')
-    
+
     # decrease Planned Qty of Prooduction Item by Qty
     get_obj('Warehouse', self.doc.fg_warehouse).update_bin(0, 0, 0, 0,-flt(self.doc.qty), self.doc.production_item, now())
diff --git a/production/doctype/production_order/production_order.txt b/production/doctype/production_order/production_order.txt
index c927edf..9226fd0 100644
--- a/production/doctype/production_order/production_order.txt
+++ b/production/doctype/production_order/production_order.txt
@@ -5,13 +5,14 @@
 	{
 		'creation': '2010-08-08 17:09:14',
 		'docstatus': 0,
-		'modified': '2010-12-23 11:08:12',
-		'modified_by': 'umair@iwebnotes.com',
+		'modified': '2011-08-31 10:03:21',
+		'modified_by': 'Administrator',
 		'owner': 'Administrator'
 	},
 
 	# These values are common for all DocType
 	{
+		'_last_update': '1313485457',
 		'colour': 'White:FFF',
 		'doctype': 'DocType',
 		'in_create': 0,
@@ -20,7 +21,7 @@
 		'section_style': 'Tabbed',
 		'server_code_error': ' ',
 		'show_in_menu': 0,
-		'version': 179
+		'version': 180
 	},
 
 	# These values are common for all DocField
@@ -54,7 +55,6 @@
 		'cancel': 1,
 		'create': 1,
 		'doctype': 'DocPerm',
-		'idx': 1,
 		'permlevel': 0,
 		'role': 'System Manager',
 		'submit': 1,
@@ -64,7 +64,6 @@
 	# DocPerm
 	{
 		'doctype': 'DocPerm',
-		'idx': 2,
 		'permlevel': 1,
 		'role': 'All'
 	},
@@ -75,7 +74,6 @@
 		'cancel': 1,
 		'create': 1,
 		'doctype': 'DocPerm',
-		'idx': 3,
 		'permlevel': 0,
 		'role': 'Production Manager',
 		'submit': 1,
@@ -88,7 +86,6 @@
 		'cancel': 1,
 		'create': 1,
 		'doctype': 'DocPerm',
-		'idx': 4,
 		'permlevel': 0,
 		'role': 'Production User',
 		'submit': 1,
@@ -99,7 +96,6 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Section Break',
-		'idx': 1,
 		'label': 'Production Order',
 		'oldfieldtype': 'Section Break',
 		'permlevel': 0
@@ -112,7 +108,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'transaction_date',
 		'fieldtype': 'Date',
-		'idx': 2,
 		'label': 'Transaction Date',
 		'oldfieldname': 'transaction_date',
 		'oldfieldtype': 'Date',
@@ -127,7 +122,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'posting_date',
 		'fieldtype': 'Date',
-		'idx': 3,
 		'label': 'Posting Date',
 		'oldfieldname': 'posting_date',
 		'oldfieldtype': 'Date',
@@ -142,7 +136,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'production_item',
 		'fieldtype': 'Link',
-		'idx': 4,
 		'in_filter': 1,
 		'label': 'Production Item',
 		'oldfieldname': 'production_item',
@@ -158,7 +151,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'description',
 		'fieldtype': 'Text',
-		'idx': 5,
 		'label': 'Description',
 		'oldfieldname': 'description',
 		'oldfieldtype': 'Text',
@@ -173,14 +165,12 @@
 		'doctype': 'DocField',
 		'fieldname': 'bom_no',
 		'fieldtype': 'Link',
-		'idx': 7,
 		'label': 'BOM No',
 		'oldfieldname': 'bom_no',
 		'oldfieldtype': 'Link',
 		'options': 'Bill Of Materials',
 		'permlevel': 1,
 		'reqd': 1,
-		'search_index': 0,
 		'trigger': 'Client'
 	},
 
@@ -189,7 +179,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'origin',
 		'fieldtype': 'Select',
-		'idx': 8,
 		'in_filter': 1,
 		'label': 'Origin',
 		'no_copy': 1,
@@ -207,7 +196,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'qty',
 		'fieldtype': 'Currency',
-		'idx': 9,
 		'label': 'Qty',
 		'oldfieldname': 'qty',
 		'oldfieldtype': 'Currency',
@@ -221,7 +209,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'project_name',
 		'fieldtype': 'Link',
-		'idx': 9,
 		'in_filter': 1,
 		'label': 'Project Name',
 		'oldfieldname': 'project_name',
@@ -236,7 +223,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'amended_from',
 		'fieldtype': 'Data',
-		'idx': 10,
 		'label': 'Amended From',
 		'oldfieldname': 'amended_from',
 		'oldfieldtype': 'Data',
@@ -248,7 +234,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'amendment_date',
 		'fieldtype': 'Date',
-		'idx': 11,
 		'label': 'Amendment Date',
 		'oldfieldname': 'amendment_date',
 		'oldfieldtype': 'Date',
@@ -259,7 +244,6 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Column Break',
-		'idx': 12,
 		'oldfieldtype': 'Column Break',
 		'permlevel': 0
 	},
@@ -269,7 +253,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'stock_uom',
 		'fieldtype': 'Data',
-		'idx': 12,
 		'label': 'Stock UOM',
 		'oldfieldname': 'stock_uom',
 		'oldfieldtype': 'Data',
@@ -281,7 +264,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'status',
 		'fieldtype': 'Select',
-		'idx': 13,
 		'in_filter': 1,
 		'label': 'Status',
 		'no_copy': 1,
@@ -300,15 +282,13 @@
 		'doctype': 'DocField',
 		'fieldname': 'fg_warehouse',
 		'fieldtype': 'Link',
-		'idx': 14,
 		'in_filter': 1,
 		'label': 'FG Warehouse',
 		'oldfieldname': 'fg_warehouse',
 		'oldfieldtype': 'Link',
 		'options': 'Warehouse',
 		'permlevel': 0,
-		'reqd': 1,
-		'search_index': 0
+		'reqd': 1
 	},
 
 	# DocField
@@ -318,15 +298,13 @@
 		'doctype': 'DocField',
 		'fieldname': 'wip_warehouse',
 		'fieldtype': 'Link',
-		'idx': 15,
 		'in_filter': 1,
 		'label': 'WIP Warehouse',
 		'oldfieldname': 'wip_warehouse',
 		'oldfieldtype': 'Link',
 		'options': 'Warehouse',
 		'permlevel': 0,
-		'reqd': 1,
-		'search_index': 0
+		'reqd': 1
 	},
 
 	# DocField
@@ -336,7 +314,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'consider_sa_items',
 		'fieldtype': 'Select',
-		'idx': 16,
 		'in_filter': 1,
 		'label': 'Consider SA Items',
 		'oldfieldname': 'consider_sa_items',
@@ -349,11 +326,11 @@
 	# DocField
 	{
 		'colour': 'White:FFF',
+		'description': 'Updated after finished goods are transferred to FG Warehouse through Stock Entry',
 		'doctype': 'DocField',
 		'fieldname': 'produced_qty',
 		'fieldtype': 'Currency',
-		'idx': 18,
-		'label': 'Produced Qty (Updated after finished goods are transferred to FG Warehouse through Stock Entry)',
+		'label': 'Produced Qty',
 		'oldfieldname': 'produced_qty',
 		'oldfieldtype': 'Currency',
 		'permlevel': 1
@@ -364,14 +341,12 @@
 		'doctype': 'DocField',
 		'fieldname': 'company',
 		'fieldtype': 'Link',
-		'idx': 19,
 		'label': 'Company',
 		'oldfieldname': 'company',
 		'oldfieldtype': 'Link',
 		'options': 'Company',
 		'permlevel': 0,
-		'reqd': 1,
-		'search_index': 0
+		'reqd': 1
 	},
 
 	# DocField
@@ -379,7 +354,6 @@
 		'doctype': 'DocField',
 		'fieldname': 'fiscal_year',
 		'fieldtype': 'Select',
-		'idx': 20,
 		'in_filter': 1,
 		'label': 'Fiscal Year',
 		'oldfieldname': 'fiscal_year',
@@ -393,7 +367,6 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Section Break',
-		'idx': 21,
 		'label': 'Next Steps',
 		'oldfieldtype': 'Section Break',
 		'permlevel': 0
@@ -405,7 +378,6 @@
 		'colour': 'White:FFF',
 		'doctype': 'DocField',
 		'fieldtype': 'Button',
-		'idx': 22,
 		'label': 'Material Transfer',
 		'oldfieldtype': 'Button',
 		'permlevel': 0,
@@ -416,7 +388,6 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Column Break',
-		'idx': 23,
 		'oldfieldtype': 'Column Break',
 		'permlevel': 0
 	},
@@ -427,7 +398,6 @@
 		'colour': 'White:FFF',
 		'doctype': 'DocField',
 		'fieldtype': 'Button',
-		'idx': 24,
 		'label': 'Backflush',
 		'oldfieldtype': 'Button',
 		'permlevel': 0,
@@ -438,7 +408,6 @@
 	{
 		'doctype': 'DocField',
 		'fieldtype': 'Column Break',
-		'idx': 25,
 		'oldfieldtype': 'Column Break',
 		'permlevel': 0
 	},
@@ -449,7 +418,6 @@
 		'colour': 'White:FFF',
 		'doctype': 'DocField',
 		'fieldtype': 'Button',
-		'idx': 26,
 		'label': 'Stop Production Order',
 		'oldfieldtype': 'Button',
 		'permlevel': 0,
@@ -462,7 +430,6 @@
 		'colour': 'White:FFF',
 		'doctype': 'DocField',
 		'fieldtype': 'Button',
-		'idx': 27,
 		'label': 'Unstop Production Order',
 		'oldfieldtype': 'Button',
 		'permlevel': 0,
diff --git a/selling/doctype/sales_order/sales_order.js b/selling/doctype/sales_order/sales_order.js
index 587933c..e684bed 100644
--- a/selling/doctype/sales_order/sales_order.js
+++ b/selling/doctype/sales_order/sales_order.js
@@ -28,7 +28,7 @@
     if(doc.quotation) cur_frm.cscript['Pull Quotation Details'](doc,cdt,cdn);
   } else {
 	cur_frm.cscript.load_taxes(doc, cdt, cdn);
-  } 
+  }
 }
 
 // Refresh
@@ -70,7 +70,6 @@
   } else {
   	hide_field(['Repair Sales Order', 'Send SMS', 'message', 'customer_mobile_no'])
   }
-
 }
 
 //customer
diff --git a/setup/doctype/features_setup/__init__.py b/setup/doctype/features_setup/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/setup/doctype/features_setup/__init__.py
diff --git a/setup/doctype/features_setup/features_setup.py b/setup/doctype/features_setup/features_setup.py
new file mode 100644
index 0000000..3a549d9
--- /dev/null
+++ b/setup/doctype/features_setup/features_setup.py
@@ -0,0 +1,13 @@
+class DocType:
+	def __init__(self, d, dl):
+		self.doc, self.doclist = d, dl
+
+	def validate(self):
+		"""
+			update settings in defaults
+		"""
+		from webnotes.model import default_fields 
+		from webnotes.utils import set_default
+		for key in self.doc.fields:
+			if key not in default_fields:
+				set_default(key, self.doc.fields[key])
diff --git a/setup/doctype/features_setup/features_setup.txt b/setup/doctype/features_setup/features_setup.txt
new file mode 100644
index 0000000..224d175
--- /dev/null
+++ b/setup/doctype/features_setup/features_setup.txt
@@ -0,0 +1,288 @@
+# DocType, Features Setup
+[
+
+	# These values are common in all dictionaries
+	{
+		'creation': '2011-08-25 16:53:56',
+		'docstatus': 0,
+		'modified': '2011-08-31 15:05:53',
+		'modified_by': 'Administrator',
+		'owner': 'Administrator'
+	},
+
+	# These values are common for all DocType
+	{
+		'_last_update': '1314783102',
+		'colour': 'White:FFF',
+		'doctype': 'DocType',
+		'issingle': 1,
+		'module': 'Setup',
+		'name': '__common__',
+		'name_case': 'Title Case',
+		'section_style': 'Simple',
+		'show_in_menu': 1,
+		'version': 16
+	},
+
+	# These values are common for all DocField
+	{
+		'doctype': 'DocField',
+		'name': '__common__',
+		'parent': 'Features Setup',
+		'parentfield': 'fields',
+		'parenttype': 'DocType',
+		'permlevel': 0
+	},
+
+	# These values are common for all DocPerm
+	{
+		'create': 1,
+		'doctype': 'DocPerm',
+		'name': '__common__',
+		'parent': 'Features Setup',
+		'parentfield': 'permissions',
+		'parenttype': 'DocType',
+		'permlevel': 0,
+		'read': 1,
+		'write': 1
+	},
+
+	# DocType, Features Setup
+	{
+		'doctype': 'DocType',
+		'name': 'Features Setup'
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'role': 'System Manager'
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'role': 'Administrator'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Section Break',
+		'label': 'Materials'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'description': 'To track item in sales and purchase documents based on their serial nos. This is can also used to track warranty details of the product.',
+		'doctype': 'DocField',
+		'fieldname': 'item_searial_nos',
+		'fieldtype': 'Check',
+		'label': 'Item Serial Nos'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'description': 'To track items in sales and purchase documents with batch nos<br><b>Preferred Industry: Chemicals etc</b>',
+		'doctype': 'DocField',
+		'fieldname': 'item_batch_nos',
+		'fieldtype': 'Check',
+		'label': 'Item Batch Nos'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'description': 'To track brand name in the following documents<br>\nDelivery Note, Enuiry, Indent, Item, Purchase Order, Purchase Voucher, Purchaser Receipt, Quotation, Receivable Voucher, Sales BOM, Sales Order, Serial No',
+		'doctype': 'DocField',
+		'fieldname': 'brands',
+		'fieldtype': 'Check',
+		'label': 'Brands'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Column Break'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'description': '1. To maintain the customer wise item code and to make them searchable based on their code use this option',
+		'doctype': 'DocField',
+		'fieldname': 'item_advanced',
+		'fieldtype': 'Check',
+		'label': 'Item Advanced'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'description': 'If Sale BOM is defined, the actual BOM of the Pack is displayed as table.\nAvailable in Delivery Note and Sales Order',
+		'doctype': 'DocField',
+		'fieldname': 'packing_details',
+		'fieldtype': 'Check',
+		'label': 'Packing Detials'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'description': 'To get Item Group in details table',
+		'doctype': 'DocField',
+		'fieldname': 'item_group_in_details',
+		'fieldtype': 'Check',
+		'label': 'Item Groups in Details'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Section Break',
+		'label': 'Sales and Purchase'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'description': 'All export related fields like currency, conversion rate, export total, export grand total etc are available in <br>\nDelivery Note, POS, Quotation, Sales Invoice, Sales Order etc.',
+		'doctype': 'DocField',
+		'fieldname': 'exports',
+		'fieldtype': 'Check',
+		'label': 'Exports'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'description': 'All import related fields like currency, conversion rate, import total, import grand total etc are available in <br>\nPurchase Receipt, Supplier Quotation, Purchase Invoice, Purchase Order etc.',
+		'doctype': 'DocField',
+		'fieldname': 'imports',
+		'fieldtype': 'Check',
+		'label': 'Imports'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Column Break'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'description': 'Field available in Delivery Note, Quotation, Receivable Voucher, Sales Order',
+		'doctype': 'DocField',
+		'fieldname': 'discounts',
+		'fieldtype': 'Check',
+		'label': 'Discounts'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'description': 'To track any installation or commissioning related work after sales',
+		'doctype': 'DocField',
+		'fieldname': 'after_sales_installations',
+		'fieldtype': 'Check',
+		'label': 'After Sale Installations'
+	},
+
+	# DocField
+	{
+		'description': 'Available in \nBill Of Materials, Delivery Note, Payable Voucher, Production Order, Purchase Order, Purchase Receipt, Receivable Voucher, Sales Order, Stock Entry, Timesheet',
+		'doctype': 'DocField',
+		'fieldname': 'projects',
+		'fieldtype': 'Check',
+		'label': 'Projects'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'description': 'If you have Sales Team and Sale Partners (Channel Partners)  they can be tagged and maintain their contribution in the sales activity',
+		'doctype': 'DocField',
+		'fieldname': 'sales_extras',
+		'fieldtype': 'Check',
+		'label': 'Sales Extras'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Section Break',
+		'label': 'Production'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'description': 'If you involve in manufacturing activity<br>\nEnables item <b>Is Manufactured</b>',
+		'doctype': 'DocField',
+		'fieldname': 'manufacturing',
+		'fieldtype': 'Check',
+		'label': 'Manufacturing'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Column Break'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'description': 'If you follow Quality Inspection<br>\nEnables item QA Required and QA No in Purchase Receipt',
+		'doctype': 'DocField',
+		'fieldname': 'quality',
+		'fieldtype': 'Check',
+		'label': 'Quality'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'description': 'To enable <b>Point of Sale</b> features',
+		'doctype': 'DocField',
+		'fieldname': 'pos',
+		'fieldtype': 'Check',
+		'label': 'Point of Sale'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Section Break',
+		'label': 'Miscelleneous'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'description': 'If you have long print formats, this feature can be used to split the page to be printed on multiple pages with all headers and footers on each page',
+		'doctype': 'DocField',
+		'fieldname': 'page_break',
+		'fieldtype': 'Check',
+		'label': 'Page Break'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldtype': 'Column Break'
+	},
+
+	# DocField
+	{
+		'colour': 'White:FFF',
+		'description': 'Enables <b>More Info.</b> in all documents',
+		'doctype': 'DocField',
+		'fieldname': 'more_info',
+		'fieldtype': 'Check',
+		'label': 'More Info'
+	}
+]
\ No newline at end of file
diff --git a/startup/startup.js b/startup/startup.js
index ce4aac3..942f4ef 100644
--- a/startup/startup.js
+++ b/startup/startup.js
@@ -12,8 +12,8 @@
 
 function startup_setup() {
 	pscript.is_erpnext_saas = cint(locals['Control Panel']['Control Panel'].sync_with_gateway)
-	
-	
+
+
 	if(get_url_arg('embed')) {
 		// hide header, footer
 		$dh(page_body.banner_area);
@@ -34,7 +34,7 @@
 	$td(page_body.wntoolbar.body_tab,0,0).innerHTML = '<i><b>erp</b>next</i>';
 	$y($td(page_body.wntoolbar.body_tab,0,0), {width:'140px', color:'#FFF', paddingLeft:'8px', paddingRight:'8px', fontSize:'14px'})
 	$dh(page_body.banner_area);
-	
+
 	// sidebar
 	// -------
 	pscript.startup_make_sidebar();
@@ -65,10 +65,10 @@
 	var callback = function(r,rt) {
 		// menu
 		var ml = r.message;
-		
+
 		// clear
 		page_body.left_sidebar.innerHTML = '';
-		
+
 		for(var m=0; m<ml.length; m++){
 			if(ml[m]) {
 				new SidebarItem(ml[m]);
@@ -79,13 +79,13 @@
 			$(div).html('[edit]').click(pscript.startup_set_module_order)
 		}
 		nav_obj.observers.push({notify:function(t,dt,dn) { pscript.select_sidebar_menu(t, dt, dn); }});
-		
+
 		// select current
 		var no = nav_obj.ol[nav_obj.ol.length-1];
 		if(no && menu_item_map[decodeURIComponent(no[0])][decodeURIComponent(no[1])])
 			pscript.select_sidebar_menu(decodeURIComponent(no[0]), decodeURIComponent(no[1]));
 	}
-	$c_obj('Home Control', 'get_modules', '', callback);	
+	$c_obj('Home Control', 'get_modules', '', callback);
 }
 
 // ====================================================================
@@ -97,13 +97,13 @@
 
 pscript.select_sidebar_menu = function(t, dt, dn) {
 	// get menu item
-	if(menu_item_map[t][dt]) {			
+	if(menu_item_map[t][dt]) {
 		// select
 		menu_item_map[t][dt].select();
 	} else {
 		// none found :-( Unselect
 		if(cur_menu_pointer)
-			cur_menu_pointer.deselect();		
+			cur_menu_pointer.deselect();
 	}
 }
 
@@ -115,19 +115,19 @@
 
 MenuPointer = function(parent, label) {
 
-	this.wrapper = $a(parent, 'div', '', {padding:'0px', cursor:'pointer', margin:'2px 0px'}); 
+	this.wrapper = $a(parent, 'div', '', {padding:'0px', cursor:'pointer', margin:'2px 0px'});
 	$br(this.wrapper, '3px');
-		
-	this.tab = make_table($a(this.wrapper, 'div'), 1, 2, '100%', ['', '11px'], {height:'22px', 
+
+	this.tab = make_table($a(this.wrapper, 'div'), 1, 2, '100%', ['', '11px'], {height:'22px',
 		verticalAlign:'middle', padding:'0px'}, {borderCollapse:'collapse', tableLayout:'fixed'});
 
 	$y($td(this.tab, 0, 0), {padding:'0px 4px', color:'#444', whiteSpace:'nowrap'});
-	
+
 	// triangle border (?)
 	this.tab.triangle_div = $a($td(this.tab, 0, 1), 'div','', {
-		borderColor: body_background + ' ' + body_background + ' ' + body_background + ' ' + 'transparent', 
+		borderColor: body_background + ' ' + body_background + ' ' + body_background + ' ' + 'transparent',
 		borderWidth:'11px', borderStyle:'solid', height:'0px', width:'0px', marginRight:'-11px'});
-	
+
 	this.label_area = $a($td(this.tab, 0, 0), 'span', '', '', label);
 
 	$(this.wrapper)
@@ -135,7 +135,7 @@
 			function() { if(!this.selected)$bg(this, '#eee'); } ,
 			function() { if(!this.selected)$bg(this, body_background); }
 		)
-		
+
 	$y($td(this.tab, 0, 0), {borderBottom:'1px solid #ddd'});
 
 }
@@ -150,14 +150,14 @@
 
 	if(cur_menu_pointer && cur_menu_pointer != this)
 		cur_menu_pointer.deselect();
-	
+
 	cur_menu_pointer = this;
 }
 
 // ====================================================================
 
 MenuPointer.prototype.deselect = function() {
-	$y($td(this.tab, 0, 0), {color:'#444', borderBottom:'1px solid #ddd'}); 
+	$y($td(this.tab, 0, 0), {color:'#444', borderBottom:'1px solid #ddd'});
 	$gr(this.wrapper, body_background, body_background);
 	this.selected = 0;
 }
@@ -176,19 +176,19 @@
 
 	this.body = $a(this.wrapper, 'div');
 	this.tab = make_table(this.body, 1, 2, '100%', ['24px', null], {verticalAlign:'middle'}, {tableLayout:'fixed'});
-	
+
 	// icon
 	var ic = $a($td(this.tab, 0, 0), 'div', 'module-icons module-icons-' + det.module_label.toLowerCase(), {marginLeft:'3px', marginBottom:'-2px'});
 
 	// pointer table
-	this.pointer = new MenuPointer($td(this.tab, 0, 1), det.module_label); 
+	this.pointer = new MenuPointer($td(this.tab, 0, 1), det.module_label);
 	$y($td(this.pointer.tab, 0, 0), {fontWeight:'bold'});
-	
+
 	// for page type
 	if(det.module_page) {
 		menu_item_map.Page[det.module_page] = this.pointer;
 	}
-	
+
 	// items area
 	this.items_area = $a(this.wrapper, 'div');
 
@@ -203,14 +203,14 @@
 	if(this.det.module_page) {
 		// page type
 		this.pointer.select();
-		
+
 		$item_set_working(me.pointer.label_area);
 		loadpage(this.det.module_page, function() { $item_done_working(me.pointer.label_area); });
-		
+
 	} else {
 		// show sub items
 		this.toggle();
-	}	
+	}
 }
 
 // ====================================================================
@@ -225,7 +225,7 @@
 
 SidebarItem.prototype.toggle = function() {
 	if(this.loading) return;
-	
+
 	if(this.is_open) {
 		this.collapse();
 	} else {
@@ -234,7 +234,7 @@
 		this.is_open = 1;
 		$fg(this.pointer.label_area, '#000')
 		//this.pointer.select(1);
-		
+
 		// close existing open
 		if(cur_sidebar_item && cur_sidebar_item != this) {
 			cur_sidebar_item.collapse();
@@ -248,7 +248,7 @@
 SidebarItem.prototype.show_items = function() {
 	this.loading = 1;
 	var me = this;
-	
+
 	$item_set_working(this.pointer.label_area);
 	var callback = function(r,rt){
 		me.loaded = 1;
@@ -256,10 +256,10 @@
 		var smi = null;
 		var has_reports = 0;
 		var has_tools = 0;
-		
+
 		// widget code
 		$item_done_working(me.pointer.label_area);
-		
+
 		if(r.message.il) {
 			me.il = r.message.il;
 
@@ -268,13 +268,13 @@
 				if(me.il[i].doc_type == 'Forms') {
 					if(in_list(profile.can_read, me.il[i].doc_name)) {
 						var smi = new SidebarModuleItem(me, me.il[i]);
-	
+
 						menu_item_map['Form'][me.il[i].doc_name] = smi.pointer;
 						menu_item_map['List'][me.il[i].doc_name] = smi.pointer;
 					}
 				}
 				if(me.il[i].doc_type=='Reports') has_reports = 1;
-				if(in_list(['Single DocType', 'Pages', 'Setup Forms'], me.il[i].doc_type)) has_tools = 1;				
+				if(in_list(['Single DocType', 'Pages', 'Setup Forms'], me.il[i].doc_type)) has_tools = 1;
 			}
 			// reports
 			if(has_reports) {
@@ -291,7 +291,7 @@
 				// add to menu-item mapper
 				menu_item_map['Page'][me.det.module_label + ' Tools'] = smi.pointer;
 			}
-			
+
 			// custom reports
 			if(r.message.custom_reports.length) {
 				me.il = add_lists(r.message.il, r.message.custom_reports);
@@ -301,7 +301,7 @@
 				menu_item_map['Page'][me.det.module_label + ' Custom Reports'] = smi.pointer;
 
 			}
-	
+
 		}
 		$(me.items_area).slideDown();
 
@@ -309,9 +309,9 @@
 		var no = nav_obj.ol[nav_obj.ol.length-1];
 		if(no && menu_item_map[decodeURIComponent(no[0])][decodeURIComponent(no[1])])
 			pscript.select_sidebar_menu(decodeURIComponent(no[0]), decodeURIComponent(no[1]));
-		
+
 	}
-	
+
 	$c_obj('Home Control', 'get_module_details', me.det.name, callback);
 }
 
@@ -323,7 +323,7 @@
 	var me = this;
 	var label = this.det.module_label + ' ' + sec_type;
 	var type_map = {'Reports':'Reports', 'Custom Reports':'Custom Reports', 'Pages':'Tools', 'Single DocType':'Tools', 'Setup Forms':'Tools'}
-	
+
 	if(page_body.pages[label]) {
 		loadpage(label, null, 1);
 	} else {
@@ -331,10 +331,10 @@
 		var page = page_body.add_page(label);
 		this.wrapper = $a(page,'div','layout_wrapper');
 
-		
+
 		// head
 		this.head = new PageHeader(this.wrapper, label);
-		
+
 		// body
 		this.body1 = $a(this.wrapper, 'div', '', {marginTop:'16px'});
 
@@ -342,18 +342,18 @@
 		var add_link = function(det) {
 			var div = $a(me.body1, 'div', '', {marginBottom:'6px'});
 			var span = $a(div, 'span', 'link_type');
-			
+
 			// tag the span
 			span.innerHTML = det.display_name; span.det = det;
 			if(sec_type=='Reports' || sec_type=='Custom Reports') {
 				// Reports
 				// -------
 				span.onclick = function() { loadreport(this.det.doc_name, this.det.display_name); }
-				
+
 			} else {
 				// Tools
 				// -----
-				
+
 				if(det.doc_type=='Pages') {
 					// Page
 					if(det.click_function) {
@@ -364,18 +364,18 @@
 					}
 				} else if(det.doc_type=='Setup Forms') {
 					// Doc Browser
-					span.onclick = function() { loaddocbrowser(this.det.doc_name); }				
+					span.onclick = function() { loaddocbrowser(this.det.doc_name); }
 				} else {
 					// Single
-					span.onclick = function() { loaddoc(this.det.doc_name, this.det.doc_name); }				
+					span.onclick = function() { loaddoc(this.det.doc_name, this.det.doc_name); }
 				}
 			}
 		}
-		
+
 		// item list
 		for(var i=0; i<me.il.length;i++){
 			if(type_map[me.il[i].doc_type] == sec_type) {
-				add_link(me.il[i]);	
+				add_link(me.il[i]);
 			}
 		}
 		loadpage(label, null, 1);
@@ -390,11 +390,11 @@
 SidebarModuleItem = function(si, det) {
 	this.det = det;
 	var me= this;
-	
-	this.pointer = new MenuPointer(si.items_area, get_doctype_label(det.doc_name)); 
+
+	this.pointer = new MenuPointer(si.items_area, get_doctype_label(det.doc_name));
 	$y(si.items_area, {marginLeft:'32px'})
 	$y($td(this.pointer.tab, 0, 0), {fontSize:'11px'});
-			
+
 	this.pointer.wrapper.onclick = function() {
 		if(me.det.doc_type=='Forms')
 			loaddocbrowser(det.doc_name);
@@ -416,10 +416,10 @@
 		}
 		$c_obj('Home Control', 'set_module_order', JSON.stringify(mdict), function(r,rt) { pscript.startup_make_sidebar(); } )
 	}
-	
+
 	var callback = function(r, rt) {
 		var ml = [];
-		for(var i=0; i<r.message.length; i++) { 
+		for(var i=0; i<r.message.length; i++) {
 			var det = r.message[i];
 			ml.push([det[1], det[2], (det[3]!='No' ? 0 : 1), det[0]]);
 		}
@@ -427,7 +427,7 @@
 			'<br><b>Note:</b> <i>These changes will apply to all users!</i>', ml, update_order, 1);
 	}
 	$c_obj('Home Control', 'get_module_order', '', callback)
-	
+
 }
 
 // ====================================================================
@@ -437,7 +437,7 @@
 	// Profile
   // ---------
   $td(menu_tab,0,0).innerHTML = '<a style="font-weight: bold; color: #FFF" href="javascript:'+"loadpage('profile-settings')"+'">'+user_fullname+'</a>';
-	
+
 	if(pscript.is_erpnext_saas){
 		// Help
   	// --------------
@@ -474,7 +474,7 @@
   var call_back = function(){
     if(nm == 'Sales Browser'){
       var sb_obj = new SalesBrowser();
-      sb_obj.set_val(chart_type);   
+      sb_obj.set_val(chart_type);
     }
     else if(nm == 'Accounts Browser')
       pscript.make_chart(chart_type);
@@ -501,7 +501,7 @@
 		var btn = this.page_head.add_button('Help', function() { loadpage(this.help_page) }, 1, 'ui-icon-help')
 		btn.help_page = help_page;
 	}
-	
+
 	if(callback) this.callback = function(){ callback(); }
 }
 
@@ -517,12 +517,12 @@
 // set user fullname
 // ====================================================================
 pscript.set_user_fullname = function(ele,username,get_latest){
-	
+
 	var set_it = function(){
 		if(ele)
 			ele.innerHTML = user_full_nm[username];
 	}
-	
+
 	if(get_latest){
 		$c_obj('Home Control','get_user_fullname',username, function(r,rt){ user_full_nm[username] = r.message; set_it(); });
 	}
@@ -530,7 +530,7 @@
 		if(user_full_nm[username]){
 			set_it();
 		}
-		
+
 		else
 			$c_obj('Home Control','get_user_fullname',username, function(r,rt){ user_full_nm[username] = r.message; set_it(); });
 	}
@@ -539,4 +539,182 @@
 // ====================================================================
 startup_setup();
 
-$(document).bind('form_refresh', function() { })
+/* features setup "Dictionary", "Script"
+Dictionary Format
+	'projects': {
+		'Sales Order': {
+			'fields':['project_name'],
+			'sales_order_details':['projected_qty']
+		},
+		'Purchase Order': {
+			'fields':['project_name']
+		}
+	}
+// ====================================================================*/
+pscript.feature_dict = {
+	'projects': {
+		'Bill Of Materials': {'fields':['project_name']},
+		'Delivery Note': {'fields':['project_name']},
+		'Payable Voucher': {'fields':['project_name']},
+		'Production Order': {'fields':['project_name']},
+		'Purchase Order': {'fields':['project_name']},
+		'Purchase Receipt': {'fields':['project_name']},
+		'Receivable Voucher': {'fields':['project_name']},
+		'Sales Order': {'fields':['project_name']},
+		'Stock Entry': {'fields':['project_name']},
+		'Timesheet': {'timesheet_details':['project_name']}
+	},
+	'packing_details': {
+		'Delivery Note': {'fields':['packing_details','print_packing_slip'],'delivery_note_details':['no_of_packs','pack_gross_wt','pack_nett_wt','pack_no','pack_unit']},
+		'Sales Order': {'fields':['packing_details']}
+	},
+	'discounts': {
+		'Delivery Note': {'delivery_note_details':['adj_rate']},
+		'Quotation': {'quotation_details':['adj_rate']},
+		'Receivable Voucher': {'entries':['adj_rate']},
+		'Sales Order': {'sales_order_details':['adj_rate','ref_rate']}
+	},
+	'brands': {
+		'Delivery Note': {'delivery_note_details':['brand']},
+		'Indent': {'indent_details':['brand']},
+		'Item': {'fields':['brand']},
+		'Purchase Order': {'po_details':['brand']},
+		'Payable Voucher': {'entries':['brand']},
+		'Quotation': {'quotation_details':['brand']},
+		'Receivable Voucher': {'entries':['brand']},
+		'Sales BOM': {'fields':['new_item_brand']},
+		'Sales Order': {'sales_order_details':['brand']},
+		'Serial No': {'fields':['brand']}
+	},
+	'after_sales_installations': {
+		'Delivery Note': {'fields':['installation_status','per_installed'],'delivery_note_details':['installed_qty']}
+	},
+	'item_batch_nos': {
+		'Delivery Note': {'delivery_note_details':['batch_no']},
+		'Item': {'fields':['has_batch_no']},
+		'Purchase Receipt': {'purchase_receipt_details':['batch_no']},
+		'QA Inspection Report': {'fields':['batch_no']},
+		'Sales and Pruchase Return Wizard': {'return_details':['batch_no']},
+		'Receivable Voucher': {'entries':['batch_no']},
+		'Stock Entry': {'mtn_details':['batch_no']},
+		'Stock Ledger Entry': {'fields':['batch_no']}
+	},
+	'item_serial_nos': {
+		'Customer Issue': {'fields':['serial_no']},
+		'Delivery Note': {'delivery_note_details':['serial_no'],'packing_details':['serial_no']},
+		'Installation Note': {'installed_item_details':['serial_no']},
+		'Item': {'fields':['has_serial_no']},
+		'Maintenance Schedule': {'item_maintenance_details':['serial_no'],'maintenance_schedule_details':['serial_no']},
+		'Maintenance Visit': {'maintenance_visit_details':['serial_no']},
+		'Purchase Receipt': {'purchase_receipt_details':['serial_no']},
+		'QA Inspection Report': {'fields':['item_serial_no']},
+		'Sales and Pruchase Return Wizard': {'return_details':['serial_no']},
+		'Receivable Voucher': {'entries':['serial_no']},
+		'Stock Entry': {'mtn_details':['serial_no']},
+		'Stock Ledger Entry': {'fields':['serial_no']}
+	},
+	'item_group_in_details': {
+		'Delivery Note': {'delivery_note_details':['item_group']},
+		'Enquiry': {'enquiry_details':['item_group']},
+		'Indent': {'indent_details':['item_group']},
+		'Item': {'fields':['item_group']},
+		'Manage Account': {'fields':['default_item_group']},
+		'Purchase Order': {'po_details':['item_group']},
+		'Purchase Receipt': {'purchase_receipt_details':['item_group']},
+		'Purchase Voucher': {'entries':['item_group']},
+		'Quotation': {'quotation_details':['item_group']},
+		'Receivable Voucher': {'entries':['item_group']},
+		'Sales BOM': {'fields':['serial_no']},
+		'Sales Order': {'sales_order_details':['item_group']},
+		'Serial No': {'fields':['item_group']},
+		'Sales Partner': {'partner_target_details':['item_group']},
+		'Sales Person': {'target_details':['item_group']},
+		'Territory': {'target_details':['item_group']}
+	},
+	'page_break': {
+		'Delivery Note': {'delivery_note_details':['page_break'],'packing_details':['page_break']},
+		'Indent': {'indent_details':['page_break']},
+		'Purchase Order': {'po_details':['page_break']},
+		'Purchase Receipt': {'purchase_receipt_details':['page_break']},
+		'Purchase Voucher': {'entries':['page_break']},
+		'Quotation': {'quotation_details':['page_break']},
+		'Receivable Voucher': {'entries':['page_break']},
+		'Sales Order': {'sales_order_details':['page_break']}
+	},
+	'exports': {
+		'Delivery Note': {'fields':['Note','conversion_rate','currency','grand_total_export','in_words_export','rounded_total_export'],'delivery_note_details':['base_ref_rate','export_amount','export_rate']},
+		'POS Setting': {'fields':['conversion_rate','currency']},
+		'Quotation': {'fields':['Note HTML','OT Notes','conversion_rate','currency','grand_total_export','in_words_export','rounded_total_export'],'quotation_details':['base_ref_rate','export_amount','export_rate']},
+		'Receivable Voucher': {'fields':['conversion_rate','currency','grand_total_export','in_words_export','rounded_total_export'],'entries':['base_ref_rate','export_amount','export_rate']},
+		'Item': {'ref_rate_details':['ref_currency']},
+		'Sales BOM': {'fields':['currency']},
+		'Sales Order': {'fields':['Note1','OT Notes','conversion_rate','currency','grand_total_export','in_words_export','rounded_total_export'],'sales_order_details':['base_ref_rate','export_amount','export_rate']}
+	},
+	'imports': {
+		'Payable Voucher': {'fields':['conversion_rate','currency','grand_total_import','in_words_import','net_total_import','other_charges_added_import','other_charges_deducted_import'],'entries':['import_amount','import_rate']},
+		'Purchase Order': {'fields':['Note HTML','conversion_rate','currency','grand_total_import','in_words_import','net_total_import','other_charges_added_import','other_charges_deducted_import'],'po_details':['import_amount','import_rate']},
+		'Purchase Receipt': {'fields':['conversion_rate','currency','grand_total_import','in_words_import','net_total_import','other_charges_added_import','other_charges_deducted_import'],'purchase_receipt_details':['import_amount','import_rate']},
+		'Supplier Quotation': {'fields':['conversion_rate','currency']}
+	},
+	'item_advanced': {
+		'Item': {'fields':['item_customer_details']}
+	},
+	'sales_extras': {
+		'Address': {'fields':['sales_partner']},
+		'Contact': {'fields':['sales_partner']},
+		'Customer': {'fields':['sales_team']},
+		'Delivery Note': {'fields':['sales_team','Packing List']},
+		'Item': {'fields':['item_customer_details']},
+		'Receivable Voucher': {'fields':['sales_team']},
+		'Sales Order': {'fields':['sales_team','Packing List']}
+	},
+	'more_info': {
+		'Customer': {'fields':['More Info']},
+		'Delivery Note': {'fields':['More Info']},
+		'Enquiry': {'fields':['More Info']},
+		'Indent': {'fields':['More Info']},
+		'Lead': {'fields':['More Info']},
+		'Payable Voucher': {'fields':['More Info']},
+		'Purchase Order': {'fields':['More Info']},
+		'Purchase Receipt': {'fields':['More Info']},
+		'Quotation': {'fields':['More Info']},
+		'Receivable Voucher': {'fields':['More Info']},
+		'Sales Order': {'fields':['More Info']},
+		'Serial No': {'fields':['More Info']},
+		'Supplier': {'fields':['More Info']}
+	},
+	'quality': {
+		'Item': {'fields':['Item Inspection Criteria','inspection_required']},
+		'Purchase Receipt': {'purchase_receipt_details':['qa_no']}
+	},
+	'manufacturing': {
+		'Item': {'fields':['Manufacturing']}
+	},
+	'pos': {
+		'Receivable Voucher': {'fields':['is_pos']}
+	}
+}
+
+$(document).bind('form_refresh', function() {
+	for(sys_feat in sys_defaults)
+	{
+		if(sys_defaults[sys_feat]=='0' && (sys_feat in pscript.feature_dict)) //"Features to hide" exists
+		{
+			if(cur_frm.doc.doctype in  pscript.feature_dict[sys_feat])
+			{
+				for(fort in pscript.feature_dict[sys_feat][cur_frm.doc.doctype])
+				{
+					if(fort=='fields')
+						hide_field(pscript.feature_dict[sys_feat][cur_frm.doc.doctype][fort]);
+					else if(cur_frm.fields_dict[fort])
+					{
+						for(grid_field in pscript.feature_dict[sys_feat][cur_frm.doc.doctype][fort])
+							cur_frm.fields_dict[fort].grid.set_column_disp(pscript.feature_dict[sys_feat][cur_frm.doc.doctype][fort][grid_field], false);
+					}
+					else
+						msgprint('Grid "'+fort+'" does not exists');
+				}
+			}
+		}
+	}
+})
diff --git a/stock/doctype/item/item.js b/stock/doctype/item/item.js
index 6dd7377..691e259 100644
--- a/stock/doctype/item/item.js
+++ b/stock/doctype/item/item.js
@@ -110,3 +110,9 @@
 cur_frm.cscript.validate = function(doc,cdt,cdn){
   cur_frm.cscript.weight_to_validate(doc,cdt,cdn);
 }
+
+//===========Fill Default Currency in "Ref Rate Details====================
+cur_frm.fields_dict['ref_rate_details'].grid.onrowadd = function(doc, cdt, cdn){
+	locals[cdt][cdn].ref_currency = sys_defaults.currency;
+	refresh_field('ref_currency',cdn,'ref_rate_details');
+}
\ No newline at end of file
diff --git a/stock/doctype/ref_rate_detail/ref_rate_detail.txt b/stock/doctype/ref_rate_detail/ref_rate_detail.txt
index 1774b08..3f9b5a7 100644
--- a/stock/doctype/ref_rate_detail/ref_rate_detail.txt
+++ b/stock/doctype/ref_rate_detail/ref_rate_detail.txt
@@ -5,8 +5,8 @@
 	{
 		'creation': '2010-08-08 17:09:19',
 		'docstatus': 0,
-		'modified': '2010-09-20 14:06:57',
-		'modified_by': 'umair@iwebnotes.com',
+		'modified': '2011-08-31 11:36:41',
+		'modified_by': 'Administrator',
 		'owner': 'Administrator'
 	},
 
@@ -23,7 +23,7 @@
 		'section_style': 'Tray',
 		'server_code_error': ' ',
 		'show_in_menu': 0,
-		'version': 2
+		'version': 3
 	},
 
 	# These values are common for all DocField
@@ -34,7 +34,8 @@
 		'parent': 'Ref Rate Detail',
 		'parentfield': 'fields',
 		'parenttype': 'DocType',
-		'permlevel': 0
+		'permlevel': 0,
+		'search_index': 1
 	},
 
 	# DocType, Ref Rate Detail
@@ -48,13 +49,12 @@
 		'doctype': 'DocField',
 		'fieldname': 'price_list_name',
 		'fieldtype': 'Select',
-		'idx': 1,
 		'label': 'Price List Name',
 		'oldfieldname': 'price_list_name',
 		'oldfieldtype': 'Select',
 		'options': 'link:Price List',
 		'reqd': 1,
-		'search_index': 1
+		'trigger': 'Client'
 	},
 
 	# DocField
@@ -62,12 +62,10 @@
 		'doctype': 'DocField',
 		'fieldname': 'ref_rate',
 		'fieldtype': 'Currency',
-		'idx': 2,
 		'label': 'Ref Rate',
 		'oldfieldname': 'ref_rate',
 		'oldfieldtype': 'Currency',
-		'reqd': 0,
-		'search_index': 0
+		'reqd': 0
 	},
 
 	# DocField
@@ -75,12 +73,10 @@
 		'doctype': 'DocField',
 		'fieldname': 'ref_currency',
 		'fieldtype': 'Select',
-		'idx': 3,
 		'label': 'Currency',
 		'oldfieldname': 'ref_currency',
 		'oldfieldtype': 'Select',
 		'options': 'link:Currency',
-		'reqd': 1,
-		'search_index': 1
+		'reqd': 1
 	}
 ]
\ No newline at end of file
