modules_setup
diff --git a/erpnext/home/page/desktop/desktop.js b/erpnext/home/page/desktop/desktop.js
index e2a8d53..ebd3da1 100644
--- a/erpnext/home/page/desktop/desktop.js
+++ b/erpnext/home/page/desktop/desktop.js
@@ -44,35 +44,60 @@
 
 erpnext.desktop.render = function() {
 	var icons = [
-		{ gradient: 'brown', sprite: 'feed', label: 'Activity', link: '#!Event Updates' },
-		{ gradient: 'blue', sprite: 'account', label: 'Accounts', link: '#!accounts-home' },
-		{ gradient: 'green', sprite: 'selling', label: 'Selling', link: '#!selling-home' },
-		{ gradient: 'yellow', sprite: 'stock', label: 'Stock', link: '#!stock-home' },
-		{ gradient: 'red', sprite: 'buying', label: 'Buying', link: '#!buying-home' },
-		{ gradient: 'purple', sprite: 'support', label: 'Support', link: '#!support-home' },
-		{ gradient: 'ocean', sprite: 'hr', label: 'Human<br />Resources', link: '#!hr-home' },
-		{ gradient: 'violet', sprite: 'project', label: 'Projects', link: '#!projects-home' },
-		{ gradient: 'dark-red', sprite: 'production', label: 'Production', link: '#!production-home' },
-		{ gradient: 'leaf-green', sprite: 'website', label: 'Website', link: '#!website-home' },
-		{ gradient: 'grey', sprite: 'setting', label: 'Settings', link: '#!Setup' },
-		{ gradient: 'bright-green', sprite: 'dashboard', label: 'Dashboard', link: '#!dashboard' },
-		//{ gradient: 'dark-blue', sprite: 'report', label: 'Report' },
-		{ gradient: 'pink', sprite: 'messages', label: 'Messages', link: '#!messages' },
-		{ gradient: 'bright-yellow', sprite: 'todo', label: 'To Do', link: '#!todo' },
-		{ gradient: 'peacock', sprite: 'calendar', label: 'Calendar', link: '#!calendar' },
-		{ gradient: 'ultra-dark-green', sprite: 'kb', label: 'Knowledge<br />Base', link: '#!questions' },
+		{ gradient: 'blue', sprite: 'account', label: 'Accounts', link: '#!accounts-home',
+			is_module: 'Accounts'},
+		{ gradient: 'green', sprite: 'selling', label: 'Selling', link: '#!selling-home',
+			is_module: 'Selling'},
+		{ gradient: 'yellow', sprite: 'stock', label: 'Stock', link: '#!stock-home',
+			is_module: 'Stock'},
+		{ gradient: 'red', sprite: 'buying', label: 'Buying', link: '#!buying-home',
+			is_module: 'Buying'},
+		{ gradient: 'purple', sprite: 'support', label: 'Support', link: '#!support-home',	
+			is_module: 'Support'},
+		{ gradient: 'ocean', sprite: 'hr', label: 'Human<br />Resources', link: '#!hr-home',
+			is_module: 'HR'},
+		{ gradient: 'violet', sprite: 'project', label: 'Projects', link: '#!projects-home',
+			is_module: 'Projects'},
+		{ gradient: 'dark-red', sprite: 'production', label: 'Production', link: '#!production-home',
+			is_module: 'Production'},
+		{ gradient: 'leaf-green', sprite: 'website', label: 'Website', link: '#!website-home',
+			is_module: 'Website'},
 	]
 
-	$.each(icons, function(i, v) {
-		var icon_case = $('#icon-grid').append(repl('\
+	var add_icon = function(v) {
+		$('#icon-grid').append(repl('\
 			<div id="%(sprite)s" class="case-wrapper"><a href="%(link)s">\
 				<div class="case-border case-%(gradient)s">\
 					<div class="sprite-image sprite-%(sprite)s"></div>\
 				</div></a>\
 				<div class="case-label">%(label)s</div>\
-			</div>', v));
-	});
+			</div>', v));		
+	}
+	
+	var get_module = function(m) {
+		for(var i in icons) {
+			if(icons[i].is_module==m) return icons[i]
+		}
+	}
+	
+	// activity
+	add_icon({ gradient: 'brown', sprite: 'feed', label: 'Activity', link: '#!Event Updates'});
 
+	// modules
+	for(var i in wn.boot.modules_list)
+		add_icon(get_module(wn.boot.modules_list[i]));
+
+	// setup
+	if(user_roles.indexOf('System Manager')!=-1)
+		add_icon({ gradient: 'grey', sprite: 'setting', label: 'Setup', link: '#!Setup' });
+
+	// apps
+	add_icon({ gradient: 'bright-green', sprite: 'dashboard', label: 'Dashboard', link: '#!dashboard' });
+	add_icon({ gradient: 'bright-yellow', sprite: 'todo', label: 'To Do', link: '#!todo' });
+	add_icon({ gradient: 'pink', sprite: 'messages', label: 'Messages', link: '#!messages' });
+	add_icon({ gradient: 'peacock', sprite: 'calendar', label: 'Calendar', link: '#!calendar' });
+	add_icon({ gradient: 'ultra-dark-green', sprite: 'kb', label: 'Knowledge<br />Base', link: '#!questions' });
+	
 	erpnext.desktop.show_pending_notifications();
 
 }
diff --git a/erpnext/setup/page/modules_setup/__init__.py b/erpnext/setup/page/modules_setup/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/erpnext/setup/page/modules_setup/__init__.py
diff --git a/erpnext/setup/page/modules_setup/modules_setup.css b/erpnext/setup/page/modules_setup/modules_setup.css
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/erpnext/setup/page/modules_setup/modules_setup.css
diff --git a/erpnext/setup/page/modules_setup/modules_setup.html b/erpnext/setup/page/modules_setup/modules_setup.html
new file mode 100644
index 0000000..ea136ff
--- /dev/null
+++ b/erpnext/setup/page/modules_setup/modules_setup.html
@@ -0,0 +1,14 @@
+<div class="layout-wrapper">
+	<a class="close" onclick="window.history.back();">&times;</a>		
+	<h1>Modules Setup</h1>
+	<hr>
+	<div class="help" style="width: 300px; float: right">
+		Select checkbox to show / hide module. Drag around to move order.
+	</div>
+	<div id="modules-list">
+	</div>
+	<div>
+		<button class="btn btn-small btn-primary" id="modules-update" 
+			onclick="wn.pages.modules_setup.update()">Update</button>
+	</div>
+</div>
\ No newline at end of file
diff --git a/erpnext/setup/page/modules_setup/modules_setup.js b/erpnext/setup/page/modules_setup/modules_setup.js
new file mode 100644
index 0000000..fe7f14f
--- /dev/null
+++ b/erpnext/setup/page/modules_setup/modules_setup.js
@@ -0,0 +1,50 @@
+wn.require('lib/js/lib/jquery-ui-sortable.min.js');
+
+$.extend(wn.pages.modules_setup, {
+	modules: ['Accounts', 'Selling', 'Buying', 'Stock', 'Production', 'Projects', 
+		'Support', 'HR', 'Website'],	
+	onload: function(wrapper) {
+		wn.pages.modules_setup.refresh(wn.boot.modules_list);
+	},
+	refresh: function(ml) {
+		$('#modules-list').empty();
+				
+		// checked modules
+		for(i in ml) {
+			$('#modules-list').append(repl('<p style="cursor:move;">\
+				<input type="checkbox" data-module="%(m)s"> \
+				%(m)s</p>', {m:ml[i]}));
+		}
+		$('#modules-list [data-module]').attr('checked', true);
+		
+		// unchecked modules
+		var all = wn.pages.modules_setup.modules;
+		for(i in all) {
+			if(!$('#modules-list [data-module="'+all[i]+'"]').length) {
+				$('#modules-list').append(repl('<p style="cursor:move;">\
+					<input type="checkbox" data-module="%(m)s"> \
+					%(m)s</p>', {m:all[i]}));				
+			}
+		}
+		
+		$('#modules-list').sortable();
+		
+	},
+	update: function() {
+		var ml = [];
+		$('#modules-list [data-module]').each(function() {
+			if($(this).attr('checked')) 
+				ml.push($(this).attr('data-module'));
+		});
+		
+		wn.call({
+			method: 'setup.page.modules_setup.modules_setup.update',
+			args: {
+				ml: JSON.stringify(ml)
+			},
+			callback: function(r) {
+			},
+			btn: $('#modules-update').get(0)
+		});
+	}
+});
\ No newline at end of file
diff --git a/erpnext/setup/page/modules_setup/modules_setup.py b/erpnext/setup/page/modules_setup/modules_setup.py
new file mode 100644
index 0000000..ee36dfa
--- /dev/null
+++ b/erpnext/setup/page/modules_setup/modules_setup.py
@@ -0,0 +1,8 @@
+import webnotes
+
+@webnotes.whitelist()
+def update(arg=None):
+	"""update modules"""
+	webnotes.conn.set_global('modules_list', webnotes.form_dict['ml'])
+	webnotes.msgprint('Updated')
+	webnotes.clear_cache()
\ No newline at end of file
diff --git a/erpnext/setup/page/modules_setup/modules_setup.txt b/erpnext/setup/page/modules_setup/modules_setup.txt
new file mode 100644
index 0000000..70c6a90
--- /dev/null
+++ b/erpnext/setup/page/modules_setup/modules_setup.txt
@@ -0,0 +1,28 @@
+# Page, modules_setup
+[
+
+	# These values are common in all dictionaries
+	{
+		'creation': '2012-02-28 17:48:39',
+		'docstatus': 0,
+		'modified': '2012-02-28 17:48:39',
+		'modified_by': u'Administrator',
+		'owner': u'Administrator'
+	},
+
+	# These values are common for all Page
+	{
+		'doctype': 'Page',
+		'module': u'Setup',
+		'name': '__common__',
+		'page_name': u'modules_setup',
+		'standard': u'Yes',
+		'title': u'Modules Setup'
+	},
+
+	# Page, modules_setup
+	{
+		'doctype': 'Page',
+		'name': u'modules_setup'
+	}
+]
\ No newline at end of file
diff --git a/erpnext/setup/page/setup/setup.html b/erpnext/setup/page/setup/setup.html
index 7963cb9..50ef112 100644
--- a/erpnext/setup/page/setup/setup.html
+++ b/erpnext/setup/page/setup/setup.html
@@ -20,7 +20,7 @@
 	<div class="setup-column">
 		<h3>Users and Permissions</h3>
 		<p>
-			<b><a href="#!My Company">Users</a></b><br>
+			<b><a href="#!users">Users</a></b><br>
 			<span class="help">Add/remove users, set roles, passwords etc</span>
 		</p>
 		<p>
@@ -31,6 +31,10 @@
 			<b><a href="#!List/Authorization Rule">Amount based Authorization Rules</a></b><br>
 			<span class="help">Restrict submission rights based on amount</span>
 		</p>
+		<p>
+			<b><a href="#!modules_setup">Modules Setup</a></b><br>
+			<span class="help">Show, hide modules</span>
+		</p>
 	</div>
 	<div class="setup-column">
 		<h3>Data</h3>
diff --git a/erpnext/startup/event_handlers.py b/erpnext/startup/event_handlers.py
index 5f0cc23..a1d805e 100644
--- a/erpnext/startup/event_handlers.py
+++ b/erpnext/startup/event_handlers.py
@@ -87,6 +87,8 @@
 
 		import webnotes.model.doctype
 		bootinfo['docs'] += webnotes.model.doctype.get('Event')
+		
+		bootinfo['modules_list'] = webnotes.conn.get_global('modules_list')
 
 def get_letter_heads():
 	"""load letter heads with startup"""
diff --git a/erpnext/startup/toolbar.js b/erpnext/startup/toolbar.js
index 7eda493..8c8d041 100644
--- a/erpnext/startup/toolbar.js
+++ b/erpnext/startup/toolbar.js
@@ -73,20 +73,35 @@
 	$('<li class="dropdown">\
 		<a class="dropdown-toggle" data-toggle="dropdown" href="#"\
 			onclick="return false;">Modules<b class="caret"></b></a>\
-		<ul class="dropdown-menu">\
-			<li><a href="#!accounts-home" data-module="Accounts">Accounts</a></li>\
-			<li><a href="#!selling-home" data-module="Selling">Selling</a></li>\
-			<li><a href="#!stock-home" data-module="Stock">Stock</a></li>\
-			<li><a href="#!buying-home" data-module="Buying">Buying</a></li>\
-			<li><a href="#!support-home" data-module="Support">Support</a></li>\
-			<li><a href="#!hr-home" data-module="HR">Human Resources</a></li>\
-			<li><a href="#!projects-home" data-module="Projects">Projects</a></li>\
-			<li><a href="#!production-home" data-module="Production">Production</a></li>\
-			<li><a href="#!website-home" data-module="Website">Website</a></li>\
-			<li class="divider"></li>\
-			<li><a href="#!Setup" data-module="Setup">Setup</a></li>\
+		<ul class="dropdown-menu modules">\
 		</ul>\
 		</li>').prependTo('.navbar .nav:first');
-	$('.navbar .nav:first')	
+	
+	// if no modules list then show all
+	if(wn.boot.modules_list)
+		wn.boot.modules_list = JSON.parse(wn.boot.modules_list);
+	else
+		wn.boot.modules_list = ['Accounts', 'Selling', 'Buying', 'Stock', 
+			'Production', 'Projects', 'Support', 'HR', 'Website'];
+
+	// add to dropdown
+	for(var i in wn.boot.modules_list) {
+		var m = wn.boot.modules_list[i]
+		args = {
+			module: m,
+			module_page: m.toLowerCase(),
+			module_label: m=='HR' ? 'Human Resources' : m
+		}
+			
+		$('.navbar .modules').append(repl('<li><a href="#!%(module_page)s-home" \
+			data-module="%(module)s">%(module_label)s</a></li>', args));			
+	}
+	
+	// setup for system manager
+	if(user_roles.indexOf("System Manager")!=-1) {
+		$('.navbar .modules').append('<li class="divider"></li>\
+		<li><a href="#!Setup" data-module="Setup">Setup</a></li>');
+	}
+	
 }
 
diff --git a/js/all-app.js b/js/all-app.js
index 952f248..cd563f1 100644
--- a/js/all-app.js
+++ b/js/all-app.js
Binary files differ
diff --git a/js/all-web.js b/js/all-web.js
index b759ec0..c34d582 100644
--- a/js/all-web.js
+++ b/js/all-web.js
@@ -1086,4 +1086,4 @@
     <a href="https://erpnext.com">erpnext.com</a></div>\
   </div>',wn.boot.website_settings));this.make_items();},make_items:function(){var items=wn.boot.website_menus
 for(var i=0;i<items.length;i++){var item=items[i];if(!item.parent_label&&item.parentfield=='footer_items'){item.route=item.url||item.custom_page;$('.web-footer-menu ul').append(repl('<li><a href="#!%(route)s" \
-     data-label="%(label)s">%(label)s</a></li>',item))}}}});$(document).bind('startup',function(){erpnext.footer=new erpnext.Footer();erpnext.navbar.navbar=new erpnext.navbar.navbar();})
+     data-label="%(label)s">%(label)s</a></li>',item))}}}});$(document).bind('startup',function(){erpnext.footer=new erpnext.Footer();erpnext.navbar.navbar=new erpnext.navbar.navbar();})
\ No newline at end of file
diff --git a/version.num b/version.num
index 5cd7ca2..e9244f9 100644
--- a/version.num
+++ b/version.num
@@ -1 +1 @@
-748
\ No newline at end of file
+752
\ No newline at end of file