diff --git a/Builds/MacOSX/open-ephys.xcodeproj/project.xcworkspace/xcuserdata/Josh.xcuserdatad/UserInterfaceState.xcuserstate b/Builds/MacOSX/open-ephys.xcodeproj/project.xcworkspace/xcuserdata/Josh.xcuserdatad/UserInterfaceState.xcuserstate
index 120f08ba407cad0f998c821c1c158a5c9a36dfac..650660544b11bbcadfe93f15926969abffb103fa 100755
Binary files a/Builds/MacOSX/open-ephys.xcodeproj/project.xcworkspace/xcuserdata/Josh.xcuserdatad/UserInterfaceState.xcuserstate and b/Builds/MacOSX/open-ephys.xcodeproj/project.xcworkspace/xcuserdata/Josh.xcuserdatad/UserInterfaceState.xcuserstate differ
diff --git a/Source/Audio/AudioComponent.cpp b/Source/Audio/AudioComponent.cpp
index e2dfac3c1c9c07e59accca7550d0f3a8aed7461a..5c729673fb4a36b5b58abeb537395ae165837556 100644
--- a/Source/Audio/AudioComponent.cpp
+++ b/Source/Audio/AudioComponent.cpp
@@ -157,7 +157,7 @@ void AudioComponent::beginCallbacks()
 
     restartDevice();
     
-    const MessageManagerLock mmLock; // add a lock to prevent crashes
+    //const MessageManagerLock mmLock; // add a lock to prevent crashes
 
     std::cout << std::endl << "Adding audio callback." << std::endl;
     deviceManager.addAudioCallback(graphPlayer);
@@ -167,6 +167,8 @@ void AudioComponent::beginCallbacks()
 
 void AudioComponent::endCallbacks()
 {
+    
+   // const MessageManagerLock mmLock; // add a lock to prevent crashes
 
     std::cout << std::endl << "Removing audio callback." << std::endl;
     deviceManager.removeAudioCallback(graphPlayer);
diff --git a/Source/Processors/ProcessorGraph.cpp b/Source/Processors/ProcessorGraph.cpp
index e083058c82f250b002301c4678f492fceea30898..58cc463532475806ef36b3dfcc3bef3ed0512899 100644
--- a/Source/Processors/ProcessorGraph.cpp
+++ b/Source/Processors/ProcessorGraph.cpp
@@ -710,28 +710,28 @@ void ProcessorGraph::setRecordState(bool isRecording)
     
     // inform other processors that recording will begin
     
-//    for (int i = 0; i < getNumNodes(); i++)
-//    {
-//        Node* node = getNode(i);
-//        if (node->nodeId != OUTPUT_NODE_ID)
-//        {
-//            GenericProcessor* p = (GenericProcessor*) node->getProcessor();
-//            
-//            if (isRecording)
-//                p->startRecording();
-//            else
-//                p->stopRecording();
-//            
-//        }
-//    }
-//    
-//    // actually start recording
-//    if (isRecording)
-//    {
-//        getRecordNode()->setParameter(1,10.0f);
-//    } else {
-//        getRecordNode()->setParameter(0,10.0f);
-//    }
+    for (int i = 0; i < getNumNodes(); i++)
+    {
+        Node* node = getNode(i);
+        if (node->nodeId != OUTPUT_NODE_ID)
+        {
+            GenericProcessor* p = (GenericProcessor*) node->getProcessor();
+            
+            if (isRecording)
+                p->startRecording();
+            else
+                p->stopRecording();
+            
+        }
+    }
+    
+    // actually start recording
+    if (isRecording)
+    {
+        getRecordNode()->setParameter(1,10.0f);
+    } else {
+        getRecordNode()->setParameter(0,10.0f);
+    }
     
 }
 
diff --git a/Source/Processors/SpikeDisplayNode.cpp b/Source/Processors/SpikeDisplayNode.cpp
index 9fa35f4c93108f3a6f8e55e54fdc634822b11dc6..5b1274ee723f436fd7076d697434fa3ca6799c48 100755
--- a/Source/Processors/SpikeDisplayNode.cpp
+++ b/Source/Processors/SpikeDisplayNode.cpp
@@ -63,7 +63,7 @@ AudioProcessorEditor* SpikeDisplayNode::createEditor()
 
 bool SpikeDisplayNode::enable()
 {
-    std::cout<<"SpikeDisplayNode::enable()"<<std::endl;
+    std::cout << "SpikeDisplayNode::enable()" << std::endl;
     SpikeDisplayEditor* editor = (SpikeDisplayEditor*) getEditor();
     editor->enable();
     return true;
@@ -72,7 +72,7 @@ bool SpikeDisplayNode::enable()
 
 bool SpikeDisplayNode::disable()
 {
-    std::cout<<"SpikeDisplayNode disabled!"<<std::endl;
+    std::cout << "SpikeDisplayNode disabled!" << std::endl;
     SpikeDisplayEditor* editor = (SpikeDisplayEditor*) getEditor();
     editor->disable();
     return true;
@@ -174,7 +174,7 @@ void SpikeDisplayNode::handleEvent(int eventType, MidiMessage& event, int sample
 
     if (eventType == SPIKE)
     {
-        const MessageManagerLock mmLock; // get the lock to prevent the midi buffer from being read
+      //  const MessageManagerLock mmLock; // get the lock to prevent the midi buffer from being read
         
         eventBuffer->addEvent(event, 0);
     }
diff --git a/Source/Processors/Visualization/SpikeDisplayCanvas.cpp b/Source/Processors/Visualization/SpikeDisplayCanvas.cpp
index 025b9dad184a4a634a9b0245e8f74bef1daea23c..9ad5fa0a945e6bda8b302b62717c01ab2a3a25e7 100755
--- a/Source/Processors/Visualization/SpikeDisplayCanvas.cpp
+++ b/Source/Processors/Visualization/SpikeDisplayCanvas.cpp
@@ -137,7 +137,7 @@ RecordNode* SpikeDisplayCanvas::getRecordNode()
 void SpikeDisplayCanvas::processSpikeEvents()
 {
 
-    const MessageManagerLock mmLock; // get the lock to prevent the midi buffer from being updated
+    //const MessageManagerLock mmLock; // get the lock to prevent the midi buffer from being updated
     
     if (spikeBuffer->getNumEvents() > 0)
     {
@@ -505,29 +505,33 @@ void SpikePlot::processSpikeObject(const SpikeObject& s)
         if (aboveThreshold && isRecording)
         {
             // write spike to disk
-           // writeSpike(s);
+          writeSpike(s);
         }
 
 }
 
 void SpikePlot::startRecording()
 {
-    //openFile();
+
+    openFile();
     isRecording = true;
-     
+    
+
 }
 
 void SpikePlot::stopRecording()
 {
-   // closeFile();
+    
+    closeFile();
     isRecording = false;
+
 }
 
 void SpikePlot::openFile()
 {
     //const MessageManagerLock mmLock;
     
-    dataDirectory = File("/Users/Josh/Programming/open-ephys/GUI/Builds/MacOSX/build/Debug");//recordNode->getDataDirectory();
+    dataDirectory = recordNode->getDataDirectory();//File("/Users/Josh/Programming/open-ephys/GUI/Builds/MacOSX/build/Debug"); //recordNode->getDataDirectory();
 
     filename = dataDirectory.getFullPathName();
     filename += File::separator;