diff --git a/js/glowingbear.js b/js/glowingbear.js
index c6524e7..7c0e067 100644
--- a/js/glowingbear.js
+++ b/js/glowingbear.js
@@ -466,7 +466,7 @@ function($rootScope,
         // Indicator that we are loading lines, hides "load more lines" link
         $rootScope.loadingLines = true;
         // Send hdata request to fetch lines for this particular buffer
-        ngWebsockets.send(
+        return ngWebsockets.send(
             weeChat.Protocol.formatHdata({
                 // "0x" is important, otherwise it won't work
                 path: "buffer:0x" + buffer.id + "/own_lines/last_line(-" + numLines + ")/data",
@@ -718,7 +718,16 @@ weechat.controller('WeechatCtrl', ['$rootScope', '$scope', '$store', '$timeout',
                 // request up to 4*(screenful + 10 lines)
                 numLines = Math.min(4*numLines, unreadSum);
             }
-            $scope.fetchMoreLines(numLines);
+            $scope.fetchMoreLines(numLines).then(
+                // Update initial scroll position
+                // Most relevant when first connecting to properly initalise
+                function() {
+                    $timeout(function() {
+                        var bufferlines = document.getElementById("bufferlines");
+                        $rootScope.originalBufferlinesPosition = bufferlines.scrollTop + bufferlines.scrollHeight;
+                    });
+                }
+            );
         }
         $rootScope.updateTitle(ab);
 
@@ -920,6 +929,16 @@ weechat.controller('WeechatCtrl', ['$rootScope', '$scope', '$store', '$timeout',
             }
             $scope.wasMobileUi = $scope.isMobileUi();
             $scope.calculateNumLines();
+
+            // if we're scrolled to the bottom, scroll down to the same position after the resize
+            // most common use case: opening the keyboard on a mobile device
+            var bufferlines = document.getElementById("bufferlines");
+            if ($rootScope.originalBufferlinesPosition === bufferlines.scrollHeight + bufferlines.scrollTop) {
+                $timeout(function() {
+                    bufferlines.scrollTop = bufferlines.scrollHeight;
+                }, 100);
+            }
+            $rootScope.originalBufferlinesPosition = bufferlines.scrollTop + bufferlines.scrollHeight;
         }
     }, 100));
 
@@ -929,7 +948,7 @@ weechat.controller('WeechatCtrl', ['$rootScope', '$scope', '$store', '$timeout',
         if (!numLines) {
             numLines = $scope.lines;
         }
-        connection.fetchMoreLines(numLines);
+        return connection.fetchMoreLines(numLines);
     };
 
     $rootScope.scrollWithBuffer = function(nonIncremental) {