diff --git a/gajim/gtk/menus.py b/gajim/gtk/menus.py
index b761f837b6a9e4e3431cf697fc0bfe0d54199277..138f74c924b9e9cc0a695790952557634cb9c938 100644
--- a/gajim/gtk/menus.py
+++ b/gajim/gtk/menus.py
@@ -549,18 +549,23 @@ def get_groupchat_roster_menu(account: str,
     return menu
 
 
-class SearchMenu(Gtk.Menu):
-    def __init__(self, treeview: Gtk.TreeView) -> None:
-        Gtk.Menu.__init__(self)
-        self._copy_item = Gtk.MenuItem(label=_('Copy'))
-        self._copy_item.set_action_name('app.copy-text')
-        self.set_copy_text('')
-        self._copy_item.show()
-        self.append(self._copy_item)
-        self.attach_to_widget(treeview, None)
-
-    def set_copy_text(self, text: str) -> None:
-        self._copy_item.set_action_target_value(GLib.Variant('s', text))
+def get_directory_search_menu(jid: str, copy_text: str) -> Gio.Menu:
+    menu_items: list[tuple[str, str]] = [
+        ('app.copy-text', _('Copy')),
+        ('app.start-chat', _('Start Chat…'))
+    ]
+    menu = Gio.Menu()
+    for item in menu_items:
+        action, label = item
+        menuitem = Gio.MenuItem.new(label, action)
+        if action == 'app.copy-text':
+            data = copy_text
+        else:
+            data = jid
+        variant = GLib.Variant('s', data)
+        menuitem.set_action_and_target_value(action, variant)
+        menu.append_item(menuitem)
+    return menu
 
 
 def escape_mnemonic(label: Optional[str]) -> Optional[str]:
diff --git a/gajim/gtk/search.py b/gajim/gtk/search.py
index 28f26467cd409d1d8c603f68fae350a470b35b5e..6709756b7de8284f26d3c3bd8bc716f739e7cfbc 100644
--- a/gajim/gtk/search.py
+++ b/gajim/gtk/search.py
@@ -40,7 +40,7 @@
 from .assistant import Page
 from .assistant import ProgressPage
 from .dataform import DataFormWidget
-from .menus import SearchMenu
+from .menus import get_directory_search_menu
 from .util import ensure_not_destroyed
 from .util import EventHelper
 
@@ -222,7 +222,6 @@ def __init__(self) -> None:
         self.add(self._scrolled)
 
         self._treeview: Optional[Gtk.TreeView] = None
-        self._menu: Optional[SearchMenu] = None
 
         self.show_all()
 
@@ -231,7 +230,6 @@ def process_result(self, form: Optional[Node]) -> None:
             self._scrolled.remove(self._treeview)
             self._treeview.destroy()
             self._treeview = None
-            self._menu = None
             self._label.hide()
             self._scrolled.hide()
 
@@ -268,7 +266,6 @@ def process_result(self, form: Optional[Node]) -> None:
         self._treeview.set_vexpand(True)
         self._treeview.get_style_context().add_class('search-treeview')
         self._treeview.connect('button-press-event', self._on_button_press)
-        self._menu = SearchMenu(self._treeview)
 
         for field, counter in zip(form.reported.iter_fields(),
                                   itertools.count()):
@@ -298,11 +295,21 @@ def _on_button_press(self,
         assert store is not None
         assert path is not None
         iter_ = store.get_iter(path)
-        column_values = str(store[iter_])
+        column_values = store[iter_]
         text = ' '.join(column_values)
-        assert self._menu is not None
-        self._menu.set_copy_text(text)
-        self._menu.popup_at_pointer()
+
+        menu = get_directory_search_menu(column_values[0], text)
+
+        rectangle = Gdk.Rectangle()
+        rectangle.x = int(event.x)
+        rectangle.y = int(event.y)
+        rectangle.width = rectangle.height = 1
+
+        popover = Gtk.Popover.new_from_model(self, menu)
+        popover.set_relative_to(self)
+        popover.set_position(Gtk.PositionType.RIGHT)
+        popover.set_pointing_to(rectangle)
+        popover.popup()
         return True
 
     def get_visible_buttons(self) -> list[str]: