diff --git a/gajim/gajim.py b/gajim/gajim.py
index c94a4163b9c103d293590bb20d71af947af69f2d..b9208639a6ef13cec823028561ae7bceb361d0d2 100644
--- a/gajim/gajim.py
+++ b/gajim/gajim.py
@@ -41,6 +41,8 @@ import sys
 import os
 import signal
 import locale
+from urllib.parse import unquote
+
 import gi
 gi.require_version('GLib', '2.0')
 gi.require_version('Gio', '2.0')
@@ -49,6 +51,7 @@ gi.require_version('Gdk', '3.0')
 gi.require_version('GObject', '2.0')
 gi.require_version('Pango', '1.0')
 from gi.repository import GLib, Gio, Gtk
+
 from gajim.common import i18n
 from gajim.common import logging_helpers
 from gajim.common import crypto
@@ -269,12 +272,20 @@ class GajimApplication(Gtk.Application):
                 self.interface.join_gc_minimal(None, jid)
             elif cmd == 'roster':
                 self.activate_action('add-contact', GLib.Variant('s', jid))
-            elif cmd == 'message':
+            elif cmd.startswith('message'):
+                attributes = cmd.split(';')
+                message = None
+                for key in attributes:
+                    if key.startswith('body'):
+                        try:
+                            message = unquote(key.split('=')[1])
+                        except Exception:
+                            app.log('uri_handler').error('Invalid URI: %s', cmd)
                 accounts = list(app.connections.keys())
                 if not accounts:
                     continue
                 if len(accounts) == 1:
-                    app.interface.new_chat_from_jid(accounts[0], jid)
+                    app.interface.new_chat_from_jid(accounts[0], jid, message)
                 else:
                     self.activate_action('start-chat')
                     start_chat_window = app.interface.instances['start_chat']