diff --git a/src/plugins/projectexplorer/outputwindow.cpp b/src/plugins/projectexplorer/outputwindow.cpp
index 5384ee5ccb78f39faf3f81d06f52051564486ed1..98c3c13beee4f0b7e0fb74d331928203d4a92505 100644
--- a/src/plugins/projectexplorer/outputwindow.cpp
+++ b/src/plugins/projectexplorer/outputwindow.cpp
@@ -568,6 +568,27 @@ void OutputWindow::mouseMoveEvent(QMouseEvent *e)
     QPlainTextEdit::mouseMoveEvent(e);
 }
 
+void OutputWindow::resizeEvent(QResizeEvent *e)
+{
+    //Keep scrollbar at bottom of window while resizing, to ensure we keep scrolling
+    //This can happen if window is resized while building, or if the horizontal scrollbar appears
+    bool atBottom = isScrollbarAtBottom();
+    QPlainTextEdit::resizeEvent(e);
+    if (atBottom)
+        scrollToBottom();
+}
+
+void OutputWindow::keyPressEvent(QKeyEvent *ev)
+{
+    QPlainTextEdit::keyPressEvent(ev);
+
+    //Ensure we scroll also on Ctrl+Home or Ctrl+End
+    if (ev->matches(QKeySequence::MoveToStartOfDocument))
+        verticalScrollBar()->triggerAction(QAbstractSlider::SliderToMinimum);
+    else if (ev->matches(QKeySequence::MoveToEndOfDocument))
+        verticalScrollBar()->triggerAction(QAbstractSlider::SliderToMaximum);
+}
+
 OutputFormatter *OutputWindow::formatter() const
 {
     return m_formatter;
diff --git a/src/plugins/projectexplorer/outputwindow.h b/src/plugins/projectexplorer/outputwindow.h
index ad6999ea1dd739999c11c22ede94afcff46f2f68..6e7dfd41327fb9c53dce06ab7e2764052fe16419 100644
--- a/src/plugins/projectexplorer/outputwindow.h
+++ b/src/plugins/projectexplorer/outputwindow.h
@@ -175,6 +175,8 @@ protected:
     virtual void mousePressEvent(QMouseEvent *e);
     virtual void mouseReleaseEvent(QMouseEvent *e);
     virtual void mouseMoveEvent(QMouseEvent *e);
+    virtual void resizeEvent(QResizeEvent *e);
+    virtual void keyPressEvent(QKeyEvent *ev);
 
 private slots:
     void updateWordWrapMode();