diff --git a/erpnext/stock/doctype/item/item.py b/erpnext/stock/doctype/item/item.py
index c8d6392..7985287 100644
--- a/erpnext/stock/doctype/item/item.py
+++ b/erpnext/stock/doctype/item/item.py
@@ -251,7 +251,7 @@
 	
 		# no need to check for uniqueness, as name is unique
 		
-	def get_html(self):
+	def prepare_template_args(self):
 		import markdown2
 		self.doc.web_description_html = markdown2.markdown(self.doc.description or '',
 										extras=["wiki-tables"])
diff --git a/erpnext/website/blog.py b/erpnext/website/blog.py
new file mode 100644
index 0000000..56bf8e4
--- /dev/null
+++ b/erpnext/website/blog.py
@@ -0,0 +1,68 @@
+import webnotes
+
+@webnotes.whitelist(allow_guest=True)
+def get_recent_blog_list(args=None):
+	"""
+		args = {
+			'limit_start': 0,
+			'limit_page_length': 5,
+			'name': '',
+		}
+	"""
+	import webnotes
+	
+	if not args: args = webnotes.form_dict
+	
+	query = """\
+		select name, title, left(content, 100) as content
+		from tabBlog
+		where ifnull(published,0)=1 and
+		name!=%(name)s order by creation 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)
+
+	# strip html tags from content
+	import webnotes.utils
+	for res in result:
+		res['content'] = webnotes.utils.strip_html(res['content'])
+
+	return result
+
+@webnotes.whitelist(allow_guest=True)
+def add_comment(args=None):
+	"""
+		args = {
+			'comment': '',
+			'comment_by': '',
+			'comment_by_fullname': '',
+			'comment_doctype': '',
+			'comment_docname': '',
+			'page_name': '',
+		}
+	"""
+	import webnotes
+	
+	if not args: args = webnotes.form_dict
+	
+	import webnotes.widgets.form.comments
+	comment = webnotes.widgets.form.comments.add_comment(args)
+	
+	# since comments are embedded in the page, clear the web cache
+	import website.web_cache
+	website.web_cache.clear_web_cache(
+		args.get('comment_doctype'), args.get('comment_docname'),
+		args.get('page_name'))
+	
+	import webnotes.utils
+	
+	comment['comment_date'] = webnotes.utils.pretty_date(comment['creation'])
+	template_args = { 'comment_list': [comment] }
+	
+	# get html of comment row
+	comment_html = website.web_cache.build_html(template_args, 'blog/comment.html')
+
+	return comment_html
+	
\ No newline at end of file
diff --git a/erpnext/website/doctype/blog/blog.py b/erpnext/website/doctype/blog/blog.py
index 89a06d4..bb7b660 100644
--- a/erpnext/website/doctype/blog/blog.py
+++ b/erpnext/website/doctype/blog/blog.py
@@ -34,7 +34,7 @@
 		if not webnotes.utils.cint(self.doc.published):
 			self.delete_web_cache(self.doc.page_name)
 
-	def get_html(self):
+	def prepare_template_args(self):
 		import webnotes.utils
 		
 		# this is for double precaution. usually it wont reach this code if not published
diff --git a/erpnext/website/doctype/web_page/web_page.py b/erpnext/website/doctype/web_page/web_page.py
index 37e0cee..384db4c 100644
--- a/erpnext/website/doctype/web_page/web_page.py
+++ b/erpnext/website/doctype/web_page/web_page.py
@@ -33,5 +33,5 @@
 			from webnotes.session_cache import clear_cache
 			clear_cache('Guest')
 			
-	def get_html(self):
+	def prepare_template_args(self):
 		self.markdown_to_html(['head_section','main_section', 'side_section'])
\ No newline at end of file
diff --git a/erpnext/website/product.py b/erpnext/website/product.py
index 7c6603a..aff15d9 100644
--- a/erpnext/website/product.py
+++ b/erpnext/website/product.py
@@ -15,12 +15,6 @@
 	
 	if not args: args = webnotes.form_dict
 	
-	# dict to be passed to sql function
-	query_args = {
-		'limit_start': cint(args.get('limit_start')),
-		'limit_page_length': cint(args.get('limit_page_length'))
-	}
-	
 	# base query
 	query = """\
 		select name, item_name, page_name, website_image,
@@ -40,36 +34,48 @@
 				item_name like %(search)s or
 				name like %(search)s
 			)"""
-		query_args['search'] = "%" + cstr(args.get('search')) + "%"
+		args['search'] = "%" + cstr(args.get('search')) + "%"
 	
 	# product group condition
 	if args.get('product_group') and args.get('product_group') != 'All Products':
 		query += """
 			and item_group = %(product_group)s"""
-		query_args['product_group'] = args.get('product_group')
 	
 	# order by
 	query += """
 		order by item_name asc, name asc"""
-	
-	if args.get('limit_page_length'):
-		query += """
-			limit %(limit_start)s, %(limit_page_length)s"""
-			
-	return webnotes.conn.sql(query, query_args, as_dict=1)
+
+	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():
+def get_product_category_list(args=None):
+	"""
+		args = {
+			'limit_start': 0,
+			'limit_page_length': 5,
+		}
+	"""
 	import webnotes
 	
-	result = webnotes.conn.sql("""\
+	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""", as_dict=1)
+		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))
@@ -79,11 +85,19 @@
 	
 @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
-
-	result = webnotes.conn.sql("""\
+	
+	query = """\
 		select name, item_name, page_name, website_image,
 		description, web_short_description
 		from `tabItem`
@@ -92,6 +106,11 @@
 		and show_in_website = 1
 		and name != %(product_name)s
 		and item_group = %(product_group)s
-		order by item_name""", args, as_dict=1)
+		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
diff --git a/erpnext/website/templates/blog/blog.html b/erpnext/website/templates/blog/blog.html
index 9132e52..d87b128 100644
--- a/erpnext/website/templates/blog/blog.html
+++ b/erpnext/website/templates/blog/blog.html
@@ -9,19 +9,17 @@
 				<div class="help">By {{ full_name }} on {{ updated }}</div>
 				<br>
 				{{ content_html }}
-				<hr><h3>Comments</h3>
-				<br>
+				<hr>
+				<h3>Comments</h3><br>
 				<div class="blog-comments">
-					{% for comment in comment_list %}
-					<div class="comment-row">
-						<div class="comment-title">
-							{{ comment.comment_by_fullname }} - {{ comment.comment_date }}:
-							{{ comment.comment_date_type }}
-						</div>
-						<p class="comment-content">{{ comment.comment }}</p>
-						<hr>
+					<div class="no-result help hide">
+						<p>Be the first one to comment</p>
+						<br />
 					</div>
-					{% endfor %}
+
+					{% include 'blog/comment.html' %}
+
+					<button class="btn add-comment">Add Comment</button>
 				</div>
 			</div>
 
diff --git a/erpnext/website/templates/blog/blog.js b/erpnext/website/templates/blog/blog.js
index 3ad1575..24d5033 100644
--- a/erpnext/website/templates/blog/blog.js
+++ b/erpnext/website/templates/blog/blog.js
@@ -23,24 +23,16 @@
 	erpnext.blog.wrapper = wrapper;
 	
 	// sidebar
-	wrapper.recent_list = new wn.ui.Listing({
-		parent: $(wrapper).find('.recent-posts'),
-		no_toolbar: true,
-		query: 'select name, title, left(content, 100) as content from tabBlog\
-			where ifnull(published,0)=1 and name!="{{ name }}" order by creation desc',
-		hide_refresh: true,
-		render_row: function(parent, data) {
-			//console.log(data);
-			if(data.content && data.content.length==100) data.content += '...';
-			parent.innerHTML = repl('<a href="%(name)s.html">%(title)s</a>\
-				<div class="comment">%(content)s</div><br>', data);
-			
-			// adjust page height depending on sidebar height
-			erpnext.blog.adjust_page_height(wrapper);
-		},
-		page_length: 5,
-	});
-	wrapper.recent_list.run();
+	erpnext.blog.render_recent_list(wrapper);
+	
+	// unhide no-result if no comments found
+	erpnext.blog.toggle_no_result(wrapper);
+	
+	// bind add comment button to comment dialog
+	erpnext.blog.make_comment_dialog(wrapper);
+	
+	// hide add comment button after 50 comments
+	erpnext.blog.toggle_add_comment_btn(wrapper);
 }
 
 erpnext.blog.adjust_page_height = function(wrapper) {
@@ -54,52 +46,131 @@
 		$main_page.height($sidebar.height());
 	}
 }
-	// wrapper.comment_list = new wn.ui.Listing({
-	// 	parent: $(wrapper).find('.blog-comments').get(0),
-	// 	no_toolbar: true,
-	// 	query: 'select comment, comment_by_fullname, creation\
-	// 		from `tabComment` where comment_doctype="Page"\
-	// 		and comment_docname="{{ name }}" order by creation desc',
-	// 	no_result_message: 'Be the first one to comment',
-	// 	render_row: function(parent, data) {
-	// 		data.comment_date = prettyDate(data.creation);
-	// 		$(parent).html(repl("<div style='color:#777'>\
-	// 			%(comment_by_fullname)s | %(comment_date)s:\
-	// 			</div>\
-	// 			<p style='margin-left: 20px;'>%(comment)s</p><br>", data))
-	// 	},
-	// 	hide_refresh: true,
-	// });
-	// wrapper.comment_list.run();
-	// 
-	// // add comment
-	// $(wrapper).find('.layout-main-section').append('<br><button class="btn add-comment">\
-	// 	Add Comment</button>');
-	// $(wrapper).find('button.add-comment').click(function(){
-	// 	d = new wn.widgets.Dialog({
-	// 		title: 'Add Comment',
-	// 		fields: [
-	// 			{fieldname:'comment_by_fullname', label:'Your Name', reqd:1, fieldtype:'Data'},
-	// 			{fieldname:'comment_by', label:'Email Id', reqd:1, fieldtype:'Data'},
-	// 			{fieldname:'comment', label:'Comment', reqd:1, fieldtype:'Text'},
-	// 			{fieldname:'post', label:'Post', fieldtype:'Button'}
-	// 		]
-	// 	});
-	// 	d.fields_dict.post.input.onclick = function() {
-	// 		var btn = this;
-	// 		var args = d.get_values();
-	// 		if(!args) return;
-	// 		args.comment_doctype = 'Page';
-	// 		args.comment_docname = '{{ name }}';
-	// 		$(btn).set_working();
-	// 		$c('webnotes.widgets.form.comments.add_comment', args, function(r) {
-	// 			$(btn).done_working();
-	// 			d.hide();
-	// 			wrapper.comment_list.refresh();
-	// 		})
-	// 	}
-	// 	d.show();
-	// })
 
+erpnext.blog.render_recent_list = function(wrapper) {
+	if (!wrapper) { wrapper = erpnext.blog.wrapper; }
+	if (!wrapper) { return; }
+	
+	wrapper.recent_list = new wn.ui.Listing({
+		parent: $(wrapper).find('.recent-posts'),
+		no_toolbar: true,
+		method: 'website.blog.get_recent_blog_list',
+		get_args: function() {
+			return { name: '{{ name }}' }
+		},
+		hide_refresh: true,
+		render_row: function(parent, data) {
+			if(data.content && data.content.length>=100) data.content += '...';
+			parent.innerHTML = repl('<a href="%(name)s.html">%(title)s</a>\
+				<div class="comment">%(content)s</div><br>', data);
+			
+			// adjust page height depending on sidebar height
+			erpnext.blog.adjust_page_height(wrapper);
+		},
+		page_length: 5,
+	});
+	wrapper.recent_list.run();
+}
+
+erpnext.blog.toggle_no_result = function(wrapper) {
+	if (!wrapper) { wrapper = erpnext.blog.wrapper; }
+	if (!wrapper) { return; }
+	
+	var $blog_comments = $(wrapper).find('.blog-comments');
+	var $comment_rows = $blog_comments.find('.comment-row');
+	var $no_result = $blog_comments.find('.no-result');
+	if ($comment_rows.length == 0) {
+		$no_result.removeClass('hide');
+	} else {
+		$no_result.addClass('hide');
+	}
+}
+
+erpnext.blog.make_comment_dialog = function(wrapper) {
+	if (!wrapper) { wrapper = erpnext.blog.wrapper; }
+	if (!wrapper) { return; }
+	
+	var $comment_btn = $(wrapper).find('button.add-comment');
+	
+	$comment_btn.click(function() {
+		if(!erpnext.blog.comment_dialog) {
+			var d = new wn.widgets.Dialog({
+				title: 'Add Comment',
+				fields: [
+					{
+						fieldname: 'comment_by_fullname', label: 'Your Name',
+						reqd: 1, fieldtype: 'Data'
+					},
+					{
+						fieldname: 'comment_by', label: 'Email Id',
+						reqd: 1, fieldtype: 'Data'
+					},
+					{
+						fieldname: 'comment', label: 'Comment',
+						reqd: 1, fieldtype: 'Text'
+					},
+					{
+						fieldname: 'post_comment', label: 'Post Comment',
+						fieldtype: 'Button'
+					},
+				],
+			});
+			
+			erpnext.blog.comment_dialog = d;
+		}
+		
+		erpnext.blog.comment_dialog.fields_dict.post_comment
+				.input.onclick = function() {
+			erpnext.blog.add_comment(wrapper);
+		}
+		
+		erpnext.blog.comment_dialog.show();
+	});
+
+}
+
+erpnext.blog.add_comment = function(wrapper) {
+	var args = erpnext.blog.comment_dialog.get_values();
+
+	if(!args) return;
+	
+	args.comment_doctype = 'Blog';
+	args.comment_docname = '{{ name }}';
+	args.page_name = '{{ page_name }}';
+	
+	wn.call({
+		method: 'website.blog.add_comment',
+		args: args,
+		btn: this,
+		callback: function(r) {
+			if(!r.exc) {
+				erpnext.blog.add_comment_to_page(wrapper, r.message);
+				erpnext.blog.comment_dialog.hide();
+			}
+		}
+	});
+}
+
+erpnext.blog.add_comment_to_page = function(wrapper, comment) {
+	$blog_comments = $(wrapper).find('.blog-comments');
+	$comment_rows = $blog_comments.find('.comment-row');
+	
+	if ($comment_rows.length) {
+		$comment_rows.last().after(comment);
+	} else {
+		$blog_comments.find('.no-result').after(comment);
+	}
+	
+	erpnext.blog.toggle_no_result(wrapper);
+	erpnext.blog.toggle_add_comment_btn(wrapper);
+}
+
+erpnext.blog.toggle_add_comment_btn = function(wrapper) {
+	var $wrapper = $(wrapper);
+	if ($wrapper.find('.blog-comments .comment-row').length > 50) {
+		var $comment_btn = $wrapper.find('button.add-comment');
+		$comment_btn.addClass('hide');
+	}
+}
 
 {% endblock %}
diff --git a/erpnext/website/templates/blog/comment.html b/erpnext/website/templates/blog/comment.html
new file mode 100644
index 0000000..1323e09
--- /dev/null
+++ b/erpnext/website/templates/blog/comment.html
@@ -0,0 +1,14 @@
+{#
+	this template generates comment rows for a blog
+	it is to be included in the blog/blog.html template
+#}
+
+{% for comment in comment_list %}
+<div class="comment-row">
+	<div class="comment-title">
+		{{ comment.comment_by_fullname }} - {{ comment.comment_date }}:
+	</div>
+	<p class="comment-content">{{ comment.comment }}</p>
+	<hr>
+</div>
+{% endfor %}
\ No newline at end of file
diff --git a/erpnext/website/web_cache.py b/erpnext/website/web_cache.py
index 5fcae82..2221df3 100644
--- a/erpnext/website/web_cache.py
+++ b/erpnext/website/web_cache.py
@@ -15,7 +15,7 @@
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # used by web.py
-def load_from_web_cache(page_name, comments, template): #, script=None):
+def load_from_web_cache(page_name, comments, template):
 	"""
 		* search for page in cache
 		* if html exists, return
@@ -47,30 +47,13 @@
 	from webnotes.utils import cstr
 	html += """\n<!-- %s -->""" % cstr(comments)
 	
-	# show error in error console
-	# if script: html += """\n\n<script>\n%s\n</script>""" % cstr(script)
 	return html
 
 def load_into_web_cache(page_name, template, doc_type, doc_name):
 	"""build html and store it in web cache"""
 	import webnotes
-	outer_env_dict = get_outer_env()
-	
-	if page_name in ['404', 'blog', 'products', 'login-page']:
-		args = outer_env_dict
-		args.update({
-			'name': page_name,
-		})
-	else:
-		if page_name == 'index':
-			page_name, doc_type, doc_name = get_index_page()
 
-		from webnotes.model.code import get_obj
-		obj = get_obj(doc_type, doc_name)
-		if hasattr(obj, 'get_html'):
-			obj.get_html()
-		args = obj.doc.fields
-		args.update(outer_env_dict)
+	args = prepare_args(page_name, doc_type, doc_name)
 	
 	# decide template and update args
 	if doc_type == 'Web Page':
@@ -96,6 +79,26 @@
 	webnotes.conn.commit()
 	
 	return html
+	
+def prepare_args(page_name, doc_type, doc_name, with_outer_env=1):
+	if page_name in ['404', 'blog', 'products', 'login-page']:
+		args = {
+			'name': page_name,
+		}
+	else:
+		if page_name == 'index':
+			page_name, doc_type, doc_name = get_index_page()
+
+		from webnotes.model.code import get_obj
+		obj = get_obj(doc_type, doc_name)
+		if hasattr(obj, 'prepare_template_args'):
+			obj.prepare_template_args()
+		args = obj.doc.fields
+
+	outer_env_dict = with_outer_env and get_outer_env() or {}
+	args.update(outer_env_dict)
+	
+	return args
 
 def build_html(args, template):
 	"""build html using jinja2 templates"""
