 
     updateLeslieAmplifier();
     updateLeslieRotation();
-
     updatePercussionEnvelope();
     updateTonewheelVolumes();
+    updateVibrato();
+}
+
+enum {
+    ONE_TONEWHEEL,
+    ALL_DRAWBARS,
+    PERCUSSION,
+    VIBRATO,
+};
+
+void preset(int conf) {
+    reset();
+
+    switch (conf) {
+    case ONE_TONEWHEEL:
+        midiControl[CC_DRAWBAR_0 + 1] = 0;
+        midiControl[CC_DRAWBAR_0 + 2] = 0;
+        midiControl[CC_DRAWBAR_0 + 3] = 127;
+        midiControl[CC_DRAWBAR_0 + 4] = 0;
+        midiControl[CC_DRAWBAR_0 + 5] = 0;
+        midiControl[CC_DRAWBAR_0 + 6] = 0;
+        midiControl[CC_DRAWBAR_0 + 7] = 0;
+        midiControl[CC_DRAWBAR_0 + 8] = 0;
+        midiControl[CC_DRAWBAR_0 + 9] = 0;
+        break;
+    case ALL_DRAWBARS:
+        midiControl[CC_DRAWBAR_0 + 1] = 127;
+        midiControl[CC_DRAWBAR_0 + 2] = 127;
+        midiControl[CC_DRAWBAR_0 + 3] = 127;
+        midiControl[CC_DRAWBAR_0 + 4] = 127;
+        midiControl[CC_DRAWBAR_0 + 5] = 127;
+        midiControl[CC_DRAWBAR_0 + 6] = 127;
+        midiControl[CC_DRAWBAR_0 + 7] = 127;
+        midiControl[CC_DRAWBAR_0 + 8] = 127;
+        midiControl[CC_DRAWBAR_0 + 9] = 127;
+        break;
+    case PERCUSSION:
+	midiControl[CC_PERCUSSION] = 127;
+	midiControl[CC_PERCUSSION_THIRD] = 127;
+	break;
+    case VIBRATO:
+	midiControl[CC_VIBRATO] = 127;
+	midiControl[CC_VIBRATO_MODE] = 127;
+	midiControl[CC_ROTARY_STOP] = 127;
+	break;
+    }
+
+    updateLeslieAmplifier();
+    updateLeslieRotation();
+    updatePercussionEnvelope();
+    updateTonewheelVolumes();
+    updateVibrato();
 }
 
 void setup() {

    leslieL.gain(0, 0.70); // bass
    leslieL.gain(1, 0.30); // treble

    vibrato.setMode(Off);
    antialias.setLowpass(0, 6000, 0.707);

    audioShield.enable();
    audioShield.volume(0.5);

}

void updateLeslieAmplifier() {
    float k = remap((float)midiControl[CC_SPEAKER_DRIVE], 0, 127, 5.0, 50.0);
    preamp.setK(k);
    crossover.frequency(800);
    crossover.resonance(0.707);
}

void updateLeslieRotation() {
    // Reset some things that should be constant.
    leslieBassR.setTremoloDepth(0.3);
    leslieTrebleR.setTremoloDepth(0.1);
    leslieBassL.setTremoloDepth(0.3);
    leslieTrebleL.setTremoloDepth(0.1);

    // Vibrato in the AMFM blocks currently has some fizz artifacts.

    // These Leslie speeds are from
    // http://www.dairiki.org/HammondWiki/LeslieRotationSpeed
