diff --git a/server/djrandom/frontend/views.py b/server/djrandom/frontend/views.py
index ca83889bb1055d5657700decf075d98c4db4a416..8c187370db1cec97e7105cdf8753cda37f84a234 100644
--- a/server/djrandom/frontend/views.py
+++ b/server/djrandom/frontend/views.py
@@ -11,6 +11,7 @@ from djrandom.frontend import app, require_auth
 from sqlalchemy import distinct, func
 
 log = logging.getLogger(__name__)
+use_xsendfile = 1
 
 
 @app.route('/autocomplete')
@@ -75,13 +76,7 @@ def fileiter(path, pos, end):
             pos += len(chunk)
 
 
-@app.route('/dl/<sha1>')
-@require_auth
-def download_song(sha1):
-    mp3 = MP3.query.get(sha1)
-    if not mp3:
-        abort(404)
-
+def download_song_python(mp3):
     # Parse 'Range' HTTP header.
     start = 0
     end = os.path.getsize(mp3.path)
@@ -100,6 +95,7 @@ def download_song(sha1):
         else:
             end = int(hrange)
 
+    # Create response with content iterator.
     response = Response(fileiter(mp3.path, start, end),
                         status=(partial and 206 or 200),
                         direct_passthrough=True)
@@ -110,3 +106,22 @@ def download_song(sha1):
     response.content_type = 'audio/mpeg'
     response.content_length = (end - start)
     return response
+
+
+def download_song_xsendfile(mp3):
+    return Response('', status=200,
+                    content_type = 'audio/mpeg',
+                    headers={'X-SENDFILE': mp3.path})
+
+
+@app.route('/dl/<sha1>')
+@require_auth
+def download_song(sha1):
+    mp3 = MP3.query.get(sha1)
+    if not mp3:
+        abort(404)
+    if use_xsendfile:
+        return download_song_xsendfile(mp3)
+    else:
+        return download_song_python(mp3)
+