diff --git a/Source/Processors/SpikeDetector/SpikeDetector.cpp b/Source/Processors/SpikeDetector/SpikeDetector.cpp
index e4424bdafa680763ae760946b35c104cca4bb7e9..a0f5c16157d1bf26d725d1d6529b04fc790d8837 100755
--- a/Source/Processors/SpikeDetector/SpikeDetector.cpp
+++ b/Source/Processors/SpikeDetector/SpikeDetector.cpp
@@ -317,7 +317,13 @@ bool SpikeDetector::enable()
 {
 
     sampleRateForElectrode = (uint16_t) getSampleRate();
-    useOverflowBuffer = false;
+
+
+    useOverflowBuffer.clear();
+
+    for (int i = 0; i < electrodes.size(); i++)
+        useOverflowBuffer.add(false);
+
     return true;
 }
 
@@ -443,8 +449,6 @@ void SpikeDetector::process(AudioSampleBuffer& buffer,
     SimpleElectrode* electrode;
     dataBuffer = &buffer;
 
-    int nSamples = 100; // SOME NUMBER
-
     checkForEvents(events); // need to find any timestamp events before extracting spikes
 
     //std::cout << dataBuffer.getMagnitude(0,nSamples) << std::endl;
@@ -557,6 +561,27 @@ void SpikeDetector::process(AudioSampleBuffer& buffer,
 
         //jassert(electrode->lastBufferIndex < 0);
 
+        if (getNumSamples(*electrode->channels) > overflowBufferSize)
+        {
+
+            for (int j = 0; j < electrode->numChannels; j++)
+            {
+
+                overflowBuffer.copyFrom(*electrode->channels+i, 0,
+                                        buffer, *electrode->channels+i,
+                                        nSamples-overflowBufferSize,
+                                        overflowBufferSize);
+                
+            }
+
+            useOverflowBuffer.set(i, true);
+
+        }
+        else
+        {
+            useOverflowBuffer.set(i, false);
+        }
+
     } // end cycle through electrodes
 
     // copy end of this buffer into the overflow buffer
@@ -569,26 +594,7 @@ void SpikeDetector::process(AudioSampleBuffer& buffer,
     // std::cout << "numSamples = " << overflowBufferSize << std::endl;
     // std::cout << "buffer size = " << buffer.getNumSamples() << std::endl;
 
-    if (nSamples > overflowBufferSize)
-    {
-
-        for (int i = 0; i < overflowBuffer.getNumChannels(); i++)
-        {
-
-            overflowBuffer.copyFrom(i, 0,
-                                    buffer, i,
-                                    nSamples-overflowBufferSize,
-                                    overflowBufferSize);
-
-            useOverflowBuffer = true;
-        }
-
-    }
-    else
-    {
-
-        useOverflowBuffer = false;
-    }
+    
 
 
 
diff --git a/Source/Processors/SpikeDetector/SpikeDetector.h b/Source/Processors/SpikeDetector/SpikeDetector.h
index 046965d12845eef4b194430e3a877aa60aa8281a..829ad60302c9766f74ae6bf5414ad31e5e2d1571 100755
--- a/Source/Processors/SpikeDetector/SpikeDetector.h
+++ b/Source/Processors/SpikeDetector/SpikeDetector.h
@@ -171,7 +171,7 @@ private:
     float getCurrentSample(int& chan);
     bool samplesAvailable(int nSamples);
 
-    bool useOverflowBuffer;
+    Array<bool> useOverflowBuffer;
 
     int currentElectrode;
     int currentChannelIndex;
diff --git a/Source/Processors/SpikeSorter/SpikeSorter.cpp b/Source/Processors/SpikeSorter/SpikeSorter.cpp
index fa5ef7dcda6d2bc38e193dc2be2f52d5dbb62d80..4b0ab108940c41c10278d6b545c1e5f53f03278b 100644
--- a/Source/Processors/SpikeSorter/SpikeSorter.cpp
+++ b/Source/Processors/SpikeSorter/SpikeSorter.cpp
@@ -641,7 +641,12 @@ void SpikeSorter::setParameter(int parameterIndex, float newValue)
 bool SpikeSorter::enable()
 {
 
-    useOverflowBuffer = false;
+    useOverflowBuffer.clear();
+
+    for (int i = 0; i < electrodes.size(); i++)
+        useOverflowBuffer.add(false);
+
+
 	SpikeSorterEditor* editor = (SpikeSorterEditor*) getEditor();
 	 editor->enable();
 	
@@ -863,9 +868,6 @@ void SpikeSorter::process(AudioSampleBuffer& buffer,
 	
     checkForEvents(events); // find latest's packet timestamps
 	
-	//postEventsInQueue(events);
-	int nSamples = 100; // SOME NUMBER
-
 	channelBuffers->update(buffer,  hardware_timestamp,software_timestamp,nSamples);
 
     for (int i = 0; i < electrodes.size(); i++)
@@ -880,7 +882,7 @@ void SpikeSorter::process(AudioSampleBuffer& buffer,
         // increment at start of getNextSample()
 
         // cycle through samples
-        while (samplesAvailable(getNumSamples(electrode->sourceNodeId)))
+        while (samplesAvailable(getNumSamples(*electrode->channels)))
         {
 
             sampleIndex++;
@@ -1005,43 +1007,32 @@ void SpikeSorter::process(AudioSampleBuffer& buffer,
         } // end cycle through samples
 
 		//float vv = getNextSample(currentChannel);
-        electrode->lastBufferIndex = sampleIndex - nSamples; // should be negative
+        electrode->lastBufferIndex = sampleIndex - getNumSamples(*electrode->channels); // should be negative
 
         //jassert(electrode->lastBufferIndex < 0);
 
-    } // end cycle through electrodes
+        if (getNumSamples(*electrode->channels) > overflowBufferSize)
+        {
 
-    // copy end of this buffer into the overflow buffer
+            for (int j = 0; j < electrode.numChannels; j++)
+            {
 
-    //std::cout << "Copying buffer" << std::endl;
-    // std::cout << "nSamples: " << nSamples;
-    //std::cout << "overflowBufferSize:" << overflowBufferSize;
+                overflowBuffer.copyFrom(*electrode->channels+i, 0,
+                                        buffer, *electrode->channels+i,
+                                        nSamples-overflowBufferSize,
+                                        overflowBufferSize);
+                
+            }
 
-    //std::cout << "sourceStartSample = " << nSamples-overflowBufferSize << std::endl;
-    // std::cout << "numSamples = " << overflowBufferSize << std::endl;
-    // std::cout << "buffer size = " << buffer.getNumSamples() << std::endl;
+            useOverflowBuffer.set(i, true);
 
-    if (nSamples > overflowBufferSize)
-    {
-
-        for (int i = 0; i < overflowBuffer.getNumChannels(); i++)
+        }
+        else
         {
-
-            overflowBuffer.copyFrom(i, 0,
-                                    buffer, i,
-                                    nSamples-overflowBufferSize,
-                                    overflowBufferSize);
-
-
-            useOverflowBuffer = true;
+            useOverflowBuffer.set(i, false);
         }
 
-    }
-    else
-    {
-
-        useOverflowBuffer = false;
-    }
+    } // end cycle through electrodes
 
 
 	mut.exit();
diff --git a/Source/Processors/SpikeSorter/SpikeSorter.h b/Source/Processors/SpikeSorter/SpikeSorter.h
index 2f0f5a00b31f0db9f3453c41d4a2b31c12aa5d5c..077075d12b11411e46fde5eb6e64cc0403273bb7 100644
--- a/Source/Processors/SpikeSorter/SpikeSorter.h
+++ b/Source/Processors/SpikeSorter/SpikeSorter.h
@@ -326,7 +326,7 @@ private:
     float getCurrentSample(int& chan);
     bool samplesAvailable(int nSamples);
 
-    bool useOverflowBuffer;
+    Array<bool> useOverflowBuffer;
 
     int currentElectrode;
     int currentChannelIndex;