diff --git a/data/glade/message_window.glade b/data/glade/message_window.glade
index 161863e39..887c62a01 100644
--- a/data/glade/message_window.glade
+++ b/data/glade/message_window.glade
@@ -600,8 +600,6 @@
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
                                 <property name="receives_default">True</property>
-                                <signal name="pressed" handler="on_1_button_pressed"/>
-                                <signal name="released" handler="on_1_button_released"/>
                               </widget>
                             </child>
                             <child>
@@ -610,8 +608,6 @@
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
                                 <property name="receives_default">True</property>
-                                <signal name="pressed" handler="on_2_button_pressed"/>
-                                <signal name="released" handler="on_2_button_released"/>
                               </widget>
                               <packing>
                                 <property name="left_attach">1</property>
@@ -624,8 +620,6 @@
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
                                 <property name="receives_default">True</property>
-                                <signal name="pressed" handler="on_3_button_pressed"/>
-                                <signal name="released" handler="on_3_button_released"/>
                               </widget>
                               <packing>
                                 <property name="left_attach">2</property>
@@ -638,8 +632,6 @@
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
                                 <property name="receives_default">True</property>
-                                <signal name="pressed" handler="on_4_button_pressed"/>
-                                <signal name="released" handler="on_4_button_released"/>
                               </widget>
                               <packing>
                                 <property name="top_attach">1</property>
@@ -652,8 +644,6 @@
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
                                 <property name="receives_default">True</property>
-                                <signal name="pressed" handler="on_5_button_pressed"/>
-                                <signal name="released" handler="on_5_button_released"/>
                               </widget>
                               <packing>
                                 <property name="left_attach">1</property>
@@ -668,8 +658,6 @@
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
                                 <property name="receives_default">True</property>
-                                <signal name="pressed" handler="on_6_button_pressed"/>
-                                <signal name="released" handler="on_6_button_released"/>
                               </widget>
                               <packing>
                                 <property name="left_attach">2</property>
@@ -684,8 +672,6 @@
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
                                 <property name="receives_default">True</property>
-                                <signal name="pressed" handler="on_7_button_pressed"/>
-                                <signal name="released" handler="on_7_button_released"/>
                               </widget>
                               <packing>
                                 <property name="top_attach">2</property>
@@ -698,8 +684,6 @@
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
                                 <property name="receives_default">True</property>
-                                <signal name="pressed" handler="on_8_button_pressed"/>
-                                <signal name="released" handler="on_8_button_released"/>
                               </widget>
                               <packing>
                                 <property name="left_attach">1</property>
@@ -714,8 +698,6 @@
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
                                 <property name="receives_default">True</property>
-                                <signal name="pressed" handler="on_9_button_pressed"/>
-                                <signal name="released" handler="on_9_button_released"/>
                               </widget>
                               <packing>
                                 <property name="left_attach">2</property>
@@ -730,8 +712,6 @@
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
                                 <property name="receives_default">True</property>
-                                <signal name="pressed" handler="on_star_button_pressed"/>
-                                <signal name="released" handler="on_star_button_released"/>
                               </widget>
                               <packing>
                                 <property name="top_attach">3</property>
@@ -744,8 +724,6 @@
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
                                 <property name="receives_default">True</property>
-                                <signal name="pressed" handler="on_0_button_pressed"/>
-                                <signal name="released" handler="on_0_button_released"/>
                               </widget>
                               <packing>
                                 <property name="left_attach">1</property>
@@ -760,8 +738,6 @@
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
                                 <property name="receives_default">True</property>
-                                <signal name="pressed" handler="on_sharp_button_pressed"/>
-                                <signal name="released" handler="on_sharp_button_released"/>
                               </widget>
                               <packing>
                                 <property name="left_attach">2</property>
diff --git a/src/chat_control.py b/src/chat_control.py
index 195ecd81d..f55d76c71 100644
--- a/src/chat_control.py
+++ b/src/chat_control.py
@@ -1375,6 +1375,13 @@ class ChatControl(ChatControlBase):
 			self.on_avatar_eventbox_button_press_event)
 		self.handlers[id_] = widget
 
+		for key in ('1', '2', '3', '4', '5', '6', '7', '8', '9', '*', '0', '#'):
+			widget = self.xml.get_widget(key + '_button')
+			id_ = widget.connect('pressed', self.on_num_button_pressed, key)
+			self.handlers[id_] = widget
+			id_ = widget.connect('released', self.on_num_button_released)
+			self.handlers[id_] = widget
+
 		if not session:
 			# Don't use previous session if we want to a specific resource
 			# and it's not the same
@@ -1597,90 +1604,18 @@ class ChatControl(ChatControlBase):
 	def set_video_state(self, state, sid=None, reason=None):
 		self._set_jingle_state('video', state, sid=sid, reason=reason)
 
-	def _on_num_button_pressed(self, num):
+	def on_num_button_pressed(self, widget, num):
 		session = gajim.connections[self.account].get_jingle_session(
 			self.contact.get_full_jid(), self.audio_sid)
 		content = session.get_content('audio')
 		content._start_dtmf(num)
 
-	def _on_num_button_released(self):
+	def on_num_button_released(self, released):
 		session = gajim.connections[self.account].get_jingle_session(
 			self.contact.get_full_jid(), self.audio_sid)
 		content = session.get_content('audio')
 		content._stop_dtmf()
 
-	def on_1_button_pressed(self, widget):
-		self._on_num_button_pressed('1')
-
-	def on_1_button_released(self, widget):
-		self._on_num_button_released()
-
-	def on_2_button_pressed(self, widget):
-		self._on_num_button_pressed('2')
-
-	def on_2_button_released(self, widget):
-		self._on_num_button_released()
-
-	def on_3_button_pressed(self, widget):
-		self._on_num_button_pressed('3')
-
-	def on_3_button_released(self, widget):
-		self._on_num_button_released()
-
-	def on_4_button_pressed(self, widget):
-		self._on_num_button_pressed('4')
-
-	def on_4_button_released(self, widget):
-		self._on_num_button_released()
-
-	def on_5_button_pressed(self, widget):
-		self._on_num_button_pressed('5')
-
-	def on_5_button_released(self, widget):
-		self._on_num_button_released()
-
-	def on_6_button_pressed(self, widget):
-		self._on_num_button_pressed('6')
-
-	def on_6_button_released(self, widget):
-		self._on_num_button_released()
-
-	def on_7_button_pressed(self, widget):
-		self._on_num_button_pressed('7')
-
-	def on_7_button_released(self, widget):
-		self._on_num_button_released()
-
-	def on_8_button_pressed(self, widget):
-		self._on_num_button_pressed('8')
-
-	def on_8_button_released(self, widget):
-		self._on_num_button_released()
-
-	def on_9_button_pressed(self, widget):
-		self._on_num_button_pressed('9')
-
-	def on_9_button_released(self, widget):
-		self._on_num_button_released()
-
-	def on_0_button_pressed(self, widget):
-		self._on_num_button_pressed('0')
-
-	def on_0_button_released(self, widget):
-		self._on_num_button_released()
-
-	def on_star_button_pressed(self, widget):
-		self._on_num_button_pressed('*')
-
-	def on_star_button_released(self, widget):
-		self._on_num_button_released()
-
-	def on_sharp_button_pressed(self, widget):
-		self._on_num_button_pressed('#')
-
-	def on_sharp_button_released(self, widget):
-		self._on_num_button_released()
-
 	def on_mic_hscale_value_changed(self, widget, scroll_type):
 		pass