diff --git a/Source/Processors/DataThreads/FileReaderThread.cpp b/Source/Processors/DataThreads/FileReaderThread.cpp
index 3f26cd08eaf29528a7595b102563e105c4f83d8f..2a6a08e33cce09617a67e99f1286368c1e47958e 100755
--- a/Source/Processors/DataThreads/FileReaderThread.cpp
+++ b/Source/Processors/DataThreads/FileReaderThread.cpp
@@ -24,38 +24,17 @@
 
 #include "FileReaderThread.h"
 
-FileReaderThread::FileReaderThread(SourceNode* sn) :
+FileReaderThread::FileReaderThread(SourceNode* sn, const char* path) :
     DataThread(sn), lengthOfInputFile(0), bufferSize(0)
 {
-    //  FileChooser chooseFileReaderFile ("Please select the file you want to load...",
-    //                            File::getSpecialLocation (File::userHomeDirectory),
-    //                            "*");
-
-    // if (chooseFileReaderFile.browseForFileToOpen())
-    // {
-    //     File fileToRead (chooseFileReaderFile.getResult());
-    //     String fileName(fileToRead.getFullPathName());
-    //     input = fopen(fileName.String::toCString(), "r");
-    // }
-
-    // FIXME stop hard-coding `path' once DataThread gives us a proper
-    // mechanism for accepting arguments (the above commented-out code
-    // is a layering violation that's best avoided).
-#if JUCE_MAC
-    const char* path = "/Users/Josh/Programming/open-ephys/GUI/Builds/Linux/build/data_stream_16ch_2";
-#else
-    const char* path = "./data_stream_16ch_2";
-#endif
 
     input = fopen(path, "r");
 
-    // Avoid a segfault if crock above fails.
+    // Avoid a segfault if file isn't found
     if (!input)
     {
         std::cout << "Can't find data file "
-                  << '"' << path << "\", "
-                  << "either make sure you're Josh on OS X, "
-                  << "or run open-ephys from the build directory on Linux."
+                  << '"' << path << "\""
                   << std::endl;
         return;
     }
@@ -116,9 +95,7 @@ bool FileReaderThread::stopAcquisition()
         signalThreadShouldExit();
     }
 
-
     return true;
-
 }
 
 bool FileReaderThread::updateBuffer()
@@ -134,7 +111,7 @@ bool FileReaderThread::updateBuffer()
             rewind(input);
         }
 
-        fread(readBuffer, 2, bufferSize, input);
+        size_t return_value = fread(readBuffer, 2, bufferSize, input);
 
         int chan = 0;
 
@@ -156,7 +133,6 @@ bool FileReaderThread::updateBuffer()
 
         }
 
-
     }
     else
     {
diff --git a/Source/Processors/DataThreads/FileReaderThread.h b/Source/Processors/DataThreads/FileReaderThread.h
index 4da05fa953a0484435e18e51a2d56b3a2b5c1159..8218be7491314775c969336cb83bfade0289afe3 100755
--- a/Source/Processors/DataThreads/FileReaderThread.h
+++ b/Source/Processors/DataThreads/FileReaderThread.h
@@ -46,7 +46,7 @@ class FileReaderThread : public DataThread
 
 {
 public:
-    FileReaderThread(SourceNode* sn);
+    FileReaderThread(SourceNode* sn, const char* path);
     ~FileReaderThread();
 
     bool foundInputSource();
diff --git a/Source/Processors/SourceNode.cpp b/Source/Processors/SourceNode.cpp
index 2a043bcab73a487b7d8affe028ce498330dda3d5..0c637bad8ea50d8f919298c6cc2bd5ec1b5e422c 100755
--- a/Source/Processors/SourceNode.cpp
+++ b/Source/Processors/SourceNode.cpp
@@ -50,7 +50,26 @@ SourceNode::SourceNode(const String& name_)
     }
     else if (getName().equalsIgnoreCase("File Reader"))
     {
-        dataThread = new FileReaderThread(this);
+         FileChooser chooseFileReaderFile ("Please select the file you want to load...",
+                                   File::getSpecialLocation (File::userHomeDirectory),
+                                   "*");
+
+         sendActionMessage("Select a file...");
+
+        if (chooseFileReaderFile.browseForFileToOpen())
+        {
+            // Use the selected file
+            File fileToRead (chooseFileReaderFile.getResult());
+            String fileName(fileToRead.getFullPathName());
+            dataThread = new FileReaderThread(this, fileName.getCharPointer());
+        } else {
+            // If cancelled, assume it's in the executable directory
+            dataThread = new FileReaderThread(this, "./data_stream_16ch_2");
+        }
+
+        sendActionMessage("File loaded.");
+
+        
     }
     else if (getName().equalsIgnoreCase("RHD2000 USB Board"))
     {