diff --git a/res/css/structures/_TabbedView.scss b/res/css/structures/_TabbedView.scss
index 6e435b8e75..29e7c401e6 100644
--- a/res/css/structures/_TabbedView.scss
+++ b/res/css/structures/_TabbedView.scss
@@ -64,7 +64,7 @@ limitations under the License.
     background-color: $tab-label-icon-bg-color;
     mask-repeat: no-repeat;
     mask-size: 16px;
-    width: 14px;
+    width: 16px;
     height: 22px;
     mask-position: center;
     content: '';
diff --git a/res/css/views/elements/_ImageView.scss b/res/css/views/elements/_ImageView.scss
index 9bf23b1025..52b6a63699 100644
--- a/res/css/views/elements/_ImageView.scss
+++ b/res/css/views/elements/_ImageView.scss
@@ -77,7 +77,8 @@ limitations under the License.
 
 .mx_ImageView_cancel {
     position: absolute;
-    top: 0px;
+    // hack for mx_Dialog having a top padding of 40px
+    top: 40px;
     right: 0px;
     padding: 35px;
     cursor: pointer;
diff --git a/res/css/views/rooms/_EventTile.scss b/res/css/views/rooms/_EventTile.scss
index a8f34565b5..24a23a0f98 100644
--- a/res/css/views/rooms/_EventTile.scss
+++ b/res/css/views/rooms/_EventTile.scss
@@ -278,6 +278,10 @@ limitations under the License.
 
 /* End to end encryption stuff */
 
+.mx_EventTile_e2eIcon:hover {
+    opacity: 1;
+}
+
 .mx_EventTile_e2eIcon {
     display: block;
     position: absolute;
@@ -289,6 +293,7 @@ limitations under the License.
     mask-size: 14px;
     mask-repeat: no-repeat;
     mask-position: 0;
+    opacity: 0.2;
 }
 
 .mx_EventTile_e2eIcon_undecryptable, .mx_EventTile_e2eIcon_unverified {
diff --git a/src/components/structures/LoggedInView.js b/src/components/structures/LoggedInView.js
index 2303083d98..2e1b91fe0e 100644
--- a/src/components/structures/LoggedInView.js
+++ b/src/components/structures/LoggedInView.js
@@ -31,6 +31,7 @@ import sessionStore from '../../stores/SessionStore';
 import MatrixClientPeg from '../../MatrixClientPeg';
 import SettingsStore from "../../settings/SettingsStore";
 import RoomListStore from "../../stores/RoomListStore";
+import { getHomePageUrl } from '../../utils/pages';
 
 import TagOrderActions from '../../actions/TagOrderActions';
 import RoomListActions from '../../actions/RoomListActions';
@@ -459,17 +460,7 @@ const LoggedInView = React.createClass({
 
             case PageTypes.HomePage:
                 {
-                    const pagesConfig = this.props.config.embeddedPages;
-                    let pageUrl = null;
-                    if (pagesConfig) {
-                        pageUrl = pagesConfig.homeUrl;
-                    }
-                    if (!pageUrl) {
-                        // This is a deprecated config option for the home page
-                        // (despite the name, given we also now have a welcome
-                        // page, which is not the same).
-                        pageUrl = this.props.config.welcomePageUrl;
-                    }
+                    const pageUrl = getHomePageUrl(this.props.config);
                     pageElement = <EmbeddedPage className="mx_HomePage"
                         url={pageUrl}
                         scrollbar={true}
diff --git a/src/components/structures/MatrixChat.js b/src/components/structures/MatrixChat.js
index e534ced577..8bc1fbdd07 100644
--- a/src/components/structures/MatrixChat.js
+++ b/src/components/structures/MatrixChat.js
@@ -40,6 +40,7 @@ import * as Lifecycle from '../../Lifecycle';
 // LifecycleStore is not used but does listen to and dispatch actions
 require('../../stores/LifecycleStore');
 import PageTypes from '../../PageTypes';
+import { getHomePageUrl } from '../../utils/pages';
 
 import createRoom from "../../createRoom";
 import KeyRequestHandler from '../../KeyRequestHandler';
@@ -1198,8 +1199,12 @@ export default React.createClass({
         } else {
             if (MatrixClientPeg.get().isGuest()) {
                 dis.dispatch({action: 'view_welcome_page'});
-            } else {
+            } else if (getHomePageUrl(this.props.config)) {
                 dis.dispatch({action: 'view_home_page'});
+            } else {
+                this.firstSyncPromise.promise.then(() => {
+                    dis.dispatch({action: 'view_next_room'});
+                });
             }
         }
     },
diff --git a/src/components/structures/ScrollPanel.js b/src/components/structures/ScrollPanel.js
index 1df5e876e8..a1a7d08e0b 100644
--- a/src/components/structures/ScrollPanel.js
+++ b/src/components/structures/ScrollPanel.js
@@ -211,6 +211,14 @@ module.exports = React.createClass({
         // forget what we wanted, so don't overwrite the saved state unless
         // this appears to be a user-initiated scroll.
         if (sn.scrollTop != this._lastSetScroll) {
+            // when scrolling, we don't care about disappearing typing notifs shrinking the timeline
+            // this might cause the scrollbar to resize in case the max-height was not correct
+            // but that's better than ending up with a lot of whitespace at the bottom of the timeline.
+            // we need to above check because when showing the typing notifs, an onScroll event is also triggered
+            if (!this.isAtBottom()) {
+                this.clearBlockShrinking();
+            }
+
             this._saveScrollState();
         } else {
             debuglog("Ignoring scroll echo");
diff --git a/src/components/views/dialogs/RedesignFeedbackDialog.js b/src/components/views/dialogs/RedesignFeedbackDialog.js
index c428aca16a..8f345bdd92 100644
--- a/src/components/views/dialogs/RedesignFeedbackDialog.js
+++ b/src/components/views/dialogs/RedesignFeedbackDialog.js
@@ -20,14 +20,12 @@ import { _t } from '../../../languageHandler';
 
 export default (props) => {
     const existingIssuesUrl = "https://github.com/vector-im/riot-web/issues" +
-        "?q=is%3Aopen+is%3Aissue+label%3Aredesign+sort%3Areactions-%2B1-desc";
-    const newIssueUrl = "https://github.com/vector-im/riot-web/issues/new" +
-        "?assignees=&labels=redesign&template=redesign_issue.md&title=";
+        "?q=is%3Aopen+is%3Aissue+sort%3Areactions-%2B1-desc";
+    const newIssueUrl = "https://github.com/vector-im/riot-web/issues/new";
 
     const description1 =
-        _t("Thanks for testing the Riot Redesign. " +
-            "If you run into any bugs or visual issues, " +
-            "please let us know on GitHub.");
+        _t("If you run into any bugs or have feedback you'd like to share, " +
+           "please let us know on GitHub.");
     const description2 = _t("To help avoid duplicate issues, " +
         "please <existingIssuesLink>view existing issues</existingIssuesLink> " +
         "first (and add a +1) or <newIssueLink>create a new issue</newIssueLink> " +
diff --git a/src/components/views/elements/LazyRenderList.js b/src/components/views/elements/LazyRenderList.js
index 1c1cc127d6..d7d2a0ab99 100644
--- a/src/components/views/elements/LazyRenderList.js
+++ b/src/components/views/elements/LazyRenderList.js
@@ -73,12 +73,6 @@ export default class LazyRenderList extends React.Component {
         }
     }
 
-    shouldComponentUpdate(nextProps, nextState) {
-        const itemsChanged = nextProps.items !== this.props.items;
-        const rangeChanged = nextState.renderRange !== this.state.renderRange;
-        return itemsChanged || rangeChanged;
-    }
-
     render() {
         const {itemHeight, items, renderItem} = this.props;
 
diff --git a/src/components/views/settings/tabs/HelpSettingsTab.js b/src/components/views/settings/tabs/HelpSettingsTab.js
index 524bddf3b1..4ad62451cb 100644
--- a/src/components/views/settings/tabs/HelpSettingsTab.js
+++ b/src/components/views/settings/tabs/HelpSettingsTab.js
@@ -126,6 +126,26 @@ export default class HelpSettingsTab extends React.Component {
         );
     }
 
+    _renderCredits() {
+        // Note: This is not translated because it is legal text.
+        // Also, &nbsp; is ugly but necessary.
+        return (
+            <div className='mx_SettingsTab_section'>
+                <span className='mx_SettingsTab_subheading'>{_t("Credits")}</span>
+                <ul>
+                    <li>
+                        The <a href="themes/riot/img/backgrounds/valley.jpg" rel="noopener" target="_blank">
+                        default cover photo</a> is (C)&nbsp;
+                        <a href="https://www.flickr.com/golan" rel="noopener" target="_blank">Jesús Roncero</a>&nbsp;
+                        used under the terms of&nbsp;
+                        <a href="https://creativecommons.org/licenses/by-sa/4.0/" rel="noopener" target="_blank">
+                        CC-BY-SA 4.0</a>. No warranties are given.
+                    </li>
+                </ul>
+            </div>
+        );
+    }
+
     render() {
         let faqText = _t('For help with using Riot, click <a>here</a>.', {}, {
             'a': (sub) => <a href="https://about.riot.im/need-help/" rel='noopener' target='_blank'>{sub}</a>,
@@ -211,6 +231,7 @@ export default class HelpSettingsTab extends React.Component {
                     </div>
                 </div>
                 {this._renderLegal()}
+                {this._renderCredits()}
                 <div className='mx_SettingsTab_section mx_HelpSettingsTab_versions'>
                     <span className='mx_SettingsTab_subheading'>{_t("Advanced")}</span>
                     <div className='mx_SettingsTab_subsectionText'>
diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json
index fe41beb7ae..6c40e395ba 100644
--- a/src/i18n/strings/en_EN.json
+++ b/src/i18n/strings/en_EN.json
@@ -528,6 +528,7 @@
     "Deactivating your account is a permanent action - be careful!": "Deactivating your account is a permanent action - be careful!",
     "Deactivate Account": "Deactivate Account",
     "Legal": "Legal",
+    "Credits": "Credits",
     "For help with using Riot, click <a>here</a>.": "For help with using Riot, click <a>here</a>.",
     "For help with using Riot, click <a>here</a> or start a chat with our bot using the button below.": "For help with using Riot, click <a>here</a> or start a chat with our bot using the button below.",
     "Chat with Riot Bot": "Chat with Riot Bot",
@@ -1106,7 +1107,7 @@
     "Manually export keys": "Manually export keys",
     "You'll lose access to your encrypted messages": "You'll lose access to your encrypted messages",
     "Are you sure you want to sign out?": "Are you sure you want to sign out?",
-    "Thanks for testing the Riot Redesign. If you run into any bugs or visual issues, please let us know on GitHub.": "Thanks for testing the Riot Redesign. If you run into any bugs or visual issues, please let us know on GitHub.",
+    "If you run into any bugs or have feedback you'd like to share, please let us know on GitHub.": "If you run into any bugs or have feedback you'd like to share, please let us know on GitHub.",
     "To help avoid duplicate issues, please <existingIssuesLink>view existing issues</existingIssuesLink> first (and add a +1) or <newIssueLink>create a new issue</newIssueLink> if you can't find it.": "To help avoid duplicate issues, please <existingIssuesLink>view existing issues</existingIssuesLink> first (and add a +1) or <newIssueLink>create a new issue</newIssueLink> if you can't find it.",
     "Report bugs & give feedback": "Report bugs & give feedback",
     "Go back": "Go back",
diff --git a/src/settings/Settings.js b/src/settings/Settings.js
index 4108848033..bb3cf9330c 100644
--- a/src/settings/Settings.js
+++ b/src/settings/Settings.js
@@ -324,12 +324,12 @@ export const SETTINGS = {
     "pinMentionedRooms": {
         supportedLevels: LEVELS_ACCOUNT_SETTINGS,
         displayName: _td("Pin rooms I'm mentioned in to the top of the room list"),
-        default: false,
+        default: true,
     },
     "pinUnreadRooms": {
         supportedLevels: LEVELS_ACCOUNT_SETTINGS,
         displayName: _td("Pin unread rooms to the top of the room list"),
-        default: false,
+        default: true,
     },
     "enableWidgetScreenshots": {
         supportedLevels: LEVELS_ACCOUNT_SETTINGS,
diff --git a/src/utils/pages.js b/src/utils/pages.js
new file mode 100644
index 0000000000..d63ca3f2c7
--- /dev/null
+++ b/src/utils/pages.js
@@ -0,0 +1,31 @@
+/*
+Copyright 2019 New Vector Ltd
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+export function getHomePageUrl(appConfig) {
+    const pagesConfig = appConfig.embeddedPages;
+    let pageUrl = null;
+    if (pagesConfig) {
+        pageUrl = pagesConfig.homeUrl;
+    }
+    if (!pageUrl) {
+        // This is a deprecated config option for the home page
+        // (despite the name, given we also now have a welcome
+        // page, which is not the same).
+        pageUrl = appConfig.welcomePageUrl;
+    }
+
+    return pageUrl;
+}