diff --git a/briar-gtk/briar_gtk/presenters/private_chat.py b/briar-gtk/briar_gtk/presenters/private_chat.py
index dc9f4d1dd8cd907fb4b9dd8a84c336c467ee0924..ea4173e4675cb80e0a3b4786c6abc10e885c0762 100644
--- a/briar-gtk/briar_gtk/presenters/private_chat.py
+++ b/briar-gtk/briar_gtk/presenters/private_chat.py
@@ -5,7 +5,7 @@
 import time
 
 from gettext import gettext as _
-from gi.repository import Gtk, GLib
+from gi.repository import Gdk, Gtk, GLib
 
 from briar_wrapper.models.contacts import Contacts
 from briar_wrapper.models.private_chat import PrivateChat
@@ -187,7 +187,7 @@ class PrivateChatPresenter:
     def _setup_chat_entry(self):
         chat_entry = self._view.builder.get_object("chat_entry")
         self._chat_entry_signal_id = chat_entry.connect(
-            "activate", self._on_chat_entry_activate
+            "key-press-event", self._on_chat_entry_activate
         )
         chat_entry.grab_focus()
 
@@ -244,14 +244,29 @@ class PrivateChatPresenter:
         chat_entry.disconnect(self._chat_entry_signal_id)
         del self._chat_entry_signal_id
 
-    def _on_chat_entry_activate(self, widget):
-        if len(widget.get_text()) == 0:
-            return
+    def _on_chat_entry_activate(self, widget, event):
+        # Return is pressed
+        if Gdk.keyval_name(event.keyval) != 'Return':
+            return False
+        # Shift is not pressed
+        if (event.state & Gdk.ModifierType.SHIFT_MASK) == Gdk.ModifierType.SHIFT_MASK:  # noqa
+            return False
+        # Text does not only contain whitespace
+        if len(self._get_text_from_text_view(widget).strip()) == 0:
+            return False
         self._send_message(widget)
         self._sidebar_presenter.refresh_contacts()
+        return True
+
+    @staticmethod
+    def _get_text_from_text_view(widget):
+        text_buffer = widget.get_buffer()
+        start_iter = text_buffer.get_start_iter()
+        end_iter = text_buffer.get_end_iter()
+        return text_buffer.get_text(start_iter, end_iter, True)
 
     def _send_message(self, widget):
-        message = widget.get_text()
+        message = self._get_text_from_text_view(widget)
         private_chat = PrivateChat(APP().api, self._view.contact_id)
         private_chat.send(message)
 
@@ -268,5 +283,5 @@ class PrivateChatPresenter:
 
                 "timestamp": int(round(time.time() * 1000))
             })
-        widget.set_text("")
+        widget.get_buffer().set_text("")
         GLib.idle_add(self._view.scroll_to_bottom)
diff --git a/briar-gtk/data/ui/main_window.ui b/briar-gtk/data/ui/main_window.ui
index e10eaa87cc1eb2bc60400b04edad79903a561a6c..a1a027384a95989f955f1d3c3f9b9ef8b1f8da90 100644
--- a/briar-gtk/data/ui/main_window.ui
+++ b/briar-gtk/data/ui/main_window.ui
@@ -111,27 +111,76 @@
                           </packing>
                         </child>
                         <child>
-                          <object class="GtkBox">
+                          <object class="HdyClamp">
                             <property name="visible">True</property>
+                            <property name="maximum_size">800</property> <!-- Same as in PrivateChatView -->
+                            <property name="tightening_threshold">600</property>
+                            <property name="hexpand">True</property>
                             <child>
-                              <object class="HdyClamp">
+                              <object class="GtkBox">
                                 <property name="visible">True</property>
-                                <property name="maximum_size">800</property> <!-- Same as in PrivateChatView -->
-                                <property name="tightening_threshold">600</property>
-                                <property name="hexpand">True</property>
                                 <child>
-                                  <object class="GtkEntry" id="chat_entry">
+                                  <object class="GtkButton" id="entry_emoji_button">
                                     <property name="visible">True</property>
                                     <property name="can_focus">True</property>
-                                    <property name="placeholder_text" translatable="yes" context="Used in input field in main window">Type Message</property>
-                                    <property name="show_emoji_icon">True</property>
+                                    <property name="action_name">win.open-emoji-menu</property>
+                                    <child>
+                                      <object class="GtkImage">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="icon_name">face-smile-symbolic</property>
+                                      </object>
+                                    </child>
+                                    <accessibility>
+
+                                    </accessibility>
+                                    <child internal-child="accessible">
+                                      <object class="AtkObject" id="a11y-entry_emoji_button">
+                                        <property name="AtkObject::accessible_name" translatable="yes">Show emojis</property>
+                                      </object>
+                                    </child>
+                                  </object>
+                                </child>
+                                <child>
+                                  <object class="GtkScrolledWindow">
+                                    <property name="visible">True</property>
+                                    <property name="hexpand">True</property>
+                                    <child>
+                                      <object class="GtkTextView" id="chat_entry">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="wrap_mode">word-char</property>
+                                      </object>
+                                    </child>
+                                    <style>
+                                      <class name="message-input-area" />
+                                    </style>
+                                  </object>
+                                </child>
+                                <child>
+                                  <object class="GtkButton" id="entry_send_button">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">True</property>
+                                    <property name="action_name">win.send-message</property>
+                                    <child>
+                                      <object class="GtkImage">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="icon_name">media-playback-start</property>
+                                      </object>
+                                    </child>
+                                    <accessibility>
+
+                                    </accessibility>
+                                    <child internal-child="accessible">
+                                      <object class="AtkObject" id="a11y-entry_send_button">
+                                        <property name="AtkObject::accessible_name" translatable="yes">Send</property>
+                                      </object>
+                                    </child>
                                   </object>
                                 </child>
                               </object>
                             </child>
-                            <style>
-                              <class name="message-input-area" />
-                            </style>
                           </object>
                         </child>
                       </object>