diff --git a/public/build.json b/public/build.json
index 95fb8f0..375150a 100644
--- a/public/build.json
+++ b/public/build.json
@@ -7,10 +7,11 @@
 		"app/public/js/startup.css"
 	],
 	"public/js/all-web.js": [
-		"app/public/js/startup.js",
-		"app/public/js/conf.js"
+		"app/public/js/website_utils.js"
 	],
 	"public/js/all-app.js": [
+		"app/public/js/startup.js",
+		"app/public/js/conf.js",
 		"app/public/js/modules.js",
 		"app/public/js/toolbar.js",
 		"app/public/js/feature_setup.js",
diff --git a/public/js/startup.js b/public/js/startup.js
index 1b9e3ea..cff3ed8 100644
--- a/public/js/startup.js
+++ b/public/js/startup.js
@@ -136,23 +136,6 @@
 	wn.updates.id = setInterval(erpnext.update_messages, 60000);
 }
 
-// subject, sender, description
-erpnext.send_message = function(opts) {
-	if(opts.btn) {
-		$(opts.btn).start_working();
-	}
-	wn.call({
-		method: 'website.send_message',
-		args: opts,
-		callback: function(r) { 
-			if(opts.btn) {
-				$(opts.btn).done_working();
-			}
-			if(opts.callback)opts.callback(r) 
-		}
-	});
-}
-
 erpnext.hide_naming_series = function() {
 	if(cur_frm.fields_dict.naming_series) {
 		hide_field('naming_series');
diff --git a/public/js/website_utils.js b/public/js/website_utils.js
new file mode 100644
index 0000000..eb6363f
--- /dev/null
+++ b/public/js/website_utils.js
@@ -0,0 +1,45 @@
+
+var erpnext = {};
+
+// subject, sender, description
+erpnext.send_message = function(opts) {
+	if(opts.btn) {
+		$(opts.btn).attr("disabled", "disabled");
+	}
+		
+	$.ajax({
+		method: "POST",
+		url: "server.py",
+		data: {
+			cmd: "website.send_message",
+			subject: opts.subject,
+			sender: opts.sender,
+			message: typeof opts.message == "string"
+				? opts.message
+				: JSON.stringify(opts.message)
+		},
+		dataType: "json",
+		success: function(data) {
+			if(opts.btn) {
+				$(opts.btn).attr("disabled", false);
+			}
+			if(opts.callback) 
+				opts.callback(data);
+		}
+	});
+}
+
+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; }
+
+function get_url_arg(name) {
+	name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
+	var regexS = "[\\?&]"+name+"=([^&#]*)";
+	var regex = new RegExp( regexS );
+	var results = regex.exec( window.location.href );
+	if(results == null)
+		return "";
+	else
+		return decodeURIComponent(results[1]);		
+}
\ No newline at end of file
diff --git a/stock/doctype/featured_item/featured_item.py b/stock/doctype/featured_item/featured_item.py
new file mode 100644
index 0000000..7f48feb
--- /dev/null
+++ b/stock/doctype/featured_item/featured_item.py
@@ -0,0 +1,22 @@
+# 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
+
+class DocType:
+	def __init__(self, d, dl):
+		self.doc, self.doclist = d, dl
\ No newline at end of file
diff --git a/website/__init__.py b/website/__init__.py
index 1a5a338..32d7116 100644
--- a/website/__init__.py
+++ b/website/__init__.py
@@ -6,6 +6,8 @@
 
 import webnotes
 
+max_tickets_per_hour = 200
+
 @webnotes.whitelist(allow_guest=True)
 def send_message():
 	from webnotes.model.doc import Document
@@ -17,15 +19,21 @@
 	d.raised_by = webnotes.form_dict.get('sender')
 	
 	if not d.description:
-		webnotes.msgprint('Please write something', raise_exception=True)
+		webnotes.response["message"] = 'Please write something'
+		return
 		
 	if not d.raised_by:
-		webnotes.msgprint('Please give us your email id so that we can write back to you', raise_exception=True)
+		webnotes.response["message"] = 'Email Id Required'
+		return
 	
-	# make lead or contact
+	# guest method, cap max writes per hour
+	if webnotes.conn.sql("""select count(*) from `tabSupport Ticket`
+		where TIMEDIFF(NOW(), modified) < '01:00:00'""")[0][0] > max_tickets_per_hour:
+		webnotes.response["message"] = "Sorry: we believe we have received an unreasonably high number of requests of this kind. Please try later"
+		return
 	
 	d.save()
-	webnotes.msgprint('Thank you!')
+	webnotes.response["message"] = 'Thank You'
 	
 def get_site_address():
 	from webnotes.utils import get_request_site_address
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> | 
diff --git a/website/utils.py b/website/utils.py
index 991a486..0fc5f98 100644
--- a/website/utils.py
+++ b/website/utils.py
@@ -33,6 +33,10 @@
 	'Item': webnotes._dict({
 		"template": 'html/product_page.html',
 		"condition_field": "show_in_website",
+	}),
+	'Item Group': webnotes._dict({
+		"template": "html/product_group.html",
+		"condition_field": "show_in_website"
 	})
 }
 
