if isVertical:
                 dc.DrawLine(rect.x, coord, rect.x + rect.width, coord) 
             else:
-                dc.DrawLine(coord, rect.y, coord, rect.y + rect.width)
+                dc.DrawLine(coord, rect.y, coord, rect.y + rect.height)
                 
             rf += rstep
             gf += gstep
 
     def OnPaint(self, event):
         """ Handles the wx.EVT_PAINT event for ButtonPanel. """
-        
+
         dc = wx.BufferedPaintDC(self) 
         rect = self.GetClientRect()
 
         
     def OnMouseMove(self, event):
         """ Handles the wx.EVT_MOTION event for ButtonPanel. """
-        
+
         # Check to see if we are hovering a button
         tabId, flags = self.HitTest(event.GetPosition())
 
             self.RepaintOldSelection()
         
         if btn.GetRect().Contains(event.GetPosition()):
-            btn.SetStatus("Hover")
+            if btn.GetStatus() != "Pressed":
+                btn.SetStatus("Hover")
         else:
             btn.SetStatus("Normal")
 
                 btn.SetFocus(False)
                 
         if hit.GetStatus() == "Pressed": 
-            # Fire a button click event 
-            btnEvent = wx.CommandEvent(wx.wxEVT_COMMAND_BUTTON_CLICKED, hit.GetId())
-            self.GetEventHandler().ProcessEvent(btnEvent) 
-
             hit.SetToggled(not hit.GetToggled())
             
             # Update the button status to be hovered 
             hit.SetStatus("Hover")
             hit.SetFocus()
             self._currentButton = tabId
+
+            # Fire a button click event 
+            btnEvent = wx.CommandEvent(wx.wxEVT_COMMAND_BUTTON_CLICKED, hit.GetId())
+            self.GetEventHandler().ProcessEvent(btnEvent) 
             
 
     def OnMouseLeave(self, event):
         """ Handles the wx.EVT_LEAVE_WINDOW event for ButtonPanel. """
-        
+
         # Reset all buttons statuses
         for btn in self._vButtons:
             if not btn.IsEnabled():