diff --git a/Source/Processors/Editors/GenericEditor.cpp b/Source/Processors/Editors/GenericEditor.cpp
index ea497eb137372c6f71edb9c5e3790ef5e518f8a3..745d0dad0a3051836b72fe14905982247259cd76 100755
--- a/Source/Processors/Editors/GenericEditor.cpp
+++ b/Source/Processors/Editors/GenericEditor.cpp
@@ -158,7 +158,7 @@ void GenericEditor::refreshColors()
         backgroundColor = getProcessorList()->findColour(SOURCE_COLOR);// Colour(255, 0, 0);//Colour(int(0.9*255.0f),int(0.019*255.0f),int(0.16*255.0f));
     else if (getProcessor()->isSink())
         backgroundColor = getProcessorList()->findColour(SINK_COLOR);//Colour(255, 149, 0);//Colour(int(0.06*255.0f),int(0.46*255.0f),int(0.9*255.0f));
-    else if (getProcessor()->isSplitter() || getProcessor()->isMerger())
+    else if (getProcessor()->isSplitter() || getProcessor()->isMerger() || getProcessor()->isUtility())
         backgroundColor =  getProcessorList()->findColour(UTILITY_COLOR);//Colour(40, 40, 40);//Colour(int(0.7*255.0f),int(0.7*255.0f),int(0.7*255.0f));
     else
         backgroundColor =  getProcessorList()->findColour(FILTER_COLOR);//Colour(255, 89, 0);//Colour(int(1.0*255.0f),int(0.5*255.0f),int(0.0*255.0f));
diff --git a/Source/Processors/Editors/RecordControlEditor.cpp b/Source/Processors/Editors/RecordControlEditor.cpp
index d374e773994b4cdfdc0456cc2b476e973e030d39..c437706398a12ae066147f87293ae112d1bcabd5 100644
--- a/Source/Processors/Editors/RecordControlEditor.cpp
+++ b/Source/Processors/Editors/RecordControlEditor.cpp
@@ -50,29 +50,50 @@ RecordControlEditor::RecordControlEditor(GenericProcessor* parentNode, bool useD
     availableChans->setSelectedId(0);
 
     addAndMakeVisible(availableChans);
-
+    
+    newFileToggleButton = new UtilityButton("SPLIT FILES", Font("Small Text", 13, Font::plain));
+    newFileToggleButton->setRadius(3.0f);
+    newFileToggleButton->setBounds(45, 95, 90, 18);
+    newFileToggleButton->addListener(this);
+    newFileToggleButton->setClickingTogglesState(true);
+    addAndMakeVisible(newFileToggleButton);
 
 }
 
 RecordControlEditor::~RecordControlEditor()
 {
-    deleteAllChildren();
+    //deleteAllChildren();
 }
 
 void RecordControlEditor::comboBoxChanged(ComboBox* comboBox)
 {
-    RecordControl* processor = (RecordControl*)getProcessor();
+
     if (comboBox->getSelectedId() > 0)
-        processor->updateTriggerChannel(processor->eventChannels[comboBox->getSelectedId()-1]->num);
+        getProcessor()->setParameter(0, (float) comboBox->getSelectedId()-1);
     else
-        processor->updateTriggerChannel(-1);
+        getProcessor()->setParameter(0, -1);
+}
+
+void RecordControlEditor::buttonEvent(Button* button)
+{
+
+    if (button->getToggleState())
+    {
+        getProcessor()->setParameter(1, 1.0f);
+    } else {
+        getProcessor()->setParameter(1, 0.0f);
+    }
 }
 
 void RecordControlEditor::updateSettings()
 {
     availableChans->clear();
-    GenericProcessor* processor = getProcessor();
-    for (int i = 0; i < processor->eventChannels.size() ; i++)
-        availableChans->addItem(processor->eventChannels[i]->name,i+1);
+    //GenericProcessor* processor = getProcessor();
+    for (int i = 0; i < 10 ; i++)
+    {
+        String channelName = "Channel ";
+        channelName += i + 1;
+        availableChans->addItem(channelName,i+1);
+    }
 
 }
\ No newline at end of file
diff --git a/Source/Processors/Editors/RecordControlEditor.h b/Source/Processors/Editors/RecordControlEditor.h
index fd750ee8b1e9767bdc7792235d89682fb92a8aca..011ec844cedb092d349e64dc4e8922aa579c7c35 100644
--- a/Source/Processors/Editors/RecordControlEditor.h
+++ b/Source/Processors/Editors/RecordControlEditor.h
@@ -43,11 +43,12 @@ public:
     ~RecordControlEditor();
     void comboBoxChanged(ComboBox* comboBox);
     void updateSettings();
+    void buttonEvent(Button* button);
 
 private:
-    ComboBox* availableChans;
-    Label* chanSel;
-
+    ScopedPointer<ComboBox> availableChans;
+    ScopedPointer<Label> chanSel;
+    ScopedPointer<UtilityButton> newFileToggleButton;
 
     JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(RecordControlEditor);
 
diff --git a/Source/Processors/GenericProcessor.h b/Source/Processors/GenericProcessor.h
index 6ac89462f74880d5af5f1f5ec052045b8f76151e..21a77ccc4d25e0a61713ac9238eee441fea486d4 100755
--- a/Source/Processors/GenericProcessor.h
+++ b/Source/Processors/GenericProcessor.h
@@ -363,6 +363,12 @@ public:
     {
         return false;
     }
+    
+    /** Returns true if a processor is a utility (non-merger or splitter), false otherwise.*/
+    virtual bool isUtility()
+    {
+        return false;
+    }
 
     /** Returns true if a processor is able to send its output to a given processor.
 
diff --git a/Source/Processors/ProcessorGraph.cpp b/Source/Processors/ProcessorGraph.cpp
index b086dbebc4f2499840f2222c3450375cf4aaa7c3..d03d5a3919bfb1c8af563d587c24fd33fe602a85 100644
--- a/Source/Processors/ProcessorGraph.cpp
+++ b/Source/Processors/ProcessorGraph.cpp
@@ -535,7 +535,7 @@ GenericProcessor* ProcessorGraph::createProcessorFromDescription(String& descrip
             sendActionMessage("New merger created.");
 
         }
-        else if (subProcessorType.equalsIgnoreCase("Record Control"))
+        else if (subProcessorType.equalsIgnoreCase("Record Controller"))
         {
 
             std::cout << "Creating a new record controller." << std::endl;
diff --git a/Source/Processors/RecordNode.cpp b/Source/Processors/RecordNode.cpp
index 3ec1c1f7f849b08a3e487cbe778dab5dc86dd8b1..0ddd3f1608e2abde48b1fc95ba7e0ea21773939f 100755
--- a/Source/Processors/RecordNode.cpp
+++ b/Source/Processors/RecordNode.cpp
@@ -30,7 +30,8 @@
 
 RecordNode::RecordNode()
     : GenericProcessor("Record Node"),
-      newDirectoryNeeded(true),  zeroBuffer(1, 50000),  timestamp(0)
+      newDirectoryNeeded(true),  zeroBuffer(1, 50000),  timestamp(0),
+      appendTrialNum(false), trialNum(0)
 {
 
     isProcessing = false;
@@ -197,20 +198,39 @@ void RecordNode::updateFileName(Channel* ch)
         filename += ch->nodeId;
         filename += "_";
         filename += ch->name;
+        
+        if (appendTrialNum)
+        {
+            filename += "_";
+            filename += trialNum;
+        }
+        
         filename += ".continuous";
     }
     else
     {
         filename += "all_channels.events";
     }
-
+    
+    
     ch->filename = filename;
     ch->file = 0;
+    
 
     //std::cout << "Updating " << filename << std::endl;
 
 }
 
+void RecordNode::updateTrialNumber()
+{
+    trialNum++;
+}
+
+void RecordNode::appendTrialNumber(bool t)
+{
+    appendTrialNum = t;
+}
+
 void RecordNode::createNewDirectory()
 {
     std::cout << "Creating new directory." << std::endl;
@@ -225,9 +245,20 @@ void RecordNode::createNewDirectory()
     }
 
     newDirectoryNeeded = false;
+    
+    trialNum = 0;
 
 }
 
+void RecordNode::createNewFiles()
+{
+    for (int i = 0; i < channelPointers.size(); i++)
+    {
+        updateFileName(channelPointers[i]);
+    }
+    
+}
+
 String RecordNode::generateDirectoryName()
 {
     Time calendar = Time::getCurrentTime();
@@ -325,6 +356,8 @@ void RecordNode::setParameter(int parameterIndex, float newValue)
             getEditorViewport()->saveState(File(settingsFileName));
         }
 
+        createNewFiles();
+        
         openFile(eventChannel);
 
         sampleCount = 0; // reset sample count
diff --git a/Source/Processors/RecordNode.h b/Source/Processors/RecordNode.h
index 1b1a6ce9606e94f4dea2fcd8574a3b3e40694311..aa84b43fa4e341aec1bd391477a22975e4f33670 100755
--- a/Source/Processors/RecordNode.h
+++ b/Source/Processors/RecordNode.h
@@ -101,6 +101,16 @@ public:
     /** Creates a new data directory in the location specified by the fileNameComponent.
     */
     void createNewDirectory();
+    
+    /** Creates a new data file for each channel.
+     */
+    void createNewFiles();
+    
+    /** Creates a new data file for each channel.
+     */
+    void appendTrialNumber(bool);
+    
+    void updateTrialNumber();
 
     File getDataDirectory()
     {
@@ -203,6 +213,9 @@ private:
     char* recordMarker;
     
     CriticalSection diskWriteLock;
+    
+    bool appendTrialNum;
+    int trialNum;
 
     JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(RecordNode);
 
diff --git a/Source/Processors/Utilities/RecordControl.cpp b/Source/Processors/Utilities/RecordControl.cpp
index 528488a18868b40c1888e87ab12598e485bfac3d..1b4286a104c79fa0e3aa3b436b3470e468506339 100644
--- a/Source/Processors/Utilities/RecordControl.cpp
+++ b/Source/Processors/Utilities/RecordControl.cpp
@@ -27,7 +27,8 @@
 #include "../../UI/ControlPanel.h"
 
 RecordControl::RecordControl()
-    : GenericProcessor("Record Controller"), triggerChannel(0)
+    : GenericProcessor("Record Controller"), 
+      createNewFilesOnTrigger(false), triggerChannel(0), recordNode(0)
 {
 
 }
@@ -43,11 +44,40 @@ AudioProcessorEditor* RecordControl::createEditor()
     return editor;
 }
 
+void RecordControl::setParameter(int parameterIndex, float newValue)
+{
+    if (parameterIndex == 0)
+    {
+        updateTriggerChannel((int) newValue);
+    } else {
+        
+        if (newValue == 0.0)
+        {
+            createNewFilesOnTrigger = false;
+            
+            
+        } else {
+            createNewFilesOnTrigger = true;
+        }
+        //recordNode->appendTrialNumber(createNewFilesOnTrigger);
+    }
+}
+
 void RecordControl::updateTriggerChannel(int newChannel)
 {
     triggerChannel = newChannel;
 }
 
+bool RecordControl::enable()
+{
+    if (recordNode == 0)
+        recordNode = getProcessorGraph()->getRecordNode();
+    
+    recordNode->appendTrialNumber(createNewFilesOnTrigger);
+    
+    return true;
+}
+
 void RecordControl::process(AudioSampleBuffer& buffer,
                             MidiBuffer& events,
                             int& nSamples)
@@ -74,6 +104,10 @@ void RecordControl::handleEvent(int eventType, MidiMessage& event, int)
 
         if (eventId == 1)
         {
+            if (createNewFilesOnTrigger)
+            {
+                recordNode->updateTrialNumber();
+            }
             getControlPanel()->setRecordState(true);
         }
         else
diff --git a/Source/Processors/Utilities/RecordControl.h b/Source/Processors/Utilities/RecordControl.h
index 55c9bf609ef60ee23017ffdd5c4ec523d446d49f..56c47bc6004e039ef8a120d21e4194105964a6f9 100644
--- a/Source/Processors/Utilities/RecordControl.h
+++ b/Source/Processors/Utilities/RecordControl.h
@@ -27,6 +27,7 @@
 #include "../../../JuceLibraryCode/JuceHeader.h"
 #include "../GenericProcessor.h"
 #include "../Editors/RecordControlEditor.h"
+#include "../RecordNode.h"
 
 /**
 
@@ -43,13 +44,22 @@ public:
     ~RecordControl();
 
     void process(AudioSampleBuffer& buffer, MidiBuffer& midiMessages, int& nSamples);
+    void setParameter(int, float);
     void updateTriggerChannel(int newChannel);
     void handleEvent(int eventType, MidiMessage& event, int);
+    bool enable();
+    
+    bool createNewFilesOnTrigger;
+    
+    bool isUtility() {return true;}
 
     AudioProcessorEditor* createEditor();
 
 private:
     int triggerChannel;
+    
+    
+    RecordNode* recordNode;
 
     JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(RecordControl);
 
diff --git a/Source/UI/EditorViewport.cpp b/Source/UI/EditorViewport.cpp
index a3c45dc1dd9e323676cfdc34cde9c78551453607..85e32616f7fe83cdd20368c540ad70239d437a1a 100755
--- a/Source/UI/EditorViewport.cpp
+++ b/Source/UI/EditorViewport.cpp
@@ -1059,7 +1059,7 @@ XmlElement* EditorViewport::createNodeXml(GenericEditor* editor,
         name += "Sources/";
     else if (source->isSink())
         name += "Sinks/";
-    else if (source->isSplitter() || source->isMerger())
+    else if (source->isSplitter() || source->isMerger() || source->isUtility())
         name += "Utilities/";
     else
         name += "Filters/";
diff --git a/Source/UI/ProcessorList.cpp b/Source/UI/ProcessorList.cpp
index ff7ded65473731ef372338465a634b554a6917d5..87719e223f729c748ebb62fdb844f71f1032b1a5 100755
--- a/Source/UI/ProcessorList.cpp
+++ b/Source/UI/ProcessorList.cpp
@@ -79,7 +79,7 @@ ProcessorList::ProcessorList()
     ProcessorListItem* utilities = new ProcessorListItem("Utilities");
     utilities->addSubItem(new ProcessorListItem("Splitter"));
     utilities->addSubItem(new ProcessorListItem("Merger"));
-    utilities->addSubItem(new ProcessorListItem("Record Control"));
+    utilities->addSubItem(new ProcessorListItem("Record Controller"));
 
     baseItem = new ProcessorListItem("Processors");
     baseItem->addSubItem(sources);