diff --git a/src/common/commands.py b/src/common/commands.py
index 888d43e2661a5e1076fe3047edce0a07004a64ec..d303de922358e6b5a0111b0ebe14bd894ca66baf 100644
--- a/src/common/commands.py
+++ b/src/common/commands.py
@@ -290,6 +290,41 @@ class ForwardMessagesCommand(AdHocCommand):
 
         return False    # finish the session
 
+class FwdMsgThenDisconnectCommand(AdHocCommand):
+    commandnode = 'fwd-msd-disconnect'
+    commandname = _('Forward unread message then disconnect')
+
+    @staticmethod
+    def isVisibleFor(samejid):
+        """
+        Change status is visible only if the entity has the same bare jid
+        """
+        return samejid
+
+    def execute(self, request):
+        account = self.connection.name
+        # Forward messages
+        events = gajim.events.get_events(account, types=['chat', 'normal'])
+        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],
+                    resource=resource, forward_from=jid, delayed=event.time_,
+                    now=True)
+
+        response, cmd = self.buildResponse(request, status = 'completed')
+        cmd.addChild('note', {}, _('The status has been changed.'))
+
+        # if going offline, we need to push response so it won't go into
+        # queue and disappear
+        self.connection.connection.send(response, now = True)
+
+        # send new status
+        gajim.interface.roster.send_status(self.connection.name, 'offline', '')
+        # finish the session
+        return False
+
 class ConnectionCommands:
     """
     This class depends on that it is a part of Connection() class
@@ -299,7 +334,7 @@ class ConnectionCommands:
         # a list of all commands exposed: node -> command class
         self.__commands = {}
         for cmdobj in (ChangeStatusCommand, ForwardMessagesCommand,
-        LeaveGroupchatsCommand):
+        LeaveGroupchatsCommand, FwdMsgThenDisconnectCommand):
             self.__commands[cmdobj.commandnode] = cmdobj
 
         # a list of sessions; keys are tuples (jid, sessionid, node)
diff --git a/src/common/connection.py b/src/common/connection.py
index fb9520e623c9cba35c0fa67ee0aba96089584f1b..d9dbb961d2755997d6a079744cd7ca105b2805e9 100644
--- a/src/common/connection.py
+++ b/src/common/connection.py
@@ -1606,11 +1606,12 @@ class Connection(CommonConnection, ConnectionHandlers):
     def send_message(self, jid, msg, keyID, type_='chat', subject='',
     chatstate=None, msg_id=None, composing_xep=None, resource=None,
     user_nick=None, xhtml=None, session=None, forward_from=None, form_node=None,
-    original_message=None, delayed=None, callback=None, callback_args=[]):
+    original_message=None, delayed=None, callback=None, callback_args=[],
+    now=False):
 
-        def cb(jid, msg, keyID, forward_from, session, original_message, subject,
-        type_, msg_iq):
-            msg_id = self.connection.send(msg_iq)
+        def cb(jid, msg, keyID, forward_from, session, original_message,
+        subject, type_, msg_iq):
+            msg_id = self.connection.send(msg_iq, now=now)
             jid = helpers.parse_jid(jid)
             self.dispatch('MSGSENT', (jid, msg, keyID))
             if callback:
diff --git a/src/common/zeroconf/connection_zeroconf.py b/src/common/zeroconf/connection_zeroconf.py
index 3e9f6081b786cffbc1ecf06e08a7b99196d015f3..dcc838b238dbfcd22b18d23e6a0de084ff3d5781 100644
--- a/src/common/zeroconf/connection_zeroconf.py
+++ b/src/common/zeroconf/connection_zeroconf.py
@@ -310,7 +310,8 @@ class ConnectionZeroconf(CommonConnection, ConnectionHandlersZeroconf):
     def send_message(self, jid, msg, keyID, type_='chat', subject='',
     chatstate=None, msg_id=None, composing_xep=None, resource=None,
     user_nick=None, xhtml=None, session=None, forward_from=None, form_node=None,
-    original_message=None, delayed=None, callback=None, callback_args=[]):
+    original_message=None, delayed=None, callback=None, callback_args=[],
+    now=True):
 
         def on_send_ok(msg_id):
             self.dispatch('MSGSENT', (jid, msg, keyID))