diff --git a/website/templates/css/login.css b/website/templates/css/login.css
index 1f36e53..b7b7fca 100644
--- a/website/templates/css/login.css
+++ b/website/templates/css/login.css
@@ -5,6 +5,7 @@
 		}
 
 		.layout-wrapper {
+			background-color: #fff;
 			padding: 10px;
 			box-shadow: 1px 1px 3px 3px #ccc;
 			font-size: 12px;
diff --git a/website/templates/html/page.html b/website/templates/html/page.html
index e2eb6f4..11d7b0f 100644
--- a/website/templates/html/page.html
+++ b/website/templates/html/page.html
@@ -5,28 +5,12 @@
 {% block header %}
 	{{ super() }}
 	<script>
-	window.page_name = "{{ name }}";
-
-	$(document).bind('app_ready', function() {
-		var _page = new wn.views.Page(window.page_name);
-	
-		// page script
-		{% block javascript %}
-		{% endblock %}
-	
-		// trigger onload
-		_page.trigger('onload');
-	
-		// activate page
-		wn.container.change_to(window.page_name);
-	});
+	{% block javascript %}
+	{% endblock %}
 	</script>
-	
 	{% block css %}
-	{% if insert_style %}
-	
+	{% if insert_style %}	
 	<style>{{ css }}</style>
-
 	{% endif %}
 	{% endblock %}
 {% endblock %}
diff --git a/website/templates/html/product_group.html b/website/templates/html/product_group.html
new file mode 100644
index 0000000..d5e1871
--- /dev/null
+++ b/website/templates/html/product_group.html
@@ -0,0 +1 @@
+{% extends "html/page.html" %}
diff --git a/website/templates/js/login.js b/website/templates/js/login.js
index eb3a65c..b57db49 100644
--- a/website/templates/js/login.js
+++ b/website/templates/js/login.js
@@ -1,13 +1,13 @@
 
-wn.provide('erpnext.login');
+var login = {};
 
 $(document).ready(function(wrapper) {
-	$('#login_btn').click(erpnext.login.doLogin)
+	$('#login_btn').click(login.do_login)
 		
 	$('#password').keypress(function(ev){
 		if(ev.which==13 && $('#password').val()) {
 			$('form').submit(function() {
-				erpnext.login.doLogin();
+				login.do_login();
 				return false;
 			});
 		}
@@ -16,54 +16,60 @@
 })
 
 // Login
-erpnext.login.doLogin = function(){
+login.do_login = function(){
 
     var args = {};
     args['usr']=$("#login_id").val();
     args['pwd']=$("#password").val();
 
 	if(!args.usr || !args.pwd) {
-		msgprint("Sorry, you can't login if you don't enter both the email id and password.")
+		login.set_message("Both login and password required.");
 	}
 
-	$('#login_btn').set_working();
-	$('#login_message').empty();
+	$('#login_btn').attr("disabled", "disabled");
+	$('#login_message').toggle(false);
 	
-    $c("login", args, function(r, rtext) {
-		$('#login_btn').done_working();
-	    if(r.message=="Logged In"){
-	        window.location.href='app.html' + (get_url_arg('page') 
-				? ('?page='+get_url_arg('page')) : '');
-	    } else {
-	        $i('login_message').innerHTML = '<span style="color: RED;">'
-				+(r.message)+'</span>';
-	    }
-	});
-
+	$.ajax({
+		type: "POST",
+		url: "server.py",
+		data: {cmd:"login", usr:args.usr, pwd: args.pwd},
+		dataType: "json",
+		success: function(data) {
+			$('#login_btn').attr("disabled", false);
+			if(data.message=="Logged In") {
+				window.location.href = "app.html";
+			} else {
+				login.set_message(data.message);
+			}
+		}
+	})
+	
 	return false;
 }
 
-
-erpnext.login.show_forgot_password = function(){
+login.show_forgot_password = function(){
     // create dialog
-	var d = new wn.ui.Dialog({
-		title:"Forgot Password",
-		fields: [
-			{'label':'Email Id', 'fieldname':'email_id', 'fieldtype':'Data', 'reqd':true},
-			{'label':'Email Me A New Password', 'fieldname':'run', 'fieldtype':'Button'}
-		]
-	});
+	var login_id = $("#login_id").val();
+	if(!login_id || !valid_email(login_id)) {
+		login.set_message("Please set your login id (which is your email where the password will be sent);");
+		return;
+	}
+	login.set_message("Sending email with new password...");
+	$("#forgot-password").remove();
 
-	$(d.fields_dict.run.input).click(function() {
-		var values = d.get_values();
-		if(!values) return;
-		wn.call({
-			method:'reset_password',
-			args: { user: values.email_id },
-			callback: function() {
-				d.hide();
-			}
-		})
+	$.ajax({
+		method: "POST",
+		url: "server.py",
+		data: {
+			cmd: "reset_password",
+			user: login_id
+		},
+		success: function(data) {
+			login.set_message("A new password has been sent to your email id.", "GREEN");
+		}
 	})
-	d.show();
+}
+
+login.set_message = function(message, color) {
+    $('#login_message').html(message).toggle(true);	
 }
\ No newline at end of file
diff --git a/website/templates/pages/login.html b/website/templates/pages/login.html
index a81b2f5..0828f65 100644
--- a/website/templates/pages/login.html
+++ b/website/templates/pages/login.html
@@ -14,6 +14,7 @@
 {% block body %}
 	<div 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>
 			<form autocomplete="on">
 				<table border="0" class="login-box">
@@ -33,15 +34,12 @@
 									class="btn btn-small btn-primary">Login</button>
 							</td>
 						</tr>
-						<tr>
-							<td>&nbsp;</td>
-							<td id="login_message">&nbsp;</td>
-						</tr>
 						</tbody>
 				</table>
 			</form>
-			<p style="text-align: center"><span class="link_type" 
-				onclick="erpnext.login.show_forgot_password()">Forgot Password</span></p>
+			<br>
+			<p style="text-align: center"><a id="forgot-password"
+				onclick="return login.show_forgot_password()">Forgot Password</a></p>
 		</div>
 		<div class="login-footer">
 			<a href="index.html">Home</a> | 
