diff --git a/src/Text/Pandoc/Class.hs b/src/Text/Pandoc/Class.hs
index 11b827aba..da9b837f7 100644
--- a/src/Text/Pandoc/Class.hs
+++ b/src/Text/Pandoc/Class.hs
@@ -102,6 +102,7 @@ import System.IO.Error
 import qualified Data.Map as M
 import Text.Pandoc.Error
 import Data.Monoid
+import Data.Maybe (catMaybes)
 
 class (Functor m, Applicative m, Monad m, MonadError PandocError m)
       => PandocMonad m where
@@ -188,15 +189,27 @@ instance Monoid DeferredMediaBag where
   mappend (DeferredMediaBag mb lst) (DeferredMediaBag mb' lst') =
     DeferredMediaBag (mb <> mb') (lst <> lst')
 
+    
+-- the internal function for downloading individual items. We want to
+-- catch errors and return a Nothing with a warning, so we can
+-- continue without erroring out.
+fetchMediaItem :: PandocMonad m
+               => DeferredMediaPath
+               -> m (Maybe (FilePath, B.ByteString, Maybe MimeType))
+fetchMediaItem dfp =
+  (do (bs, mbmime) <- downloadOrRead Nothing (unDefer dfp)
+      return $ Just $ (unDefer dfp, bs, mbmime))
+  `catchError`
+  (const $ do warning ("Couldn't access media at " ++ unDefer dfp)
+              return Nothing)
+
 fetchDeferredMedia' :: PandocMonad m => m MediaBag
 fetchDeferredMedia' = do
   (DeferredMediaBag mb defMedia) <- getsCommonState stDeferredMediaBag
-  fetchedMedia <- mapM (\dfp -> downloadOrRead Nothing (unDefer dfp)) defMedia
+  fetchedMedia <- catMaybes <$> mapM fetchMediaItem defMedia
   return $ foldr
-    (\(dfp, (bs, mbMime)) mb' ->
-       MB.insertMedia (unDefer dfp) mbMime (BL.fromStrict bs) mb')
-    mb
-    (zip defMedia fetchedMedia)
+    (\(fp, bs, mbMime) mb' -> MB.insertMedia fp mbMime (BL.fromStrict bs) mb')
+    mb fetchedMedia
 
 fetchDeferredMedia :: PandocMonad m => m ()
 fetchDeferredMedia = fetchDeferredMedia' >>= setMediaBag