diff --git a/install_erpnext.py b/install_erpnext.py
deleted file mode 100644
index 0577d6a..0000000
--- a/install_erpnext.py
+++ /dev/null
@@ -1,163 +0,0 @@
-#!/usr/bin/python
-from __future__ import unicode_literals
-import os, commands
-
-# ask for root mysql password
-import getpass
-
-root_pwd = None
-while not root_pwd:
-	root_pwd = getpass.getpass("MySQL Root user's Password: ")
-	
-# test root connection
-op = commands.getoutput("mysql -u root -p%s -e 'exit'" % \
-	root_pwd.replace('$', '\$').replace(' ', '\ '))
-if "access denied" in op.lower():
-	raise Exception("Incorrect MySQL Root user's password")
-
-# ask for new dbname
-new_dbname = None
-while not new_dbname:
-	new_dbname = raw_input("New ERPNext Database Name: ")
-
-# ask for new dbpassword
-new_dbpassword = None
-while not new_dbpassword:
-	new_dbpassword = raw_input("New ERPNext Database's Password: ")
-
-# get erpnext path
-erpnext_path = os.path.dirname(os.path.abspath(__file__))
-os.chdir(erpnext_path)
-
-# setup backups
-if not os.path.exists(os.path.join(erpnext_path, 'backups')):
-	os.makedirs('backups')
-	os.symlink(os.path.join(erpnext_path, 'backups'),
-		os.path.join(erpnext_path, 'public', 'backups'))
-	
-# setup files
-if not os.path.exists(os.path.join(erpnext_path, 'files')):
-	os.makedirs('files')
-	os.symlink(os.path.join(erpnext_path, 'files'),
-		os.path.join(erpnext_path, 'public', 'files'))
-
-# setup logs
-if not os.path.exists(os.path.join(erpnext_path, 'logs')):
-	os.makedirs('logs')
-	os.system('touch logs/error_log.txt')
-
-# setup lib -- framework repo with read only access
-# change this if you have your own fork
-if not os.path.exists(os.path.join(erpnext_path, 'lib')):
-	os.system('git clone https://github.com/webnotes/wnframework.git lib')
-
-# setup symlinks in public
-if not os.path.exists(os.path.join(erpnext_path, 'public', 'js', 'lib')):
-	os.symlink(os.path.join(erpnext_path, 'lib', 'js', 'lib'),
-		os.path.join(erpnext_path, 'public', 'js', 'lib'))
-if not os.path.exists(os.path.join(erpnext_path, 'public', 'images', 'lib')):
-	os.symlink(os.path.join(erpnext_path, 'lib', 'images'),
-		os.path.join(erpnext_path, 'public', 'images', 'lib'))
-
-# extract master
-if os.path.exists(os.path.join(erpnext_path, 'data', 'master.sql.gz')):
-	os.system('gunzip data/master.sql.gz')
-
-# setup conf
-if not os.path.exists(os.path.join(erpnext_path, 'conf.py')):
-	# read template conf file
-	with open(os.path.join(erpnext_path, 'lib', 'conf', 'conf.py'), 'r') as template:
-		content = template.read()
-	
-	# manipulate content
-	import re
-	
-	# set new_dbname, new_dbpassword, files_path, backup_path, log_file_name
-	content = re.sub("db_name.*", "db_name = '%s'" % new_dbname, content)
-	content = re.sub("db_password.*", "db_password = '%s'" % new_dbpassword, content)
-	content = re.sub("files_path.*", "files_path = '%s'" % \
-		os.path.join(erpnext_path, 'files'), content)
-	content = re.sub("backup_path.*", "backup_path = '%s'" % \
-		os.path.join(erpnext_path, 'backups'), content)
-	content = re.sub("log_file_name.*", "log_file_name = '%s'" % \
-		os.path.join(erpnext_path, 'logs', 'error_log.txt'), content)
-		
-	
-	# write conf file
-	with open(os.path.join(erpnext_path, 'conf.py'), 'w') as new_conf:
-		new_conf.write(content)	
-
-# install db
-import sys
-sys.path.append('.')
-sys.path.append('lib')
-sys.path.append('app')
-
-from webnotes.install_lib.install import Installer
-inst = Installer('root', root_pwd)
-inst.import_from_db(new_dbname, source_path=os.path.join(erpnext_path, 'data', 'master.sql'), verbose = 1)
-
-# apply patches
-os.chdir(erpnext_path)
-os.system("lib/wnf.py --update origin master")
-
-# set filemode false
-os.system("git config core.filemode false")
-os.chdir(os.path.join(erpnext_path, 'lib'))
-os.system("git config core.filemode false")
-
-steps_remaining = """
-Notes:
-------
-
-sample apache conf file
-#-----------------------------------------------------------
-SetEnv PYTHON_EGG_CACHE /var/www
-
-# you can change 99 to any other port
-
-Listen 99
-NameVirtualHost *:99
-<VirtualHost *:99>
-	ServerName localhost
-	DocumentRoot {path to erpnext's folder}/public
-    AddHandler cgi-script .cgi .xml .py
-
-	<Directory {path to erpnext's folder}/public/>
-		# directory specific options
-		Options -Indexes +FollowSymLinks +ExecCGI
-		
-		# directory's index file
-		DirectoryIndex web.py
-
-		# rewrite rule
-		RewriteEngine on
-		
-		# condition 1:
-		# ignore login-page.html, app.html, blank.html, unsupported.html
-		RewriteCond %{REQUEST_URI} ^((?!app\.html|blank\.html|unsupported\.html).)*$
-		
-		# condition 2: if there are no slashes
-		# and file is .html or does not containt a .
-		RewriteCond %{REQUEST_URI} ^(?!.+/)((.+\.html)|([^.]+))$
-
-		# rewrite if both of the above conditions are true
-		RewriteRule ^(.+)$ web.py?page=$1 [NC,L]
-		
-		AllowOverride all
-		Order Allow,Deny
-		Allow from all
-	</Directory>
-</VirtualHost>
-#-----------------------------------------------------------
-
-To Do:
-
-* Configure apache/http conf file to point to public folder
-* chown recursively all files in your folder to apache user
-* login using: user="Administrator" and password="admin"
-
-"""
-
-print steps_remaining
-
