diff --git a/man/btfs.1 b/man/btfs.1
index 3dab66e..dcdb23a 100644
--- a/man/btfs.1
+++ b/man/btfs.1
@@ -45,6 +45,9 @@ maximum download rate (in kilobytes per second)
 .TP
 \fB\-\-max-upload-rate=\fIRATE\fR
 maximum upload rate (in kilobytes per second)
+.TP
+\fB\-\-no\-prefetch\fR
+do not download files unless an application requests it
 .SH EXAMPLES
 mounting a torrent file:
   btfs video.torrent ~/mnt
diff --git a/src/btfs.cc b/src/btfs.cc
index 4696bd1..67c39ac 100644
--- a/src/btfs.cc
+++ b/src/btfs.cc
@@ -106,7 +106,9 @@ jump(int piece, int size) {
 
 static void
 advance() {
-	jump(cursor, 0);
+	if(!params.no_prefetch) {
+		jump(cursor, 0);
+	}
 }
 
 Read::Read(char *buf, int index, off_t offset, size_t size) {
@@ -118,6 +120,10 @@ Read::Read(char *buf, int index, off_t offset, size_t size) {
 	int64_t file_size = ti->files().file_size(index);
 #endif
 
+	if(params.no_prefetch) {
+		handle.file_priority(index, 1);
+	}
+
 	while (size > 0 && offset < file_size) {
 		libtorrent::peer_request part = ti->map_file(index, offset,
 			(int) size);
@@ -182,8 +188,15 @@ int Read::read() {
 	// Trigger reads of finished pieces
 	trigger();
 
-	// Move sliding window to first piece to serve this request
-	jump(parts.front().part.piece, size());
+	if (params.no_prefetch) {
+		// Set priority of needed pieces
+		for (parts_iter i = parts.begin(); i != parts.end(); ++i) {
+			handle.piece_priority(i->part.piece, 7);
+		}
+	} else {
+		// Move sliding window to first piece to serve this request
+		jump(parts.front().part.piece, size());
+	}
 
 	while (!finished() && !failed)
 		// Wait for any piece to downloaded
@@ -206,6 +219,9 @@ setup() {
 
 	for (int i = 0; i < ti->num_files(); ++i) {
 		std::string parent("");
+		if(params.no_prefetch) {
+			handle.file_priority(i, 0);
+		}
 
 #if LIBTORRENT_VERSION_NUM < 10100
 		char *p = strdup(ti->file_at(i).path.c_str());
@@ -935,6 +951,7 @@ static const struct fuse_opt btfs_opts[] = {
 	BTFS_OPT("--max-port=%lu",               max_port,             4),
 	BTFS_OPT("--max-download-rate=%lu",      max_download_rate,    4),
 	BTFS_OPT("--max-upload-rate=%lu",        max_upload_rate,      4),
+	BTFS_OPT("--no-prefetch",                no_prefetch,          1),
 	FUSE_OPT_END
 };
 
@@ -973,6 +990,7 @@ print_help() {
 	printf("    --max-port=N           end of listen port range\n");
 	printf("    --max-download-rate=N  max download rate (in kB/s)\n");
 	printf("    --max-upload-rate=N    max upload rate (in kB/s)\n");
+	printf("    --no-prefetch          don't prefetch files in the background\n");
 }
 
 int
diff --git a/src/btfs.h b/src/btfs.h
index f16da78..ded0b01 100644
--- a/src/btfs.h
+++ b/src/btfs.h
@@ -131,6 +131,7 @@ struct btfs_params {
 	int max_download_rate;
 	int max_upload_rate;
 	const char *metadata;
+	int no_prefetch;
 };
 
 }
