diff --git a/cgi-bin/getfile.cgi b/cgi-bin/getfile.cgi
new file mode 100644
index 0000000..6b11305
--- /dev/null
+++ b/cgi-bin/getfile.cgi
@@ -0,0 +1,83 @@
+#!/usr/bin/python
+
+try:
+
+	import sys, os
+	
+	sys.path.append('../lib/py')
+	sys.path.append('../erpnext')
+
+	def getTraceback():
+		import sys, traceback, string
+		type, value, tb = sys.exc_info()
+		body = "Traceback (innermost last):\n"
+		list = traceback.format_tb(tb, None) \
+			+ traceback.format_exception_only(type, value)
+		body = body + "%-20s %s" % (string.join(list[:-1], ""), list[-1])
+		return body
+
+	import cgi
+	import webnotes
+	import webnotes.auth
+	import webnotes.utils
+	import webnotes.utils.file_manager
+	import webnotes.db
+	import webnotes.defs
+	
+	sys.path.append(webnotes.defs.modules_path)	
+	
+	form = cgi.FieldStorage()
+	webnotes.form_dict = {}
+	
+	for each in form.keys():
+		webnotes.form_dict[each] = form.getvalue(each)	
+	
+	n = form.getvalue('name')
+
+	# authenticate
+	webnotes.auth.HTTPRequest()
+	
+	# get file
+	res = webnotes.utils.file_manager.get_file(n)
+	
+	fname = res[0]
+	if hasattr(res[1], 'tostring'):
+		fcontent = res[1].tostring()
+	else: 
+		fcontent = res[1]
+
+	if form.getvalue('thumbnail'):
+		tn = webnotes.utils.cint(form.getvalue('thumbnail'))
+		try:
+			from PIL import Image
+			import cStringIO
+			
+			fobj = cStringIO.StringIO(fcontent)
+			image = Image.open(fobj)
+			image.thumbnail((tn,tn*2), Image.ANTIALIAS)
+			outfile = cStringIO.StringIO()
+	
+			if image.mode != "RGB":
+				image = image.convert("RGB")
+	
+			image.save(outfile, 'JPEG')
+			outfile.seek(0)
+			fcontent = outfile.read()
+		except:
+			pass
+
+	import mimetypes
+	print "Content-Type: %s" % (mimetypes.guess_type(fname)[0] or 'application/unknown')
+	print "Content-Disposition: filename="+fname.replace(' ', '_')
+	print "Cache-Control: max-age=3600"
+	print
+	print fcontent
+				
+except Exception, e:
+	print "Content-Type: text/html"
+	try:
+		out = {'message':'', 'exc':getTraceback().replace('\n','<br>')}
+	except:
+		out = {'exc': e}
+	print
+	print str(out)
