diff --git a/src/common/connection_handlers_events.py b/src/common/connection_handlers_events.py
index ad348d4a3e404ada791c46e7f5c0638b5c8ca21c..e03a610f73320ee86e38231829269b17a139b85f 100644
--- a/src/common/connection_handlers_events.py
+++ b/src/common/connection_handlers_events.py
@@ -1399,6 +1399,16 @@ class JingleDisconnectedReceivedEvent(nec.NetworkIncomingEvent):
         self.jid, self.resource = gajim.get_room_and_nick_from_fjid(self.fjid)
         self.sid = self.jingle_session.sid
         return True
+    
+class JingleTransferCancelledEvent(nec.NetworkIncomingEvent):
+    name = 'jingleFT-cancelled-received'
+    base_network_events = []
+
+    def generate(self):
+        self.fjid = self.jingle_session.peerjid
+        self.jid, self.resource = gajim.get_room_and_nick_from_fjid(self.fjid)
+        self.sid = self.jingle_session.sid
+        return True
 
 class JingleErrorReceivedEvent(nec.NetworkIncomingEvent):
     name = 'jingle-error-received'
diff --git a/src/common/jingle_session.py b/src/common/jingle_session.py
index 3ddf45eac175039f35935ad7d47f8fab407ccde5..9518e3b982c48f927271fada42928e2e4abb49b7 100644
--- a/src/common/jingle_session.py
+++ b/src/common/jingle_session.py
@@ -585,7 +585,7 @@ class JingleSession(object):
         else:
             # TODO
             text = reason
-        gajim.nec.push_incoming_event(JingleDisconnectedReceivedEvent(None,
+        gajim.nec.push_incoming_event(JingleTransferCancelledEvent(None,
             conn=self.connection, jingle_session=self, media=None,
             reason=text))
 
diff --git a/src/gui_interface.py b/src/gui_interface.py
index c989995d68d7646bd947f0888d7dd8aa49d62f10..7566db12b74cb09444b2720cd7b2bd4c49a3fd06 100644
--- a/src/gui_interface.py
+++ b/src/gui_interface.py
@@ -1150,6 +1150,24 @@ class Interface:
             'resource. Please type a new one'), resource=proposed_resource,
             ok_handler=on_ok)
 
+    def handle_event_jingleft_cancel(self, obj):
+        ft = self.instances['file_transfers']
+        file_props = None
+        
+        # get the file_props of our session
+        for sid in obj.conn.files_props:
+            fp = obj.conn.files_props[sid]
+            if fp['session-sid'] == obj.sid:
+                file_props = fp
+                break
+                
+        ft.set_status(file_props['type'], file_props['sid'], 'stop')
+        file_props['error'] = -4 # is it the right error code?
+
+        ft.show_stopped(obj.jid, file_props, 'Peer cancelled ' +
+                            'the transfer')
+        obj.conn.delete_jingle_session(obj.sid)
+        
     def handle_event_jingle_incoming(self, obj):
         # ('JINGLE_INCOMING', account, peer jid, sid, tuple-of-contents==(type,
         # data...))
@@ -1486,6 +1504,7 @@ class Interface:
                 self.handle_event_jingle_disconnected],
             'jingle-error-received': [self.handle_event_jingle_error],
             'jingle-request-received': [self.handle_event_jingle_incoming],
+            'jingleFT-cancelled-received': [self.handle_event_jingleft_cancel],
             'last-result-received': [self.handle_event_last_status_time],
             'message-error': [self.handle_event_msgerror],
             'message-not-sent': [self.handle_event_msgnotsent],