diff --git a/setup/doctype/backup_manager/backup_googledrive.py b/setup/doctype/backup_manager/backup_googledrive.py
new file mode 100644
index 0000000..b1cb73a
--- /dev/null
+++ b/setup/doctype/backup_manager/backup_googledrive.py
@@ -0,0 +1,134 @@
+import httplib2
+import sys
+import os
+import mimetypes
+import webnotes
+import oauth2client.client
+from webnotes.utils import get_request_site_address, get_base_path
+from webnotes import _, msgprint
+from apiclient.discovery import build
+from apiclient.http import MediaFileUpload
+
+@webnotes.whitelist()
+def get_gdrive_authorize_url():
+	from conf import client_id, client_secret, oauth_scope, redirect_url
+	flow = get_gdrive_flow()
+	authorize_url = flow.step1_get_authorize_url()
+	return_address = get_request_site_address(True) \
+		+ "?cmd=setup.doctype.backup_manager.backup_googledrive.gdrive_callback"
+	return {
+		"authorize_url": authorize_url,
+	}
+
+@webnotes.whitelist(allow_guest=True)
+def gdrive_callback(verification_code = None):
+	flow = get_gdrive_flow()
+	if verification_code:
+		credentials = flow.step2_exchange(verification_code)
+		allowed = 1
+	http = httplib2.Http()
+	http = credentials.authorize(http)
+	final_credentials = credentials.to_json()
+	drive_service = build('drive', 'v2', http=http)
+	erpnext_folder_id = create_erpnext_folder(drive_service)
+	database_folder_id = create_folder('database', drive_service, erpnext_folder_id)
+	files_folder_id = create_folder('files', drive_service, erpnext_folder_id)
+	webnotes.msgprint(_("Google Drive Access Approved."))
+	webnotes.conn.set_value("Backup Manager", "Backup Manager", "gdrive_access_allowed", allowed)
+	webnotes.conn.set_value("Backup Manager", "Backup Manager", "database_folder_id", database_folder_id)
+	webnotes.conn.set_value("Backup Manager", "Backup Manager", "files_folder_id", files_folder_id)
+	webnotes.conn.set_value("Backup Manager", "Backup Manager", "gdrive_credentials", final_credentials)
+
+@webnotes.whitelist()
+def upload_files(name, mimetype, service, folder_id):
+	if not webnotes.conn:
+		webnotes.connect()
+	file_name = os.path.basename(name)
+	media_body = MediaFileUpload(name, mimetype=mimetype, resumable=True)
+	body = {
+		'title': file_name,
+		'description': 'Backup File',
+		'mimetype': mimetype,
+		'parents': [{
+			'kind': 'drive#filelink',
+			'id': folder_id
+		}]
+	}
+	request = service.files().insert(body=body, media_body=media_body)
+	response = None
+	while response is None:
+		status, response = request.next_chunk()
+
+def backup_to_gdrive():
+	from webnotes.utils.backups import new_backup
+	found_database = False
+	found_files = False
+	if not webnotes.conn:
+		webnotes.connect()
+	flow = get_gdrive_flow()
+	credentials_json = webnotes.conn.get_value("Backup Manager", None, "gdrive_credentials")
+	credentials = oauth2client.client.Credentials.new_from_json(credentials_json)
+	http = httplib2.Http()
+	http = credentials.authorize(http)
+	drive_service = build('drive', 'v2', http=http)
+
+	# upload database
+	backup = new_backup()
+	filename = os.path.basename(backup.backup_path_db)
+	# upload files to database folder
+	upload_files(filename, 'application/x-gzip', drive_service, webnotes.conn.get_value("Backup Manager", None, "database_folder_id"))
+	# upload files to files folder
+	path = os.path.join(get_base_path(),"public", "files")
+	for files in os.listdir(path):
+		filename = path + "/" + files
+		ext = filename.split('.')[-1]
+		size = os.path.getsize(filename)
+		if ext == 'gz' or ext == 'gzip':
+			mimetype = 'application/x-gzip'
+		else:
+			mimetype = mimetypes.types_map["." + ext]
+		#Compare Local File with Server File
+		param = {}
+	  	children = drive_service.children().list(folderId=webnotes.conn.get_value("Backup Manager", None, "files_folder_id"), **param).execute()
+	  	for child in children.get('items', []):
+			file = drive_service.files().get(fileId=child['id']).execute()
+			if files == file['title'] and size == int(file['fileSize']):
+				found_files = True
+				break
+		if not found_files:
+			upload_files(filename, mimetype, drive_service, webnotes.conn.get_value("Backup Manager", None, "files_folder_id"))
+
+def get_gdrive_flow():
+	from oauth2client.client import OAuth2WebServerFlow
+	try:
+		from conf import client_id, client_secret, oauth_scope, redirect_url
+	except ImportError, e:
+		webnotes.msgprint(_("Please set Google Drive access keys in") + " conf.py", 
+		raise_exception=True)
+	flow = OAuth2WebServerFlow(client_id, client_secret, oauth_scope, redirect_url)
+	return flow
+
+def create_erpnext_folder(service):
+	if not webnotes.conn:
+		webnotes.connect()
+	erpnext = {
+		'title': 'erpnext',
+		'mimeType': 'application/vnd.google-apps.folder'
+	}
+	erpnext = service.files().insert(body=erpnext).execute()
+	return erpnext['id']
+
+def create_folder(name, service, folder_id):
+	database = {
+		'title': name,
+		'mimeType': 'application/vnd.google-apps.folder',
+		'parents': [{
+	       	'kind': 'drive#fileLink',
+	       	'id': folder_id
+	    }]
+	}
+	database = service.files().insert(body=database).execute()
+	return database['id']
+
+if __name__=="__main__":
+	backup_to_gdrive()
\ No newline at end of file
diff --git a/setup/doctype/backup_manager/backup_manager.txt b/setup/doctype/backup_manager/backup_manager.txt
index bdb9c50..9a43f34 100644
--- a/setup/doctype/backup_manager/backup_manager.txt
+++ b/setup/doctype/backup_manager/backup_manager.txt
@@ -2,7 +2,7 @@
  {
   "creation": "2013-03-15 11:06:59", 
   "docstatus": 0, 
-  "modified": "2013-03-15 16:10:05", 
+  "modified": "2013-03-15 17:27:33", 
   "modified_by": "Administrator", 
   "owner": "Administrator"
  }, 
