diff --git a/config.json b/config.json
index f9c71b4..6656ed3 100644
--- a/config.json
+++ b/config.json
@@ -106,14 +106,24 @@
 			},
 			"orders": {
 				"no_cache": true,
-				"template": "app/website/templates/pages/transaction_list",
+				"template": "app/website/templates/pages/sales_transactions",
 				"args_method": "website.helpers.transaction.order_list_args"
 			},
 			"invoices": {
 				"no_cache": true,
-				"template": "app/website/templates/pages/transaction_list",
+				"template": "app/website/templates/pages/sales_transactions",
 				"args_method": "website.helpers.transaction.invoice_list_args"
 			},
+			"shipments": {
+				"no_cache": true,
+				"template": "app/website/templates/pages/sales_transactions",
+				"args_method": "website.helpers.transaction.shipment_list_args"
+			},
+			"messages": {
+				"no_cache": true,
+				"template": "app/website/templates/pages/messages",
+				"args_method": "website.helpers.transaction.message_list_args"
+			},
 			"product_search": {
 				"template": "app/website/templates/pages/product_search"
 			},
@@ -123,7 +133,8 @@
 				"args_method": "support.doctype.support_ticket.support_ticket.get_website_args"
 			},
 			"tickets": {
-				"template": "app/website/templates/pages/tickets"
+				"template": "app/website/templates/pages/tickets",
+				"args_method": "website.helpers.transaction.ticket_list_args"
 			},
 			"address": {
 				"no_cache": true,
diff --git a/public/js/website_utils.js b/public/js/website_utils.js
index d22d765..1b7f0f7 100644
--- a/public/js/website_utils.js
+++ b/public/js/website_utils.js
@@ -2,8 +2,8 @@
 // License: GNU General Public License v3. See license.txt
 
 
-var erpnext = {};
-var wn = {};
+if(!window.erpnext) erpnext = {};
+if(!window.wn) wn = {};
 
 // Add / update a new Lead / Communication
 // subject, sender, description
@@ -229,4 +229,17 @@
 		if(cart_count)
 			$(".cart-count").html("( "+ cart_count +" )")
 	}
-});
\ No newline at end of file
+});
+
+function remove_script_and_style(txt) {
+	return (!txt || (txt.indexOf("<script>")===-1 && txt.indexOf("<style>")===-1)) ? txt :
+		$("<div></div>").html(txt).find("script,noscript,style,title,meta").remove().end().html();
+}
+
+function is_html(txt) {
+	if(txt.indexOf("<br>")==-1 && txt.indexOf("<p")==-1 
+		&& txt.indexOf("<img")==-1 && txt.indexOf("<div")==-1) {
+		return false;
+	}
+	return true;
+}
\ No newline at end of file
diff --git a/support/doctype/support_ticket/support_ticket.py b/support/doctype/support_ticket/support_ticket.py
index 2b8fe85..5e0ffd5 100644
--- a/support/doctype/support_ticket/support_ticket.py
+++ b/support/doctype/support_ticket/support_ticket.py
@@ -73,17 +73,6 @@
 	st.doc.status = status
 	st.save()
 
-@webnotes.whitelist()
-def get_tickets():
-	tickets = webnotes.conn.sql("""select 
-		name, subject, status 
-		from `tabSupport Ticket` 
-		where raised_by=%s 
-		order by modified desc
-		limit 20""", 
-			webnotes.session.user, as_dict=1)
-	return tickets
-
 def get_website_args():
 	bean = webnotes.bean("Support Ticket", webnotes.form_dict.name)
 	if bean.doc.raised_by != webnotes.session.user:
diff --git a/website/css/website.css b/website/css/website.css
index 88bf7fd..619658e 100644
--- a/website/css/website.css
+++ b/website/css/website.css
@@ -164,21 +164,32 @@
 }
 
 /* buttons */
+
 .btn-default {
   color: #ffffff;
   background-color: #a7a9aa;
   border-color: #a7a9aa;
 }
 
+.dropup .btn-default .caret,
+.btn-default .caret {
+	border-bottom-color: #ffffff;
+	border-top-color: #ffffff;
+}
+
 .btn-default:hover,
 .btn-default:focus,
 .btn-default:active,
-.btn-default.active {
-  color: #ffffff;
+.btn-default.active,
+.open .dropdown-toggle.btn-default {
   background-color: #9a9c9d;
   border-color: #8d9091;
+  color: #ffffff;
 }
 
+.btn-default.disabled,
+.btn-default[disabled],
+fieldset[disabled] .btn-default,
 .btn-default.disabled:hover,
 .btn-default[disabled]:hover,
 fieldset[disabled] .btn-default:hover,
@@ -193,4 +204,4 @@
 fieldset[disabled] .btn-default.active {
   background-color: #a7a9aa;
   border-color: #a7a9aa;
-}
\ No newline at end of file
+}
diff --git a/website/helpers/transaction.py b/website/helpers/transaction.py
index 336be2a..1aded2e 100644
--- a/website/helpers/transaction.py
+++ b/website/helpers/transaction.py
@@ -15,7 +15,7 @@
 		transactions = webnotes.conn.sql("""select name, creation, currency, grand_total_export 
 			from `tab%s` where customer=%s and docstatus=1
 			order by creation desc
-			limit %s, 20""" % (doctype, "%s", "%s"), (customer, cint(start)), as_dict=1)
+			limit %s, 20""" % (doctype, "%s", "%s"), (customer, cint(start)), as_dict=True)
 		for doc in transactions:
 			doc.items = ", ".join(webnotes.conn.sql_list("""select item_name
 				from `tab%s Item` where parent=%s limit 5""" % (doctype, "%s"), doc.name))
@@ -60,4 +60,60 @@
 		"empty_list_message": "No Invoices Found",
 		"page": "invoice"
 	})
-	return args
\ No newline at end of file
+	return args
+
+@webnotes.whitelist()
+def get_shipments(start=0):
+	return get_transaction_list("Delivery Note", start)
+
+def shipment_list_args():
+	args = get_common_args()
+	args.update({
+		"title": "Shipments",
+		"method": "website.helpers.transaction.get_shipments",
+		"icon": "icon-truck",
+		"empty_list_message": "No Shipments Found",
+		"page": "shipment"
+	})
+	return args
+	
+@webnotes.whitelist()
+def get_tickets(start=0):
+	tickets = webnotes.conn.sql("""select name, subject, status, creation 
+		from `tabSupport Ticket` where raised_by=%s 
+		order by modified desc
+		limit %s, 20""", (webnotes.session.user, cint(start)), as_dict=True)
+	for t in tickets:
+		t.creation = formatdate(t.creation)
+	
+	return tickets
+	
+def ticket_list_args():
+	return {
+		"title": "My Tickets",
+		"method": "website.helpers.transaction.get_tickets",
+		"icon": "icon-ticket",
+		"empty_list_message": "No Tickets Raised",
+		"page": "ticket"
+	}
+
+@webnotes.whitelist()
+def get_messages(start=0):
+	search_term = "%%%s%%" % webnotes.session.user
+	messages = webnotes.conn.sql("""select name, subject, creation,
+		sender, recipients, content
+		from `tabCommunication` where sender like %s or recipients like %s
+		order by creation desc
+		limit %s, 20""", (search_term, search_term, cint(start)), as_dict=True)
+	for m in messages:
+		m.creation = formatdate(m.creation)
+		
+	return messages
+
+def message_list_args():
+	return {
+		"title": "Messages",
+		"method": "website.helpers.transaction.get_messages",
+		"icon": "icon-comments",
+		"empty_list_message": "No Messages Found",
+	}
diff --git a/website/templates/html/transactions.html b/website/templates/html/transactions.html
new file mode 100644
index 0000000..1e61124
--- /dev/null
+++ b/website/templates/html/transactions.html
@@ -0,0 +1,59 @@
+{% extends "app/website/templates/html/page.html" %}
+
+{% block content -%}
+<div class="col-md-12">
+    <ul class="breadcrumb">
+    	<li><a href="index">Home</a></li>
+    	<li><a href="account">My Account</a></li>
+    	<li class="active"><i class="{{ icon }} icon-fixed-width"></i> {{ title }}</li>
+    </ul>
+	<div class="list-group transaction-list">
+		<div class="progress progress-striped active">
+			<div class="progress-bar progress-bar-info" style="width: 100%;"></div>
+		</div>
+	</div>
+	<div class="text-center">
+		<button class="btn btn-default btn-show-more hide">More</button>
+	</div>
+</div>
+{%- endblock %}
+
+{% block javascript -%}
+$(document).ready(function() {
+	window.start = 0;
+	window.$list = $(".transaction-list");
+	window.$show_more = $(".btn-show-more").on("click", function() { get_transactions(this); })
+	
+	get_transactions();
+});
+
+var get_transactions = function(btn) {
+	wn.call({
+		method: "{{ method }}",
+		args: { start: start },
+		btn: btn,
+		callback: function(r) {
+			$list.find(".progress").remove();
+			$show_more.toggleClass("hide", !(r.message && r.message.length===20));
+		
+			if(!(r.message && r.message.length)) {
+				console.log("empty");
+				if(!$list.html().trim()) {
+					$list.html("<div class='alert alert-warning'>\
+						{{ empty_list_message }}</div>");
+				}
+				return;
+			}
+		
+			start += r.message.length;
+		
+			$.each(r.message, function(i, doc) {
+				render(doc);
+			});
+		}
+	})
+};
+
+// var render = function(doc) { };
+
+{% endblock %}
\ No newline at end of file
diff --git a/website/templates/pages/account.html b/website/templates/pages/account.html
index 6dcc497..9d29589 100644
--- a/website/templates/pages/account.html
+++ b/website/templates/pages/account.html
@@ -17,11 +17,9 @@
 		<li><a href="orders"><i class="icon-list icon-fixed-width"></i> My Orders</a></li>
 		<li><a href="tickets"><i class="icon-tags icon-fixed-width"></i> My Tickets</a></li>
 		<li style="border-top: 1px solid #ddd"></li>
-		<li><a href="messages"><i class="icon-comments icon-fixed-width"></i> Messages</a></li>
-		<li><a href="quotations"><i class="icon-shopping-cart icon-fixed-width"></i> 
-			Quotations</a></li>
 		<li><a href="invoices"><i class="icon-file-text icon-fixed-width"></i> Invoices</a></li>
-		<li><a href="delivery_notes"><i class="icon-truck icon-fixed-width"></i> Shipments</a></li>
+		<li><a href="shipments"><i class="icon-truck icon-fixed-width"></i> Shipments</a></li>
+		<li><a href="messages"><i class="icon-comments icon-fixed-width"></i> Messages</a></li>
 		<li style="border-top: 1px solid #ddd"></li>
 		<li><a href="server.py?cmd=web_logout"><i class="icon-signout icon-fixed-width"></i>
 			Logout</a></li>
diff --git a/website/templates/pages/messages.html b/website/templates/pages/messages.html
new file mode 100644
index 0000000..e1ea8d0
--- /dev/null
+++ b/website/templates/pages/messages.html
@@ -0,0 +1,31 @@
+{% extends "app/website/templates/html/transactions.html" %}
+
+{% block javascript -%}
+{{ super() }}
+
+var render = function(doc) {
+	doc.sender = doc.sender ? doc.sender : "To ";
+	doc.recipients = doc.recipients ? (" to " + doc.recipients) : "";
+	doc.content = remove_script_and_style(doc.content);
+	
+	if(!is_html(doc.content)) {
+		doc.content = doc.content.replace("\n", "<br>");
+	}
+		
+	$(repl('<a class="list-group-item">\
+			<div class="row col-md-12">%(subject)s</div>\
+			<div class="row text-muted">\
+				<div class="col-md-6">%(sender)s%(recipients)s</div>\
+				<div class="col-md-6 text-right">%(creation)s</div>\
+			</div>\
+			<div class="row col-md-12 msg-content" style="display: none;"><hr>%(content)s</div>\
+		</a>', doc))
+		.appendTo($list)
+		.on("click", function() {
+			$(this).find(".msg-content").toggle();
+		});
+	
+	
+}
+
+{%- endblock %}
\ No newline at end of file
diff --git a/website/templates/pages/sales_transactions.html b/website/templates/pages/sales_transactions.html
new file mode 100644
index 0000000..7215339
--- /dev/null
+++ b/website/templates/pages/sales_transactions.html
@@ -0,0 +1,25 @@
+{% extends "app/website/templates/html/transactions.html" %}
+
+{% block javascript -%}
+global_number_format = "{{ global_number_format }}";
+currency = "{{ currency }}";
+wn.currency_symbols = {{ currency_symbols }};
+
+{{ super() }}
+
+var render = function(doc) {
+	doc.grand_total_export = format_currency(doc.grand_total_export, doc.currency);
+	
+	$(repl('<a href="{{ page }}?name=%(name)s" class="list-group-item">\
+			<div class="row">\
+				<div class="col-md-6">\
+					<div class="row col-md-12">%(name)s</div>\
+					<div class="row col-md-12 text-muted">%(items)s...</div>\
+				</div>\
+				<div class="col-md-3 text-right">%(grand_total_export)s</div>\
+				<div class="col-md-3 text-right text-muted">%(creation)s</div>\
+			</div>\
+		</a>', doc)).appendTo($list);
+};
+
+{%- endblock %}
\ No newline at end of file
diff --git a/website/templates/pages/tickets.html b/website/templates/pages/tickets.html
index 9c476ff..248384d 100644
--- a/website/templates/pages/tickets.html
+++ b/website/templates/pages/tickets.html
@@ -1,51 +1,35 @@
-{% extends "app/website/templates/html/page.html" %}
+{% extends "app/website/templates/html/transactions.html" %}
 
-{% set title="My Tickets" %}
+{% block javascript -%}
+{{ super() }}
 
-{% block content %}
-<div class="col-md-12">
-    <ul class="breadcrumb">
-    	<li><a href="index">Home</a></li>
-    	<li><a href="account">My Account</a></li>
-    	<li class="active"><i class="icon-ticket icon-fixed-width"></i> My Tickets</li>
-    </ul>
-	<div id="ticket-list" style="font-size: 13px;">
-		<div class="progress progress-striped active">
-			<div class="progress-bar progress-bar-info" style="width: 100%;"></div>
-		</div>
-	</div>
-</div>
-<script>
-$(document).ready(function() {
-	var order_start = 0;
-		
-	wn.call({
-		method: "support.doctype.support_ticket.support_ticket.get_tickets",
-		args: {
-			start: order_start
-		},
-		callback: function(r) {
-			$("#ticket-list .progress").remove();
-			var $list = $("#ticket-list");
-			
-			if(!(r.message && r.message.length)) {
-				$list.html("<div class='alert'>No Tickets Yet</div>");
-				return;
-			}
-			
-			$.each(r.message, function(i, ticket) {
-				
-				// parent
-				var $ticket = $(repl('<div class="row">\
-					<div class="col-md-2"><span class="label">%(status)s</span></div>\
-					<div class="col-md-3"><a href="ticket?name=%(name)s">%(name)s</a></div>\
-					<div class="col-md-7">%(subject)s</div>\
-				</div>', ticket)).appendTo($list);
-				
-				$("<hr>").appendTo($list);
-			});
-		}
-	})
-})
-</script>
-{% endblock %}
\ No newline at end of file
+var status_label = {
+	"Open": "label-success",
+	"Waiting for Customer": "label-danger",
+	"Closed": "label-default"
+}
+
+var render = function(doc) {
+	doc.status = doc.status.trim();
+	doc.label_class = status_label[doc.status] || "label-default";
+	if(doc.status==="Waiting for Customer") doc.status = "To Reply";
+	
+	$(repl('<a href="{{ page }}?name=%(name)s" class="list-group-item">\
+			<div class="row">\
+				<div class="col-md-8">\
+					<div class="row col-md-12">%(name)s</div>\
+					<div class="row col-md-12 text-muted">%(subject)s</div>\
+				</div>\
+				<div class="col-md-4">\
+					<div class="pull-left">\
+						<span class="label %(label_class)s" \
+							style="padding-top: 0.3em; margin-right: 5px;">%(status)s</span>\
+					</div>\
+					<div class="pull-right">\
+						<span class="text-muted">%(creation)s</span>\
+					</div>\
+				</div>\
+			</div>\
+		</a>', doc)).appendTo($list);
+};
+{%- endblock %}
\ No newline at end of file
diff --git a/website/templates/pages/transaction_list.html b/website/templates/pages/transaction_list.html
deleted file mode 100644
index e92764a..0000000
--- a/website/templates/pages/transaction_list.html
+++ /dev/null
@@ -1,69 +0,0 @@
-{% extends "app/website/templates/html/page.html" %}
-
-{% block content %}
-<div class="col-md-12">
-    <ul class="breadcrumb">
-    	<li><a href="index">Home</a></li>
-    	<li><a href="account">My Account</a></li>
-    	<li class="active"><i class="{{ icon }} icon-fixed-width"></i> {{ title }}</li>
-    </ul>
-	<div class="list-group transaction-list">
-		<div class="progress progress-striped active">
-			<div class="progress-bar progress-bar-info" style="width: 100%;"></div>
-		</div>
-	</div>
-</div>
-
-<script>
-global_number_format = "{{ global_number_format }}";
-currency = "{{ currency }}";
-wn.currency_symbols = {{ currency_symbols }};
-
-$(document).ready(function() {
-	var start = 0;
-	var $list = $(".transaction-list");
-	
-	var get_transactions = function() {
-		wn.call({
-			method: "{{ method }}",
-			args: { start: start },
-			callback: function(r) {
-				$list.find(".progress").remove();
-			
-				if(!(r.message && r.message.length)) {
-					console.log("empty");
-					if(!$list.html().trim()) {
-						$list.html("<div class='alert alert-warning'>\
-							{{ empty_list_message }}</div>");
-					}
-					return;
-				}
-			
-				start += r.message.length;
-			
-				$.each(r.message, function(i, doc) {
-					render(doc);
-				});
-			}
-		})
-	};
-	
-	var render = function(doc) {
-		doc.grand_total_export = format_currency(doc.grand_total_export, doc.currency);
-		
-		var $row = $(repl('<a href="{{ page }}?name=%(name)s" class="list-group-item">\
-				<div class="row">\
-					<div class="col-md-6">\
-						<div class="row col-md-12">%(name)s</div>\
-						<div class="row col-md-12 text-muted">%(items)s...</div>\
-					</div>\
-					<div class="col-md-3 text-right">%(grand_total_export)s</div>\
-					<div class="col-md-3 text-right text-muted">%(creation)s</div>\
-				</div>\
-			</a>', doc)).appendTo($list);
-	};
-	
-	get_transactions();
-});
-</script>
-{% endblock %}
\ No newline at end of file
