diff -Naur hydrogen-0.9.3/src/gui/PreferencesDialog.cpp hydrogen-0.9.3-suspedalerase/src/gui/PreferencesDialog.cpp
--- hydrogen-0.9.3/src/gui/PreferencesDialog.cpp	2005-10-17 18:32:04.000000000 -0400
+++ hydrogen-0.9.3-suspedalerase/src/gui/PreferencesDialog.cpp	2006-02-21 23:08:13.000000000 -0500
@@ -87,7 +87,8 @@
 	}
 
 	m_pIgnoreNoteOffCheckBox->setChecked( pPref->m_bMidiNoteOffIgnore );
-
+	m_pSusPedalEraseModeCheckBox->setChecked( pPref->m_bSusPedalEraseMode );
+	
 	updateDriverInfo();
 
 
@@ -305,7 +306,8 @@
 	}
 
 	pPref->m_bMidiNoteOffIgnore = m_pIgnoreNoteOffCheckBox->isChecked();
-
+	pPref->m_bSusPedalEraseMode = m_pSusPedalEraseModeCheckBox->isChecked();
+	
 	// Mixer falloff
 	QString falloffStr = mixerFalloffComboBox->currentText().latin1();
 	if ( falloffStr== trUtf8("Slow") ) {
diff -Naur hydrogen-0.9.3/src/gui/UI/PreferencesDialog_UI.ui hydrogen-0.9.3-suspedalerase/src/gui/UI/PreferencesDialog_UI.ui
--- hydrogen-0.9.3/src/gui/UI/PreferencesDialog_UI.ui	2005-10-17 18:32:04.000000000 -0400
+++ hydrogen-0.9.3-suspedalerase/src/gui/UI/PreferencesDialog_UI.ui	2006-02-21 23:05:54.000000000 -0500
@@ -776,6 +776,22 @@
                         <string>Ignore note-off</string>
                     </property>
                 </widget>
+                <widget class="QCheckBox">
+                    <property name="name">
+                        <cstring>m_pSusPedalEraseModeCheckBox</cstring>
+                    </property>
+                    <property name="geometry">
+                        <rect>
+                            <x>10</x>
+                            <y>160</y>
+                            <width>450</width>
+                            <height>20</height>
+                        </rect>
+                    </property>
+                    <property name="text">
+                        <string>Enable sustain pedal erase mode</string>
+                    </property>
+                </widget>
             </widget>
         </widget>
         <widget class="QWidget">
diff -Naur hydrogen-0.9.3/src/lib/drivers/AlsaMidiDriver.cpp hydrogen-0.9.3-suspedalerase/src/lib/drivers/AlsaMidiDriver.cpp
--- hydrogen-0.9.3/src/lib/drivers/AlsaMidiDriver.cpp	2005-10-17 18:32:04.000000000 -0400
+++ hydrogen-0.9.3-suspedalerase/src/lib/drivers/AlsaMidiDriver.cpp	2006-02-22 00:16:05.000000000 -0500
@@ -213,6 +213,8 @@
 
 				case SND_SEQ_EVENT_CONTROLLER:
 					msg.m_type = MidiMessage::CONTROL_CHANGE;
+                                        msg.m_nData1 = ev->data.control.param;
+                                        msg.m_nData2 = ev->data.control.value;
 					break;
 
 				case SND_SEQ_EVENT_SYSEX:
diff -Naur hydrogen-0.9.3/src/lib/drivers/MidiDriver.cpp hydrogen-0.9.3-suspedalerase/src/lib/drivers/MidiDriver.cpp
--- hydrogen-0.9.3/src/lib/drivers/MidiDriver.cpp	2005-10-17 18:32:04.000000000 -0400
+++ hydrogen-0.9.3-suspedalerase/src/lib/drivers/MidiDriver.cpp	2006-02-21 23:01:41.000000000 -0500
@@ -32,6 +32,12 @@
  , m_bActive( false )
 {
 	infoLog( "INIT" );
+     // initialize the suspedal erase stufff.. is this really the best place for this?
+
+	Hydrogen *pEngine = Hydrogen::getInstance();
+        
+        for (int i=0;i<256;i++) pEngine->setInstStatus(i,false);
+        pEngine->setEraseMode(false);
 }
 
 
@@ -63,8 +69,12 @@
 			break;
 
 		case MidiMessage::CONTROL_CHANGE:
-			errorLog( "[handleMidiMessage] CONTROL_CHANGE event not handled yet" );
-			break;
+			errorLog( "[handleMidiMessage] CONTROL_CHANGE event handled by erase mode" );
+			if (msg.m_nData1 == 64) // it's sus pedal
+			{	if (msg.m_nData2 == 127) Hydrogen::getInstance()->setEraseMode(true);
+				if (msg.m_nData2 == 0) Hydrogen::getInstance()->setEraseMode(false);
+                        }
+		break;
 
 		case MidiMessage::PROGRAM_CHANGE:
 			errorLog( "[handleMidiMessage] PROGRAM_CHANGE event not handled yet" );
@@ -118,6 +128,7 @@
 	int nMidiChannelFilter = Preferences::getInstance()->m_nMidiChannelFilter;
 	int nChannel = msg.m_nChannel;
 	int nNote = msg.m_nData1;
+	int nInstrument = nNote - 36;
 	float fVelocity = msg.m_nData2 / 127.0;
 
 	if ( fVelocity == 0 ) {
@@ -131,6 +142,8 @@
 	}
 
 	Hydrogen *pEngine = Hydrogen::getInstance();
+	pEngine->setInstStatus(nInstrument,true);
+
 
 	bool bPatternSelect = false;
 
@@ -162,16 +175,22 @@
 
 void MidiDriver::handleNoteOffMessage( const MidiMessage& msg )
 {
+
+	Hydrogen *pEngine = Hydrogen::getInstance();
+	int nNote = msg.m_nData1;
+	int nInstrument = nNote - 36;
+
+	pEngine->setInstStatus(nInstrument,false);
+
 	infoLog( "[handleNoteOffMessage]" );
 	if ( Preferences::getInstance()->m_bMidiNoteOffIgnore ) {
 		return;
 	}
 
-	Hydrogen *pEngine = Hydrogen::getInstance();
+
 	Song *pSong = pEngine->getSong();
 
-	int nNote = msg.m_nData1;
-	int nInstrument = nNote - 36;
+
 	if ( nInstrument < 0 ) {
 		nInstrument = 0;
 	}
diff -Naur hydrogen-0.9.3/src/lib/Hydrogen.cpp hydrogen-0.9.3-suspedalerase/src/lib/Hydrogen.cpp
--- hydrogen-0.9.3/src/lib/Hydrogen.cpp	2006-01-06 09:15:50.000000000 -0500
+++ hydrogen-0.9.3-suspedalerase/src/lib/Hydrogen.cpp	2006-02-21 22:50:34.000000000 -0500
@@ -1636,7 +1636,16 @@
 
 						Note *pCopiedNote = new Note( pNote->getInstrument(), tick, fVelocity, pNote->m_fPan_L, pNote->m_fPan_R, pNote->m_nLength, pNote->m_fPitch );
 						pCopiedNote->m_nHumanizeDelay = nOffset;	// humanize time
-						m_songNoteQueue.push_back( pCopiedNote );
+						int nInstrument = m_pSong->getInstrumentList()->getPos( pNote->getInstrument() );
+
+              			                if  ( (hydrogenInstance->getEraseMode() == true) && (hydrogenInstance->getInstStatus(nInstrument)==true))
+	                          		{ 
+                                          		// erase it via suspedal
+                                          		delete pNote; 
+							pSequence->m_noteList[ m_nPatternTickPosition ]=NULL;
+                                      		} else m_songNoteQueue.push_back( pCopiedNote );
+ 						m_pSong->m_bIsModified = true;
+                        			EventQueue::getInstance()->pushEvent( EVENT_PATTERN_MODIFIED, -1 );
 					}
 				}
 			}
@@ -2166,7 +2175,7 @@
 				hearnote = true;
 			}
 		}
-		else if (!pref->getRecordEvents()) {
+		else if (!pref->getRecordEvents() || getEraseMode()) {
 			if ( pref->getHearNewNotes() && (getState() == STATE_READY || getState() == STATE_PLAYING )) {
 				hearnote = true;
 			}
@@ -2190,6 +2199,8 @@
 		hearnote = true;
 	}
 
+if (getEraseMode()) hearnote=false;
+
 	if (hearnote && instrRef) {
 		Note *note2 = new Note( instrRef, realcolumn, velocity, pan_L, pan_R, -1, 0);
 		noteOn( note2 );
@@ -2773,3 +2784,27 @@
 	EventQueue::getInstance()->pushEvent( EVENT_SELECTED_INSTRUMENT_CHANGED, -1 );
 }
 
+bool Hydrogen::getEraseMode( void )
+{
+	Preferences *pref = Preferences::getInstance();
+	return (m_bEraseMode && pref->getRecordEvents() && pref->m_bSusPedalEraseMode);
+}
+
+void Hydrogen::setEraseMode( bool new_Erase)
+{
+	m_bEraseMode = new_Erase;
+}
+
+// get/set InstStatus just maintains a record of whether a given instrument (i.e. midinote-36)
+// is 'on' -- so the 'erase on suspedal' code knows what it's erasing
+bool Hydrogen::getInstStatus( int which_note )
+{
+	return m_NoteStatus[which_note]; 
+}
+
+void Hydrogen::setInstStatus( int new_Note,bool stat)
+{
+	m_NoteStatus[new_Note]=stat;
+}
+
+
diff -Naur hydrogen-0.9.3/src/lib/Hydrogen.h hydrogen-0.9.3-suspedalerase/src/lib/Hydrogen.h
--- hydrogen-0.9.3/src/lib/Hydrogen.h	2005-10-17 18:32:04.000000000 -0400
+++ hydrogen-0.9.3-suspedalerase/src/lib/Hydrogen.h	2006-02-21 22:51:37.000000000 -0500
@@ -142,6 +142,11 @@
 		int getSelectedInstrumentNumber();
 		void setSelectedInstrumentNumber( int nInstrument );
 
+ 		void setEraseMode(bool);
+ 		void setInstStatus(int,bool);
+                bool getEraseMode(void);
+                bool getInstStatus(int);
+
 	private:
 		static Hydrogen* instance;
 
@@ -154,6 +159,9 @@
 		bool m_bOldUseTrackOuts;
 		bool m_bOldLoopEnabled;
 
+                bool m_bEraseMode;
+                bool m_NoteStatus[256];
+
 };
 
 
diff -Naur hydrogen-0.9.3/src/lib/Preferences.cpp hydrogen-0.9.3-suspedalerase/src/lib/Preferences.cpp
--- hydrogen-0.9.3/src/lib/Preferences.cpp	2005-11-10 13:00:07.000000000 -0500
+++ hydrogen-0.9.3-suspedalerase/src/lib/Preferences.cpp	2006-02-21 22:54:23.000000000 -0500
@@ -253,6 +253,7 @@
 					m_sMidiPortName = LocalFileMng::readXmlString( this, midiDriverNode, "port_name", "None" );
 					m_nMidiChannelFilter = LocalFileMng::readXmlInt( this, midiDriverNode, "channel_filter", -1 );
 					m_bMidiNoteOffIgnore = LocalFileMng::readXmlBool( this, midiDriverNode, "ignore_note_off", true );
+					m_bSusPedalEraseMode = LocalFileMng::readXmlBool( this, midiDriverNode, "suspedal_erase_mode", true );
 				}
 
 
@@ -277,6 +278,9 @@
 
 					// ignore note off
 					m_bIgnoreMidiNoteOff = LocalFileMng::readXmlBool( this, alsaMidiDriverNode, "ignoreMidiNoteOff", m_bIgnoreMidiNoteOff );
+					
+					// sustain pedal erase mode
+					m_bSusPedalEraseMode = LocalFileMng::readXmlBool( this, alsaMidiDriverNode, "suspedal_erase_mode", m_bIgnoreMidiNoteOff );
 				}
 */
 			}
@@ -516,6 +520,12 @@
 			else {
 				LocalFileMng::writeXmlString( &midiDriverNode, "ignore_note_off", "false" );
 			}
+			if ( m_bSusPedalEraseMode ) {
+				LocalFileMng::writeXmlString( &midiDriverNode, "suspedal_erase_mode", "true" );
+			}
+			else {
+				LocalFileMng::writeXmlString( &midiDriverNode, "suspedal_erase_mode", "false" );
+			}
 		}
 		audioEngineNode.InsertEndChild( midiDriverNode );
 
@@ -532,8 +542,15 @@
 			string sIgnore = "false";
 			if (m_bIgnoreMidiNoteOff) {
 				sIgnore = "true";
-			}
+			
 			LocalFileMng::writeXmlString( &alsaMidiDriverNode, "ignoreMidiNoteOff", sIgnore );
+
+			// Sustain Pedal erase mode
+			string sSuspedal_erase = "false";
+			if (m_bSusPedalEraseMode) {
+				sSuspedal_erase = "true";
+			
+			LocalFileMng::writeXmlString( &alsaMidiDriverNode, "suspedal_erase_mode", sSuspedal_erase );
 		}
 		audioEngineNode.InsertEndChild( alsaMidiDriverNode );
 */
diff -Naur hydrogen-0.9.3/src/lib/Preferences.h hydrogen-0.9.3-suspedalerase/src/lib/Preferences.h
--- hydrogen-0.9.3/src/lib/Preferences.h	2005-10-17 18:32:04.000000000 -0400
+++ hydrogen-0.9.3-suspedalerase/src/lib/Preferences.h	2006-02-21 22:54:23.000000000 -0500
@@ -144,6 +144,7 @@
 		std::string m_sMidiPortName;
 		int m_nMidiChannelFilter;
 		bool m_bMidiNoteOffIgnore;
+                bool m_bSusPedalEraseMode;
 
 		//___  alsa audio driver properties ___
 		string m_sAlsaAudioDevice;
