diff --git a/erpnext/accounts/report/balance_sheet/balance_sheet.py b/erpnext/accounts/report/balance_sheet/balance_sheet.py
index 52a358b..1f60f8f 100644
--- a/erpnext/accounts/report/balance_sheet/balance_sheet.py
+++ b/erpnext/accounts/report/balance_sheet/balance_sheet.py
@@ -9,19 +9,19 @@
 
 def execute(filters=None):
 	period_list = get_period_list(filters.fiscal_year, filters.periodicity)
-	
+
 	asset = get_data(filters.company, "Asset", "Debit", period_list, only_current_fiscal_year=False)
 	liability = get_data(filters.company, "Liability", "Credit", period_list, only_current_fiscal_year=False)
 	equity = get_data(filters.company, "Equity", "Credit", period_list, only_current_fiscal_year=False)
-	
-	provisional_profit_loss = get_provisional_profit_loss(asset, liability, equity, 
+
+	provisional_profit_loss = get_provisional_profit_loss(asset, liability, equity,
 		period_list, filters.company)
-		
+
 	message = check_opening_balance(asset, liability, equity)
 
 	data = []
 	data.extend(asset or [])
-	data.extend(liability or [])	
+	data.extend(liability or [])
 	data.extend(equity or [])
 	if provisional_profit_loss:
 		data.append(provisional_profit_loss)
@@ -53,7 +53,7 @@
 
 			if provisional_profit_loss[period.key]:
 				has_value = True
-			
+
 			total += flt(provisional_profit_loss[period.key])
 			provisional_profit_loss["total"] = total
 
@@ -67,6 +67,6 @@
 		opening_balance -= flt(liability[0].get("opening_balance", 0))
 	if equity:
 		opening_balance -= flt(asset[0].get("opening_balance", 0))
-		
+
 	if opening_balance:
 		return _("Previous Financial Year is not closed")
\ No newline at end of file
diff --git a/erpnext/stock/doctype/warehouse/warehouse.js b/erpnext/stock/doctype/warehouse/warehouse.js
index 586d248..f1f0b66 100644
--- a/erpnext/stock/doctype/warehouse/warehouse.js
+++ b/erpnext/stock/doctype/warehouse/warehouse.js
@@ -5,8 +5,8 @@
 	refresh: function(frm) {
 		frm.toggle_display('warehouse_name', frm.doc.__islocal);
 
-		frm.add_custom_button(__("Stock Ledger"), function() {
-			frappe.set_route("query-report", "Stock Ledger", {"warehouse": frm.doc.name});
+		frm.add_custom_button(__("Stock Balance"), function() {
+			frappe.set_route("query-report", "Stock Balance", {"warehouse": frm.doc.name});
 		});
  		if(frm.doc.__onload && frm.doc.__onload.account) {
 	 		frm.add_custom_button(__("General Ledger"), function() {
diff --git a/erpnext/support/doctype/issue/issue.json b/erpnext/support/doctype/issue/issue.json
index 2a6f7a0..e0b38a8 100644
--- a/erpnext/support/doctype/issue/issue.json
+++ b/erpnext/support/doctype/issue/issue.json
@@ -466,6 +466,32 @@
    "allow_on_submit": 0, 
    "bold": 0, 
    "collapsible": 0, 
+   "fieldname": "project", 
+   "fieldtype": "Link", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_list_view": 0, 
+   "label": "Project", 
+   "length": 0, 
+   "no_copy": 0, 
+   "options": "Project", 
+   "permlevel": 0, 
+   "precision": "", 
+   "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
+   "read_only": 0, 
+   "report_hide": 0, 
+   "reqd": 0, 
+   "search_index": 0, 
+   "set_only_once": 0, 
+   "unique": 0
+  }, 
+  {
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
    "fieldname": "section_break_19", 
    "fieldtype": "Section Break", 
    "hidden": 0, 
@@ -664,32 +690,6 @@
    "search_index": 0, 
    "set_only_once": 0, 
    "unique": 0
-  }, 
-  {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "fieldname": "project", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_list_view": 0, 
-   "label": "Project", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Project", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
   }
  ], 
  "hide_heading": 0, 
@@ -702,7 +702,7 @@
  "issingle": 0, 
  "istable": 0, 
  "max_attachments": 0, 
- "modified": "2016-03-09 18:31:10.404549", 
+ "modified": "2016-03-23 07:40:21.423217", 
  "modified_by": "Administrator", 
  "module": "Support", 
  "name": "Issue", 
@@ -713,26 +713,6 @@
    "apply_user_permissions": 1, 
    "cancel": 0, 
    "create": 1, 
-   "delete": 1, 
-   "email": 1, 
-   "export": 1, 
-   "if_owner": 0, 
-   "import": 0, 
-   "permlevel": 0, 
-   "print": 1, 
-   "read": 1, 
-   "report": 1, 
-   "role": "Projects User", 
-   "set_user_permissions": 0, 
-   "share": 1, 
-   "submit": 0, 
-   "write": 1
-  }, 
-  {
-   "amend": 0, 
-   "apply_user_permissions": 0, 
-   "cancel": 0, 
-   "create": 1, 
    "delete": 0, 
    "email": 1, 
    "export": 0, 
@@ -742,8 +722,6 @@
    "print": 1, 
    "read": 1, 
    "report": 1, 
-   "restrict": 0, 
-   "restricted": 0, 
    "role": "Customer", 
    "set_user_permissions": 0, 
    "share": 1, 
@@ -764,8 +742,6 @@
    "print": 1, 
    "read": 1, 
    "report": 1, 
-   "restrict": 0, 
-   "restricted": 0, 
    "role": "Support Team", 
    "set_user_permissions": 0, 
    "share": 1, 
diff --git a/erpnext/templates/includes/projects/macros.html b/erpnext/templates/includes/projects/macros.html
new file mode 100644
index 0000000..eb2b8db
--- /dev/null
+++ b/erpnext/templates/includes/projects/macros.html
@@ -0,0 +1 @@
+{% macro back_link(doc) %}&back-to=/projects?project={{ doc.name }}|{{ doc.project_name }}{% endmacro %}
diff --git a/erpnext/templates/includes/projects/project_issues.html b/erpnext/templates/includes/projects/project_issues.html
index 34f6633..0d569d8 100644
--- a/erpnext/templates/includes/projects/project_issues.html
+++ b/erpnext/templates/includes/projects/project_issues.html
@@ -1,10 +1,12 @@
+{%- from "templates/includes/projects/macros.html" import back_link -%}
+
 {% for issue in doc.issues %}
 		<div class='issue'>
 			<div class='row project-item'>
 				<div class='col-xs-9'>
-					<a class="no-decoration" href="/issues-view?name={{ issue.name}}">
+					<a class="no-decoration" href="/issues?name={{ issue.name}}{{ back_link(doc) }}">
 						<span class="indicator {{ "red" if issue.status=="Open" else "green" }}">
-							{% if issue.status == "Closed" %} 
+							{% if issue.status == "Closed" %}
 							{{ issue.subject }} resolved {{ frappe.utils.pretty_date(issue.resolution_date) }}
 							{% else %}
 							{{ issue.subject }} raised on {{ issue.opening_date }}
@@ -14,17 +16,17 @@
 				</div>
 				<div class='col-xs-3'>
 					<div class='pull-right'>
-						{% if issue.todo %} 
+						{% if issue.todo %}
 						<span class="avatar avatar-small" title="{{ issue.todo.owner }}"> <img src="{{ 				issue.todo.user_image }}"></span>
 						{% else %}
 						<span class="avatar avatar-small avatar-empty"></span>
 						{% endif %}
 					</div>
 					<div class='pull-right' style='padding-right:10px;'>
-						{% if issue.status != "Closed" %} 
+						{% if issue.status != "Closed" %}
 						<span class="text-extra-muted "> <i class="octicon octicon-x issue-x" title="Close" id = "{{issue.name}}"></i> 				</span>
 						{% endif %}
-					</div>	    
+					</div>
 				</div>
 			</div>
 		</div>
diff --git a/erpnext/templates/includes/projects/project_tasks.html b/erpnext/templates/includes/projects/project_tasks.html
index b2be27b..a951712 100644
--- a/erpnext/templates/includes/projects/project_tasks.html
+++ b/erpnext/templates/includes/projects/project_tasks.html
@@ -1,8 +1,10 @@
+{%- from "templates/includes/projects/macros.html" import back_link -%}
+
 {% for task in doc.tasks %}
 	<div class='task'>
 		<div class='row project-item'>
 			<div class='col-xs-9'>
-				<a class="no-decoration" href="/tasks-view?name={{ task.name}}">
+				<a class="no-decoration" href="/tasks?name={{ task.name }}{{ back_link(doc) }}">
 					<span class="indicator {{ "orange" if task.status=="Open" else "green" }}">
 						{% if task.status == "Closed" %}
 						{{ task.subject }} completed on {{ task.closing_date }}
diff --git a/erpnext/templates/includes/projects/project_timelogs.html b/erpnext/templates/includes/projects/project_timelogs.html
index 4934032..7b5913b 100644
--- a/erpnext/templates/includes/projects/project_timelogs.html
+++ b/erpnext/templates/includes/projects/project_timelogs.html
@@ -1,12 +1,14 @@
+{%- from "templates/includes/projects/macros.html" import back_link -%}
+
 {% for timelog in doc.timelogs %}
 <div class='timelog'>
   <div class='row project-item'>
     <div class='col-xs-9'>
       <a class="no-decoration" href="/timelog_info?timelog={{ timelog.name}}">
         <span class="indicator {{ "green" if timelog.status=="Draft" else "blue" if timelog.status=="Submitted" else 			"darkgrey"}}">
-			
+
 			{{ timelog.title }}: From {{ frappe.format_date(timelog.from_time) }} to {{ 				frappe.format_date(timelog.to_time) }}
-		
+
 </span>
       </a>
     </div>
diff --git a/erpnext/templates/pages/projects.html b/erpnext/templates/pages/projects.html
index 4ec0c55..b348674 100644
--- a/erpnext/templates/pages/projects.html
+++ b/erpnext/templates/pages/projects.html
@@ -2,13 +2,15 @@
 
 {% block title %}{{ doc.project_name }}{% endblock %}
 
+{%- from "templates/includes/projects/macros.html" import back_link -%}
+
 {% block breadcrumbs %}
-   <div class="page-breadcrumbs" data-html-block="breadcrumbs">	                    
+   <div class="page-breadcrumbs" data-html-block="breadcrumbs">
    	<ul class="breadcrumb">
    		<li>
    			<span class="icon icon-angle-left"></span>
    			<a href="/project">Projects</a>
-   		</li>	
+   		</li>
    	</ul>
    </div>
 {% endblock %}
@@ -23,7 +25,7 @@
 	<style>
 		{% include "templates/includes/projects.css" %}
 	</style>
-{% endblock %} 
+{% endblock %}
 
 
 {% block page_content %}
@@ -43,16 +45,15 @@
 		{% endif %}
 {% endif %}
 
-{% if doc.tasks %}  
+<div class='padding'></div>
+
+<h3>{{ _("Tasks") }}</h3>
+
+{% if doc.tasks %}
 	<div class='project-tasks-section'>
-		<div>
-			<a class="btn btn-xs btn-primary pull-right" 
-			href='/tasks?new=1&project={{ doc.project_name }}'>New</a>
-			<h3>{{ _("Tasks") }}</h3>
-		</div>
-		<div class="btn-group btn-toggle"> 
+		<div class="btn-group btn-toggle">
 			<button class="btn btn-link btn-open-tasks"><span class="indicator orange"></span>Open</button>
-			<button class="btn btn-link btn-closed-tasks"><span class="indicator green"></span>Closed</button>	
+			<button class="btn btn-link btn-closed-tasks"><span class="indicator green"></span>Closed</button>
 		</div>
 		<div class='project-tasks'>
 		{% include "erpnext/templates/includes/projects/project_tasks.html" %}
@@ -66,16 +67,16 @@
 	<p class="text-muted">No tasks</p>
 {% endif %}
 
+<p><a href='/tasks?new=1&project={{ doc.project_name }}{{ back_link(doc) }}'>Add a new task</a></p>
+
+<div class='padding'></div>
+<h3>{{ _("Issues") }}</h3>
+
 {% if doc.issues %}
 	<div class='project-issues-section'>
-		<div>
-			<a class="btn btn-xs btn-primary pull-right" 
-			href='/issues?new=1&project={{ doc.project_name }}'>New</a>
-			<h3>{{ _("Issues") }}</h3>
-		</div>
-		<div class="btn-group btn-toggle"> 
+		<div class="btn-group btn-toggle">
 			<button class="btn btn-link btn-open-issues"><span class="indicator red"></span>Open</button>
-			<button class="btn btn-link btn-closed-issues"><span class="indicator green"></span>Closed</button>	
+			<button class="btn btn-link btn-closed-issues"><span class="indicator green"></span>Closed</button>
 		</div>
 		<div class='project-issues'>
 		{% include "erpnext/templates/includes/projects/project_issues.html" %}
@@ -84,13 +85,18 @@
 		{% if doc.issues|length > 9 %}
 			<p><a id='more-issues' class='more-issues small underline'>{{ _("More") }}</a><p>
 		{% endif %}
-	</div>	
+	</div>
 {% else %}
 	<p class="text-muted">No Issues</p>
 {% endif %}
 
+<p>	<a href='/issues?new=1&project={{ doc.project_name }}{{ back_link(doc) }}'>Add a new issue</a></p>
+
+<div class='padding'></div>
+
+<h3>{{ _("Time Logs") }}</h3>
+
 {% if doc.timelogs %}
-	<h3>{{ _("Time Logs") }}</h3>
 	<div class='project-timelogs'>
 	{% include "erpnext/templates/includes/projects/project_timelogs.html" %}
 	</div>
diff --git a/erpnext/templates/pages/projects.py b/erpnext/templates/pages/projects.py
index 0b084b4..8cec2b7 100644
--- a/erpnext/templates/pages/projects.py
+++ b/erpnext/templates/pages/projects.py
@@ -3,8 +3,7 @@
 
 from __future__ import unicode_literals
 import frappe
-
-from frappe import _
+import json
 
 def get_context(context):
 	context.no_cache = 1
@@ -17,46 +16,52 @@
 	fields=['subject', 'opening_date', 'resolution_date', 'status', 'name', 'resolution_details','modified','modified_by'])
 
 	project.tasks = get_tasks(project.name, start=0, search=frappe.form_dict.get("q"))
-	
+
 	project.timelogs = get_timelogs(project.name, start=0, search=frappe.form_dict.get("q"))
-	
+
 	project.issues = get_issues(project.name, start=0, search=frappe.form_dict.get("q"))
-	
+
 	project.timelines = get_timeline(project.project_name, start=0)
-	
-	
+
+
 
 	context.doc = project
-	
-	
+
+
 def get_timeline(project, start=10):
-	issue_names = '({0})'.format(", ".join(["'{0}'".format(i.name) for i in get_issues(project)]))
-	
-	
+	'''Get timeline from project, tasks, issues'''
+	issues_condition = ''
+	project_issues = get_issues(project)
+
+	if project_issues:
+		issue_names = '({0})'.format(", ".join(["'{0}'".format(i.name) for i in project_issues]))
+		issues_condition = """or (reference_doctype='Issue' and reference_name IN {issue_names})""".format(issue_names=issue_names)
+
+
 	timelines = frappe.db.sql("""
-		select 
-			sender_full_name, 
-			subject, communication_date, comment_type, name, creation, modified_by, reference_doctype, reference_name, 
-			_liked_by, comment_type, _comments 
-		from 
-			tabCommunication 
-		where 
+		select
+			sender_full_name,
+			subject, communication_date, comment_type, name, creation, modified_by, reference_doctype, reference_name,
+			_liked_by, comment_type, _comments
+		from
+			tabCommunication
+		where
 			(reference_doctype='Project' and reference_name=%s)
 			or (timeline_doctype='Project' and timeline_name=%s)
-			or (reference_doctype='Issue' and reference_name IN {issue_names})
-		order by 
+			{issues_condition}
+		order by
 			modified DESC limit {start}, {limit}""".format(
-			issue_names=issue_names, start=start, limit=10), 
+			issues_condition=issues_condition, start=start, limit=10),
 			(project, project), as_dict=True);
 	for timeline in timelines:
  		timeline.user_image = frappe.db.get_value('User', timeline.modified_by, 'user_image')
-	return timelines	
-		
+	return timelines
+
 @frappe.whitelist()
 def get_timelines_html(project, start=0):
-	return frappe.render_template("erpnext/templates/includes/projects/timeline.html", 
-		{"doc": {"timelines": get_timeline(project, start)}}, is_path=True)			
-		
+	return frappe.render_template("erpnext/templates/includes/projects/timeline.html",
+		{"doc": {"timelines": get_timeline(project, start)}}, is_path=True)
+
 def get_issue_list(project):
 	return [issue.name for issue in get_issues(project)]
 
@@ -64,12 +69,12 @@
 	filters = {"project": project}
 	if search:
 		filters["subject"] = ("like", "%{0}%".format(search))
-	if item_status:	
-		filters = {"status": item_status}	
-	tasks = frappe.get_all("Task", filters=filters, 
-		fields=["name", "subject", "status", "exp_start_date", "exp_end_date", "priority"], 
-		limit_start=start, limit_page_length=10)	
-		
+	if item_status:
+		filters = {"status": item_status}
+	tasks = frappe.get_all("Task", filters=filters,
+		fields=["name", "subject", "status", "exp_start_date", "exp_end_date", "priority"],
+		limit_start=start, limit_page_length=10)
+
 	for task in tasks:
 		print task._comments
 		task.todo = frappe.get_all('ToDo',filters={'reference_name':task.name, 'reference_type':'Task'},
@@ -78,67 +83,66 @@
 			task.todo=task.todo[0]
 			task.todo.user_image = frappe.db.get_value('User', task.todo.owner, 'user_image')
 		if task._comments:
-			task.comment_count = len(json.loads(_comments or "[]"))				
+			task.comment_count = len(json.loads(task._comments or "[]"))
 	return tasks
 
 @frappe.whitelist()
 def get_tasks_html(project, start=0, item_status=None):
-	return frappe.render_template("erpnext/templates/includes/projects/project_tasks.html", 
+	return frappe.render_template("erpnext/templates/includes/projects/project_tasks.html",
 		{"doc": {"tasks": get_tasks(project, start, item_status=item_status)}}, is_path=True)
-		
-		
+
+
 def get_issues(project, start=0, search=None, item_status=None):
 	filters = {"project": project}
 	if search:
 		filters["subject"] = ("like", "%{0}%".format(search))
-	if item_status:	
-		filters = {"status": item_status}	
-	issues = frappe.get_all("Issue", filters=filters, 
-		fields=["name", "subject", "status", "opening_date", "resolution_date", "resolution_details"], 
+	if item_status:
+		filters = {"status": item_status}
+	issues = frappe.get_all("Issue", filters=filters,
+		fields=["name", "subject", "status", "opening_date", "resolution_date", "resolution_details"],
 		order_by='modified desc',
-		limit_start=start, limit_page_length=10)	
-		
+		limit_start=start, limit_page_length=10)
+
 	for issue in issues:
 		issue.todo = frappe.get_all('ToDo',filters={'reference_name':issue.name, 'reference_type':'Issue'},
 		fields=["assigned_by", "owner", "modified", "modified_by"])
 		if issue.todo:
 			issue.todo=issue.todo[0]
 			issue.todo.user_image = frappe.db.get_value('User', issue.todo.owner, 'user_image')
-			
+
 	return issues
 
 @frappe.whitelist()
 def get_issues_html(project, start=0, item_status=None):
-	return frappe.render_template("erpnext/templates/includes/projects/project_issues.html", 
-		{"doc": {"issues": get_issues(project, start, item_status=item_status)}}, is_path=True)		
-		
+	return frappe.render_template("erpnext/templates/includes/projects/project_issues.html",
+		{"doc": {"issues": get_issues(project, start, item_status=item_status)}}, is_path=True)
+
 def get_timelogs(project, start=0, search=None):
 	filters = {"project": project}
 	if search:
 		filters["title"] = ("like", "%{0}%".format(search))
-	
-	timelogs = frappe.get_all('Time Log', filters=filters, 
+
+	timelogs = frappe.get_all('Time Log', filters=filters,
 	fields=['name','title','task','activity_type','from_time','to_time','hours','status','modified','modified_by'],
-	limit_start=start, limit_page_length=10)	
+	limit_start=start, limit_page_length=10)
 	for timelog in timelogs:
-		timelog.user_image = frappe.db.get_value('User', timelog.modified_by, 'user_image')	
+		timelog.user_image = frappe.db.get_value('User', timelog.modified_by, 'user_image')
 	return timelogs
 
 @frappe.whitelist()
 def get_timelogs_html(project, start=0):
-	return frappe.render_template("erpnext/templates/includes/projects/project_timelogs.html", 
-		{"doc": {"timelogs": get_timelogs(project, start)}}, is_path=True)		
-		
-@frappe.whitelist()	
+	return frappe.render_template("erpnext/templates/includes/projects/project_timelogs.html",
+		{"doc": {"timelogs": get_timelogs(project, start)}}, is_path=True)
+
+@frappe.whitelist()
 def set_task_status(project, item_name):
 	task = frappe.get_doc("Task", item_name)
 	task.status = 'Closed'
 	task.save(ignore_permissions=True)
-		
-@frappe.whitelist()			
+
+@frappe.whitelist()
 def set_issue_status(project, item_name):
 	issue = frappe.get_doc("Issue", item_name)
 	issue.status = 'Closed'
 	issue.save(ignore_permissions=True)
-			
-					
\ No newline at end of file
+
