diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py
index de92f13..16ff4b4 100644
--- a/erpnext/controllers/accounts_controller.py
+++ b/erpnext/controllers/accounts_controller.py
@@ -334,7 +334,7 @@
 @frappe.whitelist()
 def get_tax_rate(account_head):
 	return frappe.db.get_value("Account", account_head, "tax_rate")
-	
+
 @frappe.whitelist()
 def get_default_taxes_and_charges(master_doctype):
 	default_tax = frappe.db.get_value(master_doctype, {"is_default": 1})
diff --git a/erpnext/hooks.py b/erpnext/hooks.py
index 0d75a53..e9cf0c9 100644
--- a/erpnext/hooks.py
+++ b/erpnext/hooks.py
@@ -38,16 +38,14 @@
 	{"from_route": "/invoices", "to_route": "Sales Invoice"},
 	{"from_route": "/invoices/<path:name>", "to_route": "print", "defaults": {"doctype": "Sales Invoice"}},
 	{"from_route": "/shipments", "to_route": "Delivery Note"},
-	{"from_route": "/shipments/<path:name>", "to_route": "print", "defaults": {"doctype": "Delivery Note"}},
-	{"from_route": "/issues", "to_route": "Issue"},
-	{"from_route": "/issues/<path:name>", "to_route": "print", "defaults": {"doctype": "Issue"}},
-	{"from_route": "/addresses", "to_route": "Address"},
+	{"from_route": "/shipments/<path:name>", "to_route": "print", "defaults": {"doctype": "Delivery Note"}}
 ]
 
 has_website_permission = {
 	"Sales Order": "erpnext.controllers.website_list_for_contact.has_website_permission",
 	"Sales Invoice": "erpnext.controllers.website_list_for_contact.has_website_permission",
-	"Delivery Note": "erpnext.controllers.website_list_for_contact.has_website_permission"
+	"Delivery Note": "erpnext.controllers.website_list_for_contact.has_website_permission",
+	"Issue": "erpnext.support.doctype.issue.issue.has_website_permission"
 }
 
 dump_report_map = "erpnext.startup.report_data_map.data_map"
diff --git a/erpnext/patches.txt b/erpnext/patches.txt
index d40db97..729221a 100644
--- a/erpnext/patches.txt
+++ b/erpnext/patches.txt
@@ -161,4 +161,5 @@
 execute:frappe.db.set_value("Backup Manager", None, "send_backups_to_dropbox", 1 if frappe.db.get_value("Backup Manager", None, "upload_backups_to_dropbox") in ("Daily", "Weekly") else 0)
 execute:frappe.db.sql_list("delete from `tabDocPerm` where parent='Issue' and modified_by='Administrator' and role='Guest'")
 erpnext.patches.v5_0.update_item_and_description_again
-erpnext.patches.v5_0.repost_gle_for_jv_with_multiple_party
\ No newline at end of file
+erpnext.patches.v5_0.repost_gle_for_jv_with_multiple_party
+erpnext.patches.v5_0.portal_fixes
diff --git a/erpnext/patches/v5_0/portal_fixes.py b/erpnext/patches/v5_0/portal_fixes.py
new file mode 100644
index 0000000..83c6d68
--- /dev/null
+++ b/erpnext/patches/v5_0/portal_fixes.py
@@ -0,0 +1,3 @@
+def execute():
+	import erpnext.setup.install
+	erpnext.setup.install.add_web_forms()
diff --git a/erpnext/setup/fixtures/web_form/addresses.json b/erpnext/setup/fixtures/web_form/addresses.json
new file mode 100644
index 0000000..8051c72
--- /dev/null
+++ b/erpnext/setup/fixtures/web_form/addresses.json
@@ -0,0 +1,167 @@
+[
+ {
+  "allow_comments": 0, 
+  "allow_delete": 0, 
+  "allow_edit": 1, 
+  "allow_multiple": 1, 
+  "breadcrumbs": null, 
+  "doc_type": "Address", 
+  "docstatus": 0, 
+  "doctype": "Web Form", 
+  "introduction_text": null, 
+  "login_required": 1, 
+  "modified": "2015-06-01 06:53:43.699336", 
+  "name": "addresses", 
+  "page_name": "addresses", 
+  "published": 1, 
+  "success_message": null, 
+  "success_url": "/addresses", 
+  "title": "Addresses", 
+  "web_form_fields": [
+   {
+    "default": null, 
+    "description": "", 
+    "fieldname": "address_title", 
+    "fieldtype": "Data", 
+    "hidden": 0, 
+    "label": "Address Title", 
+    "options": null, 
+    "read_only": 0, 
+    "reqd": 0
+   }, 
+   {
+    "default": null, 
+    "description": null, 
+    "fieldname": "address_type", 
+    "fieldtype": "Select", 
+    "hidden": 0, 
+    "label": "Address Type", 
+    "options": "Billing\nShipping\nOffice\nPersonal\nPlant\nPostal\nShop\nSubsidiary\nWarehouse\nOther", 
+    "read_only": 0, 
+    "reqd": 1
+   }, 
+   {
+    "default": null, 
+    "description": null, 
+    "fieldname": "address_line1", 
+    "fieldtype": "Data", 
+    "hidden": 0, 
+    "label": "Address Line 1", 
+    "options": null, 
+    "read_only": 0, 
+    "reqd": 1
+   }, 
+   {
+    "default": null, 
+    "description": null, 
+    "fieldname": "address_line2", 
+    "fieldtype": "Data", 
+    "hidden": 0, 
+    "label": "Address Line 2", 
+    "options": null, 
+    "read_only": 0, 
+    "reqd": 0
+   }, 
+   {
+    "default": null, 
+    "description": null, 
+    "fieldname": "city", 
+    "fieldtype": "Data", 
+    "hidden": 0, 
+    "label": "City/Town", 
+    "options": null, 
+    "read_only": 0, 
+    "reqd": 1
+   }, 
+   {
+    "default": null, 
+    "description": null, 
+    "fieldname": "state", 
+    "fieldtype": "Data", 
+    "hidden": 0, 
+    "label": "State", 
+    "options": null, 
+    "read_only": 0, 
+    "reqd": 0
+   }, 
+   {
+    "default": null, 
+    "description": null, 
+    "fieldname": "pincode", 
+    "fieldtype": "Data", 
+    "hidden": 0, 
+    "label": "Pincode", 
+    "options": null, 
+    "read_only": 0, 
+    "reqd": 0
+   }, 
+   {
+    "default": null, 
+    "description": null, 
+    "fieldname": "country", 
+    "fieldtype": "Data", 
+    "hidden": 0, 
+    "label": "Country", 
+    "options": "Country", 
+    "read_only": 0, 
+    "reqd": 1
+   }, 
+   {
+    "default": null, 
+    "description": null, 
+    "fieldname": null, 
+    "fieldtype": "Column Break", 
+    "hidden": null, 
+    "label": null, 
+    "options": null, 
+    "read_only": null, 
+    "reqd": null
+   }, 
+   {
+    "default": null, 
+    "description": null, 
+    "fieldname": "email_id", 
+    "fieldtype": "Data", 
+    "hidden": 0, 
+    "label": "Email Id", 
+    "options": null, 
+    "read_only": 0, 
+    "reqd": 0
+   }, 
+   {
+    "default": null, 
+    "description": null, 
+    "fieldname": "phone", 
+    "fieldtype": "Data", 
+    "hidden": 0, 
+    "label": "Phone", 
+    "options": null, 
+    "read_only": 0, 
+    "reqd": 1
+   }, 
+   {
+    "default": "0", 
+    "description": "", 
+    "fieldname": "is_primary_address", 
+    "fieldtype": "Check", 
+    "hidden": 0, 
+    "label": "Preferred Billing Address", 
+    "options": null, 
+    "read_only": 0, 
+    "reqd": 0
+   }, 
+   {
+    "default": "0", 
+    "description": "", 
+    "fieldname": "is_shipping_address", 
+    "fieldtype": "Check", 
+    "hidden": 0, 
+    "label": "Preferred Shipping Address", 
+    "options": null, 
+    "read_only": 0, 
+    "reqd": 0
+   }
+  ], 
+  "web_page_link_text": null
+ }
+]
\ No newline at end of file
diff --git a/erpnext/setup/fixtures/web_form/issues.json b/erpnext/setup/fixtures/web_form/issues.json
new file mode 100644
index 0000000..8561e47
--- /dev/null
+++ b/erpnext/setup/fixtures/web_form/issues.json
@@ -0,0 +1,57 @@
+[
+ {
+  "allow_comments": 1, 
+  "allow_delete": 1, 
+  "allow_edit": 1, 
+  "allow_multiple": 1, 
+  "breadcrumbs": "[{\"title\":\"Issues\", \"name\":\"issues\"}]", 
+  "doc_type": "Issue", 
+  "docstatus": 0, 
+  "doctype": "Web Form", 
+  "introduction_text": null, 
+  "login_required": 1, 
+  "modified": "2015-06-01 05:59:03.697380", 
+  "name": "issues", 
+  "page_name": "issues", 
+  "published": 1, 
+  "success_message": "", 
+  "success_url": "/issues", 
+  "title": "Issues", 
+  "web_form_fields": [
+   {
+    "default": null, 
+    "description": null, 
+    "fieldname": "subject", 
+    "fieldtype": "Data", 
+    "hidden": 0, 
+    "label": "Subject", 
+    "options": null, 
+    "read_only": 0, 
+    "reqd": 1
+   }, 
+   {
+    "default": "Open", 
+    "description": null, 
+    "fieldname": "status", 
+    "fieldtype": "Select", 
+    "hidden": null, 
+    "label": "Status", 
+    "options": "Open\nReplied\nHold\nClosed", 
+    "read_only": 1, 
+    "reqd": 0
+   }, 
+   {
+    "default": null, 
+    "description": null, 
+    "fieldname": "description", 
+    "fieldtype": "Text", 
+    "hidden": 0, 
+    "label": "Description", 
+    "options": null, 
+    "read_only": 0, 
+    "reqd": 0
+   }
+  ], 
+  "web_page_link_text": null
+ }
+]
\ No newline at end of file
diff --git a/erpnext/setup/install.py b/erpnext/setup/install.py
index 3fbeabc..8ed6374 100644
--- a/erpnext/setup/install.py
+++ b/erpnext/setup/install.py
@@ -15,6 +15,7 @@
 	feature_setup()
 	from erpnext.setup.page.setup_wizard.setup_wizard import add_all_roles_to
 	add_all_roles_to("Administrator")
+	add_web_forms()
 	frappe.db.commit()
 
 def feature_setup():
@@ -48,3 +49,12 @@
 				pass
 
 	frappe.db.set_default("date_format", "dd-mm-yyyy")
+
+def add_web_forms():
+	"""Import web forms for Issues and Addresses"""
+	from frappe.modules.import_file import import_file_by_path
+
+	import_file_by_path(frappe.get_app_path("erpnext", "setup/fixtures/web_form/issues.json"),
+		data_import=True)
+	import_file_by_path(frappe.get_app_path("erpnext", "setup/fixtures/web_form/addresses.json"),
+		data_import=True)
diff --git a/erpnext/shopping_cart/cart.py b/erpnext/shopping_cart/cart.py
index 0b09eb7..1db656a 100644
--- a/erpnext/shopping_cart/cart.py
+++ b/erpnext/shopping_cart/cart.py
@@ -5,17 +5,18 @@
 import frappe
 from frappe import throw, _
 import frappe.defaults
-from frappe.utils import flt, get_fullname, fmt_money, cstr
+from frappe.utils import cint, flt, get_fullname, fmt_money, cstr
 from erpnext.utilities.doctype.address.address import get_address_display
 from frappe.utils.nestedset import get_root_of
 
 class WebsitePriceListMissingError(frappe.ValidationError): pass
 
 def set_cart_count(quotation=None):
-	if not quotation:
-		quotation = _get_cart_quotation()
-	cart_count = cstr(len(quotation.get("items")))
-	frappe.local.cookie_manager.set_cookie("cart_count", cart_count)
+	if cint(frappe.db.get_singles_value("Shopping Cart Settings", "enabled")):
+		if not quotation:
+			quotation = _get_cart_quotation()
+		cart_count = cstr(len(quotation.get("items")))
+		frappe.local.cookie_manager.set_cookie("cart_count", cart_count)
 
 @frappe.whitelist()
 def get_cart_quotation(doc=None):
@@ -29,7 +30,7 @@
 	return {
 		"doc": decorate_quotation_doc(doc),
 		"addresses": [{"name": address.name, "display": address.display}
-			for address in get_address_docs(party)],
+			for address in get_address_docs(party=party)],
 		"shipping_rules": get_applicable_shipping_rules(party)
 	}
 
@@ -281,12 +282,13 @@
 
 		return lead_doc
 
-def get_address_docs(party=None):
+def get_address_docs(doctype, txt, filters, limit_start, limit_page_length=20, party=None):
 	if not party:
 		party = get_lead_or_customer()
 
 	address_docs = frappe.db.sql("""select * from `tabAddress`
-		where `%s`=%s order by name""" % (party.doctype.lower(), "%s"), party.name,
+		where `{0}`=%s order by name limit {1}, {2}""".format(party.doctype.lower(),
+			limit_start, limit_page_length), party.name,
 		as_dict=True, update={"doctype": "Address"})
 
 	for address in address_docs:
diff --git a/erpnext/shopping_cart/doctype/shopping_cart_settings/shopping_cart_settings.py b/erpnext/shopping_cart/doctype/shopping_cart_settings/shopping_cart_settings.py
index 5fba1ff..cdfe0fd 100644
--- a/erpnext/shopping_cart/doctype/shopping_cart_settings/shopping_cart_settings.py
+++ b/erpnext/shopping_cart/doctype/shopping_cart_settings/shopping_cart_settings.py
@@ -8,7 +8,7 @@
 from frappe import _, msgprint
 from frappe.utils import comma_and
 from frappe.model.document import Document
-from frappe.utils.nestedset import get_ancestors_of
+from frappe.utils.nestedset import get_ancestors_of, get_root_of
 from erpnext.utilities.doctype.address.address import get_territory_from_address
 
 class ShoppingCartSetupError(frappe.ValidationError): pass
@@ -42,7 +42,7 @@
 		return territory_name_map
 
 	def validate_price_lists(self):
-		territory_name_map = self.validate_overlapping_territories("price_lists", "selling_price_list")
+		self.validate_overlapping_territories("price_lists", "selling_price_list")
 
 		# validate that a Shopping Cart Price List exists for the default territory as a catch all!
 		price_list_for_default_territory = self.get_name_from_territory(self.default_territory, "price_lists",
@@ -131,7 +131,8 @@
 	def get_price_list(self, billing_territory):
 		price_list = self.get_name_from_territory(billing_territory, "price_lists", "selling_price_list")
 		if not (price_list and price_list[0]):
-			price_list = self.get_name_from_territory(self.default_territory, "price_lists", "selling_price_list")
+			price_list = self.get_name_from_territory(self.default_territory or get_root_of("Territory"),
+				"price_lists", "selling_price_list")
 
 		return price_list and price_list[0] or None
 
@@ -165,7 +166,7 @@
 	return get_shopping_cart_settings().enabled
 
 def get_default_territory():
-	return get_shopping_cart_settings().default_territory
+	return get_shopping_cart_settings().default_territory or get_root_of("Territory")
 
 def check_shopping_cart_enabled():
 	if not get_shopping_cart_settings().enabled:
diff --git a/erpnext/shopping_cart/utils.py b/erpnext/shopping_cart/utils.py
index e63e452..09bfa43 100644
--- a/erpnext/shopping_cart/utils.py
+++ b/erpnext/shopping_cart/utils.py
@@ -6,7 +6,6 @@
 import frappe
 from frappe import _
 import frappe.defaults
-from frappe.utils import cint
 from erpnext.shopping_cart.doctype.shopping_cart_settings.shopping_cart_settings import is_cart_enabled
 
 def show_cart_count():
@@ -44,6 +43,6 @@
 		{"label": _("Orders"), "url": "orders"},
 		{"label": _("Invoices"), "url": "invoices"},
 		{"label": _("Shipments"), "url": "shipments"},
-		# {"label": _("Issues"), "url": "tickets"},
+		{"label": _("Issues"), "url": "issues"},
 		{"label": _("Addresses"), "url": "addresses"},
 	])
diff --git a/erpnext/support/doctype/issue/issue.json b/erpnext/support/doctype/issue/issue.json
index 5892453..285804c 100644
--- a/erpnext/support/doctype/issue/issue.json
+++ b/erpnext/support/doctype/issue/issue.json
@@ -66,7 +66,7 @@
    "oldfieldtype": "Data", 
    "options": "Email", 
    "permlevel": 0, 
-   "reqd": 1
+   "reqd": 0
   }, 
   {
    "fieldname": "fold", 
@@ -233,7 +233,7 @@
  ], 
  "icon": "icon-ticket", 
  "idx": 1, 
- "modified": "2015-05-28 03:21:04.690112", 
+ "modified": "2015-06-01 03:48:24.849210", 
  "modified_by": "Administrator", 
  "module": "Support", 
  "name": "Issue", 
diff --git a/erpnext/support/doctype/issue/issue.py b/erpnext/support/doctype/issue/issue.py
index 2555bfa..76e5a10 100644
--- a/erpnext/support/doctype/issue/issue.py
+++ b/erpnext/support/doctype/issue/issue.py
@@ -17,6 +17,8 @@
 		return "{0}: {1}".format(_(self.status), self.subject)
 
 	def validate(self):
+		if not self.raised_by:
+			self.raised_by = frappe.session.user
 		self.update_status()
 		self.set_lead_contact(self.raised_by)
 
@@ -54,7 +56,8 @@
 def get_list_context(context=None):
 	return {
 		"title": _("My Issues"),
-		"get_list": get_issue_list
+		"get_list": get_issue_list,
+		"row_template": "templates/includes/issue_row.html"
 	}
 
 def get_issue_list(doctype, txt, filters, limit_start, limit_page_length=20):
@@ -84,3 +87,6 @@
 	names = json.loads(names)
 	for name in names:
 		set_status(name, status)
+
+def has_website_permission(doc, ptype, user, verbose=False):
+	return doc.raised_by==user
diff --git a/erpnext/templates/includes/address_row.html b/erpnext/templates/includes/address_row.html
new file mode 100644
index 0000000..f7eaa76
--- /dev/null
+++ b/erpnext/templates/includes/address_row.html
@@ -0,0 +1,20 @@
+<div class="web-list-item">
+    <a href="/addresses?name={{ doc.name }}" no-pjax>
+    <div class="row">
+        <div class="col-sm-4">
+            <span class="strong">{{ doc.address_title }}</span>
+        </div>
+        <div class="col-sm-2">
+            {{ doc.address_type }}
+        </div>
+        <div class="col-sm-4">
+            {{ doc.address_line1 }}<br>
+            {% if doc.address_line2 %}{{ doc.address_line2 }}<br>{% endif %}
+            {{ doc.city }}<br>
+        </div>
+        <div class="col-sm-2">
+            {% if doc.state %}{{ doc.state }}, {% endif %}{{ doc.country }}
+        </div>
+    </div>
+    </a>
+</div>
diff --git a/erpnext/templates/includes/issue_row.html b/erpnext/templates/includes/issue_row.html
new file mode 100644
index 0000000..30b2ab0
--- /dev/null
+++ b/erpnext/templates/includes/issue_row.html
@@ -0,0 +1,16 @@
+<div class="web-list-item">
+    <div class="row">
+        <div class="col-sm-8">
+            <a class="no-decoration" href="/issues?name={{ doc.name }}" no-pjax>
+                {{ doc.subject }}
+            </a>
+        </div>
+        <div class="col-sm-2">
+            <span class="indicator {{ "red" if doc.status=="Open" else "blue" }}">
+                {{ doc.status }}</span>
+        </div>
+        <div class="col-sm-2 text-muted text-right small">
+            {{ frappe.format_date(doc.creation) }}
+        </div>
+    </div>
+</div>
diff --git a/erpnext/templates/includes/transaction_row.html b/erpnext/templates/includes/transaction_row.html
index ca03bd3..a677fa5 100644
--- a/erpnext/templates/includes/transaction_row.html
+++ b/erpnext/templates/includes/transaction_row.html
@@ -1,5 +1,6 @@
 {% set doc = frappe.get_doc(doc) %}
-<a class="website-list-row" href="/{{ pathname }}/{{ doc.name }}" no-pjax>
+<div class="web-list-item">
+<a href="/{{ pathname }}/{{ doc.name }}" no-pjax>
 <div class="row">
 	<div class="col-sm-6 col-xs-7">
 		<div class="row">
@@ -12,7 +13,7 @@
 					<span class="indicator orange">{{ doc.status_display }}</span>
 					{%- endif -%}
 				{%- elif doc.status -%}
-					<span class="indicator">{{ doc.status }}</span>
+					<span class="indicator blue">{{ doc.status }}</span>
 				{%- endif -%}
 			</div>
 		</div>
@@ -27,4 +28,4 @@
 		{{ frappe.utils.pretty_date(doc.creation) }}</div>
 </div>
 </a>
-
+</div>
diff --git a/erpnext/templates/pages/address.html b/erpnext/templates/pages/address.html
deleted file mode 100644
index 8544604..0000000
--- a/erpnext/templates/pages/address.html
+++ /dev/null
@@ -1,112 +0,0 @@
-{% block title %} {{ title }} {% endblock %}
-
-{% block header %}<h2>{{ title }}</h2>{% endblock %}
-
-{% block content %}
-{% macro render_fields(docfields) -%}
-{% for df in docfields -%}
-	{% if df.fieldtype == "Data" -%}
-	<fieldset>
-		<label>{{ df.label }}</label>
-		<input class="form-control" type="text" placeholder="Type {{ df.label }}"
-			data-fieldname="{{ df.fieldname }}" data-fieldtype="{{ df.fieldtype }}"
-			{% if doc and doc.get(df.fieldname) -%} value="{{ doc[df.fieldname] }}" {%- endif %}>
-	</fieldset>
-	{% elif df.fieldtype == "Check" -%}
-	<fieldset class="checkbox">
-		<label><input type="checkbox" data-fieldname="{{ df.fieldname }}"
-			data-fieldtype="{{ df.fieldtype }}"
-			{% if doc and frappe.utils.cint(doc.get(df.fieldname)) -%} checked="checked" {%- endif %}>
-			{{ df.label }}</label>
-	</fieldset>
-	{% elif df.fieldtype in ("Select", "Link") -%}
-	<fieldset>
-		{% set select_options = frappe.get_list(df.options)|map(attribute="name")
-			if df.fieldtype == "Link" else df.options.split("\n") %}
-		<label>{{ df.label }}</label>
-		<select class="form-control" data-fieldname="{{ df.fieldname }}" data-fieldtype="{{ df.fieldtype }}">
-			{% for value in select_options -%}
-			{% if doc and doc.get(df.fieldname) == value -%}
-			<option selected="selected">{{ value }}</option>
-			{% else -%}
-			<option>{{ value }}</option>
-			{%- endif %}
-			{%- endfor %}
-		</select>
-	</fieldset>
-	{%- endif %}
-{%- endfor %}
-{%- endmacro %}
-
-<div class="container content">
-    <ul class="breadcrumb">
-    	<li><a href="/index">Home</a></li>
-    	<li><a href="/addresses">My Addresses</a></li>
-    	<li class="active"><i class="icon-map-marker icon-fixed-width"></i> {{ title }}</li>
-    </ul>
-	<h3><i class="icon-map-marker icon-fixed-width"></i> {{ title }}</h3>
-	<button type="button" class="btn btn-primary pull-right" id="address-save"><i class="icon-ok"></i>
-		{{ doc and "Save" or "Insert" }}</button>
-	<div class="clearfix"></div>
-	<hr>
-	<div id="address-error" class="alert alert-danger" style="display:none"></div>
-	<form autocomplete="on">
-		<div class="row">
-			<section class="col-md-6">
-				{{ render_fields(meta.left_fields) }}
-			</section>
-			<section class="col-md-6">
-				{{ render_fields(meta.right_fields) }}
-			</section>
-		</section>
-	</form>
-</div>
-
-<script>
-;(function() {
-	console.log("yoyo");
-	frappe.ready(function() {
-		bind_save();
-	});
-
-	var bind_save = function() {
-		$("#address-save").on("click", function() {
-			console.log("clicked!");
-
-			var fields = {
-				name: "{{ docname or '' }}"
-			};
-
-			$("form").find("[data-fieldname]").each(function(i, input) {
-				var $input = $(input);
-				var fieldname = $(input).attr("data-fieldname");
-				var fieldtype = $(input).attr("data-fieldtype");
-
-				if(fieldtype == "Check") {
-					fields[fieldname] = $input.is(":checked") ? 1 : 0;
-				} else {
-					fields[fieldname] = $input.val();
-				}
-			});
-
-			frappe.call({
-				btn: $(this),
-				type: "POST",
-				method: "erpnext.templates.pages.address.save_address",
-				args: { fields: fields, address_fieldname: get_url_arg("address_fieldname") },
-				error_msg: "#address-error",
-				callback: function(r) {
-					if(get_url_arg("address_fieldname")) {
-						window.location.href = "cart";
-					} else {
-						window.location.href = "address?name=" + encodeURIComponent(r.message);
-					}
-				}
-			});
-		});
-	};
-})();
-</script>
-
-<!-- no-sidebar -->
-{% endblock %}
diff --git a/erpnext/templates/pages/address.py b/erpnext/templates/pages/address.py
deleted file mode 100644
index 20f2798..0000000
--- a/erpnext/templates/pages/address.py
+++ /dev/null
@@ -1,62 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import json
-
-import frappe
-from erpnext.shopping_cart.cart import get_lead_or_customer, update_cart_address
-from frappe.desk.form.meta import get_meta
-
-no_cache = 1
-no_sitemap = 1
-
-def get_context(context):
-	def _get_fields(fieldnames):
-		return [frappe._dict(zip(["label", "fieldname", "fieldtype", "options"],
-				[df.label, df.fieldname, df.fieldtype, df.options]))
-			for df in get_meta("Address").get("fields", {"fieldname": ["in", fieldnames]})]
-
-	docname = doc = None
-	title = "New Address"
-	if frappe.form_dict.name:
-		doc = frappe.get_doc("Address", frappe.form_dict.name)
-		docname = doc.name
-		title = doc.name
-
-	return {
-		"doc": doc,
-		"meta": frappe._dict({
-			"left_fields": _get_fields(["address_title", "address_type", "address_line1", "address_line2",
-				"city", "state", "pincode", "country"]),
-			"right_fields": _get_fields(["email_id", "phone", "fax", "is_primary_address",
-				"is_shipping_address"])
-		}),
-		"docname": docname,
-		"title": title
-	}
-
-@frappe.whitelist()
-def save_address(fields, address_fieldname=None):
-	party = get_lead_or_customer()
-	fields = json.loads(fields)
-
-	if fields.get("name"):
-		doc = frappe.get_doc("Address", fields.get("name"))
-	else:
-		doc = frappe.get_doc({"doctype": "Address", "__islocal": 1})
-
-	doc.update(fields)
-
-	party_fieldname = party.doctype.lower()
-	doc.update({
-		party_fieldname: party.name,
-		(party_fieldname + "_name"): party.get(party_fieldname + "_name")
-	})
-	doc.flags.ignore_permissions = True
-	doc.save()
-
-	if address_fieldname:
-		update_cart_address(address_fieldname, doc.name)
-
-	return doc.name
diff --git a/erpnext/templates/pages/addresses.html b/erpnext/templates/pages/addresses.html
deleted file mode 100644
index a0562c6..0000000
--- a/erpnext/templates/pages/addresses.html
+++ /dev/null
@@ -1,50 +0,0 @@
-{% block title %} {{ "My Addresses" }} {% endblock %}
-
-{% block header %}<h2>My Addresses</h2>{% endblock %}
-
-{% block breadcrumbs %}{% include "templates/includes/breadcrumbs.html" %}{% endblock %}
-
-{% block content %}
-<div class="addresses-content">
-	<p><a class="btn btn-default" href="/address"><i class="icon-plus"> New Address</i></a></p>
-	<hr>
-	<div id="address-list">
-		<div class="text-muted progress">{{ _("Loading") }}...</div>
-	</div>
-</div>
-
-<script>
-;(function() {
-	var fetch_addresses = function() {
-		frappe.call({
-			method: "erpnext.templates.pages.addresses.get_addresses",
-			callback: function(r) {
-				$("#address-list .progress").remove();
-				var $list = $("#address-list");
-
-				if(!(r.message && r.message.length)) {
-					$list.html("<div class='alert'>No Addresses Found</div>");
-					return;
-				}
-
-				$.each(r.message, function(i, address) {
-					address.url_name = encodeURIComponent(address.name);
-					$(repl('<div> \
-						<p><a href="/address?name=%(url_name)s">%(name)s</a></p> \
-						<p>%(display)s</p> \
-						<hr> \
-					</div>', address)).appendTo($list);
-				});
-			}
-		});
-	};
-
-	$(document).ready(function() {
-		fetch_addresses();
-	});
-})();
-</script>
-
-<!-- no-sidebar -->
-{% endblock %}
-
diff --git a/erpnext/templates/pages/addresses.py b/erpnext/templates/pages/addresses.py
deleted file mode 100644
index d96ae9b..0000000
--- a/erpnext/templates/pages/addresses.py
+++ /dev/null
@@ -1,13 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from erpnext.shopping_cart.cart import get_address_docs
-
-no_cache = 1
-no_sitemap = 1
-
-@frappe.whitelist()
-def get_addresses():
-	return get_address_docs()
diff --git a/erpnext/templates/pages/ticket.html b/erpnext/templates/pages/ticket.html
deleted file mode 100644
index 67d4800..0000000
--- a/erpnext/templates/pages/ticket.html
+++ /dev/null
@@ -1,116 +0,0 @@
-{% block title %} {{ title }} {% endblock %}
-
-{% block header %}<h2><i class="icon-ticket icon-fixed-width"></i> {{ title }}</h2>{% endblock %}
-
-{% block content %}
-{% set status_label = {
-	"Open": "label-success",
-	"To Reply": "label-danger",
-	"Closed": "label-default"
-} %}
-
-<div class="ticket-content">
-    <ul class="breadcrumb">
-    	<li><a href="/index">Home</a></li>
-    	<li><a href="/tickets">My Tickets</a></li>
-    	<li class="active"><i class="icon-ticket icon-fixed-width"></i> {{ doc.name or "" }}</li>
-    </ul>
-	{% if not doc -%}
-		<script>ask_to_login();</script>
-	{% else %}
-	<hr>
-	{%- if doc.status -%}
-	{% if doc.status == "Waiting for Customer" -%}
-		{% set status = "To Reply" %}
-	{% else %}
-		{% set status = doc.status %}
-	{%- endif -%}
-	<div class="row">
-		<div class="col-md-2" style="margin-bottom: 7px;">
-			<span class="label {{ status_label.get(status) or 'label-default' }}">{{ status }}</span>
-		</div>
-		<div class="col-md-8">
-			<div class="row col-md-12">{{ doc.subject }}</div>
-		</div>
-		<div class="col-md-2">
-			<span class="text-muted pull-right">{{ frappe.utils.formatdate(doc.creation) }}</span>
-		</div>
-	</div>
-	<div class="row">
-		<h4 class="col-xs-6">Messages</h4>
-		<div class="col-xs-6">
-			 <button class="btn btn-sm btn-primary pull-right" id="ticket-reply">
-				  <i class="icon-envelope icon-fixed-width"></i> Reply</button>
-			 <button class="btn btn-sm btn-success pull-right hide" id="ticket-reply-send">
-				  <i class="icon-arrow-right icon-fixed-width"></i> Send</button>
-		</div>
-	</div>
-	<p id="ticket-alert" class="alert alert-danger"
-		style="display: none;">&nbsp;</p>
-	<div>
-		<table class="table table-bordered table-striped" id="ticket-thread">
-			<tbody>
-				{%- for comm in
-					(doc.get({"doctype":"Communication"})|sort(reverse=True, attribute="creation")) %}
-				<tr>
-					<td>
-					<h5 style="text-transform: none">
-						{{ comm.sender }} on {{ frappe.utils.formatdate(comm.creation) }}</h5>
-					<hr>
-					<p>{{ frappe.utils.is_html(comm.content) and comm.content or
-						comm.content.replace("\n", "<br>")}}</p>
-					</td>
-				</tr>
-				{% endfor -%}
-			</tbody>
-		</table>
-	</div>
-	{%- endif -%}
-	{% endif -%}
-</div>
-
-<script>
-$(document).ready(function() {
-	$("#ticket-reply").on("click", function() {
-		if(!$("#ticket-reply-editor").length) {
-			$('<tr id="ticket-reply-editor"><td>\
-				<h5 style="text-transform: none">Reply</h5>\
-				<hr>\
-				<textarea rows=10 class="form-control" style="resize: vertical;"></textarea>\
-			</td></tr>').prependTo($("#ticket-thread").find("tbody"));
-			$("#ticket-reply").addClass("hide");
-			$("#ticket-reply-send").removeClass("hide");
-		}
-	});
-
-	$("#ticket-reply-send").on("click", function() {
-		var reply = $("#ticket-reply-editor").find("textarea").val().trim();
-		if(!reply) {
-			msgprint("Please write something in reply!");
-		} else {
-			frappe.call({
-				type: "POST",
-				method: "erpnext.templates.pages.ticket.add_reply",
-				btn: this,
-				args: { ticket: "{{ doc.name }}", message: reply },
-				callback: function(r) {
-					if(r.exc) {
-						msgprint(r._server_messages
-							? JSON.parse(r._server_messages).join("<br>")
-							: "Something went wrong!");
-					} else {
-						window.location.reload();
-					}
-				}
-			})
-		}
-	});
-});
-
-var msgprint = function(txt) {
-	if(txt) $("#ticket-alert").html(txt).toggle(true);
-}
-</script>
-
-<!-- no-sidebar -->
-{% endblock %}
diff --git a/erpnext/templates/pages/ticket.py b/erpnext/templates/pages/ticket.py
deleted file mode 100644
index 811f4fb..0000000
--- a/erpnext/templates/pages/ticket.py
+++ /dev/null
@@ -1,41 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe import _
-from frappe.utils import today
-
-no_cache = 1
-no_sitemap = 1
-
-def get_context(context):
-	doc = frappe.get_doc("Issue", frappe.form_dict.name)
-	if doc.raised_by == frappe.session.user:
-		ticket_context = {
-			"title": doc.name,
-			"doc": doc
-		}
-	else:
-		ticket_context = {"title": "Not Allowed", "doc": {}}
-
-	return ticket_context
-
-@frappe.whitelist()
-def add_reply(ticket, message):
-	if not message:
-		raise frappe.throw(_("Please write something"))
-
-	doc = frappe.get_doc("Issue", ticket)
-	if doc.raised_by != frappe.session.user:
-		raise frappe.throw(_("You are not allowed to reply to this ticket."), frappe.PermissionError)
-
-	comm = frappe.get_doc({
-		"doctype":"Communication",
-		"subject": doc.subject,
-		"content": message,
-		"sender": doc.raised_by,
-		"sent_or_received": "Received"
-	})
-	comm.insert(ignore_permissions=True)
-
diff --git a/erpnext/templates/pages/tickets.html b/erpnext/templates/pages/tickets.html
deleted file mode 100644
index 40cd80e..0000000
--- a/erpnext/templates/pages/tickets.html
+++ /dev/null
@@ -1,92 +0,0 @@
-{% block title %} {{ title }} {% endblock %}
-
-{% block header %}<h2>{{ title }}</h2>{% endblock %}
-
-{% block content %}
-{% include "templates/includes/transactions.html" %}
-
-<script>
-	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-2" style="margin-bottom: 7px;"><span class="label %(label_class)s">\
-						%(status)s</span></div>\
-					<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-2 pull-right">\
-						<span class="text-muted">%(creation)s</span>\
-					</div>\
-				</div>\
-			</a>', doc)).appendTo($list);
-	};
-
-	frappe.ready(function() {
-		if(!window.$new_ticket) {
-			window.$new_ticket = $('<div>\
-					<button class="btn btn-primary" style="margin-bottom: 15px;" id="new-ticket">\
-						<i class="icon-tag icon-fixed-width"></i> New Ticket\
-					</button>\
-					<button class="btn btn-success hide" style="margin-bottom: 15px;" id="new-ticket-send">\
-						<i class="icon-arrow-right icon-fixed-width"></i> Send\
-					</button>\
-				</div>').insertBefore(".transaction-list");
-		}
-
-		window.$new_ticket.find("#new-ticket").on("click", function() {
-			$(this).addClass("hide");
-			$(window.$new_ticket).find("#new-ticket-send").removeClass("hide");
-			$('<div class="well" id="ticket-editor">\
-					<div class="form-group"><input class="form-control" type="data"\
-						 placeholder="Subject" data-fieldname="subject"></div>\
-					<div class="form-group"><textarea rows=10 class="form-control" \
-						 style="resize: vertical;" placeholder="Message" \
-						 data-fieldname="message"></textarea></div>\
-				</div>')
-				.insertAfter(window.$new_ticket);
-		});
-
-		window.$new_ticket.find("#new-ticket-send").on("click", function() {
-			var subject = $("#ticket-editor").find('[data-fieldname="subject"]').val().trim();
-			var message = $("#ticket-editor").find('[data-fieldname="message"]').val().trim();
-			if(!(subject && message)) {
-				msgprint("Please write something in subject and message!");
-			} else {
-				frappe.call({
-					type: "POST",
-					method: "erpnext.templates.pages.tickets.make_new_ticket",
-					btn: this,
-					args: { subject: subject, message: message },
-					callback: function(r) {
-						if(r.exc) {
-							msgprint(r._server_messages
-								? JSON.parse(r._server_messages).join("<br>")
-								: "Something went wrong!");
-						} else {
-							window.location.href = "ticket?name=" + encodeURIComponent(r.message);
-						}
-					}
-				})
-			}
-		});
-	});
-
-	var msgprint = function(txt) {
-		if(txt) $("#msgprint-alert").html(txt).toggle(true);
-	}
-</script>
-
-<!-- no-sidebar -->
-{% endblock %}
-
diff --git a/erpnext/templates/pages/tickets.py b/erpnext/templates/pages/tickets.py
deleted file mode 100644
index 393c020..0000000
--- a/erpnext/templates/pages/tickets.py
+++ /dev/null
@@ -1,54 +0,0 @@
-# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-from __future__ import unicode_literals
-import frappe
-from frappe.utils import cint, formatdate
-
-no_cache = 1
-no_sitemap = 1
-
-def get_context(context):
-	return {
-		"title": "My Tickets",
-		"method": "erpnext.templates.pages.tickets.get_tickets",
-		"icon": "icon-ticket",
-		"empty_list_message": "No Tickets Raised",
-		"page": "ticket"
-	}
-
-@frappe.whitelist()
-def get_tickets(start=0):
-	tickets = frappe.db.sql("""select name, subject, status, creation
-		from `tabIssue` where raised_by=%s
-		order by modified desc
-		limit %s, 20""", (frappe.session.user, cint(start)), as_dict=True)
-	for t in tickets:
-		t.creation = formatdate(t.creation)
-
-	return tickets
-
-@frappe.whitelist()
-def make_new_ticket(subject, message):
-	if not (subject and message):
-		raise frappe.throw(_("Please write something in subject and message!"))
-
-	ticket = frappe.get_doc({
-		"doctype":"Issue",
-		"subject": subject,
-		"raised_by": frappe.session.user,
-	})
-	ticket.insert(ignore_permissions=True)
-
-	comm = frappe.get_doc({
-		"doctype":"Communication",
-		"subject": subject,
-		"content": message,
-		"sender": frappe.session.user,
-		"sent_or_received": "Received",
-		"reference_doctype": "Issue",
-		"reference_name": ticket.name
-	})
-	comm.insert(ignore_permissions=True)
-
-	return ticket.name
diff --git a/erpnext/utilities/doctype/address/address.json b/erpnext/utilities/doctype/address/address.json
index 49cdd83..7cb8d82 100644
--- a/erpnext/utilities/doctype/address/address.json
+++ b/erpnext/utilities/doctype/address/address.json
@@ -112,7 +112,7 @@
   }, 
   {
    "default": "0", 
-   "description": "Check to make primary address", 
+   "description": "", 
    "fieldname": "is_primary_address", 
    "fieldtype": "Check", 
    "label": "Preferred Billing Address", 
@@ -120,7 +120,7 @@
   }, 
   {
    "default": "0", 
-   "description": "Check to make Shipping Address", 
+   "description": "", 
    "fieldname": "is_shipping_address", 
    "fieldtype": "Check", 
    "in_list_view": 0, 
@@ -199,7 +199,7 @@
  "icon": "icon-map-marker", 
  "idx": 1, 
  "in_dialog": 0, 
- "modified": "2015-02-20 05:07:56.567822", 
+ "modified": "2015-06-01 06:42:18.331818", 
  "modified_by": "Administrator", 
  "module": "Utilities", 
  "name": "Address", 
diff --git a/erpnext/utilities/doctype/address/address.py b/erpnext/utilities/doctype/address/address.py
index 1592d22..e2ca74f 100644
--- a/erpnext/utilities/doctype/address/address.py
+++ b/erpnext/utilities/doctype/address/address.py
@@ -84,5 +84,24 @@
 
 	return territory
 
+def get_list_context(context=None):
+	from erpnext.shopping_cart.cart import get_address_docs
+	return {
+		"title": _("My Addresses"),
+		"get_list": get_address_docs,
+		"row_template": "templates/includes/address_row.html",
+	}
+
+def has_website_permission(doc, ptype, user, verbose=False):
+	"""Returns true if customer or lead matches with user"""
+	customer = frappe.db.get_value("Contact", {"email_id": frappe.session.user}, "customer")
+	if customer:
+		return doc.customer == customer
+	else:
+		lead = frappe.db.get_value("Lead", {"email_id": frappe.session.user})
+		if lead:
+			return doc.lead == lead
+
+	return False
 
 
