diff --git a/Source/Processors/Editors/SpikeDetectorEditor.cpp b/Source/Processors/Editors/SpikeDetectorEditor.cpp
index ea81985c1ce16b689c5790860554ddd6ce8aedb0..8c55de045220062ac4c0fe170dc02b1a2aa1d45b 100755
--- a/Source/Processors/Editors/SpikeDetectorEditor.cpp
+++ b/Source/Processors/Editors/SpikeDetectorEditor.cpp
@@ -121,12 +121,12 @@ SpikeDetectorEditor::SpikeDetectorEditor(GenericProcessor* parentNode, bool useD
     addAndMakeVisible(thresholdLabel);
 
     // create a custom channel selector
-    deleteAndZero(channelSelector);
-
-    channelSelector = new ChannelSelector(false, font);
-    addChildComponent(channelSelector);
-    channelSelector->setVisible(false);
+    //deleteAndZero(channelSelector);
 
+   // channelSelector = new ChannelSelector(false, font);
+  //  addChildComponent(channelSelector);
+   // channelSelector->setVisible(false);
+//
     //  Array<int> a;
 
     channelSelector->inactivateButtons();
@@ -238,6 +238,11 @@ void SpikeDetectorEditor::buttonEvent(Button* button)
     else if (button == plusButton)
     {
         // std::cout << "Plus button pressed!" << std::endl;
+        if (acquisitionIsActive)
+        {
+            sendActionMessage("Stop acquisition before adding electrodes.");
+            return;
+        }
 
         int type = electrodeTypes->getSelectedId();
        // std::cout << type << std::endl;
@@ -266,6 +271,7 @@ void SpikeDetectorEditor::buttonEvent(Button* button)
             }
         }
 
+        electrodeEditorButtons[1]->setToggleState(false, false);
 
         getEditorViewport()->makeEditorVisible(this, true, true);
         return;
@@ -319,11 +325,49 @@ void SpikeDetectorEditor::buttonEvent(Button* button)
     }
     else if (button == electrodeEditorButtons[1])   // MONITOR
     {
+
+        Button* audioMonitorButton = electrodeEditorButtons[1];
+
+        channelSelector->clearAudio();
+
+        SpikeDetector* processor = (SpikeDetector*) getProcessor();
+
+        Array<Electrode*> electrodes = processor->getElectrodes();
+
+        for (int i = 0; i < electrodes.size(); i++)
+        {
+            Electrode* e = electrodes[i];
+            e->isMonitored = false;
+        }
+
+        Electrode* e = processor->getActiveElectrode();
+
+        if (e != nullptr)
+        {
+
+            e->isMonitored = audioMonitorButton->getToggleState();
+
+            for (int i = 0; i < e->numChannels; i++)
+            {
+                std::cout << "Channel " << e->channels[i] << std::endl;
+                int channelNum = e->channels[i];
+                channelSelector->setAudioStatus(channelNum, audioMonitorButton->getToggleState());
+
+            }
+        } else {
+            audioMonitorButton->setToggleState(false, false);
+        }
+
         return;
     }
     else if (button == electrodeEditorButtons[2])   // DELETE
     {
-
+        if (acquisitionIsActive)
+        {
+            sendActionMessage("Stop acquisition before deleting electrodes.");
+            return;
+        }
+    
         removeElectrode(electrodeList->getSelectedItemIndex());
 
         getEditorViewport()->makeEditorVisible(this, true, true);
@@ -478,6 +522,11 @@ void SpikeDetectorEditor::comboBoxChanged(ComboBox* comboBox)
 
             lastId = ID;
 
+            SpikeDetector* processor = (SpikeDetector*) getProcessor();
+            Electrode* e = processor->setCurrentElectrodeIndex(ID-1);
+
+            electrodeEditorButtons[1]->setToggleState(e->isMonitored, false);
+
             drawElectrodeButtons(ID-1);
 
         }
diff --git a/Source/Processors/SpikeDetector.cpp b/Source/Processors/SpikeDetector.cpp
index 663979f59de6745f205942dfc6cc7473660aab4c..ba397d0025b52f765241610b715be81724a6745c 100755
--- a/Source/Processors/SpikeDetector.cpp
+++ b/Source/Processors/SpikeDetector.cpp
@@ -147,6 +147,7 @@ bool SpikeDetector::addElectrode(int nChans)
     newElectrode->thresholds = new double[nChans];
     newElectrode->isActive = new bool[nChans];
     newElectrode->channels = new int[nChans];
+    newElectrode->isMonitored = false;
 
     for (int i = 0; i < nChans; i++)
     {
@@ -159,6 +160,8 @@ bool SpikeDetector::addElectrode(int nChans)
 
     electrodes.add(newElectrode);
 
+    currentElectrode = electrodes.size()-1;
+
     return true;
 
 }
@@ -225,6 +228,25 @@ int SpikeDetector::getChannel(int index, int i)
     return *(electrodes[index]->channels+i);
 }
 
+Array<Electrode*> SpikeDetector::getElectrodes()
+{
+    return electrodes;
+}
+
+Electrode* SpikeDetector::setCurrentElectrodeIndex(int i)
+{
+    jassert(i >= 0 & i < electrodes.size());
+    currentElectrode = i;
+    return electrodes[i];
+}
+
+Electrode* SpikeDetector::getActiveElectrode()
+{
+    if (electrodes.size() == 0)
+      return nullptr;
+
+    return electrodes[currentElectrode];
+}
 
 void SpikeDetector::setChannelActive(int electrodeIndex, int subChannel, bool active)
 {
diff --git a/Source/Processors/SpikeDetector.h b/Source/Processors/SpikeDetector.h
index 50a6225b1ace09eecc4b996bd4f00ce0328f92a7..3a5350f0f3432008ca35db220537d86d2bff317c 100755
--- a/Source/Processors/SpikeDetector.h
+++ b/Source/Processors/SpikeDetector.h
@@ -31,6 +31,22 @@
 
 #include "Visualization/SpikeObject.h"
 
+struct Electrode
+{
+
+    String name;
+
+    int numChannels;
+    int prePeakSamples, postPeakSamples;
+    int lastBufferIndex;
+    bool isMonitored;
+
+    int* channels;
+    double* thresholds;
+    bool* isActive;
+
+};
+
 class SpikeDetectorEditor;
 
 /**
@@ -119,6 +135,15 @@ public:
     /** Returns a StringArray containing the names of all electrodes */
     StringArray getElectrodeNames();
 
+    /** Returns array of electrodes. */
+    Array<Electrode*> getElectrodes();
+
+    /** Returns array of electrodes. */
+    Electrode* getActiveElectrode();
+
+    /** Sets the current electrode index */
+    Electrode* setCurrentElectrodeIndex(int);
+
     /** Returns a list of possible electrode types (e.g., stereotrode, tetrode). */
     StringArray electrodeTypes;
 
@@ -151,21 +176,6 @@ private:
     int currentChannelIndex;
     int currentIndex;
 
-    struct Electrode
-    {
-
-        String name;
-
-        int numChannels;
-        int prePeakSamples, postPeakSamples;
-        int lastBufferIndex;
-
-        int* channels;
-        double* thresholds;
-        bool* isActive;
-
-    };
-
     uint8_t* spikeBuffer;///[256];
     int64 timestamp;