diff --git a/Source/Processors/SpikeDetector.cpp b/Source/Processors/SpikeDetector.cpp
index 48d8c18b0b77755867ec5bd5ca74e9f0019882e2..7ee4348b5d249bb15f5467c8f61004af599ea905 100755
--- a/Source/Processors/SpikeDetector.cpp
+++ b/Source/Processors/SpikeDetector.cpp
@@ -333,6 +333,8 @@ void SpikeDetector::addSpikeEvent(SpikeObject* s, MidiBuffer& eventBuffer, int p
 
     // std::cout << "Adding spike event for index " << peakIndex << std::endl;
 
+    s->eventType = SPIKE_EVENT_CODE;
+
     int numBytes = packSpike(s, spikeBuffer, 256);
 
     eventBuffer.addEvent(spikeBuffer, numBytes, peakIndex);
diff --git a/Source/Processors/Visualization/SpikeDisplayCanvas.cpp b/Source/Processors/Visualization/SpikeDisplayCanvas.cpp
index a1654099d2902937e6ddc40df0deee9afaa4f4a2..cf904d76971b00497d37da260b8c413dfe337bcd 100755
--- a/Source/Processors/Visualization/SpikeDisplayCanvas.cpp
+++ b/Source/Processors/Visualization/SpikeDisplayCanvas.cpp
@@ -416,6 +416,9 @@ SpikePlot::SpikePlot(SpikeDisplayCanvas* sdc, int elecNum, int p, String name_)
         rangeButtons.add(rangeButton);
     }
 
+    spikeBuffer = new uint8_t[MAX_SPIKE_BUFFER_LEN]; // MAX_SPIKE_BUFFER_LEN defined in SpikeObject.h
+
+
 }
 
 SpikePlot::~SpikePlot()
@@ -536,7 +539,12 @@ void SpikePlot::closeFile()
 void SpikePlot::writeSpike(const SpikeObject& s)
 {
 
-    // write spike to the file
+
+    packSpike(&s, spikeBuffer, 256);
+
+    fwrite(spikeBuffer, 1, 256, file);
+
+
 }
 
 String SpikePlot::generateHeader()
diff --git a/Source/Processors/Visualization/SpikeDisplayCanvas.h b/Source/Processors/Visualization/SpikeDisplayCanvas.h
index b9ba2eccbfdddb24df3e8a4fb0e8690ed6a51e7a..ade7bd6c87f6e441a1e798be39209d796dc9488e 100755
--- a/Source/Processors/Visualization/SpikeDisplayCanvas.h
+++ b/Source/Processors/Visualization/SpikeDisplayCanvas.h
@@ -236,6 +236,7 @@ private:
     FILE* file;
     String filename;
     File dataDirectory;
+    uint8_t* spikeBuffer;
 
 };
 
diff --git a/Source/Processors/Visualization/SpikeObject.cpp b/Source/Processors/Visualization/SpikeObject.cpp
index c2665d123aca88f6505a8b9432228b22d30d8be2..bb7ce020b4f4ddc6ec1e19f0eb6db375f2c857d3 100755
--- a/Source/Processors/Visualization/SpikeObject.cpp
+++ b/Source/Processors/Visualization/SpikeObject.cpp
@@ -27,16 +27,13 @@
 #include "time.h"
 
 // Simple method for serializing a SpikeObject into a string of bytes
-int packSpike(SpikeObject* s, uint8_t* buffer, int bufferSize)
+int packSpike(const SpikeObject* s, uint8_t* buffer, int bufferSize)
 {
 
     //int reqBytes = 1 + 4 + 2 + 2 + 2 + 2 * s->nChannels * s->nSamples + 2 * s->nChannels * 2;
 
     int idx = 0;
 
-    s->eventType = SPIKE_EVENT_CODE;
-
-
     memcpy(buffer+idx, &(s->eventType), 1);
     idx += 1;
 
diff --git a/Source/Processors/Visualization/SpikeObject.h b/Source/Processors/Visualization/SpikeObject.h
index 1bd73f2ec990f3f2293f7808e7163191f97ff46e..5a71b9e5b9b8a74e553b7a926a15003b63e44fbb 100755
--- a/Source/Processors/Visualization/SpikeObject.h
+++ b/Source/Processors/Visualization/SpikeObject.h
@@ -68,7 +68,7 @@ struct SpikeObject
 };
 
 /** Simple method for serializing a SpikeObject into a string of bytes, returns true is the packaged spike buffer is valid */
-int packSpike(SpikeObject* s, uint8_t* buffer, int bufferLength);
+int packSpike(const SpikeObject* s, uint8_t* buffer, int bufferLength);
 
 /** Simple method for deserializing a string of bytes into a Spike object, returns true is the provided spike buffer is valid */
 bool unpackSpike(SpikeObject* s, const uint8_t* buffer, int bufferLength);