diff --git a/website/templates/css/products.css b/website/templates/css/products.css
deleted file mode 100644
index 73289c4..0000000
--- a/website/templates/css/products.css
+++ /dev/null
@@ -1,11 +0,0 @@
-	<style>
-		.img-area {
-			float:left;
-			width: 115px;
-		}
-		
-		.product-list-description {
-			float:left;
-			width: 400px;
-		}
-	</style>
\ No newline at end of file
diff --git a/website/templates/html/outer.html b/website/templates/html/outer.html
index 9741451..1580cbe 100644
--- a/website/templates/html/outer.html
+++ b/website/templates/html/outer.html
@@ -9,7 +9,7 @@
 	</header>
 	<div id="body_div">
 		<div class="navbar-wrapper">
-		<div class="navbar navbar-inverse" 
+		<div class="navbar" 
 			style="margin-bottom: 0px;">
 			<div class="navbar-inner">
 			<div class="container">
diff --git a/website/templates/html/product_group.html b/website/templates/html/product_group.html
index d5e1871..91d79b5 100644
--- a/website/templates/html/product_group.html
+++ b/website/templates/html/product_group.html
@@ -1 +1,35 @@
 {% extends "html/page.html" %}
+
+{% block content %}
+
+<div class="layout-wrapper layout-wrapper-background">
+	<div class="web-content" id="content-product_group">
+		<div class="layout-main" style="padding: 30px;">
+			{% include 'html/product_search_box.html' %}
+			{% if description %}
+			<div>{{ description or ""}}</div>
+			{% else %}
+			<h3>{{ name }}</h3>
+			{% endif %}
+			{% if sub_groups %}
+			<div class="well">
+				<div class="container-fluid">
+				{% for d in sub_groups %}
+					<div class="span2">
+						<i class="icon-chevron-right"></i>
+						<a href="{{ d.page_name }}">{{ d.name }}</a></div>
+				{% endfor %}
+				</div>
+			</div>
+			{% endif %}
+			{% if obj.doclist.get({"doctype":"Featured Item"}) %}
+			<hr>
+			<h3>Featured Products</h3>
+			
+			{% endif %}
+			
+		</div>
+	</div>
+</div>
+
+{% endblock %}
\ No newline at end of file
diff --git a/website/templates/html/product_page.html b/website/templates/html/product_page.html
index 50b3060..dd94190 100644
--- a/website/templates/html/product_page.html
+++ b/website/templates/html/product_page.html
@@ -22,6 +22,7 @@
 			<div class="layout-main" style="padding: 30px;">
 				{% include 'html/product_search_box.html' %}
 				<h1>{{ item_name }}</h1>
+				<p class="help">Item Code: {{ name }}</p>
 				<div class="product-page-content">
 					<div class="span6">
 					{% if website_image %}
@@ -29,7 +30,7 @@
 					{% else %}
 					<div class="img-area">
 						<div style='background-color: #eee; padding: 40px;
-							width: 32px; font-size: 32px; color: #888;'>
+							width: 32px; font-size: 32px; color: #888;' title='No Image'>
 						<i class='icon-camera'></i></div>
 					</div>
 					
@@ -46,7 +47,8 @@
 					<div class="span9">
 						<h3>Product Description</h3>
 						<div>
-						{{ web_long_description or web_short_description }}
+						{{ web_long_description or web_short_description or 
+							"[No description given]" }}
 						</div>
 						<hr>
 						{% if obj.doclist.get({"doctype":"Item Website Specification"}) %}
diff --git a/website/templates/html/product_search_box.html b/website/templates/html/product_search_box.html
index 3cbb3e9..125f0ba 100644
--- a/website/templates/html/product_search_box.html
+++ b/website/templates/html/product_search_box.html
@@ -1,7 +1,8 @@
-<div class="pull-right">
+<div class="pull-right" style="margin-top:-15px;">
 	<form class="form-search">
 		<div class="input-append">
-			<input type="text" class="span2 search-query" id="product-search">
+			<input type="text" class="span2 search-query" 
+				id="product-search" placeholder="Product Search...">
 			<button class="btn" id="btn-product-search">
 				<i class="icon-search"></i></button>
 		</div>
@@ -21,4 +22,5 @@
 			})
 		})
 	</script>
-</div>
\ No newline at end of file
+</div>
+<div class="clearfix"></div>
\ No newline at end of file
diff --git a/website/templates/js/blog.js b/website/templates/js/blog.js
index 43b2d70..6f3260c 100644
--- a/website/templates/js/blog.js
+++ b/website/templates/js/blog.js
@@ -59,10 +59,17 @@
 				<p><a href="%(page_name)s">Read with comments...</a></p>\
 				<hr /><br />', b)).appendTo($wrap);
 		});
-		blog.start += data.length;
+		blog.start += (data.length || 0);
 		if(!data.length) {
-			$("#next-page").toggle(false)
-				.parent().append("<div class='alert'>Nothing more to show.</div>");
+			if(blog.start) {
+				$("#next-page").toggle(false)
+					.parent().append("<div class='alert'>Nothing more to show.</div>");	
+			} else {
+				$("#next-page").toggle(false)
+					.parent().append("<div class='alert'>No blogs written yet.</div>");	
+			}
+		} else {
+			$("#next-page").toggle(true);
 		}
 	}
 }
\ No newline at end of file
diff --git a/website/templates/js/blog_subscribe.js b/website/templates/js/blog_subscribe.js
deleted file mode 100644
index cdc0130..0000000
--- a/website/templates/js/blog_subscribe.js
+++ /dev/null
@@ -1,33 +0,0 @@
-wn.provide('erpnext.blog');
-
-(function() {
-	$('body').on('click', '.btn-blog-subscribe', function() {
-		var d = new wn.ui.Dialog({
-			title: "Get Blog Updates via Email",
-			fields: [
-				{label: "Your Name", fieldtype:"Data", reqd:1},
-				{label: "Your Email Address", fieldtype:"Data", reqd:1
-					,description: "You can unsubscribe anytime."},
-				{label: "Subscribe", fieldtype:"Button"}
-			]
-		});
-		$(d.fields_dict.subscribe.input).click(function() {
-			var args = d.get_values();
-			if(!args) return;
-			wn.call({
-				method: 'website.helpers.blog.add_subscriber',
-				args: args,
-				callback: function(r) {
-					if(r.exc) {
-						msgprint('Opps there seems to be some error, Please check back after some time.');
-					} else {
-						msgprint('Thanks for subscribing!');
-					}
-					d.hide();
-				},
-				btn: this
-			})
-		})
-		d.show()
-	})	
-})()
diff --git a/website/templates/js/product_category.js b/website/templates/js/product_category.js
deleted file mode 100644
index 2b34708..0000000
--- a/website/templates/js/product_category.js
+++ /dev/null
@@ -1,18 +0,0 @@
-wn.provide('erpnext.products');
-
-erpnext.products.make_product_categories = function(wrapper) {
-	if (!wrapper) { wrapper = erpnext.products.wrapper; }
-	if (!wrapper) { return; }
-
-	wrapper.category_list = new wn.ui.Listing({
-		parent: $(wrapper).find('.more-categories').get(0),
-		method: 'website.helpers.product.get_product_category_list',
-		hide_refresh: true,
-		render_row: function(parent, data) {
-			parent.innerHTML = repl(
-				'<a href="products.html#!products/%(item_group)s">%(item_group)s</a> (%(items)s)', 
-				data);
-		}
-	});
-	wrapper.category_list.run();
-}
\ No newline at end of file
diff --git a/website/templates/js/products.js b/website/templates/js/products.js
deleted file mode 100644
index 720d192..0000000
--- a/website/templates/js/products.js
+++ /dev/null
@@ -1,106 +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/>.
-
-// js inside blog page
-
-{% include "js/product_category.js" %}
-
-wn.pages['{{ name }}'].onload = function(wrapper) {
-	erpnext.products.wrapper = wrapper;
-	
-	// make product categories in the sidebar
-	erpnext.products.make_product_categories(wrapper);
-	
-	// make lists
-	erpnext.products.make_product_list(wrapper);
-	
-	// bind search button or enter key
-	$(wrapper).find('.products-search .btn').click(function() {
-		erpnext.products.product_list.run();
-	});
-	
-	$(wrapper).find('.products-search input').keypress(function(ev) {
-		if(ev.which==13) $(wrapper).find('.products-search .btn').click();
-	});
-}
-
-erpnext.products.make_product_list = function(wrapper) {
-	if (!wrapper) { wrapper = erpnext.products.wrapper; }
-	if (!wrapper) { return; }
-	
-	erpnext.products.product_list = new wn.ui.Listing({
-		parent: $(wrapper).find('#products-list').get(0),
-		run_btn: $(wrapper).find('.products-search .btn').get(0),
-		no_toolbar: true,
-		method: 'website.helpers.product.get_product_list',
-		get_args: function() {
-			return {
-				search: $('input[name="products-search"]').val() || '',
-				product_group: erpnext.products.cur_group || '',
-			};
-		},
-		render_row: function(parent, data) {
-			if (!data.web_short_description) {
-				data.web_short_description = data.description;
-			}
-			parent.innerHTML = repl('\
-				<a href="%(page_name)s.html"><div class="img-area"></div></a>\
-				<div class="product-list-description">\
-					<h4><a href="%(page_name)s.html">%(item_name)s</a></h4>\
-					<p>%(web_short_description)s</p></div>\
-				<div style="clear: both;"></div>', data);
-				
-			if(data.website_image) {
-				$(parent).find('.img-area').append(repl(
-					'<img src="files/%(website_image)s" style="width:100px;">', data))
-			} else {
-				$(parent).find('.img-area').append(wn.dom.placeholder(100, 
-					data.item_name));
-			}
-		}
-	});
-}
-
-wn.pages['{{ name }}'].onshow = function(wrapper) {
-	// show default product category
-	erpnext.products.set_group();
-}
-
-erpnext.products.set_group = function() {
-	var cat = erpnext.products.get_group();
-
-	// get erpnext.products.default_category
-	var wrapper = erpnext.products.wrapper;
-	
-	$(wrapper).find('h1').html(cat.label);
-	erpnext.products.product_list.run();
-}
-
-erpnext.products.get_group = function() {
-	route = wn.get_route();
-	if(route && route.length>1) {
-		// from url
-		var grp = route[1];
-		var label = route[1];
-		erpnext.products.cur_group = grp;
-	} else {
-		// default
-		var grp = 'Products';
-		var label = 'Products';
-		erpnext.products.cur_group = null;
-	}
-	return {grp:grp, label:label};
-}
\ No newline at end of file
diff --git a/website/templates/pages/404.html b/website/templates/pages/404.html
index 0423608..04584d9 100644
--- a/website/templates/pages/404.html
+++ b/website/templates/pages/404.html
@@ -3,7 +3,7 @@
 {% block content %}
 <div class="content">
 	<div class="layout-wrapper layout-main">
-		<h3>Page missing or moved</h3>
+		<h3><i class="icon-exclamation-sign"></i> Page missing or moved</h3>
 		<br>
 		<p>We are very sorry for this, but the page you are looking for is missing
 			(this could be because of a typo in the address) or moved.</p>
diff --git a/website/templates/pages/blog.html b/website/templates/pages/blog.html
index 75681d5..f31af42 100644
--- a/website/templates/pages/blog.html
+++ b/website/templates/pages/blog.html
@@ -17,11 +17,12 @@
 			<div class="layout-main">
 				<h1>Blog</h1>
 				<br>
-				<div id="blog-list" style="min-height: 400px;">
+				<div id="blog-list">
 					<!-- blog list will be generated dynamically -->
 				</div>
 				<div style="text-align: center;">
-					<button id="next-page" class="btn">More...</button>
+					<button id="next-page" class="btn" 
+						style="display:none;">More...</button>
 				</div>
 			</div>
 		</div>
diff --git a/website/templates/pages/error.html b/website/templates/pages/error.html
new file mode 100644
index 0000000..4fe394f
--- /dev/null
+++ b/website/templates/pages/error.html
@@ -0,0 +1,11 @@
+{% extends "html/outer.html" %}
+
+{% block content %}
+<div class="content">
+	<div class="layout-wrapper layout-main">
+		<h3><i class="icon-exclamation-sign"></i> Oops, a server error has occured</h3>
+		<br>
+		<pre>%(error)s</pre>
+	</div>
+</div>
+{% endblock %}
\ No newline at end of file
diff --git a/website/templates/pages/product_search.html b/website/templates/pages/product_search.html
index 53a0572..f8a1144 100644
--- a/website/templates/pages/product_search.html
+++ b/website/templates/pages/product_search.html
@@ -56,7 +56,13 @@
 			
 		}
 		if(data.length < 10) {
-			$(".more-btn").replaceWith("<div class='alert'>Nothing more to show</div>");
+			if(!table) {
+				$(".more-btn")
+					.replaceWith("<div class='alert'>No results found for your search.</div>");
+			} else {
+				$(".more-btn")
+					.replaceWith("<div class='alert'>Nothing more to show.</div>");
+			}
 		} else {
 			$(".more-btn").toggle(true)
 		}
@@ -78,8 +84,11 @@
 			<div id="search-list">
 				
 			</div>
-			<div class="more-btn" style="text-align: middle; display: none;">
-				<button class="btn">More...</button>
+			<div style="text-align: center;">
+				<div class="more-btn" 
+					style="display: none; text-align: center;">
+					<button class="btn">More...</button>
+				</div>
 			</div>
 		</div>
 	</div>
diff --git a/website/templates/pages/products.html b/website/templates/pages/products.html
deleted file mode 100644
index aa23ea2..0000000
--- a/website/templates/pages/products.html
+++ /dev/null
@@ -1,37 +0,0 @@
-{% extends "html/page.html" %}
-
-{% block javascript %}
-	{% include "js/products.js" %}
-{% endblock %}
-
-{% block css %}
-	{% include "css/products.css" %}
-{% endblock %}
-
-{% block title %}
-	Products
-{% endblock %}
-
-{% block content %}
-	<div class="layout-wrapper layout-wrapper-background">
-		<div class="web-content" id="content-products">
-			
-			<div class="layout-main-section">
-				<h1 class="products-category"></h1>
-				<div class="products-search" style="margin-bottom: 15px;">
-					<input name="products-search" />
-					<button class="btn" style="margin-left: 7px">Search</button>
-				</div>
-				<div id="products-list">
-					<!-- product list will be generated dynamically -->
-				</div>
-			</div>
-			
-			<div class="layout-side-section">
-				<h3>Categories</h3>
-				<div class="more-categories"></div>
-			</div>
-			<div style="clear: both"></div>
-		</div>
-	</div>
-{% endblock %}
\ No newline at end of file
