configs
diff --git a/erpnext/config/__init__.py b/erpnext/config/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/erpnext/config/__init__.py
diff --git a/erpnext/desktop.json b/erpnext/config/desktop.py
similarity index 90%
rename from erpnext/desktop.json
rename to erpnext/config/desktop.py
index 67c4f99..62013af 100644
--- a/erpnext/desktop.json
+++ b/erpnext/config/desktop.py
@@ -1,4 +1,6 @@
-{
+from webnotes import _
+
+data = {
 	"Accounts": {
 		"color": "#3498db", 
 		"icon": "icon-money", 
@@ -8,7 +10,7 @@
 	"Activity": {
 		"color": "#e67e22", 
 		"icon": "icon-play", 
-		"label": "Activity", 
+		"label": _("Activity"), 
 		"link": "activity", 
 		"type": "page"
 	}, 
@@ -21,7 +23,7 @@
 	"HR": {
 		"color": "#2ecc71", 
 		"icon": "icon-group", 
-		"label": "Human Resources", 
+		"label": _("Human Resources"), 
 		"link": "hr-home", 
 		"type": "module"
 	}, 
@@ -35,7 +37,7 @@
 		"color": "#95a5a6", 
 		"doctype": "Note", 
 		"icon": "icon-file-alt", 
-		"label": "Notes", 
+		"label": _("Notes"), 
 		"link": "List/Note", 
 		"type": "list"
 	}, 
diff --git a/erpnext/patches.txt b/erpnext/patches.txt
index 0262763..ff65fb3 100644
--- a/erpnext/patches.txt
+++ b/erpnext/patches.txt
@@ -18,4 +18,5 @@
 execute:webnotes.reload_doc('buying', 'doctype', 'supplier') # 2014-01-29
 erpnext.patches.4_0.map_charge_to_taxes_and_charges
 execute:webnotes.reload_doc('support', 'doctype', 'newsletter') # 2014-01-31
-execute:webnotes.reload_doc('hr', 'doctype', 'employee') # 2014-02-03
\ No newline at end of file
+execute:webnotes.reload_doc('hr', 'doctype', 'employee') # 2014-02-03
+execute:webnotes.conn.sql("update tabPage set module='Core' where name='Setup'")
diff --git a/erpnext/setup/page/setup/setup.js b/erpnext/setup/page/setup/setup.js
index fdde693..9c7395d 100644
--- a/erpnext/setup/page/setup/setup.js
+++ b/erpnext/setup/page/setup/setup.js
@@ -11,195 +11,20 @@
 
 	wrapper.appframe.add_module_icon("Setup");
 	wrapper.appframe.set_title_right(wn._("Refresh"), function() {
-		wn.pages.Setup.make(wrapper);
+		wn.setup.make(wrapper);
 	});
 	
-	wn.pages.Setup.make(wrapper);
+	wn.setup.make(wrapper);
 	
 }
 
-wn.pages.Setup.make = function(wrapper) {
-	var body = $(wrapper).find(".layout-main"),
-		total = 0,
-		completed = 0;
-
-	body.html('<div class="progress progress-striped active">\
-		<div class="progress-bar" style="width: 100%;"></div></div>');
-	
-	var render_item = function(item, dependency) {		
-		if(item.type==="Section") {
-			$("<h3>")
-				.css({"margin": "20px 0px 15px 0px"})
-				.html('<i class="'+item.icon+'"></i> ' + item.title).appendTo(body);
-			return;
-		}
-		var row = $('<div class="row">')
-			.css({
-				"margin-bottom": "7px",
-				"padding-bottom": "7px",
-				"border-bottom": "1px solid #eee"
-			})
-			.appendTo(body);
-
-		$('<div class="col-md-1"></div>').appendTo(row);
-		
-		if(item.type==="Link") {
-			var col = $('<div class="col-md-5"><b><a href="#'
-				+item.route+'"><i class="'+item.icon+'"></i> '
-				+item.title+'</a></b></div>').appendTo(row);
-		
-		} else {
-			var col = $(repl('<div class="col-md-5">\
-					<span class="badge view-link">%(count)s</span>\
-					 <b><i class="%(icon)s"></i>\
-						<a class="data-link">%(title)s</a></b>\
-					</div>', {
-						count: item.count,
-						title: item.title || wn._(item.doctype),
-						icon: wn.boot.doctype_icons[item.doctype]
-					}))
-				.appendTo(row);
-
-			col.find(".badge")
-				.css({
-					"background-color": (item.count ? "green" : "orange"),
-					"display": "inline-block",
-					"min-width": "40px"
-				});
-
-			total += 1;
-			if(item.count)
-				completed += 1;
-		}
-
-		if(dependency) 
-			col.addClass("col-md-offset-1");
-		else
-			$('<div class="col-md-1"></div>').appendTo(row);
-		
-		if(item.doctype) {
-			var badge = col.find(".badge, .data-link")
-				.attr("data-doctype", item.doctype)
-				.css({"cursor": "pointer"})
-			
-			if(item.single) {
-				badge.click(function() {
-					wn.set_route("Form", $(this).attr("data-doctype"))
-				})
-			} else {
-				badge.click(function() {
-					wn.set_route(item.tree || "List", $(this).attr("data-doctype"))
-				})
+wn.setup = {
+	make: function(wrapper) {
+		wn.call({
+			method: "webnotes.core.page.setup.setup.get",
+			callback: function(r) {
+				wrapper.find(".layout-main").empty().html(r.message);
 			}
-		}
-	
-		// tree
-		$links = $('<div class="col-md-5">').appendTo(row);
-	
-		if(item.tree) {
-			$('<a class="view-link"><i class="icon-sitemap"></i> Browse</a>\
-				<span class="text-muted">|</span> \
-				<a class="import-link"><i class="icon-upload"></i> Import</a>')
-				.appendTo($links)
-
-			var mylink = $links.find(".view-link")
-				.attr("data-doctype", item.doctype)
-
-			mylink.click(function() {
-				wn.set_route(item.tree, item.doctype);
-			})
-					
-		} else if(item.single) {
-			$('<a class="view-link"><i class="icon-edit"></i>'+wn._('Edit')+'</a>')
-				.appendTo($links)
-
-			$links.find(".view-link")
-				.attr("data-doctype", item.doctype)
-				.click(function() {
-					wn.set_route("Form", $(this).attr("data-doctype"));
-				})
-		} else if(item.type !== "Link"){
-			$('<a class="new-link"><i class="icon-plus"></i>'+wn._('New')+'</a> \
-				<span class="text-muted">|</span> \
-				<a class="view-link"><i class="icon-list"></i>'+wn._('View')+'</a> \
-				<span class="text-muted">|</span> \
-				<a class="import-link"><i class="icon-upload"></i>'+wn._('Import')+'</a>')
-				.appendTo($links)
-
-			$links.find(".view-link")
-				.attr("data-doctype", item.doctype)
-				.click(function() {
-					if($(this).attr("data-filter")) {
-						wn.route_options = JSON.parse($(this).attr("data-filter"));
-					}
-					wn.set_route("List", $(this).attr("data-doctype"));
-				})
-
-			if(item.filter)
-				$links.find(".view-link").attr("data-filter", JSON.stringify(item.filter))
-
-			if(wn.model.can_create(item.doctype)) {
-				$links.find(".new-link")
-					.attr("data-doctype", item.doctype)
-					.click(function() {
-						new_doc($(this).attr("data-doctype"))
-					})
-			} else {
-				$links.find(".new-link").remove();
-				$links.find(".text-muted:first").remove();
-			}
-
-		}
-
-		$links.find(".import-link")
-			.attr("data-doctype", item.doctype)
-			.click(function() {
-				wn.route_options = {doctype:$(this).attr("data-doctype")}
-				wn.set_route("data-import-tool");
-			})
-		
-		if(item.links) {
-			$.each(item.links, function(i, link) {
-				var newlinks = $('<span class="text-muted"> |</span> \
-				<a class="import-link" href="#'+link.route
-					+'"><i class="'+link.icon+'"></i> '+link.title+'</a>')
-					.appendTo($links)
-			})
-		}
-		
-		if(item.dependencies) {
-			$.each(item.dependencies, function(i, d) {
-				render_item(d, true);
-			})
-		}
+		})
 	}
-
-	return wn.call({
-		method: "erpnext.setup.page.setup.setup.get",
-		callback: function(r) {
-			if(r.message) {
-				body.empty();
-				if(wn.boot.expires_on) {
-					$(body).prepend("<div class='text-muted' style='text-align:right'>"+wn._("Account expires on") 
-							+ wn.datetime.global_date_format(wn.boot.expires_on) + "</div>");
-				}
-
-				$completed = $('<h4>'+wn._("Setup Completed")+'<span class="completed-percent"></span><h4>\
-					<div class="progress"><div class="progress-bar"></div></div>')
-					.appendTo(body);
-
-				$.each(r.message, function(i, item) {
-					render_item(item)
-				});
-				
-				var completed_percent = cint(flt(completed) / total * 100) + "%";
-				$completed
-					.find(".progress-bar")
-					.css({"width": completed_percent});
-				$(body)
-					.find(".completed-percent")
-					.html("(" + completed_percent + ")");
-			}
-		}
-	});
-}
\ No newline at end of file
+}
diff --git a/erpnext/setup/page/setup/setup.py b/erpnext/setup/page/setup/setup.py
index 11025c9..5e66d0a 100644
--- a/erpnext/setup/page/setup/setup.py
+++ b/erpnext/setup/page/setup/setup.py
@@ -2,9 +2,21 @@
 # License: GNU General Public License v3. See license.txt
 
 from __future__ import unicode_literals
-import webnotes
+import webnotes, json
 from webnotes import _
 
+@webnotes.whitelist()
+def get():
+	setup = []
+	for app in webnotes.get_installed_apps():
+		setupfilename = webnotes.get_app_path(app, "setup.json")
+		if os.path.exists(setupfilename):
+			with open(setupfilename, "r") as f:
+				setup.append(json.loads(f))
+
+	return setup
+
+
 items = [
 	{
 		"type": "Section",
@@ -233,28 +245,31 @@
 		"route": "Report/Scheduler Log", "type": "Link", "icon": "icon-exclamation-sign" },
 ]
 
-@webnotes.whitelist()
-def get():
-	webnotes.only_for("System Manager")
-	for item in items:
-		if item.get("type")=="Section":
-			continue
-		set_count(item)
-		
-		if item.get("dependencies"):
-			for d in item["dependencies"]:
-				set_count(d)
-	
-	return items
 
-def set_count(item):
-	if "query" in item:
-		item["count"] = webnotes.conn.sql(item["query"])[0][0]
-	elif "filter" in item:
-		key = item["filter"].keys()[0]
-		item["count"] = webnotes.conn.sql("""select count(*) from `tab%s` where
-			%s = %s and docstatus < 2""" % (item["doctype"], key, "%s"),
-			item["filter"][key])[0][0]
-	elif "doctype" in item:
-		item["count"] = webnotes.conn.sql("select count(*) from `tab%s` where docstatus<2" \
-			% item["doctype"])[0][0]
+
+
+# @webnotes.whitelist()
+# def get():
+# 	webnotes.only_for("System Manager")
+# 	for item in items:
+# 		if item.get("type")=="Section":
+# 			continue
+# 		set_count(item)
+# 		
+# 		if item.get("dependencies"):
+# 			for d in item["dependencies"]:
+# 				set_count(d)
+# 	
+# 	return items
+# 
+# def set_count(item):
+# 	if "query" in item:
+# 		item["count"] = webnotes.conn.sql(item["query"])[0][0]
+# 	elif "filter" in item:
+# 		key = item["filter"].keys()[0]
+# 		item["count"] = webnotes.conn.sql("""select count(*) from `tab%s` where
+# 			%s = %s and docstatus < 2""" % (item["doctype"], key, "%s"),
+# 			item["filter"][key])[0][0]
+# 	elif "doctype" in item:
+# 		item["count"] = webnotes.conn.sql("select count(*) from `tab%s` where docstatus<2" \
+# 			% item["doctype"])[0][0]