diff -urN c0ntr0l.orig/c0ntr0l.py c0ntr0l/c0ntr0l.py
--- c0ntr0l.orig/c0ntr0l.py	2008-11-03 22:48:16.000000000 -0500
+++ c0ntr0l/c0ntr0l.py	2008-11-03 23:27:26.000000000 -0500
@@ -34,7 +34,7 @@
 #----------------------------------------------------------------------------
 
 ## import all of the wxPython GUI package
-from wxPython.wx import *
+from wx import *
 
 from Globals import *
 import model
@@ -62,7 +62,7 @@
 # in the back end (actions), and 2) Methods that are called by the software back end
 # to update the state of the GUI (outlets).
 #---------------------------------------------------------------------------
-class x0xc0ntr0l_App(wxApp):
+class x0xc0ntr0l_App(App):
 
     #
     # =================== Initialization =========================
@@ -92,7 +92,7 @@
         self.v = v
 
         # Return a success flag
-        return true
+        return True
 
     def OnExit(self):
         # Save the configuration to file and exit.
diff -urN c0ntr0l.orig/GraphicalInterface.py c0ntr0l/GraphicalInterface.py
--- c0ntr0l.orig/GraphicalInterface.py	2008-11-03 22:48:16.000000000 -0500
+++ c0ntr0l/GraphicalInterface.py	2008-11-03 23:13:19.000000000 -0500
@@ -39,7 +39,7 @@
 #
 
 from Globals import *
-from wxPython.wx import *
+from wx import *
 import wx.grid
 
 from PatternEditGrid import PatternEditGrid
@@ -54,51 +54,51 @@
 #
 # Widget ID definitions for the event handling system.
 #
-ID_MAIN_WINDOW = wxNewId()
+ID_MAIN_WINDOW = NewId()
 
-ID_FILE_EXIT = wxNewId() 
-ID_FILE_ABOUT = wxNewId()
+ID_FILE_EXIT = NewId() 
+ID_FILE_ABOUT = NewId()
 
-ID_EDIT_CUT = wxNewId()
-ID_EDIT_COPY = wxNewId()
-ID_EDIT_PASTE = wxNewId()
-ID_EDIT_SHIFTR = wxNewId()
-ID_EDIT_SHIFTL = wxNewId()
-
-ID_X0XB0X_UPLOAD_FIRMWARE = wxNewId()
-ID_X0XB0X_DUMP_EEPROM = wxNewId()
-ID_X0XB0X_RESTORE_EEPROM = wxNewId()
-ID_X0XB0X_ERASE_EEPROM = wxNewId()
-ID_X0XB0X_CONNECT = wxNewId()
-ID_X0XB0X_DISCONNECT = wxNewId()
-ID_X0XB0X_RECONNECT_SERIAL = wxNewId()
-ID_X0XB0X_REFRESH_SERIAL = wxNewId()
-ID_X0XB0X_PING = wxNewId()
+ID_EDIT_CUT = NewId()
+ID_EDIT_COPY = NewId()
+ID_EDIT_PASTE = NewId()
+ID_EDIT_SHIFTR = NewId()
+ID_EDIT_SHIFTL = NewId()
+
+ID_X0XB0X_UPLOAD_FIRMWARE = NewId()
+ID_X0XB0X_DUMP_EEPROM = NewId()
+ID_X0XB0X_RESTORE_EEPROM = NewId()
+ID_X0XB0X_ERASE_EEPROM = NewId()
+ID_X0XB0X_CONNECT = NewId()
+ID_X0XB0X_DISCONNECT = NewId()
+ID_X0XB0X_RECONNECT_SERIAL = NewId()
+ID_X0XB0X_REFRESH_SERIAL = NewId()
+ID_X0XB0X_PING = NewId()
 
-ID_PORTMENU = wxNewId()
+ID_PORTMENU = NewId()
 
 ID_SERIAL_PORT = 10000
 
 
-ID_PE_LOC_TEXT = wxNewId()
-ID_PE_BANK_TEXT = wxNewId()
-ID_LENGTH_TEXT = wxNewId()
-ID_TEMPO_TEXT = wxNewId()
-ID_TEMPO_SLIDER = wxNewId()
-ID_RUNSTOP_BUTTON = wxNewId()
-ID_SAVE_PATTERN_BUTTON = wxNewId()
-ID_PLAY_PATTERN_BUTTON = wxNewId()
-ID_LOAD_PATTERN_BUTTON = wxNewId()
-ID_PP_LOAD_BANK_BUTTON = wxNewId()
-ID_SYNC_CHOICE = wxNewId()
+ID_PE_LOC_TEXT = NewId()
+ID_PE_BANK_TEXT = NewId()
+ID_LENGTH_TEXT = NewId()
+ID_TEMPO_TEXT = NewId()
+ID_TEMPO_SLIDER = NewId()
+ID_RUNSTOP_BUTTON = NewId()
+ID_SAVE_PATTERN_BUTTON = NewId()
+ID_PLAY_PATTERN_BUTTON = NewId()
+ID_LOAD_PATTERN_BUTTON = NewId()
+ID_PP_LOAD_BANK_BUTTON = NewId()
+ID_SYNC_CHOICE = NewId()
 
 ## Create a new frame class, derived from the wxPython Frame.  This is where
 ## the main parts of the GUI are set up -- Specifically, the menus, toolbar
 ## and status window. 
 ##
-class MainWindow(wxFrame):
+class MainWindow(Frame):
     
-    def __init__(self, controller, title, style=wxDEFAULT_FRAME_STYLE|wxNO_FULL_REPAINT_ON_RESIZE):
+    def __init__(self, controller, title, style=DEFAULT_FRAME_STYLE|NO_FULL_REPAINT_ON_RESIZE):
         #
         # First, make a local pointer to the controller class so that we can refer to it later
         # when be begin connection actions.
@@ -118,9 +118,9 @@
         #
         # Call the base class' __init__ method to create the frame
         #
-        wxFrame.__init__(self, NULL, ID_MAIN_WINDOW, title, size = DEFAULT_MAINWINDOW_SIZE,
+        Frame.__init__(self, None, ID_MAIN_WINDOW, title, size = DEFAULT_MAINWINDOW_SIZE,
                          pos = position,
-                         style=(wxDEFAULT_FRAME_STYLE ^ wxRESIZE_BORDER) |wxNO_FULL_REPAINT_ON_RESIZE)
+                         style=(DEFAULT_FRAME_STYLE ^ RESIZE_BORDER) |NO_FULL_REPAINT_ON_RESIZE)
 
         EVT_CLOSE(self, self.OnCloseWindow)
 
@@ -129,7 +129,7 @@
         # me an entire afternoon one day to find it in the documentation...)  Don't
         # let this happen to you, kids.
         #
-        wxInitAllImageHandlers()
+        InitAllImageHandlers()
 
         #
         # Initialize various components of the GUI
@@ -150,7 +150,7 @@
         #
         # Once everything has been set up, show the frame.
         #
-        self.Show(true)
+        self.Show(True)
 
 
     #---------------------------------------------------------------------
@@ -163,13 +163,13 @@
         #
         # ==== The Logo and basic windw framework (labels and dividers) ====
         #
-        logo = wxStaticText(self, -1, "x0xb0x c0ntr0l", (378, 20))
-        font = wxFont(24, wxTELETYPE, wxNORMAL, wxNORMAL, faceName = "Courier")
+        logo = StaticText(self, -1, "x0xb0x c0ntr0l", (378, 20))
+        font = Font(24, TELETYPE, NORMAL, NORMAL, faceName = "Courier")
         logo.SetFont(font)
         logo.SetSize(logo.GetBestSize())
         logo.SetPosition((DEFAULT_MAINWINDOW_SIZE[0] - logo.GetSize()[0] - 20, 20))
 
-        biglabelfont = wxFont(14, wxTELETYPE, wxNORMAL, wxNORMAL, faceName = "Courier")
+        biglabelfont = Font(14, TELETYPE, NORMAL, NORMAL, faceName = "Courier")
 
         
 
@@ -177,10 +177,10 @@
         # ==== Pattern Edit Section ====
         #
 
-        divider1 = wxStaticLine(self, -1, pos = (15,55), size = (569,1), style = wxLI_HORIZONTAL)
+        divider1 = StaticLine(self, -1, pos = (15,55), size = (569,1), style = LI_HORIZONTAL)
 
         
-        label1 = wxStaticText(self, -1, "Pattern Edit", (20, 64))
+        label1 = StaticText(self, -1, "Pattern Edit", (20, 64))
         label1.SetFont(biglabelfont)
 
         #
@@ -191,14 +191,14 @@
         self.patternEditGrid = PatternEditGrid(self, loc)
 
         
-        labelfont = wxFont(11, wxDEFAULT, wxNORMAL, wxNORMAL)
-        smallfont = wxFont(8, wxDEFAULT, wxNORMAL, wxNORMAL)
+        labelfont = Font(11, DEFAULT, NORMAL, NORMAL)
+        smallfont = Font(8, DEFAULT, NORMAL, NORMAL)
 
         # Bank select control       
         bankStrings = []
         for i in range(1, NUMBER_OF_BANKS + 1):
             bankStrings.append(str(i))
-        self.pe_bankText = wxChoice(self, ID_PE_BANK_TEXT,
+        self.pe_bankText = Choice(self, ID_PE_BANK_TEXT,
                                     (71,
                                      self.patternEditGrid.GetPosition()[1] +
                                      self.patternEditGrid.GetSize()[1] + 15),
@@ -209,8 +209,8 @@
 
         self.Bind(wx.EVT_CHOICE, self.HandleChoiceAction, self.pe_bankText)
 
-        pe_label1 = wxStaticText(self, -1, "Bank:", (36, 228),
-                                 style = wxALIGN_RIGHT)
+        pe_label1 = StaticText(self, -1, "Bank:", (36, 228),
+                                 style = ALIGN_RIGHT)
         pe_label1.SetFont(labelfont)
         pe_label1.SetSize(pe_label1.GetBestSize())
         pe_label1.SetPosition((self.pe_bankText.GetPosition()[0] -
@@ -220,7 +220,7 @@
         
         # Location Select Control
 
-        pe_label2 = wxStaticText(self, -1, "Loc:", (18, 253), style = wxALIGN_RIGHT)
+        pe_label2 = StaticText(self, -1, "Loc:", (18, 253), style = ALIGN_RIGHT)
         pe_label2.SetFont(labelfont)
         pe_label2.SetSize(pe_label2.GetBestSize())
         pe_label2.SetPosition((self.pe_bankText.GetPosition()[0] + self.pe_bankText.GetSize()[0] + 15,
@@ -229,7 +229,7 @@
         locStrings = []
         for i in range(1, LOCATIONS_PER_BANK + 1):
             locStrings.append(str(i))
-        self.pe_locText = wxChoice(self, ID_PE_LOC_TEXT, 
+        self.pe_locText = Choice(self, ID_PE_LOC_TEXT, 
                                    (pe_label2.GetPosition()[0] + pe_label2.GetSize()[0] + 5,
                                     self.pe_bankText.GetPosition()[1]),
                                    (0,0),
@@ -242,7 +242,7 @@
         pattlenStrings = []
         for i in range(0, NOTES_IN_PATTERN + 1):
             pattlenStrings.append(str(i))
-        self.lengthText = wxChoice(self, ID_LENGTH_TEXT,
+        self.lengthText = Choice(self, ID_LENGTH_TEXT,
                                    (self.patternEditGrid.GetPosition()[0]+
                                     self.patternEditGrid.GetSize()[0] - 40,
                                     self.pe_bankText.GetPosition()[1]),
@@ -254,9 +254,9 @@
         
         self.Bind(wx.EVT_CHOICE, self.HandleChoiceAction, self.lengthText)
 
-        pe_label2 = wxStaticText(self, -1, "Pattern Length:",
+        pe_label2 = StaticText(self, -1, "Pattern Length:",
                                  (450, self.pe_bankText.GetPosition()[1]),
-                                 style = wxALIGN_RIGHT)
+                                 style = ALIGN_RIGHT)
         pe_label2.SetFont(labelfont)
         pe_label2.SetSize(pe_label2.GetBestSize())
 
@@ -268,7 +268,7 @@
 #        EVT_KEY_DOWN(self.lengthText, self.HandleKeyAction)
 
         # Play button
-        self.pe_PlayButton = wxButton(self, ID_PLAY_PATTERN_BUTTON,
+        self.pe_PlayButton = Button(self, ID_PLAY_PATTERN_BUTTON,
                                       "Play Pattern",
                                       (self.patternEditGrid.GetPosition()[0],
                                        self.lengthText.GetPosition()[1] +
@@ -280,7 +280,7 @@
         self.Bind(wx.EVT_BUTTON, self.HandleButtonAction, self.pe_PlayButton)
 
         # Save button
-        self.pe_SaveButton = wxButton(self, ID_SAVE_PATTERN_BUTTON,
+        self.pe_SaveButton = Button(self, ID_SAVE_PATTERN_BUTTON,
                                       "Save Pattern",
                                       (self.patternEditGrid.GetPosition()[0]+
                                        self.patternEditGrid.GetSize()[0] - 100,
@@ -298,11 +298,11 @@
         #
         # ==== Pattern Play Section ====
         #
-        #divider2 = wxStaticLine(self, -1,
+        #divider2 = StaticLine(self, -1,
         #                        pos = (15, self.pe_SaveButton.GetPosition()[1] +
         #                               self.pe_SaveButton.GetSize()[1] + 15),
-        #                        size = (569,1), style = wxLI_HORIZONTAL)
-        #label2 = wxStaticText(self, -1, "Pattern Play",
+        #                        size = (569,1), style = LI_HORIZONTAL)
+        #label2 = StaticText(self, -1, "Pattern Play",
         #                      (divider2.GetPosition()[0]+5,
         #                       divider2.GetPosition()[1]+5))
         #label2.SetFont(biglabelfont)
@@ -311,36 +311,36 @@
 
         # Man, couldnt you put this in the widget -- ada
         #for i in range(1,9):
-        #    wxStaticText(self, -1, str(i), (96 + (i-1)*515/8, 318))
-        #wxStaticText(self, -1, "Pattern:", (17, 362))
+        #    StaticText(self, -1, str(i), (96 + (i-1)*515/8, 318))
+        #StaticText(self, -1, "Pattern:", (17, 362))
         
 
         #
         # Other controls and buttons in the Pattern Play section
         #
-        #pp_button1 = wxButton(self, ID_RUNSTOP_BUTTON, "R/S");
+        #pp_button1 = Button(self, ID_RUNSTOP_BUTTON, "R/S");
         #pp_button1.SetFont(smallfont)
         #pp_button1.SetPosition((self.patternPlayGrid.GetPosition()[0] + 3,
         #                        self.patternPlayGrid.GetPosition()[1] +
         #                        self.patternPlayGrid.GetSize()[1] + 5))
         #pp_button1.SetSize((pp_button1.GetBestSize()[0],
         #                    pp_button1.GetBestSize()[1]- 5))
-        #pp_button2 = wxButton(self, ID_PP_LOAD_BANK_BUTTON, "Load", (518, 413), (66, 17))
+        #pp_button2 = Button(self, ID_PP_LOAD_BANK_BUTTON, "Load", (518, 413), (66, 17))
         #self.Bind(wx.EVT_BUTTON, self.HandleButtonAction, pp_button1)
         #self.Bind(wx.EVT_BUTTON, self.HandleButtonAction, pp_button2)
         
-        #pp_label1 = wxStaticText(self, -1, "Bank:", (436, 415), style = wxALIGN_RIGHT)
+        #pp_label1 = StaticText(self, -1, "Bank:", (436, 415), style = ALIGN_RIGHT)
         #pp_label1.SetFont(labelfont)
         #pp_label1.SetSize(pp_label1.GetBestSize())
 
         #textValidator = TextValidator(map(str, range(1, NUMBER_OF_BANKS + 1))) 
-        #self.pp_bankSelect = wxTextCtrl(self, -1, "1", (476,412), (39,19),
-        #                                style = (wxTE_PROCESS_ENTER),
+        #self.pp_bankSelect = TextCtrl(self, -1, "1", (476,412), (39,19),
+        #                                style = (TE_PROCESS_ENTER),
         #                                validator = textValidator)
 
-        divider3 = wxStaticLine(self, -1, pos = (15,self.pe_SaveButton.GetPosition()[1]+50), size = (569,1),
-                                style = wxLI_HORIZONTAL)
-        label3 = wxStaticText(self, -1, "Global Parameters",
+        divider3 = StaticLine(self, -1, pos = (15,self.pe_SaveButton.GetPosition()[1]+50), size = (569,1),
+                                style = LI_HORIZONTAL)
+        label3 = StaticText(self, -1, "Global Parameters",
                               (divider3.GetPosition()[0]+5, divider3.GetPosition()[1]+10))
         label3.SetFont(biglabelfont)
         
@@ -348,21 +348,21 @@
         # The tempo and sync source controls appear in the very bottom of the
         # window.
         #
-        tempoLabel = wxStaticText(self, -1, "Tempo:",
+        tempoLabel = StaticText(self, -1, "Tempo:",
                                  (label3.GetPosition()[0]+10,
                                   label3.GetPosition()[1]+label3.GetSize()[1]+15),
-                                 style = wxALIGN_LEFT)
+                                 style = ALIGN_LEFT)
         tempoLabel.SetFont(labelfont)
         tempoLabel.SetSize(tempoLabel.GetBestSize())
 
 #        textValidator = TextValidator(map(str, range(1, NOTES_IN_PATTERN + 1)))        
-        self.tempoText = wxTextCtrl(self, ID_TEMPO_TEXT, '0',
+        self.tempoText = TextCtrl(self, ID_TEMPO_TEXT, '0',
                                     (tempoLabel.GetPosition()[0]+tempoLabel.GetSize()[0]+5,
                                      tempoLabel.GetPosition()[1]), (39,19),
-                                     style = (wxTE_PROCESS_ENTER))
+                                     style = (TE_PROCESS_ENTER))
         #self.Bind(wx.EVT_TEXT_ENTER, self.HandleTextEnterEvent)
 
-        self.tempoSlider = wxSlider(self, id=ID_TEMPO_SLIDER, minValue = 20, maxValue=300,
+        self.tempoSlider = Slider(self, id=ID_TEMPO_SLIDER, minValue = 20, maxValue=300,
                                     pos=(self.tempoText.GetPosition()[0] + 50,
                                          self.tempoText.GetPosition()[1]),
                                     name="Tempo")
@@ -371,12 +371,12 @@
         self.Bind(wx.EVT_SLIDER, self.HandleSlider, self.tempoSlider)
         
 
-        #syncText = wxStaticText(self, -1, "Select sync mode:", (350, 486), style = wxALIGN_LEFT)
+        #syncText = StaticText(self, -1, "Select sync mode:", (350, 486), style = ALIGN_LEFT)
         #syncText.SetFont(labelfont)
         #syncText.SetSize(syncText.GetBestSize())
         
         #syncList = [SYNCMSG_OUT, SYNCMSG_IN_MIDI, SYNCMSG_IN_DIN]
-        #self.syncChoice = wxChoice(self, ID_SYNC_CHOICE, (454, 484), choices = syncList)
+        #self.syncChoice = Choice(self, ID_SYNC_CHOICE, (454, 484), choices = syncList)
         #self.Bind(wx.EVT_CHOICE, self.HandleChoiceAction, self.syncChoice)
         #self.syncChoice.SetSelection(0)
 
@@ -395,8 +395,8 @@
         # Use some sizers to help keep everything in the window nicely proportioned
         # if the window is resized.
         #
-        self.sizer = wxBoxSizer(wxVERTICAL)
-#        self.sizer.Add(self.splitter, 1, wxEXPAND)
+        self.sizer = BoxSizer(VERTICAL)
+#        self.sizer.Add(self.splitter, 1, EXPAND)
         self.SetSizer(self.sizer)
         self.SetAutoLayout(1)
 
@@ -404,15 +404,15 @@
     #
     # Set up a basic menu bar.  
     def SetupMenubar(self):
-        menubar = wxMenuBar()
+        menubar = MenuBar()
         self.MenuBar = menubar
         
-        self.aboutmenu = wxMenu()
+        self.aboutmenu = Menu()
         self.aboutmenu.Append(ID_FILE_ABOUT, "About", "About This Program")
         self.aboutmenu.Append(ID_FILE_EXIT, "Quit\tCTRL-Q", "Exit the Program")
         menubar.Append(self.aboutmenu, "File")
 
-        self.editmenu = wxMenu()
+        self.editmenu = Menu()
         #self.editmenu.Append(ID_EDIT_CUT, "Cut Pattern\tCTRL_X", "Cut pattern from EEPROM")
         self.editmenu.Append(ID_EDIT_COPY, "Copy Pattern\tCTRL-C", "Copy pattern from EEPROM")
         self.editmenu.Append(ID_EDIT_PASTE, "Paste Pattern\tCTRL-V", "Paste pattern to EEPROM")
@@ -421,7 +421,7 @@
         self.editmenu.Append(ID_EDIT_SHIFTL, "Shift Left\tSHIFT-ARROW-LEFT", "Shift pattern one step to the left")
         menubar.Append(self.editmenu, "Edit")
         
-        self.x0xmenu = wxMenu()
+        self.x0xmenu = Menu()
         self.x0xmenu.Append(ID_X0XB0X_UPLOAD_FIRMWARE, "Upload firmware...\tCTRL-U", "Upload a new .HEX file to the x0xb0x firmware")
         self.x0xmenu.AppendSeparator()
         self.x0xmenu.Append(ID_X0XB0X_DUMP_EEPROM, "Backup EEPROM", "Backup EEPROM to the hard disk")
@@ -430,8 +430,8 @@
         self.x0xmenu.Append(ID_X0XB0X_ERASE_EEPROM, "Erase EEPROM", "Erase the patterns on your x0xb0x.")
         menubar.Append(self.x0xmenu, "x0xb0x")
 
-        self.serialmenu = wxMenu()
-        self.portMenu = wx.Menu()
+        self.serialmenu = Menu()
+        self.portMenu = Menu()
         self.serialmenu.Append(ID_X0XB0X_RECONNECT_SERIAL, "Reconnect serial port\tCTRL-R")
         self.serialmenu.Append(ID_X0XB0X_PING, "Send serial ping\tCTRL-P")
         self.serialmenu.AppendSeparator()
@@ -491,7 +491,7 @@
     def AboutBox(self):
         aboutString = ('(c) 2005 Michael Broxton & Limor Fried.\n\n' +
                        'For more information about the x0xb0x, check out http://www.ladyada.net/make/x0xb0x\n')
-        dlg = wxMessageDialog(self, aboutString, 'x0xb0x c0ntr0l', wxOK | wxICON_INFORMATION) 
+        dlg = MessageDialog(self, aboutString, 'x0xb0x c0ntr0l', OK | ICON_INFORMATION) 
         dlg.ShowModal() 
         dlg.Destroy()
 
@@ -629,11 +629,11 @@
             # whether or not to save changes.
             #
             if self.pe_SaveButton.IsEnabled():
-                dlg = wxMessageDialog(self,
+                dlg = MessageDialog(self,
                                       message = 'You have made changes to this pattern.  Would you like to save your changes?',
                                       caption = "Save Pattern?",
-                                      style = (wxICON_EXCLAMATION | wxYES_NO | wxYES_DEFAULT))
-                if dlg.ShowModal() == wxID_YES:
+                                      style = (ICON_EXCLAMATION | YES_NO | YES_DEFAULT))
+                if dlg.ShowModal() == ID_YES:
                     if self.SavePattern():
                         # If the pattern can be saved, load the pattern
                         self.LoadPattern()
@@ -726,7 +726,7 @@
                         
             
         elif event.GetId() == ID_X0XB0X_UPLOAD_FIRMWARE:
-            d = wxFileDialog(self, 'Choose a x0xb0x firmware file', style = wxOPEN, wildcard = "HEX files (*.hex)|*.hex|All files (*.*)|*.*")
+            d = FileDialog(self, 'Choose a x0xb0x firmware file', style = OPEN, wildcard = "HEX files (*.hex)|*.hex|All files (*.*)|*.*")
             d.ShowModal()
             if len(d.GetPath()) != 0:
                 try:
@@ -734,10 +734,10 @@
                     self.controller.uploadHexfile(d.GetPath())
                     self.controller.closeSerialPort()
                 except Exception, e:
-                    errorDialog = wxMessageDialog(self,
+                    errorDialog = MessageDialog(self,
                                                   message = 'The following exception occured while programming the flash memory on the x0xb0x:\n\nException: ' + str(e),
                                                   caption = 'Firmware Programming Error',
-                                                  style = wxOK)
+                                                  style = OK)
                     errorDialog.ShowModal()
 
 
@@ -745,7 +745,7 @@
             #
             # Dump eeprom
             #
-            d = wxFileDialog(self, 'Save EEPROM image to...', style = wxSAVE, wildcard = "x0xb0x pattern files (*.xbp)|*.xbp|All files (*.*)|*.*")
+            d = FileDialog(self, 'Save EEPROM image to...', style = SAVE, wildcard = "x0xb0x pattern files (*.xbp)|*.xbp|All files (*.*)|*.*")
             d.ShowModal()
             if len(d.GetPath()) != 0:
                 self.controller.backupAllPatterns(d.GetPath())
@@ -754,7 +754,7 @@
             #
             # Restore EEPROM
             #
-            d = wxFileDialog(self, 'Choose a x0xb0x EEPROM image file', style = wxOPEN, wildcard = "x0xb0x pattern files (*.xbp)|*.xbp|All files (*.*)|*.*")
+            d = FileDialog(self, 'Choose a x0xb0x EEPROM image file', style = OPEN, wildcard = "x0xb0x pattern files (*.xbp)|*.xbp|All files (*.*)|*.*")
             d.ShowModal()
             if len(d.GetPath()) != 0:
                 self.controller.restoreAllPatterns(d.GetPath())
@@ -762,12 +762,12 @@
             self.LoadPattern()
 
         elif event.GetId() == ID_X0XB0X_ERASE_EEPROM:
-            dlg = wxMessageDialog(self,
+            dlg = MessageDialog(self,
                                   message = 'You are about to erase all of the patterns on your x0xb0x.  Are you sure you want to proceed?',
                                   caption = "WARNING",
-                                  style = (wxICON_EXCLAMATION | wxYES_NO | wxNO_DEFAULT))
+                                  style = (ICON_EXCLAMATION | YES_NO | NO_DEFAULT))
             
-            if dlg.ShowModal() == wxID_YES:
+            if dlg.ShowModal() == ID_YES:
                 self.controller.eraseAllPatterns()
             else:
                 pass
diff -urN c0ntr0l.orig/PatternEditGrid.py c0ntr0l/PatternEditGrid.py
--- c0ntr0l.orig/PatternEditGrid.py	2008-11-03 22:48:16.000000000 -0500
+++ c0ntr0l/PatternEditGrid.py	2008-11-03 23:47:12.000000000 -0500
@@ -1,4 +1,4 @@
-from wxPython.wx import *
+from wx import *
 from Globals import *
 from pattern import Pattern
 import wx.grid as gridlib
@@ -38,13 +38,13 @@
         #
         self.columnLabels = []
         for i in range(0, NOTES_IN_PATTERN):
-            self.columnLabels.append(wxStaticText(parent, -1,
+            self.columnLabels.append(StaticText(parent, -1,
                                                   str(i + 1),
                                                   (position[0] + 12 + (i)*507/16, position[1] - 19)))
 
-        wxStaticText(parent, -1, "Notes:", (position[0] - 46, position[1] + 8))
-#        wxStaticText(parent, -1, "Lengths:", (position[0] - 59, position[1] + 34))
-        wxStaticText(parent, -1, "Effects:", (position[0] - 50, position[1] + 60))
+        StaticText(parent, -1, "Notes:", (position[0] - 46, position[1] + 8))
+#       xStaticText(parent, -1, "Lengths:", (position[0] - 59, position[1] + 34))
+        StaticText(parent, -1, "Effects:", (position[0] - 50, position[1] + 60))
 
         #
         # Create a wxGrid GUI object and configure it to show the pattern
@@ -54,11 +54,11 @@
         self.SetColLabelSize(0)
         self.SetRowLabelSize(0)
         self.SetMargins(-100, -100)
-        self.SetDefaultCellAlignment(wxALIGN_CENTER, wxALIGN_CENTER)
+        self.SetDefaultCellAlignment(ALIGN_CENTER, ALIGN_CENTER)
         self.EnableEditing(False)
         self.DisableDragGridSize()
 
-        self.noteBitmap = wxBitmap('resources/sixteenth.gif', wxBITMAP_TYPE_GIF)
+        self.noteBitmap = Bitmap('resources/sixteenth.gif', BITMAP_TYPE_GIF)
         self.length = NOTES_IN_PATTERN
 
         #
@@ -103,14 +103,14 @@
         # the bottom row, and vice versa.  The middle row wraps
         # to itself.
         #
-        if (evt.KeyCode() == WXK_RETURN or
-            evt.KeyCode() == WXK_SPACE or
-            evt.KeyCode() == WXK_TAB):
+        if (evt.KeyCode == WXK_RETURN or
+            evt.KeyCode == WXK_SPACE or
+            evt.KeyCode == WXK_TAB):
             
             self.MoveRightWithSpecialWrap()
             handled = True
             
-        elif evt.KeyCode() == WXK_BACK:
+        elif evt.KeyCode == WXK_BACK:
             self.MoveLeftWithSpecialWrap()
             handled = True
 
@@ -119,15 +119,15 @@
         # can wrap around the grid when you push up against either
         # side.
         #
-        elif evt.KeyCode() == WXK_RIGHT:
+        elif evt.KeyCode == WXK_RIGHT:
             self.MoveRightWithWrap()
             handled = True
 
-        elif evt.KeyCode() == WXK_LEFT:
+        elif evt.KeyCode == WXK_LEFT:
             self.MoveLeftWithWrap()
             handled = True
 
-        elif ((evt.KeyCode() == ord('r')) or (evt.KeyCode() == ord('R'))) and (self.GetGridCursorCol() < self.length):
+        elif ((evt.KeyCode == ord('r')) or (evt.KeyCode == ord('R'))) and (self.GetGridCursorCol() < self.length):
             self.SetNoteToRest(self.GetGridCursorCol())
             self.MoveRightWithWrap()
             handled = True
@@ -141,7 +141,7 @@
             if (not evt.ShiftDown()):
                 # Process lowercase keystrokes, which produce natural notes
                 for keyChar in NoteKeymapDict.keys():
-                    if evt.KeyCode() == ord(keyChar) and (self.GetGridCursorCol() < self.length):
+                    if evt.KeyCode == ord(keyChar) and (self.GetGridCursorCol() < self.length):
                         self.SetCellValue(NOTE_ROW,
                                           self.GetGridCursorCol(),
                                           NoteKeymapDict[keyChar])
@@ -153,7 +153,7 @@
             else:
                 # Process Capital keystrokes, which create notes with sharps
                 for keyChar in SharpKeymapDict.keys():
-                    if evt.KeyCode() == ord(keyChar) and (self.GetGridCursorCol() < self.length):
+                    if evt.KeyCode == ord(keyChar) and (self.GetGridCursorCol() < self.length):
                         self.SetCellValue(NOTE_ROW,
                                           self.GetGridCursorCol(),
                                           SharpKeymapDict[keyChar])
@@ -168,7 +168,7 @@
         #
         if (self.GetGridCursorRow() == EFFECT_ROW) and (self.GetCellValue(GRAPHIC_ROW, self.GetGridCursorCol()) == '1'):
             for keyChar in EffectKeymapList:
-                if evt.KeyCode() == ord(keyChar):
+                if evt.KeyCode == ord(keyChar):
                     self.toggleEffect(keyChar, self.GetGridCursorCol())
                     handled = True
                     # Notify the parent window that the grid was editted
@@ -286,7 +286,7 @@
         self.SetCellRenderer(GRAPHIC_ROW, col, NoteRenderer(self.noteBitmap))
         self.SetCellValue(EFFECT_ROW, col, ' ')
 
-        colorDB = wxColourDatabase()
+        colorDB = ColourDatabase()
         LIGHT_BLUE = colorDB.Find('LIGHT BLUE')
 
         for i in range(0,3):
@@ -302,7 +302,7 @@
         self.SetCellValue(EFFECT_ROW, col, ' ')
 
         for i in range(0,3):
-            self.SetCellBackgroundColour(i, col, wxLIGHT_GREY)
+            self.SetCellBackgroundColour(i, col, LIGHT_GREY)
 
         self.columnLabels[col].Show(False)
 
@@ -440,9 +440,9 @@
         self.noteBitmap = noteBitmap
 
     def Draw(self, grid, attr, dc, rect, row, col, isSelected):
-        dc.SetBackgroundMode(wxSOLID)
-        dc.SetBrush(wxBrush(wxWHITE, wxSOLID))
-        dc.SetPen(wxTRANSPARENT_PEN)
+        dc.SetBackgroundMode(SOLID)
+        dc.SetBrush(Brush(WHITE, SOLID))
+        dc.SetPen(TRANSPARENT_PEN)
         dc.DrawRectangleRect(rect)
         if grid.GetCellValue(row,col) != str(0):
             dc.DrawBitmap(self.noteBitmap, rect.x, rect.y, True)
@@ -450,7 +450,7 @@
     def GetBestSize(self, grid, attr, dc, row, col):
         w = self.noteBitmap.GetWidth()
         h = self.noteBitmap.GetHeight()
-        return wxSize(w, h)
+        return Size(w, h)
 
     def Clone(self):
         return NoteRenderer(self.noteBitmap)
diff -urN c0ntr0l.orig/PatternPlayGrid.py c0ntr0l/PatternPlayGrid.py
--- c0ntr0l.orig/PatternPlayGrid.py	2008-11-03 22:48:16.000000000 -0500
+++ c0ntr0l/PatternPlayGrid.py	2008-11-03 22:51:20.000000000 -0500
@@ -1,4 +1,4 @@
-from wxPython.wx import *
+from wx import *
 from Globals import *
 import wx.grid as gridlib
 
diff -urN c0ntr0l.orig/view.py c0ntr0l/view.py
--- c0ntr0l.orig/view.py	2008-11-03 22:48:16.000000000 -0500
+++ c0ntr0l/view.py	2008-11-03 23:30:25.000000000 -0500
@@ -32,7 +32,7 @@
     #
     def updateSerialStatus(self, state):
         try:
-            if state == TRUE:
+            if state == True:
                 self.mainWindow.statusBar.SetStatusText("Serial Port: Connected", 1)
             else:
                 self.mainWindow.statusBar.SetStatusText("Serial Port: Disconnected", 1)
