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
