diff --git a/erpnext/accounts/doctype/payment_gateway/fixtures/__init__.py b/erpnext/accounts/doctype/payment_gateway/fixtures/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/accounts/doctype/payment_gateway/fixtures/__init__.py
+++ /dev/null
diff --git a/erpnext/accounts/doctype/payment_gateway/fixtures/paypal.py b/erpnext/accounts/doctype/payment_gateway/fixtures/paypal.py
deleted file mode 100644
index d69dc0e..0000000
--- a/erpnext/accounts/doctype/payment_gateway/fixtures/paypal.py
+++ /dev/null
@@ -1,62 +0,0 @@
-# -*- 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 da27477..6e86d84 100644
--- a/erpnext/hooks.py
+++ b/erpnext/hooks.py
@@ -117,15 +117,6 @@
 	},
 	"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 f84c5d3..27271af 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, get_url
+from frappe.utils import cint, flt, get_fullname, cstr
 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,38 +437,3 @@
 				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 3252eb9..03e625d 100644
--- a/erpnext/templates/pages/order.html
+++ b/erpnext/templates/pages/order.html
@@ -1,4 +1,4 @@
-{% extends "templates/web.html" %}
+t{% extends "templates/web.html" %}
 
 {% block header %}
 <h1>{{ doc.name }}</h1>
