profile: form is now my settings page, removed (Page, profile-settings)
diff --git a/home/page/latest_updates/latest_updates.js b/home/page/latest_updates/latest_updates.js
index e2b9c96..e93fd0b 100644
--- a/home/page/latest_updates/latest_updates.js
+++ b/home/page/latest_updates/latest_updates.js
@@ -1,4 +1,7 @@
 erpnext.updates = [
+	["28th November 2012", [
+		"Profile: Profile Settings (My Settings...) is now the Profile Form.",
+	]],
 	["27th November 2012", [
 		"Communication: Made common communication thread and added it in Lead, Contact.",
 	]],
diff --git a/home/page/profile_settings/__init__.py b/home/page/profile_settings/__init__.py
deleted file mode 100644
index baffc48..0000000
--- a/home/page/profile_settings/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from __future__ import unicode_literals
diff --git a/home/page/profile_settings/profile_settings.html b/home/page/profile_settings/profile_settings.html
deleted file mode 100644
index 49b1990..0000000
--- a/home/page/profile_settings/profile_settings.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<div class="layout-wrapper layout-wrapper-appframe">
-	<div class="layout-appframe"></div>
-	<div class="layout-main">
-	</div>
-</div>
\ No newline at end of file
diff --git a/home/page/profile_settings/profile_settings.js b/home/page/profile_settings/profile_settings.js
deleted file mode 100644
index 429ef70..0000000
--- a/home/page/profile_settings/profile_settings.js
+++ /dev/null
@@ -1,188 +0,0 @@
-// ERPNext - web based ERP (http://erpnext.com)
-// Copyright (C) 2012 Web Notes Technologies Pvt Ltd
-// 
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-// 
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-// 
-// You should have received a copy of the GNU General Public License
-// along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-pscript['onload_profile-settings'] = function() {
-	var wrapper = wn.pages['profile-settings'];
-	pscript.myprofile = new MyProfile(wrapper)
-}
-
-MyProfile = function(wrapper) {
-	this.wrapper = wrapper;
-	var me = this;
-	
-	this.make = function() {
-		this.wrapper.appframe = new wn.ui.AppFrame($(this.wrapper).find('.layout-appframe'), 'Profile Settings');
-		this.wrapper.appframe.add_button('Update', this.update_profile);
-		this.wrapper.appframe.buttons["Update"].addClass("btn-info");
-		this.wrapper.appframe.add_button('Change Password', this.change_password);
-		
-		$(this.wrapper).find('.layout-main').html("<h4>Personal</h4>\
-			<div class='personal-settings' style='margin-left: 15px;'></div>\
-			<hr>\
-			<!--<h4>Email</h4>\
-			<div class='email-settings' style='margin-left: 15px;'></div>\
-			<hr>-->\
-			<h4>Display</h4>\
-			<div class='display-settings' style='margin-left: 15px;'>\
-				<p>Change Background: <button class='btn btn-small change-background'>Upload</button></p>\
-				<br><p>Change Theme: <select class='change-theme'></select></p>\
-			</div>");
-			
-		this.make_display();
-		this.make_personal();
-	}
-	
-	this.make_display = function() {
-		$(this.wrapper).find(".change-background")
-			.click(me.change_background)
-		
-		$(this.wrapper).find(".change-theme")
-			.add_options(keys(erpnext.themes).sort())
-			.change(function() {
-				erpnext.set_theme($(this).val());
-			}).val(wn.boot.profile.defaults.theme ? 
-				wn.boot.profile.defaults.theme[0] : "Default")
-			.change(function() {
-				wn.call({
-					module: "home",
-					page: "profile_settings",
-					method: "set_user_theme",
-					args: {theme: $(this).val() }
-				})
-			});
-	}
-	
-	this.make_personal = function() {
-		this.personal = $(this.wrapper).find('.personal-settings').html('<div \
-			class="pull-left" style="width: 300px;">\
-			<img style="max-width: 200px;" src='+wn.user_info(user).image+'><br><br>\
-			<button class="btn btn-small">Change Image</button><br><br>\
-			</div><div class="pull-left profile-form" style="width: 45%; margin-top: -11px;">\
-			<div class="clear"></div>\
-			</div>')
-		
-		this.personal.find("button").click(this.change_image);
-		this.make_form();
-		this.load_details();		
-	}
-	
-	this.load_details = function() {
-		$c_page('home','profile_settings','get_user_details','',function(r, rt) {
-			me.form.set_values(r.message);
-		})
-	}
-	
-	//
-	// form
-	//
-	this.make_form = function() {
-		var div = this.personal.find(".profile-form").get(0);
-		this.form = new wn.ui.FieldGroup({
-			parent: div,
-			fields: [
-				{fieldname:'first_name', fieldtype:'Data',label:'First Name',reqd:1},
-				{fieldname:'last_name', fieldtype:'Data',label:'Last Name'},
-				{fieldname:'email_signature', fieldtype:'Small Text',label:'Email Signature',
-					decription:'Will be appended to outgoing mail'},
-			]
-		});
-
-	}
-	
-	this.update_profile = function() {
-		var v = me.form.get_values();
-		if(v) {
-			$(this).set_working();
-			var btn = this;
-			$c_page('home','profile_settings','set_user_details',v,function(r, rt) {
-				$(btn).done_working();
-			})
-		}		
-	}
-
-	this.change_password = function() {
-		var d = new wn.ui.Dialog({
-			title:'Change Password',
-			width: 400,
-			fields: [
-				{fieldname:'old_password', fieldtype:'Password', label:'Old Password', reqd:1 },
-				{fieldname:'new_password', fieldtype:'Password', label:'New Password', reqd:1 },
-				{fieldname:'new_password1', fieldtype:'Password', label:'Re-type New Password', reqd:1 },
-				{fieldname:'change', fieldtype:'Button', label:'Change'}
-			]
-		})
-		d.fields_dict.change.input.onclick = function() {
-			var v = d.get_values();
-			if(v) {
-				if(v.new_password != v.new_password1) {
-					msgprint('Passwords must match'); return;
-				}
-				this.set_working();
-				$c_page('home','profile_settings','change_password',v,function(r,rt) {
-					if(!r.message && r.exc) { msgprint(r.exc); return; }
-					d.hide();
-				})
-			}
-		}
-		d.show();
-	}
-	
-	//
-	// change image
-	//
-	
-	this.change_image = function() {
-		var d = new wn.ui.Dialog({
-			title: 'Set your Profile'
-		});
-		
-		wn.upload.make({
-			parent: d.body,
-			args: {
-				method: 'home.page.profile_settings.profile_settings.set_user_image'
-			},
-			callback: function(fid) {
-				if(fid) {
-					d.hide();
-					wn.boot.user_info[user].image = 'files/' + fid;
-					me.personal.find("img").attr("src", 'files/' + fid);
-				}
-			}
-		});
-		d.show();
-	}
-	
-	this.change_background = function() {
-		var d = new wn.ui.Dialog({
-			title: 'Set Background Image'
-		})
-
-		wn.upload.make({
-			parent: d.body,
-			args: {
-				method: 'home.page.profile_settings.profile_settings.set_user_background'
-			},
-			callback: function(fid) {
-				if(fid) {
-					d.hide();
-					erpnext.set_user_background(fid);		
-				}				
-			}
-		});				
-		d.show();
-	}
-	this.make();
-}
\ No newline at end of file
diff --git a/home/page/profile_settings/profile_settings.py b/home/page/profile_settings/profile_settings.py
deleted file mode 100644
index 58fcf95..0000000
--- a/home/page/profile_settings/profile_settings.py
+++ /dev/null
@@ -1,118 +0,0 @@
-# ERPNext - web based ERP (http://erpnext.com)
-# Copyright (C) 2012 Web Notes Technologies Pvt Ltd
-# 
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-# 
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-# 
-# You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-from __future__ import unicode_literals
-import webnotes
-
-from webnotes.utils import load_json, cint, nowdate
-
-
-def check_demo():
-	demo_user = 'demo@erpnext.com'
-	if webnotes.session['user']==demo_user:
-		webnotes.msgprint("Can't change in demo", raise_exception=1)
-	
-
-@webnotes.whitelist()
-def change_password(arg):
-	"""
-		Change password
-	"""
-	check_demo()
-	arg = load_json(arg)
-	
-	if not webnotes.conn.sql("""select * from `__Auth` where `user`=%s
-			and password=password(%s)""",
-			(webnotes.session["user"], arg["old_password"])):
-		webnotes.msgprint('Old password is not correct', raise_exception=1)
-
-	webnotes.conn.sql("""update `__Auth` set password=password(%s)
-		where `user`=%s""", (arg["new_password"], webnotes.session["user"]))
-
-	webnotes.msgprint('Password Updated');
-
-@webnotes.whitelist()
-def get_user_details(arg=None):
-	"""
-		Returns user first name, last name and bio
-	"""
-	return webnotes.conn.sql("""select first_name, last_name, bio, email_signature
-		from tabProfile where name=%s""", webnotes.user.name, as_dict=1)[0]
-	
-@webnotes.whitelist()
-def set_user_details(arg=None):
-	"""
-		updates user details given in argument
-	"""
-	check_demo()
-	from webnotes.model.doc import Document
-	
-	p = Document('Profile', webnotes.user.name)
-	arg_dict = load_json(arg)
-	if not 'bio' in arg_dict: arg_dict['bio'] = None
-	if not 'last_name' in arg_dict: arg_dict['last_name'] = None
-	if not 'email_signature' in arg_dict: arg_dict['email_signature'] = None
-	p.fields.update(arg_dict)
-	p.save()
-	webnotes.msgprint('Updated')
-
-@webnotes.whitelist()
-def set_user_image():
-	"""
-		Set uploaded image as user image
-	"""
-	check_demo()
-	from webnotes.utils.file_manager import add_file_list, remove_file, save_uploaded
-	user = webnotes.session['user']
-
-	fid, fname = save_uploaded()
-		
-	# remove old file
-	old_image = webnotes.conn.get_value('Profile', user, 'user_image')
-	if old_image:
-		remove_file('Profile', user, old_image)
-		
-	# add new file
-	add_file_list('Profile', user, fname, fid)
-	webnotes.conn.set_value('Profile', user, 'user_image', fid)
-	
-	return fid
-
-@webnotes.whitelist()	
-def set_user_background():
-	"""
-		Set uploaded image as user image
-	"""
-	check_demo()
-	from webnotes.utils.file_manager import add_file_list, remove_file, save_uploaded
-	user = webnotes.session['user']
-
-	fid, fname = save_uploaded()
-	
-	# remove old file
-	old_image = webnotes.conn.get_value('Profile', user, 'background_image')
-	if old_image:
-		remove_file('Profile', user, old_image)
-		
-	# add new file
-	add_file_list('Profile', user, fname, fid)
-	webnotes.conn.set_value('Profile', user, 'background_image', fid)
-	
-	return fid
-
-@webnotes.whitelist()	
-def set_user_theme():
-	webnotes.conn.set_default("theme", webnotes.form_dict.theme, webnotes.session.user)
diff --git a/home/page/profile_settings/profile_settings.txt b/home/page/profile_settings/profile_settings.txt
deleted file mode 100644
index 25fe146..0000000
--- a/home/page/profile_settings/profile_settings.txt
+++ /dev/null
@@ -1,27 +0,0 @@
-# Page, profile-settings
-[
-
-	# These values are common in all dictionaries
-	{
-		'creation': '2011-04-18 10:19:10',
-		'docstatus': 0,
-		'modified': '2011-04-13 12:08:59',
-		'modified_by': 'Administrator',
-		'owner': 'Administrator'
-	},
-
-	# These values are common for all Page
-	{
-		'doctype': 'Page',
-		'module': 'Home',
-		'name': '__common__',
-		'page_name': 'Profile Settings',
-		'standard': 'Yes'
-	},
-
-	# Page, profile-settings
-	{
-		'doctype': 'Page',
-		'name': 'profile-settings'
-	}
-]
\ No newline at end of file
diff --git a/licence.txt b/license.txt
similarity index 100%
rename from licence.txt
rename to license.txt
diff --git a/patches/november_2012/add_theme_to_profile.py b/patches/november_2012/add_theme_to_profile.py
new file mode 100644
index 0000000..648c1d1
--- /dev/null
+++ b/patches/november_2012/add_theme_to_profile.py
@@ -0,0 +1,13 @@
+import webnotes
+
+def execute():
+	webnotes.clear_perms("Profile")
+	webnotes.reload_doc("core", "doctype", "profile")
+
+	for name in webnotes.conn.sql("""select name from tabProfile"""):
+		theme = webnotes.conn.get_default("theme", name[0])
+		if theme:
+			webnotes.conn.set_value("Profile", name[0], "theme", theme)
+			
+	webnotes.conn.sql("""delete from `tabDefaultValue` where defkey='theme'""")
+	webnotes.delete_doc("Page", "profile-settings")
\ No newline at end of file
diff --git a/patches/patch_list.py b/patches/patch_list.py
index 5cacfb2..7a60938 100644
--- a/patches/patch_list.py
+++ b/patches/patch_list.py
@@ -691,4 +691,8 @@
 		'patch_module': 'patches.november_2012',
 		'patch_file': 'communication_sender_and_recipient',
 	},
+	{
+		'patch_module': 'patches.november_2012',
+		'patch_file': 'add_theme_to_profile',
+	},
 ]
\ No newline at end of file
diff --git a/public/build.json b/public/build.json
index 2304ffb..95fb8f0 100644
--- a/public/build.json
+++ b/public/build.json
@@ -12,7 +12,6 @@
 	],
 	"public/js/all-app.js": [
 		"app/public/js/modules.js",
-		"app/public/js/themes.js",
 		"app/public/js/toolbar.js",
 		"app/public/js/feature_setup.js",
 		"app/public/js/utils.js"
diff --git a/public/js/startup.js b/public/js/startup.js
index 37cc75e..c90aedd 100644
--- a/public/js/startup.js
+++ b/public/js/startup.js
@@ -27,17 +27,9 @@
 	console.log('Starting up...');
 	$('#startup_div').html('Starting up...').toggle(true);
 	
-	
 	erpnext.startup.set_globals();
-		
-	if(user != 'Guest'){
-		if(wn.boot.user_background) {
-			erpnext.set_user_background(wn.boot.user_background);
-		}
-		if(wn.boot.profile.defaults.theme) {
-			erpnext.set_theme(wn.boot.profile.defaults.theme[0]);
-		}
 
+	if(user != 'Guest'){
 		erpnext.setup_mousetrap();
 		
 		// always allow apps
@@ -143,11 +135,6 @@
 	wn.updates.id = setInterval(erpnext.update_messages, 60000);
 }
 
-erpnext.set_user_background = function(src) {
-	set_style(repl('#body_div { background: url("files/%(src)s") repeat fixed;}',
-		{src:src}))
-}
-
 // subject, sender, description
 erpnext.send_message = function(opts) {
 	if(opts.btn) {
diff --git a/public/js/themes.js b/public/js/themes.js
deleted file mode 100644
index 1327729..0000000
--- a/public/js/themes.js
+++ /dev/null
@@ -1,69 +0,0 @@
-// ERPNext - web based ERP (http://erpnext.com)
-// Copyright (C) 2012 Web Notes Technologies Pvt Ltd
-// 
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-// 
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-// 
-// You should have received a copy of the GNU General Public License
-// along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-// theme setter
-
-erpnext.themes = {
-	"Default": {
-		sidebar: "#f2f2f2",
-		titlebar: "#dfdfdf",
-		toolbar: "#e9e9e9"
-	},
-	Desert: {
-		sidebar: "#FFFDF7",
-		titlebar: "#DAD4C2",
-		toolbar: "#FAF6E9"
-	},
-	Tropic: {
-		sidebar: "#FAFFF7",
-		toolbar: "#EEFAE9",
-		titlebar: "#D7ECD1"
-	},
-	Sky: {
-		sidebar: "#F7FFFE",
-		toolbar: "#E9F9FA",
-		titlebar: "#D7F5F7"
-	},
-	Snow: {
-		sidebar: "#fff",
-		titlebar: "#fff",
-		toolbar: "#fff"
-	},
-	Sunny: {
-		sidebar: "#FFFFEF",
-		titlebar: "#FFFDCA",
-		toolbar: "lightYellow"		
-	},
-	Floral: {
-		sidebar: "#FFF7F7",
-		titlebar: "#F7CBCB",
-		toolbar: "#FAE9EA"		
-	},
-	Ocean: {
-		sidebar: "#F2FFFE",
-		titlebar: "#8ACFC7",
-		toolbar: "#C3F3EE"
-	}
-}
-
-erpnext.set_theme = function(theme) {
-	wn.dom.set_style(repl(".layout-wrapper-background { \
-		background-color: %(sidebar)s !important; }\
-	.appframe-toolbar { \
-		background-color: %(toolbar)s !important; }\
-	.appframe-titlebar { \
-		background-color: %(titlebar)s !important; }", erpnext.themes[theme]));
-}
\ No newline at end of file
diff --git a/public/js/toolbar.js b/public/js/toolbar.js
index 1357eff..fa83569 100644
--- a/public/js/toolbar.js
+++ b/public/js/toolbar.js
@@ -22,7 +22,7 @@
 	erpnext.toolbar.add_modules();
 	
 	// profile
-	$('#toolbar-user').append('<li><a href="#!profile-settings">My Settings...</a></li>');
+	$('#toolbar-user').append('<li><a href="#Form/Profile/'+user+'">My Settings...</a></li>');
 
 	$('.navbar .pull-right').append('\
 		<li><a href="#!messages" title="Unread Messages"><span class="navbar-new-comments"></span></a></li>');
diff --git a/startup/event_handlers.py b/startup/event_handlers.py
index 258955b..7d1f584 100644
--- a/startup/event_handlers.py
+++ b/startup/event_handlers.py
@@ -82,8 +82,6 @@
 		# if no company, show a dialog box to create a new company
 		bootinfo['setup_complete'] = webnotes.conn.sql("""select name from 
 			tabCompany limit 1""") and 'Yes' or 'No'
-			
-		bootinfo['user_background'] = webnotes.conn.get_value("Profile", webnotes.session['user'], 'background_image') or ''
 		
 		# load subscription info
 		import conf