diff --git a/src/common/commands.py b/src/common/commands.py
index 59111dda5956a54ff90bf093a5d2ac62ef509248..2954b9297a853aee0b711b015600cc0889186b67 100644
--- a/src/common/commands.py
+++ b/src/common/commands.py
@@ -26,6 +26,7 @@ import nbxmpp
 import helpers
 import dataforms
 import gajim
+from common.connection_handlers_events import MessageOutgoingEvent
 
 import logging
 log = logging.getLogger('gajim.c.commands')
@@ -285,9 +286,10 @@ class ForwardMessagesCommand(AdHocCommand):
                 ev_typ = event.type_
                 if ev_typ == 'printed_chat':
                     ev_typ = 'chat'
-                self.connection.send_message(j, event.parameters[0], '',
+                gajim.nec.push_outgoing_event(MessageOutgoingEvent(None,
+                    account=account, jid=j, message=event.parameters[0],
                     type_=ev_typ, subject=event.parameters[1],
-                    resource=resource, forward_from=jid, delayed=event.time_)
+                    resource=resource, forward_from=jid, delayed=event.time_))
 
         # Inform other client of completion
         response, cmd = self.buildResponse(request, status = 'completed')
@@ -315,10 +317,14 @@ class FwdMsgThenDisconnectCommand(AdHocCommand):
         j, resource = gajim.get_room_and_nick_from_fjid(self.jid)
         for jid in events:
             for event in events[jid]:
-                self.connection.send_message(j, event.parameters[0], '',
-                    type_=event.type_, subject=event.parameters[1],
+                ev_typ = event.type_
+                if ev_typ == 'printed_chat':
+                    ev_typ = 'chat'
+                gajim.nec.push_outgoing_event(MessageOutgoingEvent(None,
+                    account=account, jid=j, message=event.parameters[0],
+                    type_=ev_typ, subject=event.parameters[1],
                     resource=resource, forward_from=jid, delayed=event.time_,
-                    now=True)
+                    now=True))
 
         response, cmd = self.buildResponse(request, status = 'completed')
         cmd.addChild('note', {}, _('The status has been changed.'))
diff --git a/src/common/connection.py b/src/common/connection.py
index 99e5d0463bd16b8a41768abdb10b5ef85d2ea338..55a31a93dbcb9001d793ce1c2fcf89201991a641 100644
--- a/src/common/connection.py
+++ b/src/common/connection.py
@@ -1989,31 +1989,6 @@ class Connection(CommonConnection, ConnectionHandlers):
 
         self.connection.send(msg_iq)
 
-    def send_message(self, jid, msg, keyID=None, type_='chat', subject='',
-    chatstate=None, msg_id=None, resource=None, user_nick=None, xhtml=None,
-    label=None, session=None, forward_from=None, form_node=None,
-    original_message=None, delayed=None, attention=False, correction_msg=None,
-    callback=None, callback_args=[], now=False):
-
-        def cb(jid, msg, keyID, forward_from, session, original_message,
-        subject, type_, msg_iq, xhtml):
-            msg_id = self.connection.send(msg_iq, now=now)
-            jid = helpers.parse_jid(jid)
-            gajim.nec.push_incoming_event(MessageSentEvent(None, conn=self,
-                jid=jid, message=msg, keyID=keyID, chatstate=chatstate))
-            if callback:
-                callback(msg_id, *callback_args)
-
-            self.log_message(jid, msg, forward_from, session, original_message,
-                    subject, type_, xhtml)
-
-        self._prepare_message(jid, msg, keyID, type_=type_, subject=subject,
-            chatstate=chatstate, msg_id=msg_id, resource=resource,
-            user_nick=user_nick, xhtml=xhtml, label=label, session=session,
-            forward_from=forward_from, form_node=form_node,
-            original_message=original_message, delayed=delayed,
-            attention=attention, correction_msg=correction_msg, callback=cb)
-
     def _nec_message_outgoing(self, obj):
         if obj.account != self.name:
             return
diff --git a/src/common/zeroconf/connection_zeroconf.py b/src/common/zeroconf/connection_zeroconf.py
index f20111c06b447214a956f8d1b057e3eeadfe5051..8a7a89c6bd694632ea21fd415957f490ff77bbf8 100644
--- a/src/common/zeroconf/connection_zeroconf.py
+++ b/src/common/zeroconf/connection_zeroconf.py
@@ -333,46 +333,6 @@ class ConnectionZeroconf(CommonConnection, ConnectionHandlersZeroconf):
                 title=_('Could not change status of account "%s"') % self.name,
                 msg=_('Please check if avahi-daemon is running.')))
 
-    def send_message(self, jid, msg, keyID, type_='chat', subject='',
-    chatstate=None, msg_id=None, resource=None, user_nick=None, xhtml=None,
-    label=None, session=None, forward_from=None, form_node=None,
-    original_message=None, delayed=None, attention=False, callback=None,
-    callback_args=[], now=True):
-
-        def on_send_ok(msg_id):
-            gajim.nec.push_incoming_event(MessageSentEvent(None, conn=self,
-                jid=jid, message=msg, keyID=keyID, chatstate=None))
-            if callback:
-                callback(msg_id, *callback_args)
-
-            self.log_message(jid, msg, forward_from, session, original_message,
-                    subject, type_)
-
-        def on_send_not_ok(reason):
-            reason += ' ' + _('Your message could not be sent.')
-            gajim.nec.push_incoming_event(MessageErrorEvent(None, conn=self,
-                fjid=jid, error_code=-1, error_msg=reason, msg=None, time_=None,
-                session=session))
-
-        def cb(jid, msg, keyID, forward_from, session, original_message, subject,
-        type_, msg_iq):
-            ret = self.connection.send(msg_iq, msg is not None, on_ok=on_send_ok,
-                    on_not_ok=on_send_not_ok)
-
-            if ret == -1:
-                # Contact Offline
-                gajim.nec.push_incoming_event(MessageErrorEvent(None, conn=self,
-                    fjid=jid, error_code=-1, error_msg=_(
-                    'Contact is offline. Your message could not be sent.'),
-                    msg=None, time_=None, session=session))
-
-        self._prepare_message(jid, msg, keyID, type_=type_, subject=subject,
-                chatstate=chatstate, msg_id=msg_id, resource=resource,
-                user_nick=user_nick, xhtml=xhtml, session=session,
-                forward_from=forward_from, form_node=form_node,
-                original_message=original_message, delayed=delayed,
-                attention=attention, callback=cb)
-
     def _nec_message_outgoing(self, obj):
         if obj.account != self.name:
             return
diff --git a/src/dialogs.py b/src/dialogs.py
index f200b56369fd4f08cf9ed45a969e1a24b5e68305..e6cfdcfbafc0dc7557fcb30b21ce92090270fb1e 100644
--- a/src/dialogs.py
+++ b/src/dialogs.py
@@ -60,6 +60,7 @@ from common import helpers
 from common import i18n
 from common import dataforms
 from common.exceptions import GajimGeneralException
+from common.connection_handlers_events import MessageOutgoingEvent
 
 class EditGroupsDialog:
     """
@@ -3164,6 +3165,15 @@ class SingleMessageWindow:
             sender_list = [j.strip() for j in self.to_entry.get_text().decode(
                 'utf-8').split(',')]
 
+        subject = self.subject_entry.get_text().decode('utf-8')
+        begin, end = self.message_tv_buffer.get_bounds()
+        message = self.message_tv_buffer.get_text(begin, end).decode('utf-8')
+
+        if self.form_widget:
+            form_node = self.form_widget.data_form
+        else:
+            form_node = None
+
         for to_whom_jid in sender_list:
             if to_whom_jid in self.completion_dict:
                 to_whom_jid = self.completion_dict[to_whom_jid].jid
@@ -3175,10 +3185,6 @@ class SingleMessageWindow:
                     'valid.') % to_whom_jid)
                 return True
 
-            subject = self.subject_entry.get_text().decode('utf-8')
-            begin, end = self.message_tv_buffer.get_bounds()
-            message = self.message_tv_buffer.get_text(begin, end).decode('utf-8')
-
             if '/announce/' in to_whom_jid:
                 gajim.connections[self.account].send_motd(to_whom_jid, subject,
                     message)
@@ -3190,14 +3196,11 @@ class SingleMessageWindow:
                 session = gajim.connections[self.account].make_new_session(
                         to_whom_jid)
 
-            if self.form_widget:
-                form_node = self.form_widget.data_form
-            else:
-                form_node = None
             # FIXME: allow GPG message some day
-            gajim.connections[self.account].send_message(to_whom_jid, message,
-                keyID=None, type_='normal', subject=subject, session=session,
-                form_node=form_node)
+            gajim.nec.push_outgoing_event(MessageOutgoingEvent(None,
+                account=self.account, jid=to_whom_jid, message=message,
+                type_='normal', subject=subject, session=session,
+                form_node=form_node))
 
         self.subject_entry.set_text('') # we sent ok, clear the subject
         self.message_tv_buffer.set_text('') # we sent ok, clear the textview