diff --git a/Source/Processors/Editors/ChannelMappingEditor.cpp b/Source/Processors/Editors/ChannelMappingEditor.cpp
index 6886d5a43b237830050677dcb73d7466a92bdecb..0b87d439b40abd65550d8785f4fd5bc5373e2411 100644
--- a/Source/Processors/Editors/ChannelMappingEditor.cpp
+++ b/Source/Processors/Editors/ChannelMappingEditor.cpp
@@ -58,17 +58,17 @@ ChannelMappingEditor::ChannelMappingEditor(GenericProcessor* parentNode, bool us
     resetButton->setClickingTogglesState(false);
     resetButton->setEnabled(false);
 
-    // upButton = new TriangleButton(1);
-    // upButton->addListener(this);
-    // upButton->setBounds(285,10,10,8);
-    // addAndMakeVisible(upButton);
-    // upButton->setVisible(false);
+    upButton = new TriangleButton(1);
+    upButton->addListener(this);
+    upButton->setBounds(320,30,10,8);
+    addAndMakeVisible(upButton);
+    upButton->setVisible(false);
 
-    // downButton = new TriangleButton(2);
-    // downButton->addListener(this);
-    // downButton->setBounds(285,25,10,8);
-    // addAndMakeVisible(downButton);
-    // downButton->setVisible(false);
+    downButton = new TriangleButton(2);
+    downButton->addListener(this);
+    downButton->setBounds(320,45,10,8);
+    addAndMakeVisible(downButton);
+    downButton->setVisible(false);
 
 
     //    channelSelector->setRadioStatus(true);
@@ -201,6 +201,15 @@ void ChannelMappingEditor::createElectrodeButtons(int numNeeded, bool clearPrevi
     channelSelector->setRadioStatus(true);
 
     refreshButtonLocations();
+
+    if (numNeeded > 100)
+    {
+        upButton->setVisible(true);
+        downButton->setVisible(true);
+    } else {
+        upButton->setVisible(false);
+        downButton->setVisible(false);
+    }
 }
 
 void ChannelMappingEditor::refreshButtonLocations()
@@ -484,6 +493,28 @@ void ChannelMappingEditor::buttonEvent(Button* button)
 
 
         }
+    } else if (button == upButton)
+    {
+
+        scrollDistance -= 1;
+
+        if (scrollDistance < 0)
+            scrollDistance = 0;
+
+        refreshButtonLocations();
+
+    } else if (button == downButton)
+    {
+
+        float maxScrollDistance = ceil(float(electrodeButtons.size() - 80) / 16.0f);
+        
+        scrollDistance += 1;
+
+        if (scrollDistance > maxScrollDistance)
+            scrollDistance = maxScrollDistance;
+
+        refreshButtonLocations();
+    
     }
 }
 
diff --git a/Source/Processors/Editors/ChannelMappingEditor.h b/Source/Processors/Editors/ChannelMappingEditor.h
index 1def1ca825b9e6182be3bacd6c5b5b6779c64684..d84126c82037d5716288cc13ed0373ccdd141131 100644
--- a/Source/Processors/Editors/ChannelMappingEditor.h
+++ b/Source/Processors/Editors/ChannelMappingEditor.h
@@ -83,6 +83,8 @@ private:
     ScopedPointer<ElectrodeEditorButton> selectAllButton;
     ScopedPointer<ElectrodeEditorButton> modifyButton;
     ScopedPointer<ElectrodeEditorButton> resetButton;
+    ScopedPointer<TriangleButton> upButton;
+    ScopedPointer<TriangleButton> downButton;
 
     Array<int> channelArray;
     Array<int> referenceArray;
diff --git a/Source/Processors/FileReader.cpp b/Source/Processors/FileReader.cpp
index d99534cc2e4806c0ae9e12842bd9e76e953c6b8f..b4c239f9b70163c23684173e2bdc6d794ef88259 100644
--- a/Source/Processors/FileReader.cpp
+++ b/Source/Processors/FileReader.cpp
@@ -73,7 +73,7 @@ float FileReader::getDefaultSampleRate()
 
 int FileReader::getDefaultNumOutputs()
 {
-    return 128;
+    return 16;
 }
 
 float FileReader::getDefaultBitVolts()