diff --git a/website/css/website.css b/website/css/website.css
index dc5b967..25e2c91 100644
--- a/website/css/website.css
+++ b/website/css/website.css
@@ -2,11 +2,10 @@
 	padding: 30px;
 	margin: 30px -30px 10px -30px;
 	min-height: 400px;
-	overflow: hidden;
 }
 
 .outer .navbar {
-	margin: -30px -30px 10px -30px;
+	margin: -30px -30px 20px -30px;
 }
 
 footer {
diff --git a/website/helpers/account.py b/website/helpers/account.py
deleted file mode 100644
index 2bab370..0000000
--- a/website/helpers/account.py
+++ /dev/null
@@ -1,23 +0,0 @@
-# Copyright (c) 2012 Web Notes Technologies Pvt Ltd.
-# License: GNU General Public License (v3). For more information see license.txt
-
-from __future__ import unicode_literals
-
-import webnotes
-from webnotes.utils import cstr
-
-@webnotes.whitelist()
-def get_orders():
-	# find customer id
-	customer = webnotes.conn.get_value("Contact", {"email_id": webnotes.session.user}, 
-		"customer")
-	
-	if customer:
-		orders = webnotes.conn.sql("""select name, creation, currency from `tabSales Order`
-			where customer=%s""", customer, as_dict=1)
-		for order in orders:
-			order.items = webnotes.conn.sql("""select item_name, qty, export_rate, delivered_qty
-				from `tabSales Order Item` where parent=%s order by idx""", order.name, as_dict=1)
-		return orders
-	else:
-		return []
\ No newline at end of file
diff --git a/website/templates/html/base.html b/website/templates/html/base.html
index 2719f8d..6889d67 100644
--- a/website/templates/html/base.html
+++ b/website/templates/html/base.html
@@ -10,21 +10,18 @@
 	<script type="text/javascript" src="js/wn-web.js"></script>
 	<link type="text/css" rel="stylesheet" href="css/all-web.css">
 	<link type="text/css" rel="stylesheet" href="css/wn-web.css">
-	
-	{% if favicon %}
+	{%- if favicon %}
 	<link rel="shortcut icon" href="files/{{ favicon }}" type="image/x-icon">
 	<link rel="icon" href="files/{{ favicon }}" type="image/x-icon">
 	{% else %}
 	<link rel="shortcut icon" href="app/images/favicon.ico" type="image/x-icon">
 	<link rel="icon" href="app/images/favicon.ico" type="image/x-icon">
-	{% endif %}
-	
-	{% if description %}
+	{% endif -%}	
+	{% if description -%}
 	<meta name="description" content="{{ description }}">	
-	{% endif %}
-	
-	{% block header %}
-	{% endblock %}
+	{%- endif %}
+	{% block header -%}
+	{%- endblock %}
 </head>
 <body>
 	{% block body %}
diff --git a/website/templates/html/navbar.html b/website/templates/html/navbar.html
index 4663a2f..55e8094 100644
--- a/website/templates/html/navbar.html
+++ b/website/templates/html/navbar.html
@@ -1,7 +1,6 @@
-<div class="navbar navbar-inverse" 
-	style="">
+<div class="navbar navbar-inverse" style="">
 	<div class="navbar-inner">
-		{% if brand_html %}<a class="brand" href="index">{{ brand_html }}</a>{% endif %}
+		{%- if brand_html %}<a class="brand" href="index">{{ brand_html }}</a>{% endif -%}
 		<div class="container">
 			<button type="button" class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
 				<span class="icon-bar"></span>
@@ -10,42 +9,27 @@
 			</button>
 			<div class="nav-collapse collapse">
 				<ul class="nav">
-					{% for page in top_bar_items %}
-						{% if not page.parent_label %}
-						<li data-label="{{ page.label }}"
-							{% if page.child_items %}
-								class="dropdown"
-							{% endif %}>
-							<a href="{{ page.url or '#' }}" 
-								{% if page.child_items %}
-									class="dropdown-toggle"
-									onclick="return false;"
-									data-toggle="dropdown"
-								{% endif %}
-								{{ page.target or ''}}>
-							{{ page.label }}
-							{% if page.child_items %}
-								<b class="caret"></b>
-							</a>
-								<ul class="dropdown-menu">
-								{% for child in page.child_items %}
-									<li data-label="{{ child.label }}">
-										<a {% if child.indent %}
-											style="padding-left: 
-												{{(int(child.indent)+1)*15 }}px"
-										{% endif %}
-										href="{{ child.url }}" {{ child.target or '' }}>
-											{{ child.label }}
-										</a>
-									</li>
-								{% endfor %}
-								</ul>
-							{% else %}
-							</a>
-							{% endif %}
-							</li>
-						{% endif %}
-					{% endfor %}
+					{%- for page in top_bar_items -%}
+					{% if not page.parent_label -%}
+					<li data-label="{{ page.label }}" {% if page.child_items %} class="dropdown"{% endif %}>
+						<a href="{{ page.url or '#' }}" {% if page.child_items %} class="dropdown-toggle" onclick="return false;" data-toggle="dropdown"{% endif %} {{ page.target or ''}}>
+						{{ page.label }}
+						{%- if page.child_items -%}
+							<b class="caret"></b>
+						</a>
+							<ul class="dropdown-menu">
+							{%- for child in page.child_items -%}
+								<li data-label="{{ child.label }}">
+									<a {% if child.indent %} style="padding-left: {{(int(child.indent)+1)*15 }}px"{% endif %} href="{{ child.url }}" {{ child.target or '' }}>{{ child.label }}</a>
+								</li>
+							{%- endfor -%}
+							</ul>
+						{%- else -%}
+						</a>
+						{%- endif -%}
+						</li>
+					{%- endif -%}
+					{%- endfor %}
 				</ul>
 			</div>
 		</div>
diff --git a/website/templates/html/outer.html b/website/templates/html/outer.html
index c46aaa7..624371e 100644
--- a/website/templates/html/outer.html
+++ b/website/templates/html/outer.html
@@ -12,8 +12,8 @@
 		<div class="outer">
 			{% include "html/navbar.html" %}
 			<div class="content row" id="page-{{ name }}" style="display: block;">
-			{% block content %}
-			{% endblock %}
+			{%- block content -%}
+			{%- endblock -%}
 			</div>
 		</div>
 	</div>
diff --git a/website/templates/html/page.html b/website/templates/html/page.html
index 11d7b0f..9d38cdc 100644
--- a/website/templates/html/page.html
+++ b/website/templates/html/page.html
@@ -1,20 +1,20 @@
 {% extends "html/outer.html" %}
 
-{% block title %}{{ title }}{% endblock %}
+{% block title -%}{{ title }}{%- endblock %}
 
-{% block header %}
+{% block header -%}
 	{{ super() }}
 	<script>
-	{% block javascript %}
-	{% endblock %}
+	{% block javascript -%}
+	{%- endblock %}
 	</script>
-	{% block css %}
-	{% if insert_style %}	
+	{% block css -%}
+	{% if insert_style -%}	
 	<style>{{ css }}</style>
-	{% endif %}
-	{% endblock %}
-{% endblock %}
+	{%- endif %}
+	{%- endblock %}
+{%- endblock -%}
 
-{% block content %}
+{%- block content -%}
 	{{ content }}
-{% endblock %}
\ No newline at end of file
+{%- endblock %}
\ No newline at end of file
diff --git a/website/templates/pages/account.html b/website/templates/pages/account.html
index 9724651..8e8f4b4 100644
--- a/website/templates/pages/account.html
+++ b/website/templates/pages/account.html
@@ -4,62 +4,15 @@
 
 {% block content %}
 <div class="span12">
-	<p class="pull-right"><a href="profile">Change my name, password</a></p>
-	<h3>My Orders</h3>
-	<div id="order-list">
-		<div class="progress progress-striped active">
-			<div class="bar" style="width: 100%;"></div>
-		</div>
-	</div>
-	<hr>
-	<h3>My Tickets</h3>
-	<div id="ticket-list">
-		<div class="progress progress-striped active">
-			<div class="bar" style="width: 100%;"></div>
-		</div>
-	</div>
+    <ul class="breadcrumb">
+    	<li><a href="index">Home</a> <span class="divider">/</span></li>
+    	<li class="active">My Account</li>
+    </ul>
+	<h3>My Account</h3>
+	<p><a href="profile"><i class="icon-user"></i> Change my name, password</a></p>
+	<p><a href="orders"><i class="icon-list"></i> My Orders</a></p>
+	<p><a href="tickets"><i class="icon-tags"></i> My Tickets</a></p>
+	<p><a href="server.py?cmd=web_logout"><i class="icon-signout"></i> Logout</a></p>
+	</ul>
 </div>
-<script>
-$(document).ready(function() {
-	var order_start = 0,
-		ticket_start = 0;
-		
-	wn.call({
-		method: "website.helpers.account.get_orders",
-		args: {
-			start: order_start
-		},
-		callback: function(r) {
-			$("#order-list .progress").remove();
-			var $list = $("#order-list");
-			
-			if(!(r.message && r.message.length)) {
-				$list.html("<div class='alert'>No Orders Yet</div>");
-				return;
-			}
-			
-			$.each(r.message, function(i, order) {
-				
-				// parent
-				var $order = $(repl('<div class="row">\
-					<div class="span4"><a href="order?id=%(name)s">%(name)s</a></span3>\
-				</div>', order)).appendTo($list);
-				
-				// items
-				$.each(order.items || [], function(i, item) {
-					var $item = $(repl('<div class="span8">\
-						<div class="row">\
-							<div class="span4">%(item_name)s</div>\
-							<div class="span2">%(export_rate)s</div>\
-							<div class="span2">%(status)s</div>\
-						</div>\
-					</div>', item)).appendTo($order);
-				});
-				
-				$("<hr>").appendTo($order);
-			});
-		}
-	})
-})
-</script>
 {% endblock %}
\ No newline at end of file
diff --git a/website/templates/pages/order.html b/website/templates/pages/order.html
new file mode 100644
index 0000000..b8d9695
--- /dev/null
+++ b/website/templates/pages/order.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+	<meta charset="utf-8">
+	<meta name="viewport" content="width=device-width, initial-scale=1.0">
+	<title>Print Format</title>
+	<meta name="generator" content="wnframework">	
+</head>
+<body>
+	{{ webnotes.form_dict }}
+</body>
+</html>
\ No newline at end of file
diff --git a/website/templates/pages/orders.html b/website/templates/pages/orders.html
new file mode 100644
index 0000000..1a1cc37
--- /dev/null
+++ b/website/templates/pages/orders.html
@@ -0,0 +1,62 @@
+{% extends "html/page.html" %}
+
+{% set title="My Orders" %}
+
+{% block content %}
+<div class="span12">
+    <ul class="breadcrumb">
+    	<li><a href="index">Home</a> <span class="divider">/</span></li>
+    	<li><a href="account">My Account</a> <span class="divider">/</span></li>
+    	<li class="active">My Orders</li>
+    </ul>
+	<h3><i class="icon-list"></i> My Orders</h3>
+	<hr>
+	<div id="order-list" style="font-size: 13px;">
+		<div class="progress progress-striped active">
+			<div class="bar" style="width: 100%;"></div>
+		</div>
+	</div>
+</div>
+<script>
+$(document).ready(function() {
+	var order_start = 0;
+		
+	wn.call({
+		method: "selling.doctype.sales_order.sales_order.get_orders",
+		args: {
+			start: order_start
+		},
+		callback: function(r) {
+			$("#order-list .progress").remove();
+			var $list = $("#order-list");
+			
+			if(!(r.message && r.message.length)) {
+				$list.html("<div class='alert'>No Orders Yet</div>");
+				return;
+			}
+			
+			$.each(r.message, function(i, order) {
+				
+				// parent
+				var $order = $(repl('<div class="row">\
+					<div class="span4"><a href="order?id=%(name)s">%(name)s</a></span3>\
+				</div>', order)).appendTo($list);
+				
+				// items
+				$.each(order.items || [], function(i, item) {
+					var $item = $(repl('<div class="span8">\
+						<div class="row">\
+							<div class="span4">%(item_name)s</div>\
+							<div class="span2">%(export_rate)s</div>\
+							<div class="span2">%(status)s</div>\
+						</div>\
+					</div>', item)).appendTo($order);
+				});
+				
+				$("<hr>").appendTo($list);
+			});
+		}
+	})
+})
+</script>
+{% endblock %}
\ No newline at end of file
diff --git a/website/templates/pages/print.html b/website/templates/pages/print.html
index a8decdf..fc7174d 100644
--- a/website/templates/pages/print.html
+++ b/website/templates/pages/print.html
@@ -4,7 +4,10 @@
 	<meta charset="utf-8">
 	<meta name="viewport" content="width=device-width, initial-scale=1.0">
 	<title>Print Format</title>
-	<meta name="generator" content="wnframework">	
+	<meta name="generator" content="wnframework">
+	<style>
+	{{ css }}
+	</style>
 </head>
 <body>
 	{{ body }}
diff --git a/website/templates/pages/profile.html b/website/templates/pages/profile.html
index d0d4059..1b9350c 100644
--- a/website/templates/pages/profile.html
+++ b/website/templates/pages/profile.html
@@ -3,8 +3,13 @@
 {% set title="My Profile" %}
 
 {% block content %}
-<div class="span9">
-	<h2>My Profile</h2>
+<div class="span12">
+    <ul class="breadcrumb">
+    	<li><a href="index">Home</a> <span class="divider">/</span></li>
+    	<li><a href="account">My Account</a> <span class="divider">/</span></li>
+    	<li class="active">My Profile</li>
+    </ul>
+	<h2><i class="icon-user"></i> My Profile</h2>
 	<hr>
 	<div class="alert" id="message" style="display: none;"></div>
 	<form class="form-horizontal">
diff --git a/website/templates/pages/tickets.html b/website/templates/pages/tickets.html
new file mode 100644
index 0000000..822cd04
--- /dev/null
+++ b/website/templates/pages/tickets.html
@@ -0,0 +1,53 @@
+{% extends "html/page.html" %}
+
+{% set title="My Orders" %}
+
+{% block content %}
+<div class="span12">
+    <ul class="breadcrumb">
+    	<li><a href="index">Home</a> <span class="divider">/</span></li>
+    	<li><a href="account">My Account</a> <span class="divider">/</span></li>
+    	<li class="active">My Tickets</li>
+    </ul>
+	<h3><i class="icon-tags"></i> My Tickets</h3>
+	<hr>
+	<div id="ticket-list" style="font-size: 13px;">
+		<div class="progress progress-striped active">
+			<div class="bar" 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="span2"><span class="label">%(status)s</span></div>\
+					<div class="span3"><a href="ticket?id=%(name)s">%(name)s</a></div>\
+					<div class="span7">%(subject)s</div>\
+				</div>', ticket)).appendTo($list);
+				
+				$("<hr>").appendTo($list);
+			});
+		}
+	})
+})
+</script>
+{% endblock %}
\ No newline at end of file
