diff --git a/Source/Processors/SpikeDetector/SpikeDetector.cpp b/Source/Processors/SpikeDetector/SpikeDetector.cpp
index c51bbc4dccc531794c8a84b3fbcf5b93cc8bd8c5..ed0d1566bb27bc65c4279957529057c3e3ace929 100755
--- a/Source/Processors/SpikeDetector/SpikeDetector.cpp
+++ b/Source/Processors/SpikeDetector/SpikeDetector.cpp
@@ -29,7 +29,8 @@
 SpikeDetector::SpikeDetector()
     : GenericProcessor("Spike Detector"),
       overflowBuffer(2,100), dataBuffer(nullptr),
-      overflowBufferSize(100), currentElectrode(-1)
+      overflowBufferSize(100), currentElectrode(-1),
+      uniqueID(0)
 {
     //// the standard form:
     electrodeTypes.add("single electrode");
@@ -97,7 +98,7 @@ void SpikeDetector::updateSettings()
 
 }
 
-bool SpikeDetector::addElectrode(int nChans)
+bool SpikeDetector::addElectrode(int nChans, int electrodeID)
 {
 
     std::cout << "Adding electrode with " << nChans << " channels." << std::endl;
@@ -155,6 +156,13 @@ bool SpikeDetector::addElectrode(int nChans)
         *(newElectrode->isActive+i) = true;
     }
 
+    if (electrodeID > 0) {
+        newElectrode->electrodeID = electrodeID;
+        uniqueID = std::max(uniqueID, electrodeID);
+    } else {
+        newElectrode->electrodeID = ++uniqueID;
+    }
+    
     newElectrode->sourceNodeId = channels[*newElectrode->channels]->sourceNodeId;
 
     resetElectrode(newElectrode);
@@ -505,7 +513,7 @@ void SpikeDetector::process(AudioSampleBuffer& buffer,
                         newSpike.source = i;
                         newSpike.nChannels = electrode->numChannels;
                         newSpike.sortedId = 0;
-                        newSpike.electrodeID = 0;
+                        newSpike.electrodeID = electrode->electrodeID;
                         newSpike.channel = 0;
                         newSpike.samplingFrequencyHz = sampleRateForElectrode;
 
@@ -676,6 +684,7 @@ void SpikeDetector::saveCustomParametersToXml(XmlElement* parentElement)
         electrodeNode->setAttribute("numChannels", electrodes[i]->numChannels);
         electrodeNode->setAttribute("prePeakSamples", electrodes[i]->prePeakSamples);
         electrodeNode->setAttribute("postPeakSamples", electrodes[i]->postPeakSamples);
+        electrodeNode->setAttribute("electrodeID", electrodes[i]->electrodeID);
 
         for (int j = 0; j < electrodes[i]->numChannels; j++)
         {
@@ -712,8 +721,9 @@ void SpikeDetector::loadCustomParametersFromXml()
                 std::cout << "ELECTRODE>>>" << std::endl;
 
                 int channelsPerElectrode = xmlNode->getIntAttribute("numChannels");
+                int electrodeID = xmlNode->getIntAttribute("electrodeID");
 
-                sde->addElectrode(channelsPerElectrode);
+                sde->addElectrode(channelsPerElectrode, electrodeID);
 
                 setElectrodeName(electrodeIndex+1, xmlNode->getStringAttribute("name"));
                 sde->refreshElectrodeList();
diff --git a/Source/Processors/SpikeDetector/SpikeDetector.h b/Source/Processors/SpikeDetector/SpikeDetector.h
index 829ad60302c9766f74ae6bf5414ad31e5e2d1571..e6efaf8a620fd74d8cde59d710a1a5f90635c22a 100755
--- a/Source/Processors/SpikeDetector/SpikeDetector.h
+++ b/Source/Processors/SpikeDetector/SpikeDetector.h
@@ -40,6 +40,7 @@ struct SimpleElectrode
     int prePeakSamples, postPeakSamples;
     int lastBufferIndex;
     bool isMonitored;
+    int electrodeID;
     int sourceNodeId;
 
     int* channels;
@@ -104,7 +105,7 @@ public:
     // CREATE AND DELETE ELECTRODES //
 
     /** Adds an electrode with n channels to be processed. */
-    bool addElectrode(int nChans);
+    bool addElectrode(int nChans, int electrodeID = 0);
 
     /** Removes an electrode with a given index. */
     bool removeElectrode(int index);
@@ -181,6 +182,7 @@ private:
     int64 timestamp;
 
     Array<SimpleElectrode*> electrodes;
+    int uniqueID;
 
     // void createSpikeEvent(int& peakIndex,
     // 					  int& electrodeNumber,
diff --git a/Source/Processors/SpikeDetector/SpikeDetectorEditor.cpp b/Source/Processors/SpikeDetector/SpikeDetectorEditor.cpp
index 0245fa20d3f0e7ff970e2a417f5edb2684fb63f2..be5348c8851d5b7630a87d33b86bd63e91d596de 100755
--- a/Source/Processors/SpikeDetector/SpikeDetectorEditor.cpp
+++ b/Source/Processors/SpikeDetector/SpikeDetectorEditor.cpp
@@ -432,11 +432,11 @@ void SpikeDetectorEditor::refreshElectrodeList()
     }
 }
 
-bool SpikeDetectorEditor::addElectrode(int nChans)
+bool SpikeDetectorEditor::addElectrode(int nChans, int electrodeID)
 {
     SpikeDetector* processor = (SpikeDetector*) getProcessor();
 
-    if (processor->addElectrode(nChans))
+    if (processor->addElectrode(nChans, electrodeID))
     {
         refreshElectrodeList();
         return true;
@@ -543,7 +543,7 @@ void SpikeDetectorEditor::comboBoxChanged(ComboBox* comboBox)
 
 void SpikeDetectorEditor::checkSettings()
 {
-    electrodeList->setSelectedItemIndex(0);
+    electrodeList->setSelectedId(0);
     drawElectrodeButtons(0);
 
 	CoreServices::updateSignalChain(this);
diff --git a/Source/Processors/SpikeDetector/SpikeDetectorEditor.h b/Source/Processors/SpikeDetector/SpikeDetectorEditor.h
index 919c9642150a99671d870e78de5d6e2a975940d0..0417ceaf8aec76ba832065f0d130c4a913b8d130 100755
--- a/Source/Processors/SpikeDetector/SpikeDetectorEditor.h
+++ b/Source/Processors/SpikeDetector/SpikeDetectorEditor.h
@@ -93,7 +93,7 @@ public:
 
     void channelChanged(int chan);
 
-    bool addElectrode(int nChans);
+    bool addElectrode(int nChans, int electrodeID = 0);
     void removeElectrode(int index);
 
     void checkSettings();