diff --git a/public/js/website_utils.js b/public/js/website_utils.js
index 502b5eb..7897cd5 100644
--- a/public/js/website_utils.js
+++ b/public/js/website_utils.js
@@ -1,6 +1,7 @@
 
 var erpnext = {};
 
+// Add / update a new Lead / Communication
 // subject, sender, description
 erpnext.send_message = function(opts) {
 	if(opts.btn) {
@@ -31,6 +32,27 @@
 	});
 }
 
+// Setup the user tools
+//
+$(document).ready(function() {
+	// update login
+	var full_name = getCookie("full_name");
+	if(full_name.substr(0,1)=='"') {
+		full_name = full_name.substr(1, full_name.length-2);
+	}
+	if(full_name) {
+		$("#user-tools").html(repl('<a href="account" title="My Account">%(full_name)s</a> | \
+			<a href="cart" title="Shopping Cart"><i class="icon-shopping-cart"></i> (%(count)s)</a> | \
+			<a href="server.py?cmd=web_logout" title="Sign Out"><i class="icon-signout"></i></a>', {
+			full_name: full_name,
+			count: getCookie("cart_count") || "0"
+		}));
+		$("#user-tools a").tooltip({"placement":"bottom"});
+	}
+})
+
+// Utility functions
+
 function valid_email(id) { 
 	if(id.toLowerCase().search("[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?")==-1) 
 		return 0; else return 1; }
@@ -55,3 +77,51 @@
 	}
 	return s;
 }
+
+function getCookie(name) {
+    return getCookies()[name];
+}
+
+function getCookies() {
+    var c = document.cookie, v = 0, cookies = {};
+    if (document.cookie.match(/^\s*\$Version=(?:"1"|1);\s*(.*)/)) {
+        c = RegExp.$1;
+        v = 1;
+    }
+    if (v === 0) {
+        c.split(/[,;]/).map(function(cookie) {
+            var parts = cookie.split(/=/, 2),
+                name = decodeURIComponent(parts[0].trimLeft()),
+                value = parts.length > 1 ? decodeURIComponent(parts[1].trimRight()) : null;
+            cookies[name] = value;
+        });
+    } else {
+        c.match(/(?:^|\s+)([!#$%&'*+\-.0-9A-Z^`a-z|~]+)=([!#$%&'*+\-.0-9A-Z^`a-z|~]*|"(?:[\x20-\x7E\x80\xFF]|\\[\x00-\x7F])*")(?=\s*[,;]|$)/g).map(function($0, $1) {
+            var name = $0,
+                value = $1.charAt(0) === '"'
+                          ? $1.substr(1, -1).replace(/\\(.)/g, "$1")
+                          : $1;
+            cookies[name] = value;
+        });
+    }
+    return cookies;
+}
+
+if (typeof String.prototype.trimLeft !== "function") {
+    String.prototype.trimLeft = function() {
+        return this.replace(/^\s+/, "");
+    };
+}
+if (typeof String.prototype.trimRight !== "function") {
+    String.prototype.trimRight = function() {
+        return this.replace(/\s+$/, "");
+    };
+}
+if (typeof Array.prototype.map !== "function") {
+    Array.prototype.map = function(callback, thisArg) {
+        for (var i=0, n=this.length, a=[]; i<n; i++) {
+            if (i in this) a[i] = callback.call(thisArg, this[i]);
+        }
+        return a;
+    };
+}
diff --git a/setup/doctype/backup_manager/backup_dropbox.py b/setup/doctype/backup_manager/backup_dropbox.py
index 2c7fda6..3cc565e 100644
--- a/setup/doctype/backup_manager/backup_dropbox.py
+++ b/setup/doctype/backup_manager/backup_dropbox.py
@@ -105,6 +105,7 @@
 	return sess
 
 def upload_file_to_dropbox(filename, folder, dropbox_client):
+	from dropbox import rest
 	size = os.stat(filename).st_size
 	f = open(filename,'r')
 	if size > 4194304:
diff --git a/setup/doctype/contact_control/contact_control.py b/setup/doctype/contact_control/contact_control.py
index 3c37ecf..54a2fcc 100644
--- a/setup/doctype/contact_control/contact_control.py
+++ b/setup/doctype/contact_control/contact_control.py
@@ -1,99 +1,7 @@
-# Please edit this list and import only required elements
 from __future__ import unicode_literals
 import webnotes
 
-from webnotes.utils import set_default
-from webnotes.model import db_exists
-from webnotes.model.doc import Document
-from webnotes.model.bean import copy_doclist
-from webnotes.model.code import get_obj
-from webnotes import msgprint
-
-sql = webnotes.conn.sql
-	
-
-
 class DocType:
-  def __init__(self,doc,doclist=[]):
-    self.doc = doc
-    self.doclist = doclist
-    
-  def enable_login(self,arg):
-    arg = eval(arg)
-    sql("update tabContact set disable_login = 'No' where name=%s",arg['contact'])
-    sql("update tabProfile set enabled=1 where name=%s",arg['email'])
-    
-  def disable_login(self,arg):
-    arg = eval(arg)
-    sql("update tabContact set disable_login = 'Yes' where name=%s",arg['contact'])
-    sql("update tabProfile set enabled=0 where name=%s",arg['email'])
-    
-  def create_login(self,arg):
-    arg = eval(arg)
-    cont_det = sql("select * from tabContact where name=%s",(arg['contact']),as_dict=1)
-    if cont_det[0]['docstatus'] !=0:
-      msgprint('Please save the corresponding contact first')
-      raise Exception
-      
-    if sql("select name from tabProfile where name=%s",cont_det[0]['email_id']):
-      msgprint('Profile with same name already exist.')
-      raise Exception
-    else:
-      p = Document('Profile')
-      p.name = cont_det[0]['email_id']
-      p.first_name = cont_det[0]['first_name']
-      p.last_name = cont_det[0]['last_name']
-      p.email = cont_det[0]['email_id']
-      p.cell_no = cont_det[0]['contact_no']
-      p.password = 'password'
-      p.enabled = 1
-      p.user_type = 'Partner';
-      p.save(1)
-      
-      get_obj(doc=p).on_update()
-      
-      role = []
-      if cont_det[0]['contact_type'] == 'Individual':
-        role = ['Customer']
-      else:
-        if cont_det[0]['is_customer']:
-          role.append('Customer')
-        if cont_det[0]['is_supplier']:
-          role.append('Supplier')
-        if cont_det[0]['is_sales_partner']:
-          role.append('Partner')
-
-      if role:
-        prof_nm = p.name
-        for i in role:
-          r = Document('UserRole')
-          r.parent = p.name
-          r.role = i
-          r.parenttype = 'Profile'
-          r.parentfield = 'userroles'
-          r.save(1)
-        
-          if i == 'Customer':
-            def_keys = ['from_company','customer_name','customer']
-            def_val = cont_det[0]['customer_name']
-            self.set_default_val(def_keys,def_val,prof_nm)
-
-          if i == 'Supplier':
-            def_keys = ['supplier_name','supplier']
-            def_val = cont_det[0]['supplier_name']
-            self.set_default_val(def_keys,def_val,prof_nm)
-
-      sql("update tabContact set has_login = 'Yes' where name=%s",cont_det[0]['name'])
-      sql("update tabContact set disable_login = 'No' where name=%s",cont_det[0]['name'])
-      msgprint('User login is created.')
-      
- #------set default values---------
-  def set_default_val(self,def_keys,def_val,prof_nm):
-    for d in def_keys:
-      kv = Document('DefaultValue')
-      kv.defkey = d
-      kv.defvalue = def_val
-      kv.parent = prof_nm
-      kv.parenttype = 'Profile'
-      kv.parentfield = 'defaults'
-      kv.save(1)
\ No newline at end of file
+	def __init__(self,doc,doclist=[]):
+		self.doc = doc
+		self.doclist = doclist
diff --git a/website/doctype/blog_post/blog_post.txt b/website/doctype/blog_post/blog_post.txt
index 480bca4..4144e40 100644
--- a/website/doctype/blog_post/blog_post.txt
+++ b/website/doctype/blog_post/blog_post.txt
@@ -2,7 +2,7 @@
  {
   "creation": "2013-03-08 11:36:50", 
   "docstatus": 0, 
-  "modified": "2013-03-11 15:23:21", 
+  "modified": "2013-03-18 13:55:53", 
   "modified_by": "Administrator", 
   "owner": "Administrator"
  }, 
@@ -65,6 +65,7 @@
   "doctype": "DocField", 
   "fieldname": "blogger", 
   "fieldtype": "Link", 
+  "in_list_view": 1, 
   "label": "Blogger", 
   "options": "Blogger", 
   "reqd": 1
@@ -73,6 +74,7 @@
   "doctype": "DocField", 
   "fieldname": "blog_category", 
   "fieldtype": "Link", 
+  "in_list_view": 1, 
   "label": "Blog Category", 
   "options": "Blog Category"
  }, 
@@ -86,6 +88,7 @@
   "doctype": "DocField", 
   "fieldname": "blog_intro", 
   "fieldtype": "Small Text", 
+  "in_list_view": 1, 
   "label": "Blog Intro", 
   "reqd": 1
  }, 
diff --git a/website/templates/css/login.css b/website/templates/css/login.css
index c2a7af2..4120807 100644
--- a/website/templates/css/login.css
+++ b/website/templates/css/login.css
@@ -4,9 +4,17 @@
 			margin: 70px auto;
 		}
 
+		#login_wrapper,
+		#login_wrapper h3 {
+			color: #333;
+		}
+		
+		#login_wrapper a {
+			color: #0088cc;
+		}
+
 		.layout-wrapper {
 			background-color: #fff;
-			color: #333;
 			padding: 10px;
 			box-shadow: 1px 1px 3px 3px #ccc;
 			font-size: 12px;
@@ -32,7 +40,4 @@
 			text-align: center;
 			padding: 15px;
 		}
-		.login-footer, .login-footer a {
-			color: #999;
-		}
 	</style>
\ No newline at end of file
diff --git a/website/templates/html/navbar.html b/website/templates/html/navbar.html
index 8112499..4663a2f 100644
--- a/website/templates/html/navbar.html
+++ b/website/templates/html/navbar.html
@@ -47,9 +47,6 @@
 						{% endif %}
 					{% endfor %}
 				</ul>
-				<ul class="nav pull-right">
-					<li id="login-topbar-item"><a href="login">Login</a></li>
-				</ul>
 			</div>
 		</div>
 	</div>
diff --git a/website/templates/html/outer.html b/website/templates/html/outer.html
index f7296e4..207c124 100644
--- a/website/templates/html/outer.html
+++ b/website/templates/html/outer.html
@@ -4,6 +4,10 @@
 	<header>
 	</header>
 	<div class="container">
+		<div class="pull-right" style="margin:4px;" id="user-tools">
+			<a id="login-link" href="login">Login</a>
+		</div>
+		<div class="clearfix"></div>
 		{% if banner_html %}<div class="row" style="margin-top: 30px;">
 			<div class="span12">{{ banner_html }}</div>
 		</div>{% endif %}
diff --git a/website/templates/js/login.js b/website/templates/js/login.js
index 96b820a..09e8e9e 100644
--- a/website/templates/js/login.js
+++ b/website/templates/js/login.js
@@ -19,25 +19,43 @@
 login.do_login = function(){
 
     var args = {};
-    args['usr']=$("#login_id").val();
-    args['pwd']=$("#password").val();
+	if(window.is_sign_up) {
+		args.cmd = "core.doctype.profile.profile.sign_up";
+		args.email = $("#login_id").val();
+	    args.full_name = $("#full_name").val();
 
-	if(!args.usr || !args.pwd) {
-		login.set_message("Both login and password required.");
+		if(!args.email || !valid_email(args.email) || !args.full_name) {
+			login.set_message("Valid email and name required.");
+			return false;
+		}
+
+	} else {
+		args.cmd = "login"
+	    args.usr = $("#login_id").val();
+	    args.pwd = $("#password").val();
+
+		if(!args.usr || !args.pwd) {
+			login.set_message("Both login and password required.");
+			return false;
+		}	
 	}
 
 	$('#login_btn').attr("disabled", "disabled");
+	$("#login-spinner").toggle(true);
 	$('#login_message').toggle(false);
 	
 	$.ajax({
 		type: "POST",
 		url: "server.py",
-		data: {cmd:"login", usr:args.usr, pwd: args.pwd},
+		data: args,
 		dataType: "json",
 		success: function(data) {
+			$("#login-spinner").toggle(false);
 			$('#login_btn').attr("disabled", false);
 			if(data.message=="Logged In") {
 				window.location.href = "app.html";
+			} else if(data.message=="No App") {
+				window.location.href = "index";
 			} else {
 				login.set_message(data.message);
 			}
@@ -47,6 +65,16 @@
 	return false;
 }
 
+login.sign_up = function() {
+	$("#login_wrapper h3").html("Sign Up");
+	$("#login-label").html("Email Id");
+	$("#password-label").html("Full Name");
+	$("#password-row, #forgot-wrapper, #sign-up-wrapper, #login_message").toggle(false);
+	$("#full-name-row").toggle(true);
+	$("#login_btn").html("Register");
+	window.is_sign_up = true;
+}
+
 login.show_forgot_password = function(){
     // create dialog
 	var login_id = $("#login_id").val();
diff --git a/website/templates/pages/login.html b/website/templates/pages/login.html
index ef9b7bb..6b847ff 100644
--- a/website/templates/pages/login.html
+++ b/website/templates/pages/login.html
@@ -10,7 +10,7 @@
 {% set title="Login" %}
 
 {% block body %}
-	<div id='login_wrapper'>
+	<div class="container" id='login_wrapper'>
 		<div class='layout-wrapper layout-main'>
 			<p id="login_message" class="alert" style="display: none;"></p>
 			<h3><i class="icon-lock" style="margin-top: 7px"></i> Login</h3>
@@ -18,34 +18,45 @@
 				<table border="0" class="login-box">
 					<tbody>
 						<tr>
-							<td style="text-align: right; padding: 3px;">Login Id</td>
+							<td style="text-align: right; padding: 3px;" 
+								id="login-label">Login Id</td>
 							<td><input id="login_id" type="text" style="width: 180px"/></td>
 						</tr>
-						<tr>
-							<td style="text-align: right; padding: 3px;">Password</td>
+						<tr id="password-row">
+							<td style="text-align: right; padding: 3px;" >Password</td>
 							<td><input id="password" type="password" style="width: 180px" /></td>
 						</tr>
+						<tr id="full-name-row" style="display: none;">
+							<td style="text-align: right; padding: 3px;">Full Name</td>
+							<td><input id="full_name" type="text" style="width: 180px" /></td>
+						</tr>
 						<tr>
 							<td>&nbsp;</td>
 							<td>
 								<button type="submit" id="login_btn" 
 									class="btn btn-small btn-primary">Login</button>
+								<img src="lib/images/ui/button-load.gif" id="login-spinner" 
+									style="display: none;">
 							</td>
 						</tr>
 						</tbody>
 				</table>
 			</form>
 			<br>
-			<p style="text-align: center"><a id="forgot-password"
+			<p style="text-align: center" id="forgot-wrapper">
+				<a id="forgot-password" style="cursor:pointer"
 				onclick="return login.show_forgot_password()">Forgot Password</a></p>
+			<p style="text-align: center" id="sign-up-wrapper">
+				New user? <a id="sign-up" style="cursor:pointer"
+				onclick="return login.sign_up()">Sign Up</a></p>
 		</div>
-		<div class="login-footer">
-			<a href="index.html">Home</a> | 
-				<a href="https://erpnext.com">ERPNext</a><br><br>
-				{% if copyright %}
-				<div class="web-footer-copyright">&copy; {{ copyright }}
-				{% endif %}
-		</div>
+	</div>
+	<div class="web-footer login-footer container">
+		<a href="index.html">Home</a> | 
+			<a href="https://erpnext.com">ERPNext</a><br><br>
+			{% if copyright %}
+			<div class="web-footer-copyright">&copy; {{ copyright }}
+			{% endif %}
 	</div>
 
 {% endblock %}
\ No newline at end of file
