diff --git a/Builds/Linux/build/pipetest.bit b/Builds/Linux/build/pipetest.bit
new file mode 100644
index 0000000000000000000000000000000000000000..366b41de0b4be0eab002bd1cf8969fdd82bbbf77
Binary files /dev/null and b/Builds/Linux/build/pipetest.bit differ
diff --git a/Source/Processors/DataThreads/DataThread.cpp b/Source/Processors/DataThreads/DataThread.cpp
index dd83b847c237fe7672fceedc8ffd7da0d43e3e2f..034d66ac93e64582e14ae996c9762ef7f1bd6c60 100644
--- a/Source/Processors/DataThreads/DataThread.cpp
+++ b/Source/Processors/DataThreads/DataThread.cpp
@@ -55,6 +55,9 @@ void DataThread::run() {
 }
 
 DataBuffer* DataThread::getBufferAddress() {
+
+    std::cout << "Setting buffer address to " << dataBuffer << std::endl;
+
 	return dataBuffer;
 }
 
diff --git a/Source/Processors/DataThreads/FPGAThread.cpp b/Source/Processors/DataThreads/FPGAThread.cpp
index 8e0384c6085b41daeb3f46ed608d2f0fc5c90ce3..9a6b77667fd0f2c9d2030e3c082d4b0f2af927d5 100644
--- a/Source/Processors/DataThreads/FPGAThread.cpp
+++ b/Source/Processors/DataThreads/FPGAThread.cpp
@@ -55,27 +55,48 @@ FPGAThread::FPGAThread(SourceNode* sn) : DataThread(sn),
 	
 	std::cout << "FPGA interface initialized." << std::endl;
 
+	std::cout << "DataBuffer address is " << dataBuffer << std::endl;
+
 	dataBuffer = new DataBuffer(32, 10000);
 
-	startThread();
+	std::cout << "DataBuffer address is " << dataBuffer << std::endl;
+
+	//deviceFound = true;
+
+	//startThread();
 
 }
 
 
 FPGAThread::~FPGAThread() {
 	
-	stopThread(500);
-
 	std::cout << "FPGA interface destroyed." << std::endl;
 
 	// probably not the best way to do this:
-	delete dataBuffer;
+	deleteAndZero(dataBuffer);
 	delete dev;
 	dev = 0;
-	dataBuffer = 0;
 
 }
 
+bool FPGAThread::startAcquisition()
+{
+  startThread();
+
+    //isTransmitting = true;
+
+    return true;
+}
+
+bool FPGAThread::stopAcquisition()
+{
+	if (isThreadRunning()) {
+        signalThreadShouldExit();
+    }
+
+    return true;
+}
+
 bool FPGAThread::updateBuffer() {
 	
 	dev->ReadFromPipeOut(0xA0, sizeof(pBuffer), pBuffer);
@@ -107,7 +128,8 @@ bool FPGAThread::updateBuffer() {
 					j += 3;
 
 					//thisSample[n] = float( hi  - 256)/256; 
-					thisSample[n] = float(float(hi)*256 + lo - 32768)/32768; 
+					uint16 samp = ((hi << 8) + lo);
+					thisSample[n] = (float(samp) - 32768.0f)/92768.0f; 
 
 				}
 				dataBuffer->addToBuffer(thisSample,1);
@@ -115,6 +137,7 @@ bool FPGAThread::updateBuffer() {
 		j++; // keep scanning for timecodes
 	}
 
+
 	return true;
 }
 
diff --git a/Source/Processors/DataThreads/FPGAThread.h b/Source/Processors/DataThreads/FPGAThread.h
index bc87154493ad0f60ecbee271ecad010113f9cda7..810ee5f5acf9eef39ad75c95c2025ad8abf20ba7 100644
--- a/Source/Processors/DataThreads/FPGAThread.h
+++ b/Source/Processors/DataThreads/FPGAThread.h
@@ -55,8 +55,8 @@ public:
 	~FPGAThread();
 
 	bool foundInputSource() {return true;}
-	bool startAcquisition() {return true;}
-	bool stopAcquisition() {return true;}
+	bool startAcquisition();
+	bool stopAcquisition();
 	int getNumChannels() {return 32;}
 	float getSampleRate() {return 25000.0;}
 	
@@ -69,12 +69,10 @@ private:
 
 	int m_u32SegmentSize;
 	
-	unsigned char pBuffer[500000];  // request a 1MB block of data
+	unsigned char pBuffer[50000];  // request a 1MB block of data
 
 	bool isRunning;
 
-	DataBuffer* dataBuffer;
-
 	float thisSample[32];
 
 	int numchannels;
diff --git a/Source/Processors/ProcessorGraph.cpp b/Source/Processors/ProcessorGraph.cpp
index b690742cd4c8d816e04c9b313da5954c7f0a0de2..33b5fa2e99160e4f3868822987fb18d9a3373906 100644
--- a/Source/Processors/ProcessorGraph.cpp
+++ b/Source/Processors/ProcessorGraph.cpp
@@ -305,7 +305,8 @@ GenericProcessor* ProcessorGraph::createProcessorFromDescription(String& descrip
 	if (processorType.equalsIgnoreCase("Sources")) {
 
 		if (subProcessorType.equalsIgnoreCase("Intan Demo Board") || 
-			subProcessorType.equalsIgnoreCase("File Reader")) {
+			subProcessorType.equalsIgnoreCase("File Reader") || 
+			subProcessorType.equalsIgnoreCase("Custom FPGA")) {
 			
 			// only one Intan Demo Board at a time, please
 			if (!processorWithSameNameExists(subProcessorType)) {
@@ -330,6 +331,7 @@ GenericProcessor* ProcessorGraph::createProcessorFromDescription(String& descrip
 	} else if (processorType.equalsIgnoreCase("Filters")) {
 
 		if (subProcessorType.equalsIgnoreCase("Bandpass Filter")) {
+
 			std::cout << "Creating a new filter." << std::endl;
 			processor = new FilterNode();
 
diff --git a/Source/Processors/SourceNode.cpp b/Source/Processors/SourceNode.cpp
index e22db7a14f7720cc7b432ce45ef06bcb51293873..37c6fd713269f862f77c643eab14086ecaca63e2 100644
--- a/Source/Processors/SourceNode.cpp
+++ b/Source/Processors/SourceNode.cpp
@@ -30,6 +30,9 @@ SourceNode::SourceNode(const String& name_)
 	  dataThread(0), inputBuffer(0),
 	  sourceCheckInterval(2000), wasDisabled(true)
 {
+
+	std::cout << "creating source node." << std::endl;
+
 	if (getName().equalsIgnoreCase("Intan Demo Board")) {
 		dataThread = new IntanThread(this);
 	} else if (getName().equalsIgnoreCase("Custom FPGA")) {
@@ -61,7 +64,9 @@ void SourceNode::updateSettings()
 {
 	if (inputBuffer == 0 && dataThread != 0)
 	{
+
 		inputBuffer = dataThread->getBufferAddress();
+		std::cout << "Input buffer address is " << inputBuffer << std::endl;
 	}
 
 }
diff --git a/Source/Processors/Visualization/LfpDisplayCanvas.cpp b/Source/Processors/Visualization/LfpDisplayCanvas.cpp
index 7e7a9251e8b33883698a0887ba87a4fd18a4e315..54ce9160e9b29eff65374dc9255a6646d83ce4e2 100644
--- a/Source/Processors/Visualization/LfpDisplayCanvas.cpp
+++ b/Source/Processors/Visualization/LfpDisplayCanvas.cpp
@@ -26,7 +26,7 @@
 LfpDisplayCanvas::LfpDisplayCanvas(LfpDisplayNode* n) : processor(n),
 	 	xBuffer(0), yBuffer(0),
 	    plotHeight(40), selectedChan(-1), screenBufferIndex(0),
-	    timebase(1.0f), displayGain(5.0f), displayBufferIndex(0)
+	    timebase(1.0f), displayGain(15.0f), displayBufferIndex(0)
 {
 
 	nChans = processor->getNumInputs();
diff --git a/Source/UI/ProcessorList.cpp b/Source/UI/ProcessorList.cpp
index 405b0eed98c0ebd65f23e7a7b850d08214f5479f..df249380f26ca5d6a3f7ad241771ff172c75eaa6 100644
--- a/Source/UI/ProcessorList.cpp
+++ b/Source/UI/ProcessorList.cpp
@@ -53,7 +53,7 @@ ProcessorList::ProcessorList() : isDragging(false),
 	ProcessorListItem* sources = new ProcessorListItem("Sources");
 	sources->addSubItem(new ProcessorListItem("Intan Demo Board"));
 	sources->addSubItem(new ProcessorListItem("Signal Generator"));
-	//sources->addSubItem(new ProcessorListItem("Custom FPGA"));
+	sources->addSubItem(new ProcessorListItem("Custom FPGA"));
 	sources->addSubItem(new ProcessorListItem("File Reader"));
 	sources->addSubItem(new ProcessorListItem("Event Generator"));