diff --git a/crm/doctype/quotation/quotation.js b/crm/doctype/quotation/quotation.js
index bdf6781..f21df25 100644
--- a/crm/doctype/quotation/quotation.js
+++ b/crm/doctype/quotation/quotation.js
@@ -21,11 +21,6 @@
   //if(!doc.price_list_name && sys_defaults.price_list_name) set_multiple(cdt,cdn,{price_list_name:sys_defaults.price_list_name});
   if(!doc.company && sys_defaults.company) set_multiple(cdt,cdn,{company:sys_defaults.company});
   if(!doc.fiscal_year && sys_defaults.fiscal_year) set_multiple(cdt,cdn,{fiscal_year:sys_defaults.fiscal_year});
-
-  // load default charges
-  if(doc.__islocal && !getchildren('RV Tax Detail', doc.name, 'other_charges', doc.doctype).length) cur_frm.cscript.load_taxes(doc, cdt, cdn);
-
-  if(doc.__islocal==1){  cur_frm.cscript.price_list_name(doc, cdt, cdn);}
   
   if(doc.quotation_to) {
     if(doc.quotation_to == 'Customer') {
@@ -37,6 +32,12 @@
   }
 }
 
+cur_frm.cscript.onload_post_render = function(doc, dt, dn) {
+  // load default charges
+  if(doc.__islocal && !getchildren('RV Tax Detail', doc.name, 'other_charges', doc.doctype).length) 
+    cur_frm.cscript.load_taxes(doc, cdt, cdn);
+}
+
 // hide - unhide fields based on lead or customer..
 // =======================================================================================================================
 cur_frm.cscript.lead_cust_show = function(doc,cdt,cdn){
diff --git a/setup/doctype/setup_control/setup_control.py b/setup/doctype/setup_control/setup_control.py
index 9712860..02fd573 100644
--- a/setup/doctype/setup_control/setup_control.py
+++ b/setup/doctype/setup_control/setup_control.py
@@ -142,23 +142,27 @@
   # Create Profile
   # --------------
   def create_profile(self, user_email, user_fname, user_lname):
-    roles_list = ['System Manager','Sales Manager','Sales User','Purchase Manager','Purchase User','Material Manager','Material User','Accounts Manager','Accounts User','HR Manager','HR User','Production Manager','Production User','Sales Master Manager','Purchase Master Manager','Material Master Manager','Quality Manager','Maintenance User','Maintenance Manager']
     pr = Document('Profile')
     pr.first_name = user_fname
     pr.last_name = user_lname
     pr.email = user_email
     pr.enabled = 1
     pr.save(1)
+	self.add_roles(pr)
+
+  def add_roles(self, pr):
+    roles_list = ['System Manager','Sales Manager','Sales User','Purchase Manager','Purchase User','Material Manager','Material User','Accounts Manager','Accounts User','HR Manager','HR User','Production Manager','Production User','Sales Master Manager','Purchase Master Manager','Material Master Manager','Quality Manager','Maintenance User','Maintenance Manager']
     for r in roles_list:
       d = addchild(pr, 'userroles', 'UserRole', 1)
       d.role = r
-      d.save()
+      d.save(1)
+
     # Add roles to Administrator profile
     pr_obj = get_obj('Profile','Administrator')
     for r in roles_list:
       d = addchild(pr_obj.doc,'userroles', 'UserRole', 1)
       d.role = r
-      d.save()
+      d.save(1)
   
   # Update WN ERP Client Control
   # -----------------------------
