diff --git a/resources/qml/ImageButton.qml b/resources/qml/ImageButton.qml
index dc576e183eb9aebddac9e912bc393a8118f92d82..dd10050352bc7bfe769945c6041c22f575d5df69 100644
--- a/resources/qml/ImageButton.qml
+++ b/resources/qml/ImageButton.qml
@@ -1,17 +1,11 @@
 import QtQuick 2.3
 import QtQuick.Controls 2.3
 
-Button {
+AbstractButton {
 	property string image: undefined
 
 	id: button
 
-	flat: true
-
-	// disable background, because we don't want a border on hover
-	background: Item {
-	}
-
 	Image {
 		id: buttonImg
 		// Workaround, can't get icon.source working for now...
diff --git a/resources/qml/Reactions.qml b/resources/qml/Reactions.qml
index c70519a4d169784a38d0727d044878344d0de15d..cb15b7238b7f66b9b11ec8f5211cb3492439c847 100644
--- a/resources/qml/Reactions.qml
+++ b/resources/qml/Reactions.qml
@@ -11,48 +11,53 @@ Flow {
 	Repeater {
 		id: repeater
 
-		Button {
+		AbstractButton {
 			id: reaction
 			text: model.key
 			hoverEnabled: true
-			implicitWidth: contentItem.childrenRect.width + contentItem.padding*2
-			implicitHeight: contentItem.childrenRect.height + contentItem.padding*2
+			implicitWidth: contentItem.childrenRect.width + contentItem.leftPadding*2
+			implicitHeight: contentItem.childrenRect.height
 
 			ToolTip.visible: hovered
 			ToolTip.text: model.users
 
+
 			contentItem: Row {
 				anchors.centerIn: parent
-				spacing: 2
-				padding: 4
+				spacing: reactionText.implicitHeight/4
+				leftPadding: reactionText.implicitHeight / 2
+				rightPadding: reactionText.implicitHeight / 2
+
+				TextMetrics {
+					id: textMetrics
+					font.family: settings.emoji_font_family
+					elide: Text.ElideRight
+					elideWidth: 150
+					text: reaction.text
+				}
 
 				Text {
 					anchors.baseline: reactionCounter.baseline
 					id: reactionText
-					text: reaction.text
+					text: textMetrics.elidedText + (textMetrics.elidedText == textMetrics.text ? "" : "…")
 					font.family: settings.emoji_font_family
-					opacity: enabled ? 1.0 : 0.3
 					color: reaction.hovered ? colors.highlight : colors.text
-					horizontalAlignment: Text.AlignHCenter
-					verticalAlignment: Text.AlignVCenter
-					elide: Text.ElideRight
+					maximumLineCount: 1
 				}
 
 				Rectangle {
-					height: reactionText.implicitHeight
+					id: divider
+					height: reactionCounter.implicitHeight * 1.4
 					width: 1
 					color: reaction.hovered ? colors.highlight : colors.text
 				}
 
 				Text {
+					anchors.verticalCenter: divider.verticalCenter
 					id: reactionCounter
 					text: model.counter
 					font: reaction.font
-					opacity: enabled ? 1.0 : 0.3
 					color: reaction.hovered ? colors.highlight : colors.text
-					horizontalAlignment: Text.AlignHCenter
-					verticalAlignment: Text.AlignVCenter
-					elide: Text.ElideRight
 				}
 			}
 
@@ -60,7 +65,6 @@ Flow {
 				anchors.centerIn: parent
 				implicitWidth: reaction.implicitWidth
 				implicitHeight: reaction.implicitHeight
-				opacity: enabled ? 1 : 0.3
 				border.color: (reaction.hovered || model.selfReacted )? colors.highlight : colors.text
 				color: colors.base
 				border.width: 1