diff --git a/setup/doctype/backup_manager/backup_dropbox.py b/setup/doctype/backup_manager/backup_dropbox.py
index 3b0857f..0cd82c9 100644
--- a/setup/doctype/backup_manager/backup_dropbox.py
+++ b/setup/doctype/backup_manager/backup_dropbox.py
@@ -1,6 +1,9 @@
 import os
 import webnotes
-from webnotes.utils import get_request_site_address
+from webnotes.utils import get_request_site_address, get_base_path
+from webnotes import _
+
+filename = ''
 
 @webnotes.whitelist()
 def get_dropbox_authorize_url():
@@ -9,8 +12,7 @@
 	return_address = get_request_site_address(True) \
 		+ "?cmd=setup.doctype.backup_manager.backup_dropbox.dropbox_callback"
 
-	url = sess.build_authorize_url(request_token, return_address)
-		
+	url = sess.build_authorize_url(request_token, return_address)	
 	return {
 		"url": url,
 		"key": request_token.key,
@@ -49,7 +51,7 @@
 	webnotes.response['page_name'] = 'message.html'
 
 def backup_to_dropbox():
-	from dropbox import client, session
+	from dropbox import client, session, rest
 	from conf import dropbox_access_key, dropbox_secret_key
 	from webnotes.utils.backups import new_backup
 	if not webnotes.conn:
@@ -67,22 +69,19 @@
 	backup = new_backup()
 	filename = backup.backup_path_db
 	upload_file_to_dropbox(filename, "database", dropbox_client)
-
 	# upload files
-	response = dropbox_client.metadata("files")
+	response = dropbox_client.metadata("/database")
 
-	
-	# add missing files
-	for filename in os.listdir(os.path.join("public", "files")):
-		found = False
-		for file_metadata in response["contents"]:
- 			if filename==os.path.basename(file_metadata["path"]):
-				if os.stat(os.path.join("public", "files", filename)).st_size==file_metadata["bytes"]:
-					found=True
-
-		if not found:
-			upload_file_to_dropbox(os.path.join("public", "files", filename), "files", dropbox_client)
-
+	#add missing files
+	# for filename in os.listdir(filename):
+	# 	found = False
+	# 	for file_metadata in response["contents"]:
+ # 			if filename==os.path.basename(file_metadata["path"]):
+	# 			if os.stat(filename).st_size==file_metadata["bytes"]:
+	# 				found=True
+		
+	# 	if not found:
+	# 		upload_file_to_dropbox(filename, "database", dropbox_client)
 
 def get_dropbox_session():
 	from dropbox import session
@@ -91,25 +90,25 @@
 	except ImportError, e:
 		webnotes.msgprint(_("Please set Dropbox access keys in") + " conf.py", 
 		raise_exception=True)
-		
 	sess = session.DropboxSession(dropbox_access_key, dropbox_secret_key, "app_folder")
 	return sess
 
 def upload_file_to_dropbox(filename, folder, dropbox_client):
-	if __name__=="__main__":
-		print "Uploading " + filename
-	size = os.stat(filename).st_size
-	f = open(filename,'r')
-	
-	if size > 4194304:
-		uploader = dropbox_client.get_chunked_uploader(f, size)
-		while uploader.offset < size:
-			try:
-				uploader.upload_chunked()
-			except rest.ErrorResponse, e:
-				pass
-	else:
-		response = dropbox_client.put_file(folder + "/" + os.path.basename(filename), f, overwrite=True)
+	path = os.path.join(get_base_path(),"public", "backups")
+	for files in os.listdir(path):
+		file_name = path + "/" + files
+		size = os.stat(file_name).st_size
+		f = open(filename,'r')
+
+		if size > 4194304:
+			uploader = dropbox_client.get_chunked_uploader(f, size)
+			while uploader.offset < size:
+				try:
+					uploader.upload_chunked()
+				except rest.ErrorResponse, e:
+					pass
+		else:
+			response = dropbox_client.put_file(folder + "/" + os.path.basename(file_name), f, overwrite=True)
 
 if __name__=="__main__":
 	backup_to_dropbox()
\ No newline at end of file
diff --git a/setup/doctype/backup_manager/backup_manager.py b/setup/doctype/backup_manager/backup_manager.py
index 48d48e8..ed2c64b 100644
--- a/setup/doctype/backup_manager/backup_manager.py
+++ b/setup/doctype/backup_manager/backup_manager.py
@@ -3,6 +3,7 @@
 from __future__ import unicode_literals
 import webnotes
 from webnotes import _
+from backup_dropbox import dropbox_callback, get_dropbox_session, get_dropbox_authorize_url
 
 class DocType:
 	def __init__(self, d, dl):
@@ -26,7 +27,6 @@
 		send_email(True, "Dropbox")
 	except Exception, e:
 		send_email(False, "Dropbox", e)
-
 def send_email(success, service_name, error_status=None):
 	if success:
 		subject = "Backup Upload Successful"
@@ -44,5 +44,7 @@
 	
 	# email system managers
 	from webnotes.utils.email_lib import sendmail
-	sendmail(webnotes.conn.get_value("Backup Manager", None, "send_notifications_to").split(","), 
-		subject=subject, msg=message)
+	sendmail(webnotes.conn.get_value("Backup Manager", None, "send_notifications_to").split(","),
+	subject=subject, msg=message)
+
+get_dropbox_authorize_url()
\ No newline at end of file
