diff --git a/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.txt b/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.txt
index 1f7efb5..c70745e 100644
--- a/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.txt
+++ b/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.txt
@@ -3,9 +3,9 @@
 
 	# These values are common in all dictionaries
 	{
-		'creation': '2012-03-27 14:35:46',
+		'creation': '2012-04-13 11:56:17',
 		'docstatus': 0,
-		'modified': '2012-03-27 14:45:49',
+		'modified': '2012-05-31 11:38:17',
 		'modified_by': u'Administrator',
 		'owner': u'jai@webnotestech.com'
 	},
@@ -24,7 +24,7 @@
 		'section_style': u'Simple',
 		'server_code_error': u' ',
 		'show_in_menu': 0,
-		'version': 123
+		'version': 1
 	},
 
 	# These values are common for all DocField
@@ -96,6 +96,20 @@
 
 	# DocPerm
 	{
+		'doctype': u'DocPerm',
+		'permlevel': 1,
+		'role': u'System Manager'
+	},
+
+	# DocPerm
+	{
+		'doctype': u'DocPerm',
+		'permlevel': 1,
+		'role': u'Accounts Manager'
+	},
+
+	# DocPerm
+	{
 		'amend': 1,
 		'cancel': 1,
 		'create': 1,
@@ -117,20 +131,6 @@
 		'write': 1
 	},
 
-	# DocPerm
-	{
-		'doctype': u'DocPerm',
-		'permlevel': 1,
-		'role': u'System Manager'
-	},
-
-	# DocPerm
-	{
-		'doctype': u'DocPerm',
-		'permlevel': 1,
-		'role': u'Accounts Manager'
-	},
-
 	# DocField
 	{
 		'doctype': u'DocField',
@@ -241,6 +241,17 @@
 	# DocField
 	{
 		'doctype': u'DocField',
+		'fieldname': u'coa_help',
+		'fieldtype': u'HTML',
+		'label': u'CoA Help',
+		'oldfieldtype': u'HTML',
+		'options': u'<a href="#!Accounts Browser/Account">To manage Account Head, click here</a>',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': u'DocField',
 		'fieldname': u'remarks',
 		'fieldtype': u'Small Text',
 		'label': u'Remarks',
diff --git a/erpnext/selling/doctype/customer/customer.js b/erpnext/selling/doctype/customer/customer.js
index 78743e7..33445b7 100644
--- a/erpnext/selling/doctype/customer/customer.js
+++ b/erpnext/selling/doctype/customer/customer.js
@@ -133,13 +133,6 @@
 	return 'SELECT `tabCustomer Group`.`name`, `tabCustomer Group`.`parent_customer_group` FROM `tabCustomer Group` WHERE `tabCustomer Group`.`is_group` = "No" AND `tabCustomer Group`.`docstatus`!= 2 AND `tabCustomer Group`.%(key)s LIKE "%s" ORDER BY	`tabCustomer Group`.`name` ASC LIMIT 50';
 }
 
-cur_frm.cscript.CGHelp = function(doc,dt,dn){
-	var call_back = function(){
-		var sb_obj = new SalesBrowser();				
-		sb_obj.set_val('Customer Group');
-	}
-	loadpage('Sales Browser',call_back);
-}
 
 // -----
 // lead
diff --git a/erpnext/selling/doctype/lead/lead.js b/erpnext/selling/doctype/lead/lead.js
index a167281..4aa460d 100644
--- a/erpnext/selling/doctype/lead/lead.js
+++ b/erpnext/selling/doctype/lead/lead.js
@@ -22,7 +22,7 @@
   if(user =='Guest'){
     hide_field(['status', 'naming_series', 'order_lost_reason',
 	'customer', 'rating', 'fax', 'website', 'territory',
-	'TerritoryHelp', 'address_line1', 'address_line2', 'city', 'state',
+	'address_line1', 'address_line2', 'city', 'state',
 	'country', 'pincode', 'address', 'lead_owner', 'market_segment',
 	'industry', 'campaign_name', 'interested_in', 'company',
 	'fiscal_year', 'contact_by', 'contact_date', 'last_contact_date',
@@ -62,14 +62,6 @@
   cur_frm.cscript.refresh(doc, cdt, cdn);
 }
 
-cur_frm.cscript.TerritoryHelp = function(doc,dt,dn){
-  var call_back = function(){
-    var sb_obj = new SalesBrowser();        
-    sb_obj.set_val('Territory');
-  }
-
-  loadpage('Sales Browser',call_back);
-}
 
 //Trigger in Item Table
 //===================================
diff --git a/erpnext/selling/doctype/sales_common/sales_common.js b/erpnext/selling/doctype/sales_common/sales_common.js
index 32c5d9e..f495b99 100644
--- a/erpnext/selling/doctype/sales_common/sales_common.js
+++ b/erpnext/selling/doctype/sales_common/sales_common.js
@@ -170,26 +170,6 @@
 }
 
 
-//====================opens territory tree page ==================
-cur_frm.cscript.TerritoryHelp = function(doc,dt,dn){
-	var call_back = function(){
-
-		var sb_obj = new SalesBrowser();				
-		sb_obj.set_val('Territory');
-	}
-	loadpage('Sales Browser',call_back);
-}
-
-//====================opens customer group tree page ==================
-cur_frm.cscript.CGHelp = function(doc,dt,dn){
-	var call_back = function(){
-		var sb_obj = new SalesBrowser();				
-		sb_obj.set_val('Customer Group');
-	}
-	loadpage('Sales Browser',call_back);
-}
-
-
 // TRIGGERS FOR CALCULATIONS
 // =====================================================================================================
 
diff --git a/erpnext/selling/page/sales_browser/sales_browser.js b/erpnext/selling/page/sales_browser/sales_browser.js
index 4d5a3dc..785b17a 100644
--- a/erpnext/selling/page/sales_browser/sales_browser.js
+++ b/erpnext/selling/page/sales_browser/sales_browser.js
@@ -129,436 +129,3 @@
 		return this.tree.$w.find('.tree-link.selected');
 	}
 });
-
-/*
-pscript['onshow_Sales Browser'] = function(){
-  wn.require('lib/js/legacy/widgets/tree.js');
-
-	var route = decodeURIComponent(location.hash);
-	if(route.indexOf('/')!=-1) {
-		var chart_type = route.split('/')[1];
-		new SalesBrowser().set_val(chart_type)
-		return;
-	}
-
-  var parent = $i('tr_body');
-  parent.innerHTML = 'Please select your chart: '
-  var sel = $a(parent,'select');
-  add_sel_options(sel, ['Territory', 'Customer Group', 'Item Group', 'Sales Person'], 'Territory');
-  var btn = $btn(parent, 'Go', function() { new SalesBrowser().set_val(sel_val(sel)) }, {marginTop:'8px'});
-}
-
-//================================= SalesBrowser Class ======================================
-SalesBrowser = function(){
-  
-  this.make_body = function(){
-  
-    $i('tr_header').innerHTML = '';
-    $i('tr_body').innerHTML = '';
-    //make header
-    var desc = this.sel;
-    var me = this;
-    var h = new PageHeader($i('tr_header'),desc);
-    h.add_button('New '+this.sel, function() { me.set_dialog(1); }, 0, 'ui-icon-plus', 1);
-    h.add_button('Refresh', function() { me.refresh_tree(); }, 0, 'ui-icon-refresh');
-
-    var div_body = $a($i('tr_body'),'div');
-    var tr_main_grid = make_table(div_body,1,2,'100%',['60%','40%'],{width: "100%", tableLayout: "fixed", borderCollapse: "collapse", border:"0px", padding:"4px 4px 4px 4px"});
-    
-    $y($td(tr_main_grid,0,0),{border: "1px solid #dddddd", padding: "8px", width: "60%"});   
-    this.tree_area = $a($td(tr_main_grid,0,0),'div','',{minHeight:'400px'});
-
-    $y($td(tr_main_grid,0,1),{border: "1px solid #DDD"});   
-    this.detail_area = $a($td(tr_main_grid,0,1),'div');
-    
-    this.make_tree_body(this.tree_area);  
-    this.refresh_tree();
-  }
-  
-  this.set_val = function(b){
-    var me = this;
-    me.sel = b;  
-    me.make_body();
-  }
-}
-
-//=================================================================================================================================
-SalesBrowser.prototype.make_tree_body = function(parent){
-
-  //this.tab2 =make_table(this.wrapper,1,2,'100%',['60%','40%']);
-  this.make_tree();
-  this.make_rgt_sect();
-  
-}
-
-//=================================================================================================================================
-SalesBrowser.prototype.make_rgt_sect=function(){
-  //var d = $a($td(this.tab2,0,1),'div','',{border:'1px solid #000'});
-
-  this.rgt_tab =make_table(this.detail_area,4,1,'','',{padding:"4px",spacing:"4px"});
-  this.dtl = $a($td(this.rgt_tab,0,0),'div');
-  this.btn = $a($td(this.rgt_tab,1,0),'div','span');
-  this.help = $a($td(this.rgt_tab,2,0),'div');
-  this.help.innerHTML = "Note: Explore and click on the tree node to see details."
-
-  this.set_btn();
-}
-//=================================================================================================================================
-SalesBrowser.prototype.set_btn = function(){
-  var me = this;
-  this.edit_btn = $btn(this.btn,'Edit',function(){ me.set_dialog(2); });
-
-  this.trash_btn = $btn(this.btn,'Trash',null);
-  this.trash_btn.onclick = function(){
-    var check = confirm("Are you sure you want to trash "+me.cur_node.rec.name+" node?");
-    
-    if(check){
-      var arg = [me.cur_node.rec.name, me.sel];
-      $c_obj('Sales Browser Control','trash_record',arg.join(','),function(r,rt){      me.refresh_tree();});
-
-    }
-  }
-}
-
-//=====================================================
-SalesBrowser.prototype.set_dialog = function(f){
-
- 
-  if(this.sel == 'Territory')
-    new MakeDialog('Territory','territory',f,this);            //Territory Dialog
-  if(this.sel == 'Customer Group')
-    new MakeDialog('Customer Group','customer_group',f,this);  //Customer Group Dialog  
-  if(this.sel == 'Item Group')
-    new MakeDialog('Item Group','item_group',f,this);   //Item Group Dialog
-  if(this.sel == 'Sales Person')
-    new MakeDialog('Sales Person','sales_person',f,this);//Sales Person Dialog 
-  
-}
-//=====================================================Make Tree============================================================================
-SalesBrowser.prototype.make_tree = function() {
-  var me = this;
-
-  this.tree = new Tree(this.tree_area, '100%');
-  
-  //---------------------------------------------------------------------------------------------------------------------------------
-  // on click
-  this.tree.std_onclick = function(node) {
-      
-      me.cur_node = node;
-      if(node.rec.name =='All Customer Groups' || node.rec.name =='All Sales Persons' || node.rec.name =='All Item Groups' || node.rec.name =='All Territories'){
-        //$di(me.add_btn);
-
-        $dh(me.edit_btn);
-        $dh(me.trash_btn);
-      }
-      else{
-        //$di(me.add_btn);
-        //if(node.has_children == false)
-          //$dh(me.add_btn);
-
-        $di(me.edit_btn);
-        $di(me.trash_btn);
-
-      }
-      me.make_details();
-	  
-  }
-  //---------------------------------------------------------------------------------------------------------------------------------
-  // on expand
-  this.tree.std_onexp = function(node) {
-
-    if(node.expanded_once)return;
-    $di(node.loading_div);
-
-    var callback = function(r,rt) {
-
-      $dh(node.loading_div);
-      var n = me.tree.allnodes[r.message.parent];
-      var cl = r.message.cl;
-
-      for(var i=0;i<cl.length;i++) {
-        var imgsrc=null;
-        var has_children = true;
-
-        if(cl[i].is_group=='No') {
-          var imgsrc = 'lib/images/icons/page.png';
-          has_children = false;
-        }
-        var t = me.tree.addNode(n, cl[i].name, imgsrc,me.tree.std_onclick, has_children ? me.tree.std_onexp : null);
-        t.rec = cl[i];
-        t.parent_account = r.message.parent;
-        t.has_children = has_children;
-      }
-
-    }
-    var arg = [node.rec.name, me.sel];
-    $c_obj('Sales Browser Control','get_record_list',arg.join(','),callback);
-  }
-  
- 
-}
-
-//=================================================================================================================================
-SalesBrowser.prototype.make_details = function(){
-  var me = this;
-  var callback = function(r,rt){
-
-    me.dtl.innerHTML = "";
-    //me.dtl_tab = make_table(me.dtl,3,2,'','',{tableLayout:'fixed',borderCollapse: 'collapse'})
-    
-    var h = $a(me.dtl,'h3','',{padding:'4px', margin:'0px',backgroundColor:'#EEEEEE',borderBottom:'1px solid #AAAAAA'});
-    $(h).html(r.message.name);
-    
-    var d = $a(me.dtl,'div');
-    me.dtl_tab = make_table(me.dtl,3,2,'','',{tableLayout:'fixed',borderCollapse: 'collapse',padding:'4px'})
-    $td(me.dtl_tab,0,0).innerHTML="Parent";
-    if(r.message.parent != '')
-      $td(me.dtl_tab,0,1).innerHTML=": "+r.message.parent;
-    else
-      $td(me.dtl_tab,0,1).innerHTML=": ----";    
-    $td(me.dtl_tab,1,0).innerHTML="Has Child Node";
-    $td(me.dtl_tab,1,1).innerHTML=": "+r.message.is_group;
-   
-
-    me.open_doc = $a(me.dtl,'div','link_type',{paddingTop:'14px'});
-    me.open_doc.innerHTML = "Click here to open "+r.message.name;
-    
-    me.open_doc.onclick = function(){
-      loaddoc(me.sel,r.message.name );
-    }
-  }
-
-  var arg = [this.cur_node.rec.name, this.sel];
-  
-  $c_obj('Sales Browser Control','get_record',arg.join(','),callback);
-
-}
-//=================================================================================================================================
-SalesBrowser.prototype.refresh_tree=function(){
-
-  this.tree_area.innerHTML = '';
-  this.dtl.innerHTML = '';  
-  this.first_level_node();    //set root
-  //hide add, edit, trash buttons
-  //$dh(this.add_btn);
-  $dh(this.edit_btn);
-  $dh(this.trash_btn);
-  
-
-
-}
-
-//=============================== make first level node ================================================
-SalesBrowser.prototype.first_level_node = function(){
-
-  var me = this;
-  var callback = function(r,rt) {
-
-    var cl = r.message.cl;
-
-    for(var i=0;i<cl.length;i++) {
-      var imgsrc=null;
-      var has_children = true;
-
-      if(cl[i].is_group=='No') {
-        var imgsrc = 'lib/images/icons/page.png';
-        has_children = false;
-      }
-     me.tree_area.innerHTML = ''; 
-     if(me.tree) {
-
-        me.tree.innerHTML = '';
-        me.tree.body.innerHTML = '';
-        
-        me.make_tree();
-      }
-
-      var t = me.tree.addNode(null, cl[i].name, imgsrc,me.tree.std_onclick, has_children ? me.tree.std_onexp : null);
-      t.rec ={};
-      t.rec.name = cl[i].name;
-      t.has_children = has_children;
-    }
-  }
-
-  $c_obj('Sales Browser Control','get_fl_node',this.sel,callback);
-
-}
-
-//========================================= Dialog Section ===================================================================
-//--------------------------------------------------------------------------------------------------------------------------------
-//========================================================================
-MakeDialog=function(label,field_name,n,cls_obj){
-
-  var new_head = 'Create A New '+label;
-
-  this.label = label;
-
-  this.lbl_rec = label+' Name';
-  this.field_name = field_name;
-  this.n = n;
-  this.cls_obj=cls_obj;
-  //-----------------------------------------------
- 
-  this.main_dialog = new Dialog(400,300,new_head);      
-  this.set_dg_fields();
-  this.set_dg_values();
-  //-----------------------------------------------
-  this.new_main_dialog = this.main_dialog;
-  
-  this.new_main_dialog.show();
-
-}
-//=================================================================================================================================
-MakeDialog.prototype.set_dg_fields = function(){
-
-  var bd_lst = [];
-  bd_lst.push(['HTML','Heading'],['Data',this.lbl_rec],['Select','Parent'],['Select','Has Child Node']);
-  if(this.cls_obj.sel == 'Sales Person')
-    bd_lst.push(['HTML','','All nodes are allowed in transaction.']);
-  else
-    bd_lst.push(['HTML','','Only leaf nodes are allowed in transaction.']);
-  if(this.n==1)
-    bd_lst.push(['Button','Create']);
-  
-  if(this.n==2){
-    bd_lst.push(['Button','Update']);
-    this.set_edit_fields();
-  }  
-
-  this.main_dialog.make_body(bd_lst);
-  
-  //-----------------------------------------------
-}
-
-
-//==================================================================================================================================== 
-MakeDialog.prototype.set_edit_fields=function(){
-  var me = this;
-  var callback = function(r,rt){
-    
-    me.main_dialog.widgets[me.lbl_rec].value = r.message.name;
-    
-    add_sel_options(me.main_dialog.widgets['Parent'], r.message.parent_lst,r.message.parent);    
-    me.main_dialog.widgets['Has Child Node'].value = r.message.is_group;
-  }
-
-  var arg = [this.cls_obj.cur_node.rec.name, this.cls_obj.sel];
-  
-  $c_obj('Sales Browser Control','get_record',arg.join(','),callback);
-}
-//======================================= Validation - fields entered or not =================================================
-MakeDialog.prototype.validate = function(){
-
-  if(!this.main_dialog.widgets[this.lbl_rec].value) {
-      err_msg1 ='Please enter '+this.label +' Name' 
-      alert(err_msg1); 
-      return 1;
-    }
-    if(!this.main_dialog.widgets['Parent'].value){
-      alert('Please enter Parent Name' );
-      return 1;
-    }
-}
-//==================================================================================================================================== 
-MakeDialog.prototype.set_dg_values = function(){
-  if(this.n==1){
-    var me = this;
-    var callback = function(r,rt){
-      me.main_dialog.widgets[me.lbl_rec].disabled = 0;
-      me.main_dialog.widgets['Parent'].disabled = 0;
-
-      add_sel_options(me.main_dialog.widgets['Parent'],r.message);
-      //add_sel_options(this.main_dialog.widgets['Parent'], [this.cls_obj.cur_node.rec.name]);
-      me.btn_onclick('Create',me.cls_obj);
-    }
-  
-    $c_obj('Sales Browser Control','get_parent_lst',this.cls_obj.sel,callback);
-
-  }  
-  if(this.n == 2){
-    this.main_dialog.widgets[this.lbl_rec].disabled = 1;
-    this.main_dialog.widgets['Parent'].disabled = 0;
-    this.btn_onclick('Update');
-    this.old_value = sel_val(this.main_dialog.widgets['Parent']);
-  }
-
-  add_sel_options(this.main_dialog.widgets['Has Child Node'], ['Yes','No'], 'No');
-
-}
-
-//================================================================================================================================= 
-//-----------------------------------------Dialog button onclick event----------------------------------------------
-MakeDialog.prototype.btn_onclick=function(btn_name){
-  var me = this;
-  this.btn_name = btn_name;
-  this.main_dialog.widgets[this.btn_name].onclick = function() {
-  
-    var callback=function(r,rt){
-      if(r.message == 'true'){
-        me.main_dialog.hide();
-      }
-      else{
-        flag = me.validate();
-        if(flag == 1) return;
-           
-        //---------------------------------------------------------  
-
-        var arg2 = me.make_args();
-        
-        //create Sales Person -- server to Sales Browser Control
-        if(me.btn_name == "Create")
-          method_name = "add_node";
-        else 
-          method_name = "edit_node";       
-           
-        $c_obj('Sales Browser Control',method_name, docstring(arg2), function(r,rt) { 
-          me.main_dialog.widgets[me.lbl_rec].value='';
-          me.main_dialog.hide();
-          //if(me.btn_name == "Create"){
-          //  me.cls_obj.cur_node.clear_child_nodes();
-          //  me.cls_obj.dtl.innerHTML = '';  
-          //  me.cls_obj.cur_node.expand();
-          //}
-          //else{
-          //  me.cls_obj.refresh_tree();   
-          //}
-          me.cls_obj.refresh_tree(); 
-        });
-      }
-    }
-    var arg1 = {'node_title':me.cls_obj.sel,'is_group':sel_val(me.main_dialog.widgets['Has Child Node']),'lft':0,'rgt':0,'nm':me.main_dialog.widgets[me.lbl_rec].value,'parent_nm':sel_val(me.main_dialog.widgets['Parent']),'action':me.btn_name};
-    $c_obj('Sales Browser Control','mvalidate',docstring(arg1),callback);
-  }
-}
-//=================================================================================================================================
-
-MakeDialog.prototype.make_args = function(){
-  var args ={};   //args making
-  var nt = this.cls_obj.sel;
-  var nm = this.main_dialog.widgets[this.lbl_rec].value;
-  var pnm = sel_val(this.main_dialog.widgets['Parent']);
-  var grp = sel_val(this.main_dialog.widgets['Has Child Node']);
-
-  if(this.n==1)
-    var old_prt ='';
-  else if(this.n==2){
-    if(this.old_value == sel_val(this.main_dialog.widgets['Parent']))
-      var old_prt = '';
-    else
-      var old_prt = this.old_value;
-  }
-  
-  if(this.cls_obj.sel == 'Territory')
-    return {'node_title':nt,'territory_name':nm,'parent_territory':pnm,'is_group':grp,'old_parent':old_prt}
-
-  else if(this.cls_obj.sel == 'Customer Group')
-    return {'node_title':nt,'customer_group_name':nm,'parent_customer_group':pnm,'is_group':grp,'old_parent':old_prt}
-
-  else if(this.cls_obj.sel == 'Item Group')
-    return {'node_title':nt,'item_group_name':nm,'parent_item_group':pnm,'is_group':grp,'old_parent':old_prt}
-
-  else if(this.cls_obj.sel == 'Sales Person')
-    return {'node_title':nt,'sales_person_name':nm,'parent_sales_person':pnm,'is_group':grp,'old_parent':old_prt}
-
-}
-*/
\ No newline at end of file
diff --git a/erpnext/setup/doctype/contact_control/contact_control.js b/erpnext/setup/doctype/contact_control/contact_control.js
index 51fc5cf..aca8995 100755
--- a/erpnext/setup/doctype/contact_control/contact_control.js
+++ b/erpnext/setup/doctype/contact_control/contact_control.js
@@ -103,16 +103,6 @@
   cur_frm.cscript.get_states(doc, dt, dn);
 }
 
-// territory help - cutsomer + sales partner
-// -----------------------------------------
-cur_frm.cscript.TerritoryHelp = function(doc,dt,dn){
-  var call_back = function(){
-
-    var sb_obj = new SalesBrowser();        
-    sb_obj.set_val('Territory');
-  }
-  loadpage('Sales Browser',call_back);
-}
 
 // get query select Territory
 // ---------------------------
diff --git a/erpnext/setup/doctype/sales_person/sales_person.js b/erpnext/setup/doctype/sales_person/sales_person.js
index 0057ff0..f3e01a1 100644
--- a/erpnext/setup/doctype/sales_person/sales_person.js
+++ b/erpnext/setup/doctype/sales_person/sales_person.js
@@ -38,15 +38,6 @@
   );
 }
 
-cur_frm.cscript.TreePage = function(nm){
-  var call_back = function(){
-    var sb_obj = new SalesBrowser();        
-    sb_obj.set_val(nm);
-
-  }
-  loadpage('Sales Browser',call_back);
-
-}
 
 //get query select sales person
 cur_frm.fields_dict['parent_sales_person'].get_query = function(doc,cdt,cdn) {
diff --git a/erpnext/setup/doctype/sales_person/sales_person.txt b/erpnext/setup/doctype/sales_person/sales_person.txt
index 45769e1..5ff8e94 100644
--- a/erpnext/setup/doctype/sales_person/sales_person.txt
+++ b/erpnext/setup/doctype/sales_person/sales_person.txt
@@ -3,9 +3,9 @@
 
 	# These values are common in all dictionaries
 	{
-		'creation': '2012-03-27 14:36:23',
+		'creation': '2012-04-13 11:56:32',
 		'docstatus': 0,
-		'modified': '2012-03-27 18:49:47',
+		'modified': '2012-05-31 11:28:32',
 		'modified_by': u'Administrator',
 		'owner': u'Administrator'
 	},
@@ -25,7 +25,7 @@
 		'section_style': u'Simple',
 		'server_code_error': u' ',
 		'show_in_menu': 0,
-		'version': 132
+		'version': 1
 	},
 
 	# These values are common for all DocField
@@ -57,6 +57,46 @@
 
 	# DocPerm
 	{
+		'cancel': 0,
+		'create': 0,
+		'doctype': u'DocPerm',
+		'permlevel': 1,
+		'role': u'Sales Manager',
+		'write': 0
+	},
+
+	# DocPerm
+	{
+		'cancel': 0,
+		'create': 0,
+		'doctype': u'DocPerm',
+		'permlevel': 0,
+		'role': u'Sales Manager',
+		'write': 0
+	},
+
+	# DocPerm
+	{
+		'cancel': 0,
+		'create': 0,
+		'doctype': u'DocPerm',
+		'permlevel': 1,
+		'role': u'Sales User',
+		'write': 0
+	},
+
+	# DocPerm
+	{
+		'cancel': 0,
+		'create': 0,
+		'doctype': u'DocPerm',
+		'permlevel': 0,
+		'role': u'Sales User',
+		'write': 0
+	},
+
+	# DocPerm
+	{
 		'cancel': 1,
 		'create': 1,
 		'doctype': u'DocPerm',
@@ -75,46 +115,6 @@
 		'write': 0
 	},
 
-	# DocPerm
-	{
-		'cancel': 0,
-		'create': 0,
-		'doctype': u'DocPerm',
-		'permlevel': 1,
-		'role': u'Sales Manager',
-		'write': 0
-	},
-
-	# DocPerm
-	{
-		'cancel': 0,
-		'create': 0,
-		'doctype': u'DocPerm',
-		'permlevel': 0,
-		'role': u'Sales Manager',
-		'write': 0
-	},
-
-	# DocPerm
-	{
-		'cancel': 0,
-		'create': 0,
-		'doctype': u'DocPerm',
-		'permlevel': 1,
-		'role': u'Sales User',
-		'write': 0
-	},
-
-	# DocPerm
-	{
-		'cancel': 0,
-		'create': 0,
-		'doctype': u'DocPerm',
-		'permlevel': 0,
-		'role': u'Sales User',
-		'write': 0
-	},
-
 	# DocField
 	{
 		'doctype': u'DocField',
@@ -316,7 +316,7 @@
 		'fieldtype': u'HTML',
 		'label': u'Territory Help',
 		'oldfieldtype': u'HTML',
-		'options': u'<a href="javascript:cur_frm.cscript.TreePage(\'Territory\');">To manage Territory, click here</a>',
+		'options': u'<a href="#!Sales Browser/Territory">To manage Territories, click here</a>',
 		'permlevel': 0
 	},
 
diff --git a/erpnext/setup/doctype/territory/territory.js b/erpnext/setup/doctype/territory/territory.js
index 3752f26..09b0315 100644
--- a/erpnext/setup/doctype/territory/territory.js
+++ b/erpnext/setup/doctype/territory/territory.js
@@ -39,13 +39,3 @@
 cur_frm.fields_dict['target_details'].grid.get_field("item_group").get_query = function(doc, cdt, cdn) {
   return 'SELECT `tabItem Group`.`name`,`tabItem Group`.`parent_item_group` FROM `tabItem Group` WHERE `tabItem Group`.is_group="No" AND `tabItem Group`.docstatus != 2 AND `tabItem Group`.%(key)s LIKE "%s" LIMIT 50'
 }
-
-cur_frm.cscript.TerritoryHelp = function(doc,dt,dn){
-  var call_back = function(){
-    var sb_obj = new SalesBrowser();        
-    sb_obj.set_val('Territory');
-
-  }
-  loadpage('Sales Browser',call_back);
-  
-}
\ No newline at end of file
diff --git a/erpnext/setup/doctype/territory/territory.txt b/erpnext/setup/doctype/territory/territory.txt
index 2a1cc4d..3632801 100644
--- a/erpnext/setup/doctype/territory/territory.txt
+++ b/erpnext/setup/doctype/territory/territory.txt
@@ -3,9 +3,9 @@
 
 	# These values are common in all dictionaries
 	{
-		'creation': '2012-03-27 14:36:25',
+		'creation': '2012-04-13 11:56:32',
 		'docstatus': 0,
-		'modified': '2012-03-27 18:50:08',
+		'modified': '2012-05-31 11:39:33',
 		'modified_by': u'Administrator',
 		'owner': u'Administrator'
 	},
@@ -27,7 +27,7 @@
 		'section_style': u'Simple',
 		'server_code_error': u' ',
 		'show_in_menu': 0,
-		'version': 87
+		'version': 1
 	},
 
 	# These values are common for all DocField
@@ -59,6 +59,56 @@
 
 	# DocPerm
 	{
+		'cancel': 0,
+		'create': 0,
+		'doctype': u'DocPerm',
+		'permlevel': 1,
+		'role': u'Sales Manager',
+		'write': 0
+	},
+
+	# DocPerm
+	{
+		'cancel': 0,
+		'create': 0,
+		'doctype': u'DocPerm',
+		'permlevel': 0,
+		'role': u'Sales Manager',
+		'write': 0
+	},
+
+	# DocPerm
+	{
+		'cancel': 0,
+		'create': 0,
+		'doctype': u'DocPerm',
+		'permlevel': 1,
+		'role': u'Sales Master Manager',
+		'write': 0
+	},
+
+	# DocPerm
+	{
+		'cancel': 0,
+		'create': 0,
+		'doctype': u'DocPerm',
+		'permlevel': 1,
+		'role': u'Sales User',
+		'write': 0
+	},
+
+	# DocPerm
+	{
+		'cancel': 0,
+		'create': 0,
+		'doctype': u'DocPerm',
+		'permlevel': 0,
+		'role': u'Sales User',
+		'write': 0
+	},
+
+	# DocPerm
+	{
 		'cancel': 1,
 		'create': 1,
 		'doctype': u'DocPerm',
@@ -67,56 +117,6 @@
 		'write': 1
 	},
 
-	# DocPerm
-	{
-		'cancel': 0,
-		'create': 0,
-		'doctype': u'DocPerm',
-		'permlevel': 1,
-		'role': u'Sales Manager',
-		'write': 0
-	},
-
-	# DocPerm
-	{
-		'cancel': 0,
-		'create': 0,
-		'doctype': u'DocPerm',
-		'permlevel': 0,
-		'role': u'Sales Manager',
-		'write': 0
-	},
-
-	# DocPerm
-	{
-		'cancel': 0,
-		'create': 0,
-		'doctype': u'DocPerm',
-		'permlevel': 1,
-		'role': u'Sales Master Manager',
-		'write': 0
-	},
-
-	# DocPerm
-	{
-		'cancel': 0,
-		'create': 0,
-		'doctype': u'DocPerm',
-		'permlevel': 1,
-		'role': u'Sales User',
-		'write': 0
-	},
-
-	# DocPerm
-	{
-		'cancel': 0,
-		'create': 0,
-		'doctype': u'DocPerm',
-		'permlevel': 0,
-		'role': u'Sales User',
-		'write': 0
-	},
-
 	# DocField
 	{
 		'doctype': u'DocField',
@@ -176,7 +176,7 @@
 		'fieldtype': u'HTML',
 		'label': u'TerritoryHelp',
 		'oldfieldtype': u'HTML',
-		'options': u'<a href="javascript:cur_frm.cscript.TerritoryHelp();">To manage Territory, click here</a>',
+		'options': u'<a href="#!Sales Browser/Territory">To manage Territories, click here</a>',
 		'permlevel': 0
 	},
 
diff --git a/erpnext/stock/doctype/item/item.js b/erpnext/stock/doctype/item/item.js
index 33e5f77..65698c1 100644
--- a/erpnext/stock/doctype/item/item.js
+++ b/erpnext/stock/doctype/item/item.js
@@ -80,15 +80,6 @@
   return 'SELECT `tabItem Group`.`name`,`tabItem Group`.`parent_item_group` FROM `tabItem Group` WHERE `tabItem Group`.`is_group` = "No" AND `tabItem Group`.`docstatus`!= 2 AND `tabItem Group`.%(key)s LIKE "%s"  ORDER BY  `tabItem Group`.`name` ASC LIMIT 50'
 }
 
-cur_frm.cscript.IGHelp = function(doc,dt,dn){
-  var call_back = function(){
-    var sb_obj = new SalesBrowser();
-    sb_obj.set_val('Item Group');
-
-  }
-  loadpage('Sales Browser',call_back);
-}
-
 // for description from attachment
 // takes the first attachment and creates
 // a table with both image and attachment in HTML
diff --git a/erpnext/stock/doctype/item/item.txt b/erpnext/stock/doctype/item/item.txt
index 9cdb99f..d23e3ca 100644
--- a/erpnext/stock/doctype/item/item.txt
+++ b/erpnext/stock/doctype/item/item.txt
@@ -3,9 +3,9 @@
 
 	# These values are common in all dictionaries
 	{
-		'creation': '2012-04-02 16:02:29',
+		'creation': '2012-04-30 18:33:53',
 		'docstatus': 0,
-		'modified': '2012-04-30 14:08:08',
+		'modified': '2012-05-31 11:18:10',
 		'modified_by': u'Administrator',
 		'owner': u'Administrator'
 	},
@@ -216,7 +216,7 @@
 		'fieldtype': u'HTML',
 		'label': u'IGHelp',
 		'oldfieldtype': u'HTML',
-		'options': u'<a href="javascript:cur_frm.cscript.IGHelp();">To manage Item Group, click here</a>',
+		'options': u'<a href="#!Sales Browser/Item Group">To manage Item Groups, click here</a>',
 		'permlevel': 0
 	},
 
