diff --git a/app/build.gradle b/app/build.gradle
index fe0ce963fe63692ca6ca5994ecae32eef734da4a..7547f70f79ab1e03ac88f604118614f6a286718b 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -166,6 +166,9 @@ dependencies {
     compile 'com.android.support:preference-v14:24.0.0'
     compile 'com.android.support:cardview-v7:24.0.0'
 
+    // Crashreports
+    compile 'ch.acra:acra:4.9.0'
+
     // UI autobinding
     compile 'com.jakewharton:butterknife:7.0.1'
 }
diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro
index 7c8fadb22481e8a3b2c849cbd3503d913cc764f7..df5f69275d95fbacd3a6c3ebf9d20acd9b1fdfb0 100644
--- a/app/proguard-rules.pro
+++ b/app/proguard-rules.pro
@@ -18,14 +18,12 @@
 
 -dontobfuscate
 
--dontwarn javax.annotation.**
--dontwarn javax.lang.model.**
--dontwarn javax.tools.**
--dontwarn com.google.j2objc.annotations.**
--dontwarn java.lang.ClassValue
--dontwarn sun.misc.Unsafe
+-dontwarn javax.**
+-dontwarn com.google.**
+-dontwarn sndroid.**
+-dontwarn java.**
+-dontwarn sun.**
 -dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
--dontwarn javax.annotation.processing.ProcessingEnvironment
 -dontwarn com.nineoldandroids.view.animation.AnimatorProxy
 
 -keepclasseswithmembernames class de.kuschku.** {
@@ -38,6 +36,11 @@
     <fields>;
 }
 
+-keepclasses class de.kuschku.** {
+    <methods>;
+    <fields>;
+}
+
 
 #########################################
 ## Bufferknife                         ##
@@ -69,4 +72,10 @@
 #########################################
 ## RetroLambda                         ##
 #########################################
--dontwarn java.lang.invoke.*
\ No newline at end of file
+-dontwarn java.lang.invoke.*
+
+
+#########################################
+## DBFlow                              ##
+#########################################
+-keep class * extends com.raizlabs.android.dbflow.config.DatabaseHolder { *; }
\ No newline at end of file
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/QuasselDroidNG.java b/app/src/main/java/de/kuschku/quasseldroid_ng/QuasselDroidNG.java
index 3cc4a1d3ea0d5762340264ca11795f25cad943cf..75e2e59f8c6093b93bf5538873d3315d9bea793b 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/QuasselDroidNG.java
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/QuasselDroidNG.java
@@ -27,10 +27,30 @@ import android.content.Context;
 import com.raizlabs.android.dbflow.config.FlowConfig;
 import com.raizlabs.android.dbflow.config.FlowManager;
 
+import org.acra.ACRA;
+import org.acra.ReportField;
+import org.acra.ReportingInteractionMode;
+import org.acra.annotation.ReportsCrashes;
+
 import de.kuschku.libquassel.localtypes.orm.ConnectedDatabase;
 
+@ReportsCrashes(
+        formUri = "https://reports.kuschku.de/report/2/",
+        reportType = org.acra.sender.HttpSender.Type.JSON,
+        httpMethod = org.acra.sender.HttpSender.Method.POST,
+        customReportContent = {
+                ReportField.APP_VERSION_CODE,
+                ReportField.APP_VERSION_NAME,
+                ReportField.ANDROID_VERSION,
+                ReportField.PACKAGE_NAME,
+                ReportField.REPORT_ID,
+                ReportField.BUILD,
+                ReportField.STACK_TRACE
+        },
+        mode = ReportingInteractionMode.TOAST,
+        resToastText = R.string.notification_report_crash
+)
 public class QuasselDroidNG extends Application {
-
     private static Context applicationContext;
 
     public static Context context() {
@@ -40,7 +60,11 @@ public class QuasselDroidNG extends Application {
     @Override
     public void onCreate() {
         super.onCreate();
+
+        ACRA.init(this);
+
         applicationContext = getApplicationContext();
+
         FlowManager.init(new FlowConfig.Builder(this).build());
         FlowManager.getDatabase(ConnectedDatabase.class).getWritableDatabase();
     }
diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/fragment/ChatFragment.java b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/fragment/ChatFragment.java
index 1bff0eb3909d0cb8582d6a95a981b5f4f254b12f..ab349f567d6a1a7076d6fc87b3ea0a92d7e4a23d 100644
--- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/fragment/ChatFragment.java
+++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/fragment/ChatFragment.java
@@ -30,6 +30,7 @@ import android.support.v7.widget.RecyclerView;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
+import android.widget.AbsListView;
 
 import com.sothree.slidinguppanel.SlidingUpPanelLayout;
 
@@ -56,13 +57,13 @@ public class ChatFragment extends BoundFragment {
      */
     @Bind(R.id.messages)
     RecyclerView messages;
-    @Bind(R.id.swipe_view)
-    SwipeRefreshLayout swipeView;
+
     @Bind(R.id.sliding_layout)
     SlidingUpPanelLayout sliderMain;
 
     private MessageAdapter messageAdapter;
     private LinearLayoutManager layoutManager;
+    private boolean loading = false;
 
     @Nullable
     @Override
@@ -79,14 +80,18 @@ public class ChatFragment extends BoundFragment {
         messageAdapter = new MessageAdapter(getActivity(), context, new AutoScroller(messages));
         messages.setAdapter(messageAdapter);
 
-        swipeView.setColorSchemeColors(context.themeUtil().res.colorPrimary);
-        swipeView.setEnabled(false);
-        swipeView.setOnRefreshListener(() -> {
-            Client client = context.client();
-            assertNotNull(client);
-            QBacklogManager<? extends QBacklogManager> backlogManager = client.backlogManager();
-            assertNotNull(backlogManager);
-            backlogManager.requestMoreBacklog(client.backlogManager().open(), 20);
+        messages.addOnScrollListener(new RecyclerView.OnScrollListener() {
+            @Override
+            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
+                if (!loading && !recyclerView.canScrollVertically(-1)) {
+                    Client client = context.client();
+                    assertNotNull(client);
+                    QBacklogManager<? extends QBacklogManager> backlogManager = client.backlogManager();
+                    assertNotNull(backlogManager);
+                    backlogManager.requestMoreBacklog(client.backlogManager().open(), 20);
+                    loading = true;
+                }
+            }
         });
 
         return view;
@@ -101,11 +106,7 @@ public class ChatFragment extends BoundFragment {
             int id = backlogManager.open();
             ObservableComparableSortedList<Message> messageList = backlogManager.filtered(id);
             messageAdapter.setMessageList(messageList);
-            swipeView.setEnabled(id != -1);
-
             // Load markerline
-        } else {
-            swipeView.setEnabled(false);
         }
     }
 
@@ -127,7 +128,7 @@ public class ChatFragment extends BoundFragment {
     public void onEventMainThread(BacklogReceivedEvent event) {
         Client client = context.client();
         if (client != null && client.backlogManager().open() == event.bufferId) {
-            swipeView.setRefreshing(false);
+            loading = false;
         }
     }
 }
diff --git a/app/src/main/res/layout/fragment_chat.xml b/app/src/main/res/layout/fragment_chat.xml
index b7053461b94feb75a05ff6253a6752fb8a60ca67..1006263389777ff8a31a9627434bdbd562ddd80c 100644
--- a/app/src/main/res/layout/fragment_chat.xml
+++ b/app/src/main/res/layout/fragment_chat.xml
@@ -34,17 +34,11 @@
     app:umanoShadowHeight="4dp"
     tools:showIn="@layout/activity_chat">
 
-    <de.kuschku.quasseldroid_ng.ui.chat.util.ScrollRefreshLayout
-        android:id="@+id/swipe_view"
+    <android.support.v7.widget.RecyclerView
+        android:id="@+id/messages"
         android:layout_width="match_parent"
-        android:layout_height="match_parent">
-
-        <android.support.v7.widget.RecyclerView
-            android:id="@+id/messages"
-            android:layout_width="match_parent"
-            android:layout_height="match_parent"
-            android:clickable="true" />
-    </de.kuschku.quasseldroid_ng.ui.chat.util.ScrollRefreshLayout>
+        android:layout_height="match_parent"
+        android:clickable="true" />
 
     <include layout="@layout/widget_slider" />
 
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index ae9ebc859451dd4ea8195067844ff14e7d7e4751..d94f0e3a04d545b6ebf2d342f04cfb41a9767b22 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -80,4 +80,5 @@
     <string name="statusConnected">Connected</string>
     <string name="statusWelcome">Welcome!</string>
     <string name="statusDisconnected">Connection lost</string>
+    <string name="notification_report_crash">Reporting Crashes</string>
 </resources>