diff --git a/Source/Processors/RecordNode/HDF5Recording.cpp b/Source/Processors/RecordNode/HDF5Recording.cpp
index ff4f33f1768f63dfa88770f037bba251c5f091e4..a6a45d41a41263aa5b9db01b8f1e4e06178c0723 100644
--- a/Source/Processors/RecordNode/HDF5Recording.cpp
+++ b/Source/Processors/RecordNode/HDF5Recording.cpp
@@ -135,13 +135,17 @@ void HDF5Recording::closeFiles()
     }
 }
 
-void HDF5Recording::writeData(AudioSampleBuffer& buffer, int nSamples)
+void HDF5Recording::writeData(AudioSampleBuffer& buffer)
 {
     int index;
     for (int i = 0; i < buffer.getNumChannels(); i++)
     {
         if (getChannel(i)->getRecordState())
         {
+
+            int sourceNodeId = getChannel(i)->sourceNodeId;
+            int nSamples = (*numSamples)[sourceNodeId];
+
             double multFactor = 1/(float(0x7fff) * getChannel(i)->bitVolts);
             int index = processorMap[getChannel(i)->recordIndex];
             FloatVectorOperations::copyWithMultiply(scaledBuffer,buffer.getReadPointer(i,0),multFactor,nSamples);
diff --git a/Source/Processors/RecordNode/HDF5Recording.h b/Source/Processors/RecordNode/HDF5Recording.h
index eea2359f8eccb454d700685bad6198ca1c7f2220..07e7e19ab39d151afa98188461fc75e2e5d15967 100644
--- a/Source/Processors/RecordNode/HDF5Recording.h
+++ b/Source/Processors/RecordNode/HDF5Recording.h
@@ -35,7 +35,7 @@ public:
 	String getEngineID();
     void openFiles(File rootFolder, int experimentNumber, int recordingNumber);
     void closeFiles();
-    void writeData(AudioSampleBuffer& buffer, int nSamples);
+    void writeData(AudioSampleBuffer& buffer);
     void writeEvent(int eventType, MidiMessage& event, int samplePosition);
     void addChannel(int index, Channel* chan);
     void addSpikeElectrode(int index, SpikeRecordInfo* elec);
diff --git a/Source/Processors/RecordNode/OriginalRecording.cpp b/Source/Processors/RecordNode/OriginalRecording.cpp
index 07453f8e12535dfb27b0e6f4c4b49da36bf59803..10003f98b77b542eea70615f7c3b3094ffc63395 100644
--- a/Source/Processors/RecordNode/OriginalRecording.cpp
+++ b/Source/Processors/RecordNode/OriginalRecording.cpp
@@ -406,106 +406,76 @@ void OriginalRecording::writeTTLEvent(MidiMessage& event, int samplePosition)
     diskWriteLock.exit();
 }
 
-void OriginalRecording::writeData(AudioSampleBuffer& buffer, int nSamples)
+void OriginalRecording::writeData(AudioSampleBuffer& buffer)
 {
 
-    int samplesWritten = 100; // SOME NUMBER
-
     for (int i = 0; i < buffer.getNumChannels(); i++)
     {
         if (getChannel(i)->getRecordState())
         {
+            int samplesWritten = 0;
 
             int sourceNodeId = getChannel(i)->sourceNodeId;
 
             int nSamples = (*numSamples)[sourceNodeId];
             int64 timestamp = (*timestamps)[sourceNodeId];
 
-            int samplesToWrite = jmin(BLOCK_LENGTH, nSamples - blockIndex[i]);
-
-            // write buffer to disk!
-            writeContinuousBuffer(buffer.getReadPointer(i,samplesWritten),
-                                  samplesToWrite,
-                                  i);
-
-            blockIndex.set(i, blockIndex[i] + samplesToWrite);
-        }
-    }
-
-    // while (samplesWritten < nSamples) // there are still unwritten samples in the buffer
-    // {
-
-    //     int numSamplesToWrite = nSamples - samplesWritten; // samples remaining in the buffer
-
-    //     if (blockIndex + numSamplesToWrite < BLOCK_LENGTH) // we still have space in this block
-    //     {
-    //         for (int i = 0; i < buffer.getNumChannels(); i++)
-    //         {
-
-    //             if (getChannel(i)->getRecordState())
-    //             {
-    //                 // write buffer to disk!
-    //                 writeContinuousBuffer(buffer.getReadPointer(i,samplesWritten),
-    //                                       getChannel(i)->sourceNodeId,
-    //                                       i);
-
-
-    //             }
-    //         }
+            while (samplesWritten < nSamples) // there are still unwritten samples in this buffer
+            {
+                int numSamplesToWrite = nSamples - samplesWritten;
 
-    //         // update our variables
-    //         samplesWritten += numSamplesToWrite;
-    //         timestamp += numSamplesToWrite;
-    //         blockIndex += numSamplesToWrite;
+                if (blockIndex[i] + numSamplesToWrite < BLOCK_LENGTH) // we still have space in this block
+                {
 
-    //     }
-    //     else // there's not enough space left in this block for all remaining samples
-    //     {
+                    // write buffer to disk!
+                    writeContinuousBuffer(buffer.getReadPointer(i,samplesWritten),
+                                          numSamplesToWrite,
+                                          i);
 
-    //         numSamplesToWrite = BLOCK_LENGTH - blockIndex;
+                    timestamp += numSamplesToWrite;
+                    blockIndex.set(i, blockIndex[i] + numSamplesToWrite);
+                    samplesWritten += numSamplesToWrite;
 
-    //         for (int i = 0; i < buffer.getNumChannels(); i++)
-    //         {
+                } else // there's not enough space left in this block for all remaining samples 
+                {
 
-    //             if (getChannel(i)->getRecordState())
-    //             {
-    //                 // write buffer to disk!
-    //                 writeContinuousBuffer(buffer.getReadPointer(i,samplesWritten),
-    //                                       getChannel(i)->sourceNodeId,
-    //                                       i);
+                     numSamplesToWrite = BLOCK_LENGTH - blockIndex[i];
 
-    //                 //std::cout << "Record channel " << i << std::endl;
-    //             }
-    //         }
+                     // write buffer to disk!
+                     writeContinuousBuffer(buffer.getReadPointer(i,samplesWritten),
+                                           numSamplesToWrite,
+                                           i);
 
-    //         // update our variables
-    //         samplesWritten += numSamplesToWrite;
-    //         timestamp += numSamplesToWrite;
-    //         blockIndex = 0; // back to the beginning of the block
+                    // update our variables
+                    samplesWritten += numSamplesToWrite;
+                    timestamp += numSamplesToWrite;
+                    blockIndex.set(i,0); // back to the beginning of the block
+                }
+            }
+            
+        }
+    }
 
-    //     }
-    // }
 }
 
-void OriginalRecording::writeContinuousBuffer(const float* data, int sourceNodeId, int channel)
+void OriginalRecording::writeContinuousBuffer(const float* data, int nSamples, int channel)
 {
     // check to see if the file exists
     if (fileArray[channel] == nullptr)
         return;
 
-    int nSamples = (*numSamples)[sourceNodeId];
-
     // scale the data back into the range of int16
     float scaleFactor =  float(0x7fff) * getChannel(channel)->bitVolts;
+
     for (int n = 0; n < nSamples; n++)
     {
         *(continuousDataFloatBuffer+n) = *(data+n) / scaleFactor;
     }
-    AudioDataConverters::convertFloatToInt16BE(continuousDataFloatBuffer, continuousDataIntegerBuffer, (*numSamples)[sourceNodeId]);
+    AudioDataConverters::convertFloatToInt16BE(continuousDataFloatBuffer, continuousDataIntegerBuffer, nSamples);
 
     if (blockIndex[channel] == 0)
     {
-        writeTimestampAndSampleCount(fileArray[channel], sourceNodeId);
+        writeTimestampAndSampleCount(fileArray[channel], getChannel(channel)->sourceNodeId);
     }
 
     diskWriteLock.enter();
@@ -515,6 +485,8 @@ void OriginalRecording::writeContinuousBuffer(const float* data, int sourceNodeI
                           nSamples,                        // count
                           fileArray[channel]); // ptr to FILE object
 
+    //std::cout << channel << " : " << nSamples << " : " << count << std::endl;
+
     jassert(count == nSamples); // make sure all the data was written
 
     diskWriteLock.exit();
diff --git a/Source/Processors/RecordNode/OriginalRecording.h b/Source/Processors/RecordNode/OriginalRecording.h
index ba22fe75eb60c604c8ec555874f2c91da522c865..9e9b07b7e4f9e8455bb09304ff534843999e9904 100644
--- a/Source/Processors/RecordNode/OriginalRecording.h
+++ b/Source/Processors/RecordNode/OriginalRecording.h
@@ -43,7 +43,7 @@ public:
     String getEngineID();
     void openFiles(File rootFolder, int experimentNumber, int recordingNumber);
     void closeFiles();
-    void writeData(AudioSampleBuffer& buffer, int nSamples);
+    void writeData(AudioSampleBuffer& buffer);
     void writeEvent(int eventType, MidiMessage& event, int samplePosition);
     void addChannel(int index, Channel* chan);
     void resetChannels();
@@ -57,7 +57,7 @@ private:
     String getFileName(Channel* ch);
     void openFile(File rootFolder, Channel* ch);
     String generateHeader(Channel* ch);
-    void writeContinuousBuffer(const float* data, int sourceNodeId, int channel);
+    void writeContinuousBuffer(const float* data, int nSamples, int channel);
     void writeTimestampAndSampleCount(FILE* file, int sourceNodeId);
     void writeRecordMarker(FILE* file);
 
diff --git a/Source/Processors/RecordNode/RecordEngine.h b/Source/Processors/RecordNode/RecordEngine.h
index c9fdd18371e29e98fb81c67c9ede45a22bee0fdd..343207134befb0f1bb7317a94a7a017f3507b669 100644
--- a/Source/Processors/RecordNode/RecordEngine.h
+++ b/Source/Processors/RecordNode/RecordEngine.h
@@ -91,9 +91,10 @@ public:
 
     /** Write continuous data.
     	This method gets the full data buffer, it must query getRecordState for
-    	each registered channel to determine which channels to actually write to disk
+    	each registered channel to determine which channels to actually write to disk.
+        The number of samples to write will be found in the numSamples object.
     */
-    virtual void writeData(AudioSampleBuffer& buffer, int nSamples) = 0;
+    virtual void writeData(AudioSampleBuffer& buffer) = 0;
 
     /** Write a single event to disk.
     */
diff --git a/Source/Processors/RecordNode/RecordNode.cpp b/Source/Processors/RecordNode/RecordNode.cpp
index c567a533e4eb00efd67f3eb2bf8886682f1b785b..cd7663bff8dd57f6186aa2f2d7871677ad236c2f 100755
--- a/Source/Processors/RecordNode/RecordNode.cpp
+++ b/Source/Processors/RecordNode/RecordNode.cpp
@@ -429,14 +429,13 @@ void RecordNode::process(AudioSampleBuffer& buffer,
         EVERY_ENGINE->updateTimestamps(&timestamps);
         EVERY_ENGINE->updateNumSamples(&numSamples);
 
-        // FIRST: cycle through events -- extract the TTLs and the timestamps
+        // FIRST: cycle through events -- extract the TTLs
         checkForEvents(events);
 
         // SECOND: write channel data
         if (channelPointers.size() > 0)
         {
-            //EVERY_ENGINE->updateTimeStamp(getTimestamp(channelPointers))
-            EVERY_ENGINE->writeData(buffer, 10);
+            EVERY_ENGINE->writeData(buffer);
         }
 
         //  std::cout << nSamples << " " << samplesWritten << " " << blockIndex << std::endl;