diff --git a/Source/Processors/DataThreads/RHD2000Thread.cpp b/Source/Processors/DataThreads/RHD2000Thread.cpp
index 0219c018bc57849c28d25a8e56298b6f06b317ca..894a0e09e294df84c50ac1c16a8b76284be039d4 100644
--- a/Source/Processors/DataThreads/RHD2000Thread.cpp
+++ b/Source/Processors/DataThreads/RHD2000Thread.cpp
@@ -47,9 +47,13 @@ RHD2000Thread::RHD2000Thread(SourceNode* sn) : DataThread(sn)
 	     // Initialize board.
 	    evalBoard->initialize();
 	    evalBoard->setDataSource(0, Rhd2000EvalBoard::PortA1);
+	    evalBoard->setDataSource(1, Rhd2000EvalBoard::PortB1);
 	    evalBoard->setContinuousRunMode(false);
 
-	    numChannels = 32;
+	    numChannelsPerDataStream.add(32);
+	    numChannelsPerDataStream.add(32);
+
+	    numChannels = 64;
 
 	    // Select per-channel amplifier sampling rate.
 	    evalBoard->setSampleRate(Rhd2000EvalBoard::SampleRate10000Hz);
@@ -57,6 +61,7 @@ RHD2000Thread::RHD2000Thread(SourceNode* sn) : DataThread(sn)
 	    // Now that we have set our sampling rate, we can set the MISO sampling delay
 	    // which is dependent on the sample rate.  We assume a 3-foot cable.
 	    evalBoard->setCableLengthFeet(Rhd2000EvalBoard::PortA, 3.0);
+	    evalBoard->setCableLengthFeet(Rhd2000EvalBoard::PortB, 3.0);
 
 	    // Let's turn one LED on to indicate that the program is running.
 	    int ledArray[8] = {1, 0, 0, 0, 0, 0, 0, 0};
@@ -99,7 +104,7 @@ RHD2000Thread::~RHD2000Thread() {
 
 int RHD2000Thread::getNumChannels()
 {
-	return 32;
+	return numChannels;
 }
 
 int RHD2000Thread::getNumEventChannels()
@@ -142,16 +147,15 @@ bool RHD2000Thread::startAcquisition()
 
 
     std::cout << "Setting max timestep." << std::endl;
-    evalBoard->setMaxTimeStep(100);
+    //evalBoard->setMaxTimeStep(100);
 	evalBoard->setContinuousRunMode(true);
 
 	std::cout << "Starting acquisition." << std::endl;
 	evalBoard->run();
 
-	   blockSize = dataBlock->calculateDataBlockSizeInWords(evalBoard->getNumEnabledDataStreams());
-
+	blockSize = dataBlock->calculateDataBlockSizeInWords(evalBoard->getNumEnabledDataStreams());
 
-   startThread();
+    startThread();
 
 
   // isTransmitting = true;
@@ -191,9 +195,8 @@ bool RHD2000Thread::updateBuffer()
 	//cout << "Block size: " << blockSize << endl;
 
 	bool return_code;
-	int lastBlock;
 
-	for (int n = 0; n < 1; n++)
+	for (int n = 0; n < 10; n++)
 	{
 		if (evalBoard->numWordsInFifo() >= blockSize)
 		{
@@ -203,12 +206,17 @@ bool RHD2000Thread::updateBuffer()
 			for (int samp = 0; samp < dataBlock->getSamplesPerDataBlock(); samp++)
 			{
 
-				for (int chan = 0; chan < numChannels; chan++)
+				for (int dataStream = 0; dataStream < 1; dataStream++)
 				{
 
-					int value = dataBlock->amplifierData[0][chan][samp];
+					for (int chan = 0; chan < numChannelsPerDataStream[dataStream]; chan++)
+					{
+
+						int value = dataBlock->amplifierData[dataStream][chan][samp];
+
+						thisSample[chan] = float(value-32768)*0.195f;
+					}
 
-					thisSample[chan] = double(value)*0.01;
 				}
 
 				timestamp = dataBlock->timeStamp[samp];
diff --git a/Source/Processors/DataThreads/RHD2000Thread.h b/Source/Processors/DataThreads/RHD2000Thread.h
index 4f0b9dc4cd0a3c9a81e05781fe54a107ed5f63ac..6d1e66c6c32a792eb7781fe946e7c2f035078376 100644
--- a/Source/Processors/DataThreads/RHD2000Thread.h
+++ b/Source/Processors/DataThreads/RHD2000Thread.h
@@ -72,6 +72,8 @@ private:
 	ScopedPointer<Rhd2000Registers> chipRegisters;
 	ScopedPointer<Rhd2000DataBlock> dataBlock;
 
+	Array<int> numChannelsPerDataStream;
+
 	int numChannels;
 	bool deviceFound;