diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/ChatActivity.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/ChatActivity.kt
index 471a9054e9c4a38c298dda689f585f80a9630242..b624fcdff6b18157c13205d636e9d193614a6c30 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/ChatActivity.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/ChatActivity.kt
@@ -13,8 +13,6 @@ import android.support.v7.widget.Toolbar
 import android.view.Gravity
 import android.view.Menu
 import android.view.MenuItem
-import android.widget.Button
-import android.widget.EditText
 import butterknife.BindView
 import butterknife.ButterKnife
 import com.afollestad.materialdialogs.MaterialDialog
@@ -46,12 +44,6 @@ class ChatActivity : ServiceBoundActivity() {
   @BindView(R.id.progressBar)
   lateinit var progressBar: MaterialContentLoadingProgressBar
 
-  @BindView(R.id.buttonSend)
-  lateinit var buttonSend: Button
-
-  @BindView(R.id.input)
-  lateinit var input: EditText
-
   private lateinit var drawerToggle: ActionBarDrawerToggle
 
   private val handler = AndroidHandlerThread("Chat")
@@ -120,17 +112,6 @@ class ChatActivity : ServiceBoundActivity() {
     }
     )
 
-    buttonSend.setOnClickListener {
-      viewModel.session { session ->
-        viewModel.getBuffer().let { bufferId ->
-          session.bufferSyncer?.bufferInfo(bufferId)?.also { bufferInfo ->
-            session.rpcHandler?.sendInput(bufferInfo, input.text.toString())
-          }
-        }
-      }
-      input.text.clear()
-    }
-
     viewModel.connectionState.observe(
       this, Observer {
       val status = it ?: ConnectionState.DISCONNECTED
@@ -148,7 +129,7 @@ class ChatActivity : ServiceBoundActivity() {
 
       snackbar?.dismiss()
       snackbar = Snackbar.make(
-        findViewById(R.id.contentMessages),
+        findViewById(R.id.toolbar),
         status.name,
         Snackbar.LENGTH_SHORT
       )
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/EditorFragment.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/EditorFragment.kt
new file mode 100644
index 0000000000000000000000000000000000000000..75cade9ace28ccb0d61bf652cd0d5a5f56ccdab7
--- /dev/null
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/EditorFragment.kt
@@ -0,0 +1,78 @@
+package de.kuschku.quasseldroid_ng.ui.chat
+
+import android.arch.lifecycle.ViewModelProviders
+import android.os.Bundle
+import android.view.KeyEvent
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.EditText
+import android.widget.ImageButton
+import butterknife.BindView
+import butterknife.ButterKnife
+import de.kuschku.quasseldroid_ng.R
+import de.kuschku.quasseldroid_ng.ui.settings.Settings
+import de.kuschku.quasseldroid_ng.ui.settings.data.AppearanceSettings
+import de.kuschku.quasseldroid_ng.ui.viewmodel.QuasselViewModel
+import de.kuschku.quasseldroid_ng.util.helper.invoke
+import de.kuschku.quasseldroid_ng.util.helper.let
+import de.kuschku.quasseldroid_ng.util.irc.format.IrcFormatSerializer
+import de.kuschku.quasseldroid_ng.util.service.ServiceBoundFragment
+
+class EditorFragment : ServiceBoundFragment() {
+
+  @BindView(R.id.send)
+  lateinit var send: ImageButton
+
+  @BindView(R.id.chatline)
+  lateinit var chatline: EditText
+
+  private lateinit var viewModel: QuasselViewModel
+
+  private var ircFormatSerializer: IrcFormatSerializer? = null
+  private lateinit var appearanceSettings: AppearanceSettings
+
+  override fun onCreate(savedInstanceState: Bundle?) {
+    super.onCreate(savedInstanceState)
+
+    viewModel = ViewModelProviders.of(activity!!)[QuasselViewModel::class.java]
+    appearanceSettings = Settings.appearance(activity!!)
+
+    if (ircFormatSerializer == null) {
+      ircFormatSerializer = IrcFormatSerializer(context!!)
+    }
+  }
+
+  override fun onCreateView(inflater: LayoutInflater,
+                            container: ViewGroup?,
+                            savedInstanceState: Bundle?): View? {
+    val view = inflater.inflate(R.layout.fragment_editor, container, false)
+    ButterKnife.bind(this, view)
+
+
+
+    send.setOnClickListener {
+      send()
+    }
+
+    chatline.setOnKeyListener { _, keyCode, event ->
+      if (event.hasNoModifiers() && (keyCode == KeyEvent.KEYCODE_ENTER || keyCode == KeyEvent.KEYCODE_NUMPAD_ENTER)) {
+        send()
+      }
+      false
+    }
+
+    return view
+  }
+
+  fun send() {
+    viewModel.session { session ->
+      viewModel.getBuffer().let { bufferId ->
+        session.bufferSyncer?.bufferInfo(bufferId)?.also { bufferInfo ->
+          session.rpcHandler?.sendInput(bufferInfo, chatline.text.toString())
+        }
+      }
+    }
+    chatline.text.clear()
+  }
+}
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 076e9706c5fe5d02e1f76218a4eef174a8ad151f..5ab133c09f289c5411d8dd41141732169e836b7e 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -30,7 +30,7 @@
           app:popupTheme="@style/Widget.PopupOverlay">
 
           <fragment
-            android:id="@+id/toolbarFragment"
+            android:id="@+id/fragment_toolbar"
             android:name="de.kuschku.quasseldroid_ng.ui.chat.ToolbarFragment"
             android:layout_width="fill_parent"
             android:layout_height="fill_parent"
@@ -53,43 +53,24 @@
     </android.support.design.widget.AppBarLayout>
 
     <fragment
-      android:id="@+id/contentMessages"
+      android:id="@+id/fragment_messages"
       android:name="de.kuschku.quasseldroid_ng.ui.chat.messages.MessageListFragment"
       android:layout_width="match_parent"
       android:layout_height="0dip"
       android:layout_weight="1"
       tools:layout="@layout/fragment_messages" />
 
-    <android.support.v7.widget.CardView
+    <fragment
+      android:id="@+id/fragment_editor"
+      android:name="de.kuschku.quasseldroid_ng.ui.chat.EditorFragment"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
-      android:background="?colorBackgroundCard"
-      app:cardElevation="4dp">
-
-      <LinearLayout
-        android:layout_width="match_parent"
-        android:layout_height="?actionBarSize">
-
-        <EditText
-          android:id="@+id/input"
-          android:layout_width="0dip"
-          android:layout_height="match_parent"
-          android:layout_weight="1" />
-
-        <Button
-          android:id="@+id/buttonSend"
-          android:layout_width="wrap_content"
-          android:layout_height="wrap_content"
-          android:layout_gravity="center_vertical"
-          android:text="Send" />
-      </LinearLayout>
-
-    </android.support.v7.widget.CardView>
+      tools:layout="@layout/fragment_editor" />
 
   </LinearLayout>
 
   <fragment
-    android:id="@+id/nickListFragment"
+    android:id="@+id/fragment_nick_list"
     android:name="de.kuschku.quasseldroid_ng.ui.chat.NickListFragment"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
@@ -105,7 +86,7 @@
     app:insetForeground="?attr/colorPrimaryDark">
 
     <fragment
-      android:id="@+id/chatListFragment"
+      android:id="@+id/fragment_chat_list"
       android:name="de.kuschku.quasseldroid_ng.ui.chat.buffers.BufferViewConfigFragment"
       android:layout_width="match_parent"
       android:layout_height="match_parent"
diff --git a/app/src/main/res/layout/fragment_editor.xml b/app/src/main/res/layout/fragment_editor.xml
new file mode 100644
index 0000000000000000000000000000000000000000..de98aaac6f19b1de8c9b5a0f74c8fc25c671c449
--- /dev/null
+++ b/app/src/main/res/layout/fragment_editor.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+  xmlns:app="http://schemas.android.com/apk/res-auto"
+  xmlns:tools="http://schemas.android.com/tools"
+  android:layout_width="match_parent"
+  android:layout_height="wrap_content"
+  android:background="?colorBackgroundCard"
+  android:elevation="4dp"
+  tools:showIn="@layout/activity_main">
+
+  <android.support.v7.widget.AppCompatEditText
+    android:id="@+id/chatline"
+    android:layout_width="0dip"
+    android:layout_height="?attr/actionBarSize"
+    android:layout_weight="1"
+    android:background="@android:color/transparent"
+    android:gravity="top"
+    android:hint="@string/label_placeholder"
+    android:inputType="textCapSentences|textShortMessage|textAutoCorrect"
+    android:paddingBottom="17dp"
+    android:paddingLeft="20dp"
+    android:paddingRight="20dp"
+    android:paddingTop="17dp"
+    android:textColor="?attr/colorForeground"
+    android:textSize="16sp" />
+
+  <android.support.v7.widget.AppCompatImageButton
+    android:id="@+id/send"
+    style="?attr/buttonStyleSmall"
+    android:layout_width="?attr/actionBarSize"
+    android:layout_height="?attr/actionBarSize"
+    android:layout_gravity="top"
+    android:background="?attr/selectableItemBackgroundBorderless"
+    android:padding="12dp"
+    android:scaleType="fitXY"
+    android:tint="?attr/colorAccent"
+    app:srcCompat="@drawable/ic_send" />
+</LinearLayout>
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 5012780a94e664a56c95866e80a9412f48fd3993..9e5efd640576cf9ee0134048af3d1289b6cf1f79 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -11,6 +11,7 @@
   <string name="label_drawer_close">Close</string>
   <string name="label_drawer_open">Open</string>
   <string name="label_filter_messages">Filter Messages</string>
+  <string name="label_placeholder">Write a message…</string>
   <string name="label_save">Save</string>
   <string name="label_select_multiple">Select</string>
   <string name="label_settings">Settings</string>