diff --git a/erpnext/accounts/doctype/payment_gateway/fixtures/__init__.py b/erpnext/accounts/doctype/payment_gateway/fixtures/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/erpnext/accounts/doctype/payment_gateway/fixtures/__init__.py
diff --git a/erpnext/accounts/doctype/payment_gateway/fixtures/paypal.py b/erpnext/accounts/doctype/payment_gateway/fixtures/paypal.py
new file mode 100644
index 0000000..d69dc0e
--- /dev/null
+++ b/erpnext/accounts/doctype/payment_gateway/fixtures/paypal.py
@@ -0,0 +1,62 @@
+# -*- coding: utf-8 -*-
+# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and contributors
+# For license information, please see license.txt
+
+from __future__ import unicode_literals
+import frappe
+from frappe import _
+from erpnext.setup.setup_wizard.setup_wizard import create_bank_account
+
+def create_payment_gateway_and_account(doc, method):
+	"""Called via hook on saving Paypal Settings of Paypal Integration app"""
+	create_payment_gateway()
+	create_payment_gateway_account()
+
+def create_payment_gateway():
+	# NOTE: we don't translate Payment Gateway name because it is an internal doctype
+	if not frappe.db.exists("Payment Gateway", "PayPal"):
+		payment_gateway = frappe.get_doc({
+			"doctype": "Payment Gateway",
+			"gateway": "PayPal"
+		})
+		payment_gateway.insert(ignore_permissions=True)
+
+def create_payment_gateway_account():
+	company = frappe.db.get_value("Global Defaults", None, "default_company")
+	if not company:
+		return
+
+	# NOTE: we translate Payment Gateway account name because that is going to be used by the end user
+	bank_account = frappe.db.get_value("Account", {"account_name": _("PayPal"), "company": company},
+		["name", 'account_currency'], as_dict=1)
+
+	if not bank_account:
+		# check for untranslated one
+		bank_account = frappe.db.get_value("Account", {"account_name": "PayPal", "company": company},
+			["name", 'account_currency'], as_dict=1)
+
+	if not bank_account:
+		# try creating one
+		bank_account = create_bank_account({"company_name": company, "bank_account": _("PayPal")})
+
+	if not bank_account:
+		frappe.msgprint(_("Payment Gateway Account not created, please create one manually."))
+		return
+
+	# if payment gateway account exists, return
+	if frappe.db.exists("Payment Gateway Account",
+		{"payment_gateway": "PayPal", "currency": bank_account.account_currency}):
+		return
+
+	try:
+		frappe.get_doc({
+			"doctype": "Payment Gateway Account",
+			"is_default": 1,
+			"payment_gateway": "PayPal",
+			"payment_account": bank_account.name,
+			"currency": bank_account.account_currency
+		}).insert(ignore_permissions=True)
+
+	except frappe.DuplicateEntryError:
+		# already exists, due to a reinstall?
+		pass
diff --git a/erpnext/hooks.py b/erpnext/hooks.py
index e58625b..e213676 100644
--- a/erpnext/hooks.py
+++ b/erpnext/hooks.py
@@ -117,6 +117,15 @@
 	},
 	"Address": {
 		"validate": "erpnext.shopping_cart.cart.set_customer_in_address"
+	},
+
+	# From Paypal Integration app
+	"PayPal Settings": {
+		"on_update": "erpnext.accounts.doctype.payment_gateway.fixtures.paypal.create_payment_gateway_and_account"
+	},
+
+	"Paypal Express Payment": {
+		"on_update": "erpnext.shopping_cart.cart.set_redirect"
 	}
 }
 
diff --git a/erpnext/shopping_cart/cart.py b/erpnext/shopping_cart/cart.py
index 27271af..f84c5d3 100644
--- a/erpnext/shopping_cart/cart.py
+++ b/erpnext/shopping_cart/cart.py
@@ -5,7 +5,7 @@
 import frappe
 from frappe import throw, _
 import frappe.defaults
-from frappe.utils import cint, flt, get_fullname, cstr
+from frappe.utils import cint, flt, get_fullname, cstr, get_url
 from erpnext.utilities.doctype.address.address import get_address_display
 from erpnext.shopping_cart.doctype.shopping_cart_settings.shopping_cart_settings import get_shopping_cart_settings
 from frappe.utils.nestedset import get_root_of
@@ -282,12 +282,12 @@
 
 	customer = frappe.db.get_value("Contact", {"email_id": user}, "customer")
 	cart_settings = frappe.get_doc("Shopping Cart Settings")
-	
+
 	debtors_account = ''
-	
+
 	if cart_settings.enable_checkout:
 		debtors_account = get_debtors_account(cart_settings)
-	
+
 	if customer:
 		return frappe.get_doc("Customer", customer)
 
@@ -300,7 +300,7 @@
 			"customer_group": get_shopping_cart_settings().default_customer_group,
 			"territory": get_root_of("Territory")
 		})
-		
+
 		if debtors_account:
 			customer.update({
 				"accounts": [{
@@ -308,7 +308,7 @@
 					"account": debtors_account
 				}]
 			})
-		
+
 		customer.flags.ignore_mandatory = True
 		customer.insert(ignore_permissions=True)
 
@@ -326,12 +326,12 @@
 def get_debtors_account(cart_settings):
 	payment_gateway_account_currency = \
 		frappe.get_doc("Payment Gateway Account", cart_settings.payment_gateway_account).currency
-	
+
 	account_name = _("Debtors ({0})".format(payment_gateway_account_currency))
-	
+
 	debtors_account_name = get_account_name("Receivable", "Asset", is_group=0,\
 		account_currency=payment_gateway_account_currency, company=cart_settings.company)
-	
+
 	if not debtors_account_name:
 		debtors_account = frappe.get_doc({
 			"doctype": "Account",
@@ -340,14 +340,14 @@
 			"is_group": 0,
 			"parent_account": get_account_name(root_type="Asset", is_group=1, company=cart_settings.company),
 			"account_name": account_name,
-			"currency": payment_gateway_account_currency	
+			"currency": payment_gateway_account_currency
 		}).insert(ignore_permissions=True)
-		
+
 		return debtors_account.name
-		
+
 	else:
 		return debtors_account_name
-		
+
 
 def get_address_docs(doctype=None, txt=None, filters=None, limit_start=0, limit_page_length=20, party=None):
 	if not party:
@@ -437,3 +437,38 @@
 				break
 
 	return territory
+
+def set_redirect(paypal_express_payment, method):
+	"""Set Paypal Express Payment.flags.redirect_to on status change. Called via hooks."""
+	if not paypal_express_payment.flags.status_changed_to:
+		return
+
+	reference_doctype = paypal_express_payment.reference_doctype
+	reference_docname = paypal_express_payment.reference_docname
+
+	if not (reference_doctype and reference_docname):
+		return
+
+	reference_doc = frappe.get_doc(reference_doctype,  reference_docname)
+	shopping_cart_settings = frappe.get_doc("Shopping Cart Settings")
+
+	if paypal_express_payment.flags.status_changed_to == "Completed":
+		reference_doc.run_method("set_as_paid")
+
+		# if shopping cart enabled and in session
+		if (shopping_cart_settings.enabled
+			and hasattr(frappe.local, "session")
+			and frappe.local.session.user != "Guest"):
+
+			success_url = shopping_cart_settings.payment_success_url
+			if success_url:
+				paypal_express_payment.flags.redirect_to = ({
+					"Orders": "orders",
+					"Invoices": "invoices",
+					"My Account": "me"
+				}).get(success_url, "me")
+			else:
+				paypal_express_payment.flags.redirect_to = get_url("/orders/{0}".format(reference_doc.reference_name))
+
+	elif paypal_express_payment.flags.status_changed_to == "Cancelled":
+		reference_doc.run_method("set_as_cancelled")
diff --git a/erpnext/templates/pages/order.html b/erpnext/templates/pages/order.html
index 03e625d..3252eb9 100644
--- a/erpnext/templates/pages/order.html
+++ b/erpnext/templates/pages/order.html
@@ -1,4 +1,4 @@
-t{% extends "templates/web.html" %}
+{% extends "templates/web.html" %}
 
 {% block header %}
 <h1>{{ doc.name }}</h1>
