diff --git a/CHANGELOG.md b/CHANGELOG.md
index 6a7b323c4..502730a1d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -14,11 +14,11 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/).
 
 ### Changed
 
+  * Only show video error modal if you are on the video page & don't retry to play failed videos ([#1768](https://github.com/lbryio/lbry-desktop/pull/1768))
   * Actually hide NSFW files if a user chooses to hide NSFW content via the settings page ([#1748](https://github.com/lbryio/lbry-desktop/pull/1748))
   * Hide the "Community top bids" section if user chooses to hide NSFW content ([#1760](https://github.com/lbryio/lbry-desktop/pull/1760))
 
 
-
 ## [0.22.2] - 2018-07-09
 
 ### Fixed
diff --git a/package.json b/package.json
index 0300cf5d0..da2241252 100644
--- a/package.json
+++ b/package.json
@@ -48,7 +48,7 @@
     "formik": "^0.10.4",
     "hast-util-sanitize": "^1.1.2",
     "keytar": "^4.2.1",
-    "lbry-redux": "lbryio/lbry-redux#177ef2c1916f9672e713267500e447d671ae1bc3",
+    "lbry-redux": "lbryio/lbry-redux#e0909b08647a790d155f3189b9f9bf0b3e55bd17",
     "localforage": "^1.7.1",
     "mime": "^2.3.1",
     "mixpanel-browser": "^2.17.1",
diff --git a/src/renderer/component/fileViewer/index.js b/src/renderer/component/fileViewer/index.js
index 00ef7c3c0..2e77b38d4 100644
--- a/src/renderer/component/fileViewer/index.js
+++ b/src/renderer/component/fileViewer/index.js
@@ -17,6 +17,7 @@ import {
 import { makeSelectClientSetting, selectShowNsfw } from 'redux/selectors/settings';
 import { selectMediaPaused, makeSelectMediaPositionForUri } from 'redux/selectors/media';
 import { selectPlayingUri } from 'redux/selectors/content';
+import { selectFileInfoErrors } from 'redux/selectors/file_info';
 import FileViewer from './view';
 
 const select = (state, props) => ({
@@ -34,6 +35,7 @@ const select = (state, props) => ({
   mediaPosition: makeSelectMediaPositionForUri(props.uri)(state),
   autoplay: makeSelectClientSetting(settings.AUTOPLAY)(state),
   searchBarFocused: selectSearchBarFocused(state),
+  fileInfoErrors: selectFileInfoErrors(state)
 });
 
 const perform = dispatch => ({
diff --git a/src/renderer/component/fileViewer/view.jsx b/src/renderer/component/fileViewer/view.jsx
index 2a0d9f53d..406c25186 100644
--- a/src/renderer/component/fileViewer/view.jsx
+++ b/src/renderer/component/fileViewer/view.jsx
@@ -17,6 +17,9 @@ type Props = {
     download_path: string,
     completed: boolean,
   },
+  fileInfoErrors: ?{
+    [string]: boolean,
+  },
   metadata: ?{
     nsfw: boolean,
     thumbnail: string,
@@ -55,14 +58,17 @@ class FileViewer extends React.PureComponent<Props> {
     window.addEventListener('keydown', this.handleKeyDown);
   }
 
-  componentWillReceiveProps(nextProps: Props) {
+  componentDidUpdate(prev: Props) {
     if (
-      this.props.autoplay !== nextProps.autoplay ||
-      this.props.fileInfo !== nextProps.fileInfo ||
-      this.props.isDownloading !== nextProps.isDownloading ||
-      this.props.playingUri !== nextProps.playingUri
+      this.props.autoplay !== prev.autoplay ||
+      this.props.fileInfo !== prev.fileInfo ||
+      this.props.isDownloading !== prev.isDownloading ||
+      this.props.playingUri !== prev.playingUri
     ) {
-      this.handleAutoplay(nextProps);
+      // suppress autoplay after download error
+      if (!(this.props.uri in this.props.fileInfoErrors)) {
+        this.handleAutoplay(this.props);
+      }
     }
   }
 
diff --git a/src/renderer/redux/actions/content.js b/src/renderer/redux/actions/content.js
index f16d89f6f..04808b6e1 100644
--- a/src/renderer/redux/actions/content.js
+++ b/src/renderer/redux/actions/content.js
@@ -171,7 +171,7 @@ export function doUpdateLoadStatus(uri, outpoint) {
       } else {
         // ready to play
         const { total_bytes: totalBytes, written_bytes: writtenBytes } = fileInfo;
-        const progress = writtenBytes / totalBytes * 100;
+        const progress = (writtenBytes / totalBytes) * 100;
 
         dispatch({
           type: ACTIONS.DOWNLOADING_PROGRESSED,
@@ -259,29 +259,37 @@ export function doLoadVideo(uri) {
           streamInfo === null || typeof streamInfo !== 'object' || streamInfo.error === 'Timeout';
 
         if (timeout) {
-          dispatch(doSetPlayingUri(null));
-          dispatch({
-            type: ACTIONS.LOADING_VIDEO_FAILED,
-            data: { uri },
-          });
-
-          dispatch(doNotify({ id: MODALS.FILE_TIMEOUT }, { uri }));
+          dispatch(handleLoadVideoError(uri, 'timeout'));
         } else {
           dispatch(doDownloadFile(uri, streamInfo));
         }
       })
       .catch(() => {
-        dispatch(doSetPlayingUri(null));
-        dispatch({
-          type: ACTIONS.LOADING_VIDEO_FAILED,
-          data: { uri },
-        });
+        dispatch(handleLoadVideoError(uri));
+      });
+  };
+}
+
+function handleLoadVideoError(uri, errorType = '') {
+  return (dispatch, getState) => {
+    // suppress error when another media is playing
+    const { playingUri } = getState().content;
+    if (playingUri && playingUri === uri) {
+      dispatch({
+        type: ACTIONS.LOADING_VIDEO_FAILED,
+        data: { uri },
+      });
+      dispatch(doSetPlayingUri(null));
+      if (errorType === 'timeout') {
+        doNotify({ id: MODALS.FILE_TIMEOUT }, { uri });
+      } else {
         dispatch(
           doAlertError(
             `Failed to download ${uri}, please try again. If this problem persists, visit https://lbry.io/faq/support for support.`
           )
         );
-      });
+      }
+    }
   };
 }
 
diff --git a/src/renderer/redux/selectors/file_info.js b/src/renderer/redux/selectors/file_info.js
index 801ced0b4..d49f2e9a2 100644
--- a/src/renderer/redux/selectors/file_info.js
+++ b/src/renderer/redux/selectors/file_info.js
@@ -3,9 +3,9 @@ import {
   selectIsFetchingClaimListMine,
   selectMyClaims,
   selectClaimsById,
-} from 'redux/selectors/claims';
+  buildURI,
+} from 'lbry-redux';
 import { createSelector } from 'reselect';
-import { buildURI } from 'lbryURI';
 
 export const selectState = state => state.fileInfo || {};
 
@@ -97,7 +97,7 @@ export const selectTotalDownloadProgress = createSelector(selectDownloadingFileI
   const progress = [];
 
   fileInfos.forEach(fileInfo => {
-    progress.push(fileInfo.written_bytes / fileInfo.total_bytes * 100);
+    progress.push((fileInfo.written_bytes / fileInfo.total_bytes) * 100);
   });
 
   const totalProgress = progress.reduce((a, b) => a + b, 0);
@@ -195,3 +195,5 @@ export const selectSearchDownloadUris = query =>
         })
       : null;
   });
+
+export const selectFileInfoErrors = createSelector(selectState, state => state.errors || {});