diff --git a/Source/Plugins/BasicSpikeDisplay/SpikeDetector/SpikeDetector.cpp b/Source/Plugins/BasicSpikeDisplay/SpikeDetector/SpikeDetector.cpp
index 799a38852cb32f388bdc41e248087697f09b0622..82eac7dbbe2eaab141467318a762dcfa340801c4 100644
--- a/Source/Plugins/BasicSpikeDisplay/SpikeDetector/SpikeDetector.cpp
+++ b/Source/Plugins/BasicSpikeDisplay/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;
@@ -143,9 +144,9 @@ bool SpikeDetector::addElectrode(int nChans)
     newElectrode->numChannels = nChans;
     newElectrode->prePeakSamples = 8;
     newElectrode->postPeakSamples = 32;
-    newElectrode->thresholds = new double[nChans];
-    newElectrode->isActive = new bool[nChans];
-    newElectrode->channels = new int[nChans];
+    newElectrode->thresholds.malloc(nChans);
+    newElectrode->isActive.malloc(nChans);
+    newElectrode->channels.malloc(nChans);
     newElectrode->isMonitored = false;
 
     for (int i = 0; i < nChans; i++)
@@ -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/Plugins/BasicSpikeDisplay/SpikeDetector/SpikeDetector.h b/Source/Plugins/BasicSpikeDisplay/SpikeDetector/SpikeDetector.h
index c3bdeb49431449b725154c9a9da8ef1e232ce977..a5cfbf5c18349055593b05b5ca466983ad6a2b94 100644
--- a/Source/Plugins/BasicSpikeDisplay/SpikeDetector/SpikeDetector.h
+++ b/Source/Plugins/BasicSpikeDisplay/SpikeDetector/SpikeDetector.h
@@ -38,11 +38,12 @@ struct SimpleElectrode
     int prePeakSamples, postPeakSamples;
     int lastBufferIndex;
     bool isMonitored;
+    int electrodeID;
     int sourceNodeId;
 
-    int* channels;
-    double* thresholds;
-    bool* isActive;
+    HeapBlock<int> channels;
+    HeapBlock<double> thresholds;
+    HeapBlock<bool> isActive;
 
 };
 
@@ -102,7 +103,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);
@@ -179,6 +180,7 @@ private:
     int64 timestamp;
 
     Array<SimpleElectrode*> electrodes;
+    int uniqueID;
 
     // void createSpikeEvent(int& peakIndex,
     // 					  int& electrodeNumber,
diff --git a/Source/Plugins/BasicSpikeDisplay/SpikeDetector/SpikeDetectorEditor.cpp b/Source/Plugins/BasicSpikeDisplay/SpikeDetector/SpikeDetectorEditor.cpp
index d3ca997762a0240ec13b2c92f95264626eefc0b7..fef06b442840943e8454784cacec29b18af216a2 100644
--- a/Source/Plugins/BasicSpikeDisplay/SpikeDetector/SpikeDetectorEditor.cpp
+++ b/Source/Plugins/BasicSpikeDisplay/SpikeDetector/SpikeDetectorEditor.cpp
@@ -433,11 +433,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;
@@ -544,7 +544,7 @@ void SpikeDetectorEditor::comboBoxChanged(ComboBox* comboBox)
 
 void SpikeDetectorEditor::checkSettings()
 {
-    electrodeList->setSelectedItemIndex(0);
+    electrodeList->setSelectedId(0);
     drawElectrodeButtons(0);
 
 	CoreServices::updateSignalChain(this);
diff --git a/Source/Plugins/BasicSpikeDisplay/SpikeDetector/SpikeDetectorEditor.h b/Source/Plugins/BasicSpikeDisplay/SpikeDetector/SpikeDetectorEditor.h
index 0065b055d9a59c31c36f417295377c6a973b69b5..086129d380ae20853eae9a694ae3ab31ea1d631b 100644
--- a/Source/Plugins/BasicSpikeDisplay/SpikeDetector/SpikeDetectorEditor.h
+++ b/Source/Plugins/BasicSpikeDisplay/SpikeDetector/SpikeDetectorEditor.h
@@ -60,7 +60,7 @@ public:
 
     void channelChanged(int chan);
 
-    bool addElectrode(int nChans);
+    bool addElectrode(int nChans, int electrodeID = 0);
     void removeElectrode(int index);
 
     void checkSettings();
diff --git a/Source/Plugins/LfpDisplayNode/LfpDisplayNode.cpp b/Source/Plugins/LfpDisplayNode/LfpDisplayNode.cpp
index dd6f87769292ea4d3d80d0eed29cff3a9ac88b04..abb2aff8db63870c3b1417db15cb09dcd568d378 100644
--- a/Source/Plugins/LfpDisplayNode/LfpDisplayNode.cpp
+++ b/Source/Plugins/LfpDisplayNode/LfpDisplayNode.cpp
@@ -33,7 +33,7 @@ LfpDisplayNode::LfpDisplayNode()
     //std::cout << " LFPDisplayNodeConstructor" << std::endl;
     displayBuffer = new AudioSampleBuffer(8, 100);
 
-    arrayOfOnes = new float[5000];
+	arrayOfOnes.malloc(5000);
 
     for (int n = 0; n < 5000; n++)
     {
diff --git a/Source/Plugins/LfpDisplayNode/LfpDisplayNode.h b/Source/Plugins/LfpDisplayNode/LfpDisplayNode.h
index e633853c6b5238e4f5ce1c7682018cc0216843f1..113729eb092e730393e217046cc416a3eecbe675 100644
--- a/Source/Plugins/LfpDisplayNode/LfpDisplayNode.h
+++ b/Source/Plugins/LfpDisplayNode/LfpDisplayNode.h
@@ -97,7 +97,7 @@ private:
 
     int64 bufferTimestamp;
     std::map<int, int> ttlState;
-    float* arrayOfOnes;
+    HeapBlock<float> arrayOfOnes;
     int totalSamples;
 
     bool resizeBuffer();