diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/DayChangeItemDecoration.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/DayChangeItemDecoration.kt
index e889eb1598f875afe05ffa661e3442734f79240c..8a1e46e0480535ce171f40ef8b611db0409aedc0 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/DayChangeItemDecoration.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/DayChangeItemDecoration.kt
@@ -3,6 +3,7 @@ package de.kuschku.quasseldroid.ui.chat.messages
 import android.graphics.Canvas
 import android.graphics.Rect
 import android.support.v7.widget.RecyclerView
+import android.util.TypedValue
 import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
@@ -13,7 +14,10 @@ import org.threeten.bp.format.DateTimeFormatter
 import org.threeten.bp.format.FormatStyle
 import org.threeten.bp.temporal.ChronoUnit
 
-class DayChangeItemDecoration(private val adapter: MessageAdapter) :
+class DayChangeItemDecoration(
+  private val adapter: MessageAdapter,
+  private val textSize: Int
+) :
   RecyclerView.ItemDecoration() {
   private val dayChangeFormatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM)
   private val bounds = Rect()
@@ -86,6 +90,7 @@ class DayChangeItemDecoration(private val adapter: MessageAdapter) :
           content?.text = dayChangeFormatter.format(
             it.content.time.atZone(ZoneId.systemDefault()).truncatedTo(ChronoUnit.DAYS)
           )
+          content?.setTextSize(TypedValue.COMPLEX_UNIT_SP, textSize.toFloat())
           fixLayoutSize(layout, parent)
 
           v.setTag(R.id.tag_daychange_layout, layout)
@@ -93,7 +98,7 @@ class DayChangeItemDecoration(private val adapter: MessageAdapter) :
         }
         v.setTag(R.id.tag_daychange, true)
         val layout = v.getTag(R.id.tag_daychange_layout) as View
-        outRect.set(0, layout.measuredHeight, 0, 10)
+        outRect.set(0, layout.measuredHeight, 0, 0)
       } else {
         v.setTag(R.id.tag_daychange, false)
       }
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageAdapter.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageAdapter.kt
index c3ed188c99aee4925ccfde03f8be78ae903687b3..bdeb76b0d4c0ecc73a420720ef7a229a2ce97613 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageAdapter.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageAdapter.kt
@@ -8,7 +8,6 @@ import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
 import android.widget.ImageView
-import android.widget.Space
 import android.widget.TextView
 import butterknife.BindView
 import butterknife.ButterKnife
@@ -156,14 +155,6 @@ class MessageAdapter @Inject constructor(
     @JvmField
     var avatar: ImageView? = null
 
-    @BindView(R.id.avatar_container)
-    @JvmField
-    var avatarContainer: View? = null
-
-    @BindView(R.id.avatar_placeholder)
-    @JvmField
-    var avatarPlaceholder: Space? = null
-
     @BindView(R.id.name)
     @JvmField
     var name: TextView? = null
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageListFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageListFragment.kt
index 014abbacbd86b22c63b6cc0925dceae18c386c63..7b16060cc2dfc00769ce33d7c5fbc0c50ef086ac 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageListFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageListFragment.kt
@@ -13,6 +13,7 @@ import android.support.v7.widget.LinearLayoutManager
 import android.support.v7.widget.PopupMenu
 import android.support.v7.widget.RecyclerView
 import android.text.SpannableStringBuilder
+import android.util.TypedValue
 import android.view.*
 import butterknife.BindView
 import butterknife.ButterKnife
@@ -39,6 +40,7 @@ import org.threeten.bp.ZonedDateTime
 import org.threeten.bp.temporal.ChronoUnit
 import java.util.concurrent.TimeUnit
 import javax.inject.Inject
+import kotlin.math.roundToInt
 
 class MessageListFragment : ServiceBoundFragment() {
   @BindView(R.id.messages)
@@ -255,7 +257,6 @@ class MessageListFragment : ServiceBoundFragment() {
           val canScrollDown = recyclerView.canScrollVertically(1)
           val isScrollingDown = dy > 0
 
-          scrollDown.visibility = View.VISIBLE
           scrollDown.toggle(canScrollDown && isScrollingDown)
         }
 
@@ -388,16 +389,25 @@ class MessageListFragment : ServiceBoundFragment() {
         }
       }
     })
-    scrollDown.hide()
+
+    scrollDown.hide(object : FloatingActionButton.OnVisibilityChangedListener() {
+      override fun onHidden(fab: FloatingActionButton) {
+        fab.visibility = View.VISIBLE
+      }
+    })
     scrollDown.setOnClickListener { messageList.scrollToPosition(0) }
 
     savedInstanceState?.run {
       messageList.layoutManager.onRestoreInstanceState(getParcelable(KEY_STATE_LIST))
     }
 
-    val avatar_size = resources.getDimensionPixelSize(R.dimen.avatar_size)
+    val avatarSize = TypedValue.applyDimension(
+      TypedValue.COMPLEX_UNIT_SP,
+      messageSettings.textSize * 2.5f,
+      requireContext().resources.displayMetrics
+    ).roundToInt()
 
-    val sizeProvider = FixedPreloadSizeProvider<String>(avatar_size, avatar_size)
+    val sizeProvider = FixedPreloadSizeProvider<String>(avatarSize, avatarSize)
 
     val preloadModelProvider = object : ListPreloader.PreloadModelProvider<String> {
       override fun getPreloadItems(position: Int) = adapter[position]?.avatarUrl?.let {
@@ -405,13 +415,13 @@ class MessageListFragment : ServiceBoundFragment() {
       } ?: mutableListOf()
 
       override fun getPreloadRequestBuilder(item: String) =
-        GlideApp.with(this@MessageListFragment).load(item).override(avatar_size)
+        GlideApp.with(this@MessageListFragment).load(item).override(avatarSize)
     }
 
     val preloader = RecyclerViewPreloader(Glide.with(this), preloadModelProvider, sizeProvider, 10)
 
     messageList.addOnScrollListener(preloader)
-    messageList.addItemDecoration(DayChangeItemDecoration(adapter))
+    messageList.addItemDecoration(DayChangeItemDecoration(adapter, messageSettings.textSize))
     messageList.addItemDecoration(MarkerLineItemDecoration(
       adapter, requireContext(), R.dimen.markerline_height, R.attr.colorMarkerLine
     ))
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/QuasselMessageRenderer.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/QuasselMessageRenderer.kt
index 0e585f94f6a378e7ce01b95f468e88d0fb0875ca..c9f61c45f11468722ebc82ef6d658edadae13577 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/QuasselMessageRenderer.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/QuasselMessageRenderer.kt
@@ -4,10 +4,14 @@ import android.content.Context
 import android.graphics.Typeface
 import android.graphics.drawable.ColorDrawable
 import android.graphics.drawable.LayerDrawable
+import android.os.Build
 import android.text.SpannableString
 import android.text.style.ForegroundColorSpan
 import android.text.style.StyleSpan
 import android.util.TypedValue
+import android.view.View
+import android.widget.FrameLayout
+import android.widget.LinearLayout
 import de.kuschku.libquassel.protocol.Message.MessageType.*
 import de.kuschku.libquassel.protocol.Message_Flag
 import de.kuschku.libquassel.protocol.Message_Type
@@ -29,6 +33,7 @@ import org.threeten.bp.ZoneId
 import org.threeten.bp.format.DateTimeFormatter
 import org.threeten.bp.format.FormatStyle
 import javax.inject.Inject
+import kotlin.math.roundToInt
 
 class QuasselMessageRenderer @Inject constructor(
   private val messageSettings: MessageSettings,
@@ -92,14 +97,17 @@ class QuasselMessageRenderer @Inject constructor(
       }
     }
 
+    val avatarContainer = viewHolder.itemView.findViewById<View>(R.id.avatar_container)
+    val avatarPlaceholder = viewHolder.itemView.findViewById<View>(R.id.avatar_placeholder)
+
     if (messageSettings.useMonospace) {
       viewHolder.content?.typeface = if (viewHolder.content?.typeface?.isItalic == true) monospaceItalic else Typeface.MONOSPACE
       viewHolder.combined?.typeface = if (viewHolder.combined?.typeface?.isItalic == true) monospaceItalic else Typeface.MONOSPACE
     }
 
     viewHolder.avatar?.visibleIf(!isFollowUp)
-    viewHolder.avatarContainer?.visibleIf(messageSettings.showAvatars)
-    viewHolder.avatarPlaceholder?.visibleIf(messageSettings.showAvatars)
+    avatarContainer?.visibleIf(messageSettings.showAvatars)
+    avatarPlaceholder?.visibleIf(messageSettings.showAvatars)
     val separateLine = viewHolder.content != null && viewHolder.name != null && messageSettings.nicksOnNewLine
     viewHolder.name?.visibleIf(separateLine && !isFollowUp)
     viewHolder.content?.visibleIf(separateLine)
@@ -114,6 +122,29 @@ class QuasselMessageRenderer @Inject constructor(
     viewHolder.content?.setTextSize(TypedValue.COMPLEX_UNIT_SP, textSize)
     viewHolder.combined?.setTextSize(TypedValue.COMPLEX_UNIT_SP, textSize)
     viewHolder.name?.setTextSize(TypedValue.COMPLEX_UNIT_SP, textSize)
+    val avatarSize = TypedValue.applyDimension(
+      TypedValue.COMPLEX_UNIT_SP,
+      textSize * 2.5f,
+      viewHolder.itemView.context.resources.displayMetrics
+    ).roundToInt()
+    viewHolder.avatar?.layoutParams =
+      FrameLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, avatarSize)
+    avatarContainer?.layoutParams =
+      LinearLayout.LayoutParams(avatarSize, LinearLayout.LayoutParams.WRAP_CONTENT).apply {
+        val margin = viewHolder.itemView.context.resources.getDimensionPixelSize(R.dimen.message_horizontal)
+        setMargins(0, 0, margin, 0)
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
+          marginEnd = margin
+        }
+      }
+    avatarPlaceholder?.layoutParams =
+      LinearLayout.LayoutParams(avatarSize, LinearLayout.LayoutParams.MATCH_PARENT).apply {
+        val margin = viewHolder.itemView.context.resources.getDimensionPixelSize(R.dimen.message_horizontal)
+        setMargins(0, 0, margin, 0)
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
+          marginEnd = margin
+        }
+      }
   }
 
   override fun bind(holder: MessageAdapter.QuasselMessageViewHolder, message: FormattedMessage,
diff --git a/app/src/main/res/layout/fragment_messages.xml b/app/src/main/res/layout/fragment_messages.xml
index 2605c18120983138f65e57d26ca4de611c719164..ea9613948bf82f54893eae80187f7e66ac0d7d15 100644
--- a/app/src/main/res/layout/fragment_messages.xml
+++ b/app/src/main/res/layout/fragment_messages.xml
@@ -38,4 +38,4 @@
     app:pressedTranslationZ="0dip"
     app:srcCompat="@drawable/ic_scroll_down" />
 
-</FrameLayout>
\ No newline at end of file
+</FrameLayout>
diff --git a/app/src/main/res/layout/widget_chatmessage_plain.xml b/app/src/main/res/layout/widget_chatmessage_plain.xml
index 21d34507635280432495861c627d1739fd629943..4a9172a20e34676263ace8bd2ca4d2c276e66484 100644
--- a/app/src/main/res/layout/widget_chatmessage_plain.xml
+++ b/app/src/main/res/layout/widget_chatmessage_plain.xml
@@ -29,7 +29,7 @@
   <FrameLayout
     android:id="@+id/avatar_container"
     android:layout_width="@dimen/avatar_size"
-    android:layout_height="wrap_content"
+    android:layout_height="@dimen/avatar_size"
     android:layout_marginEnd="@dimen/message_horizontal"
     android:layout_marginRight="@dimen/message_horizontal"
     android:visibility="gone"
@@ -37,12 +37,10 @@
 
     <ImageView
       android:id="@+id/avatar"
-      android:layout_width="@dimen/avatar_size"
-      android:layout_height="@dimen/avatar_size"
+      android:layout_width="match_parent"
+      android:layout_height="match_parent"
       android:contentDescription="@string/label_avatar"
-      android:visibility="gone"
-      tools:src="@tools:sample/avatars"
-      tools:visibility="visible" />
+      tools:src="@tools:sample/avatars" />
   </FrameLayout>
 
   <LinearLayout
diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml
index c185448bba21d0eb97cf0218d2567e1c1cee9611..f998f14e0611a5faaa0d2edd49f64611a927ace6 100644
--- a/app/src/main/res/values/dimens.xml
+++ b/app/src/main/res/values/dimens.xml
@@ -14,5 +14,5 @@
   <dimen name="button_corner_radius">2dp</dimen>
 
   <dimen name="colorchooser_circlesize">56dp</dimen>
-  <dimen name="avatar_size">36sp</dimen>
+  <dimen name="avatar_size">35sp</dimen>
 </resources>
diff --git a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/IrcChannel.kt b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/IrcChannel.kt
index 052d846183fbb9d258b9562f6a716f4d8f789dcc..6f3f03d3922491d127b23cfc0c9cb4a8ffe44d46 100644
--- a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/IrcChannel.kt
+++ b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/IrcChannel.kt
@@ -173,6 +173,7 @@ class IrcChannel(
       setCodecForEncoding(charset)
     }
   }
+
   fun setCodecForEncoding(codec: Charset) {
     _codecForEncoding = codec
   }
@@ -183,6 +184,7 @@ class IrcChannel(
       setCodecForDecoding(charset)
     }
   }
+
   fun setCodecForDecoding(codec: Charset) {
     _codecForDecoding = codec
   }