diff --git a/public/js/kb_common.js b/public/js/kb_common.js
index 032d2db..0686677 100644
--- a/public/js/kb_common.js
+++ b/public/js/kb_common.js
@@ -33,7 +33,7 @@
 	
 	this.make_timestamp = function() {
 		this.line1.innerHTML = repl('By %(name)s | %(when)s', {
-			name: wn.utils.full_name(this.det.first_name, this.det.last_name),
+			name: wn.user_info(this.det.owner).fullname,
 			when: wn.datetime.comment_when(this.det.modified)
 		});
 		
diff --git a/stock/doctype/item/item.txt b/stock/doctype/item/item.txt
index ce54443..10017a6 100644
--- a/stock/doctype/item/item.txt
+++ b/stock/doctype/item/item.txt
@@ -4,7 +4,7 @@
   "docstatus": 0, 
   "creation": "2012-12-17 14:56:32", 
   "modified_by": "Administrator", 
-  "modified": "2012-12-17 16:02:00"
+  "modified": "2012-12-18 14:23:19"
  }, 
  {
   "allow_attach": 1, 
@@ -823,11 +823,12 @@
   "permlevel": 0
  }, 
  {
+  "description": "Will appear in search", 
   "depends_on": "show_in_website", 
   "doctype": "DocField", 
   "label": "Short Description", 
   "fieldname": "web_short_description", 
-  "fieldtype": "Text", 
+  "fieldtype": "Text Editor", 
   "permlevel": 0
  }, 
  {
diff --git a/utilities/page/questions/questions.py b/utilities/page/questions/questions.py
index b38bc1e..20d3803 100644
--- a/utilities/page/questions/questions.py
+++ b/utilities/page/questions/questions.py
@@ -35,7 +35,7 @@
 			conds += ' and t1._user_tags like "%'+ t +'%"'
 	
 	return webnotes.conn.sql("""select t1.name, t1.owner, t1.question, t1.modified, t1._user_tags,
-			t2.first_name, t2.last_name, (select count(*) from tabAnswer where
+			(select count(*) from tabAnswer where
 			tabAnswer.question = t1.name) as answers
 		from tabQuestion t1, tabProfile t2
 		where t1.docstatus!=2
diff --git a/website/helpers/product.py b/website/helpers/product.py
index fec4626..ceec17d 100644
--- a/website/helpers/product.py
+++ b/website/helpers/product.py
@@ -25,14 +25,6 @@
 
 @webnotes.whitelist(allow_guest=True)
 def get_product_list(args=None):
-	"""
-		args = {
-			'limit_start': 0,
-			'limit_page_length': 20,
-			'search': '',
-			'product_group': '',
-		}
-	"""
 	import webnotes
 	from webnotes.utils import cstr
 	
@@ -40,11 +32,11 @@
 	
 	# base query
 	query = """\
-		select name, item_name, page_name, website_image,
-		description, web_short_description
+		select name, item_name, page_name, website_image, item_group, 
+			if(ifnull(web_short_description,'')='', web_long_description, 
+			web_short_description) as web_short_description
 		from `tabItem`
-		where is_sales_item = 'Yes'
-		and docstatus = 0
+		where docstatus = 0
 		and show_in_website = 1"""
 	
 	# search term condition
@@ -65,75 +57,6 @@
 			and item_group = %(product_group)s"""
 	
 	# order by
-	query += """
-		order by item_name asc, name asc"""
+	query += """order by item_name asc, name asc limit %s, 10""" % args.start
 
-	from webnotes.widgets.query_builder import add_limit_to_query
-	query, args = add_limit_to_query(query, args)
-
-	return webnotes.conn.sql(query, args, as_dict=1)
-
-@webnotes.whitelist(allow_guest=True)
-def get_product_category_list(args=None):
-	"""
-		args = {
-			'limit_start': 0,
-			'limit_page_length': 5,
-		}
-	"""
-	import webnotes
-	
-	if not args: args = webnotes.form_dict
-	
-	query = """\
-		select count(name) as items, item_group
-		from `tabItem`
-		where is_sales_item = 'Yes'
-		and docstatus = 0
-		and show_in_website = 1
-		group by item_group
-		order by items desc"""
-		
-	from webnotes.widgets.query_builder import add_limit_to_query
-	query, args = add_limit_to_query(query, args)
-
-	
-	result = webnotes.conn.sql(query, args, as_dict=1)
-
-	# add All Products link
-	total_count = sum((r.get('items') or 0 for r in result))
-	result = [{'items': total_count, 'item_group': 'All Products'}] + (result or [])
-	
-	return result
-	
-@webnotes.whitelist(allow_guest=True)
-def get_similar_product_list(args=None):
-	"""
-		args = {
-			'limit_start': 0,
-			'limit_page_length': 5,
-			'product_name': '',
-			'product_group': '',
-		}
-	"""
-	import webnotes
-	
-	if not args: args = webnotes.form_dict
-	
-	query = """\
-		select name, item_name, page_name, website_image,
-		description, web_short_description
-		from `tabItem`
-		where is_sales_item = 'Yes'
-		and docstatus = 0
-		and show_in_website = 1
-		and name != %(product_name)s
-		and item_group = %(product_group)s
-		order by item_name"""
-	
-	from webnotes.widgets.query_builder import add_limit_to_query
-	query, args = add_limit_to_query(query, args)
-	
-	result = webnotes.conn.sql(query, args, as_dict=1)
-		
-	return result
\ No newline at end of file
+	return webnotes.conn.sql(query, args, as_dict=1)
\ No newline at end of file
diff --git a/website/templates/html/product_page.html b/website/templates/html/product_page.html
index 80108f1..50b3060 100644
--- a/website/templates/html/product_page.html
+++ b/website/templates/html/product_page.html
@@ -20,15 +20,19 @@
 	<div class="layout-wrapper layout-wrapper-background">
 		<div class="web-content" id="content-product-{{ name }}">
 			<div class="layout-main" style="padding: 30px;">
-				{% include 'html/product_search.html' %}
+				{% include 'html/product_search_box.html' %}
 				<h1>{{ item_name }}</h1>
 				<div class="product-page-content">
 					<div class="span6">
 					{% if website_image %}
 					<image class="item-main-image" src="files/{{ website_image }}" />
 					{% else %}
-					<div class="img-area"></div>
-					<span style="font-size: 11px">This is an auto-generated Image</span>
+					<div class="img-area">
+						<div style='background-color: #eee; padding: 40px;
+							width: 32px; font-size: 32px; color: #888;'>
+						<i class='icon-camera'></i></div>
+					</div>
+					
 					{% endif %}
 					<br><br>
 					</div>
@@ -51,7 +55,7 @@
 							{% for d in obj.doclist.get(
 								{"doctype":"Item Website Specification"}) %}
 								<tr>
-									<td>{{ d.label }}</td>
+									<td style="min-width: 150px;">{{ d.label }}</td>
 									<td>{{ d.description }}</td>
 								</tr>
 							{% endfor %}
diff --git a/website/templates/html/product_search.html b/website/templates/html/product_search.html
deleted file mode 100644
index 034ec11..0000000
--- a/website/templates/html/product_search.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<div class="pull-right">
-	<form class="form-search">
-		<div class="input-append">
-			<input type="text" class="span2 search-query" id="product-search">
-			<button class="btn"><i class="icon-search"></i></button>
-		</div>
-	</form>
-</div>
-<div class="clearfix"></div>
\ No newline at end of file
diff --git a/website/templates/html/product_search_box.html b/website/templates/html/product_search_box.html
new file mode 100644
index 0000000..3cbb3e9
--- /dev/null
+++ b/website/templates/html/product_search_box.html
@@ -0,0 +1,24 @@
+<div class="pull-right">
+	<form class="form-search">
+		<div class="input-append">
+			<input type="text" class="span2 search-query" id="product-search">
+			<button class="btn" id="btn-product-search">
+				<i class="icon-search"></i></button>
+		</div>
+	</form>
+	<script>
+		// redirect to product search page
+		$(document).ready(function() {
+			$("#btn-product-search").click(function() {
+				var txt = $("#product-search").val();
+				if(txt) {
+					window.location.href="product_search.html?q=" + txt;
+				}
+				return false;
+			});
+			$("#product-search").keypress(function(e) {
+				if(e.which==13) $("#product-search-btn").click();
+			})
+		})
+	</script>
+</div>
\ No newline at end of file
diff --git a/website/templates/pages/product_search.html b/website/templates/pages/product_search.html
new file mode 100644
index 0000000..53a0572
--- /dev/null
+++ b/website/templates/pages/product_search.html
@@ -0,0 +1,88 @@
+{% extends "html/page.html" %}
+
+{% block title %}Product Search{% endblock %}
+
+{% block content %}
+<script>
+$(document).ready(function() {
+	var txt = get_url_arg("q");
+	$(".search-results").html("Search results for: " + txt);
+
+	window.start = 0;
+	var get_list = function() {
+		$.ajax({
+			method: "GET",
+			url: "server.py",
+			dataType: "json",
+			data: {
+				cmd: "website.helpers.product.get_product_list",
+				start: window.start,
+				search: txt
+			},
+			dataType: "json",
+			success: function(data) {
+				render(data.message);
+			}
+		})
+	}
+	
+	var render = function(data) {
+		if(data.length) {
+			var table = $("#search-list .table");
+			if(!table.length)
+				var table = $("<table class='table'>").appendTo("#search-list");
+				
+			$.each(data, function(i, d) {
+				if(!d.web_short_description)
+					d.web_short_description = "No description given."
+				var $tr = $(repl('<tr>\
+					<td style="width: 30%;">\
+						<img class="product-image" style="width: 80%;" src="files/%(website_image)s">\
+					</td>\
+					<td>\
+						<h4><a href="%(page_name)s">%(item_name)s</a></h4>\
+						<p class="help">Item Code: %(name)s</p>\
+						<p>%(web_short_description)s</p>\
+					</td>\
+				</tr>', d)).appendTo(table);
+				
+				if(!d.website_image) {
+					$tr.find(".product-image").replaceWith("<div\
+						style='background-color: #eee; padding: 40px; \
+							width: 32px; font-size: 32px; color: #888;'>\
+						<i class='icon-camera'></i></div>");
+				}
+			});
+			
+		}
+		if(data.length < 10) {
+			$(".more-btn").replaceWith("<div class='alert'>Nothing more to show</div>");
+		} else {
+			$(".more-btn").toggle(true)
+		}
+		window.start += (data.length || 0);
+	}
+	
+	get_list();
+	$(".more-btn .btn").click(function() {
+		get_list()
+	});
+});
+</script>
+
+<div class="layout-wrapper layout-wrapper-background">
+	<div class="web-content" id="content-product_search">
+		<div class="layout-main" style="padding: 30px;">
+			{% include 'html/product_search_box.html' %}
+			<h3 class="search-results">Search Results</h3>
+			<div id="search-list">
+				
+			</div>
+			<div class="more-btn" style="text-align: middle; display: none;">
+				<button class="btn">More...</button>
+			</div>
+		</div>
+	</div>
+</div>
+
+{% endblock %}
\ No newline at end of file
