diff --git a/Source/Plugins/SpikeSorter/SpikeSortBoxes.cpp b/Source/Plugins/SpikeSorter/SpikeSortBoxes.cpp
index a6e38a8c067586fcfaf5e755506b8b3344100e75..7a8f482a699279a16beb6759fc712bc106d94f97 100644
--- a/Source/Plugins/SpikeSorter/SpikeSortBoxes.cpp
+++ b/Source/Plugins/SpikeSorter/SpikeSortBoxes.cpp
@@ -2129,7 +2129,7 @@ void PCAjob::computeSVD()
 
     // delete covariances
     for (int k = 0; k < dim; k++)
-        delete cov[k];
+        delete[] cov[k];
 
     delete[] cov;
     cov = nullptr;
diff --git a/Source/Plugins/SpikeSorter/SpikeSorter.cpp b/Source/Plugins/SpikeSorter/SpikeSorter.cpp
index 3e770324f7e0c9eef383383948c33aa62b58101f..fc182f087205c82a784bcc2c3143c09ee523ebe0 100644
--- a/Source/Plugins/SpikeSorter/SpikeSorter.cpp
+++ b/Source/Plugins/SpikeSorter/SpikeSorter.cpp
@@ -219,9 +219,6 @@ Electrode::~Electrode()
     delete[] voltageScale;
     delete[] channels;
     delete[] runningStats;
-
-	delete spikeSort;
-
 }
 
 Electrode::Electrode(int ID, UniqueIDgenerator* uniqueIDgenerator_, PCAcomputingThread* pth, String _name, int _numChannels, int* _channels, float default_threshold, int pre, int post, float samplingRate , int sourceId, int subIdx)
@@ -1125,7 +1122,7 @@ void SpikeSorter::addProbes(String probeType,int numProbes, int nElectrodesPerPr
         increaseUniqueProbeID(probeType);
     }
 }
-Array<Electrode*> SpikeSorter::getElectrodes()
+const OwnedArray<Electrode>& SpikeSorter::getElectrodes()
 {
     return electrodes;
 }
diff --git a/Source/Plugins/SpikeSorter/SpikeSorter.h b/Source/Plugins/SpikeSorter/SpikeSorter.h
index 8f93e89a2cb7868ac29b969dbbf9978e16eb1a47..7938615c568ea725afb452840c3955a9d48f6dc2 100644
--- a/Source/Plugins/SpikeSorter/SpikeSorter.h
+++ b/Source/Plugins/SpikeSorter/SpikeSorter.h
@@ -173,9 +173,11 @@ public:
 
     RunningStat* runningStats;
     SpikeHistogramPlot* spikePlot;
-    SpikeSortBoxes* spikeSort;
+    
     PCAcomputingThread* computingThread;
     UniqueIDgenerator* uniqueIDgenerator;
+
+	ScopedPointer<SpikeSortBoxes> spikeSort;
     bool isMonitored;
 };
 
@@ -361,7 +363,7 @@ public:
     void setElectrodeVoltageScale(int electrodeID, int index, float newvalue);
     std::vector<int> getElectrodeChannels(int ID);
 
-    Array<Electrode*> getElectrodes();
+    const OwnedArray<Electrode>& getElectrodes();
 
     std::vector<String> electrodeTypes;
 
@@ -437,7 +439,7 @@ private:
                                   int& currentChannel);
 
 
-    Array<Electrode*> electrodes;
+    OwnedArray<Electrode> electrodes;
     PCAcomputingThread computingThread;
     JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(SpikeSorter);
 
diff --git a/Source/Plugins/SpikeSorter/SpikeSorterEditor.cpp b/Source/Plugins/SpikeSorter/SpikeSorterEditor.cpp
index d1c554dd5e8bffee489ed7604fdb854f3c11a968..5a6d36e5ad2cfc89b8223f9e8067833a320612dc 100644
--- a/Source/Plugins/SpikeSorter/SpikeSorterEditor.cpp
+++ b/Source/Plugins/SpikeSorter/SpikeSorterEditor.cpp
@@ -463,7 +463,7 @@ void SpikeSorterEditor::buttonEvent(Button* button)
 
         SpikeSorter* processor = (SpikeSorter*) getProcessor();
 
-        Array<Electrode*> electrodes = processor->getElectrodes();
+        const OwnedArray<Electrode>& electrodes = processor->getElectrodes();
 
         for (int i = 0; i < electrodes.size(); i++)
         {