diff --git a/virtualsnack.py b/virtualsnack.py
index b36204a84ae7f59044d009377c06fa4b6e14aaa0..1d399e046e66d4960d10525e988b6cc6b907acf7 100755
--- a/virtualsnack.py
+++ b/virtualsnack.py
@@ -14,6 +14,15 @@ import string
 class ContainedMultiSelect(npyscreen.BoxTitle):
     _contained_widget = npyscreen.TitleMultiSelect
 
+class SnackButtonPress(npyscreen.MiniButtonPress):
+    def __init__(self, screen, when_pressed_function=None, when_pressed_callback=None, *args, **keywords):
+	super(SnackButtonPress, self).__init__(screen, *args, **keywords)
+	self.when_pressed_callback = when_pressed_callback
+
+    def whenPressed(self,key=None):
+	if self.when_pressed_callback:
+		self.when_pressed_callback(widget=self)
+
 class Switches:
     def __init__(self):
         self.misc_input = 0xff
@@ -48,20 +57,24 @@ class VirtualSnack(npyscreen.Form):
 	for keypad in range(0,10):
 		kpx = ((keypad % 4) * 6 ) + 3
 		kpy = int(keypad / 4) + 4
-		self.kpbuttons.append(self.add(npyscreen.MiniButton,name="%d"%keypad, relx = kpx, rely = kpy, value_changed_callback=self.parentApp.when_keypad_pressed))
+		widget = self.add(SnackButtonPress,name="%d"%keypad, relx = kpx, rely = kpy, when_pressed_callback=self.parentApp.when_keypad_pressed)
+		self.kpbuttons.append(widget)
+		self.add_handlers({"%d"%keypad: widget.whenPressed})
 		
-	self.reset= self.add(npyscreen.MiniButton,name="RESET",  relx = kpx + 7, rely = kpy, value_changed_callback=self.parentApp.when_reset_pressed)
+	self.reset=self.add(SnackButtonPress,name="RESET",  relx = kpx + 7, rely = kpy, when_pressed_callback=self.parentApp.when_reset_pressed)
+	self.add_handlers({"R": self.reset.whenPressed})
+	self.add_handlers({"r": self.reset.whenPressed})
 
 	self.dip = self.add(npyscreen.MultiSelect, name = "Door", max_width=15, relx = 4, rely = 12, max_height=4, value = [], values = ["DOOR"], scroll_exit=True, value_changed_callback=self.parentApp.when_door_toggled)
 
 	self.dip = self.add(npyscreen.MultiSelect, name = "DIP Switch", max_width=10, rely =3, relx = 35, max_height=10, value = [], values = ["DIP1", "DIP2", "DIP3","DIP4","DIP5","DIP6","DIP7","DIP8"], scroll_exit=True)
 
-	self.nickel= self.add(npyscreen.MiniButton,name="0.05", rely= 3, relx=50)
-	self.dime= self.add(npyscreen.MiniButton,name="0.10", relx=50)
-	self.quarter= self.add(npyscreen.MiniButton,name="0.25", relx=50)
-	self.dollar= self.add(npyscreen.MiniButton,name="1.00", relx=50)
+	self.nickel=self.add(SnackButtonPress,name="0.05", rely= 3, relx=50)
+	self.dime=self.add(SnackButtonPress,name="0.10", relx=50)
+	self.quarter=self.add(SnackButtonPress,name="0.25", relx=50)
+	self.dollar=self.add(SnackButtonPress,name="1.00", relx=50)
 
-	self.mode= self.add(npyscreen.MiniButton,name="MODE", relx=50)
+	self.mode=self.add(SnackButtonPress,name="MODE", relx=50)
 
 	
 	self.date_widget = self.add(npyscreen.FixedText, value=datetime.now().ctime(), editable=False, rely=18)