Index: GUI/Retriever.cs
===================================================================
--- GUI/Retriever.cs	(revision 181)
+++ GUI/Retriever.cs	(working copy)
@@ -61,12 +61,14 @@
         public delegate void OnSubtitleSearchCompletedDelegate(List<SubtitleItem> subtitleItems, bool canceled);
         public delegate void OnSubtitleDownloadedToTempDelegate(BasicMediaDetail mediaDetail, List<FileInfo> subtitleFiles);
         public delegate void OnSubtitleDownloadedDelegate(BasicMediaDetail mediaDetail, List<SubtitleDownloadStatus> statusList);
+        public delegate void OnSubtitlesDownloadErrorDelegate(Exception e);
 
         public event OnProviderSearchErrorDelegate OnProviderSearchErrorEvent;
         public event OnSubtitlesSearchErrorDelegate OnSubtitlesSearchErrorEvent;
         public event OnSubtitleSearchCompletedDelegate OnSubtitleSearchCompletedEvent;
         public event OnSubtitleDownloadedToTempDelegate OnSubtitleDownloadedToTempEvent;
         public event OnSubtitleDownloadedDelegate OnSubtitleDownloadedEvent;
+        public event OnSubtitlesDownloadErrorDelegate OnSubtitlesDownloadErrorEvent;
         #endregion
 
         #region Public Constants
@@ -453,7 +455,42 @@
         #endregion
 
         #region Download
-        public void DownloadSubtitle(SubtitleItem subtitleItem, BasicMediaDetail mediaDetail, FolderSelectionItem folderSelectionItem, SubtitlesSearchType searchType, bool skipDefaults) {
+        public void DownloadSubtitle(SubtitleItem subtitleItem, BasicMediaDetail mediaDetail, FolderSelectionItem folderSelectionItem, SubtitlesSearchType searchType, bool skipDefaults)
+        {
+            if (IsCanceled())
+                Kill();
+            if (_subtitlesDownloaderThread != null && _subtitlesDownloaderThread.IsAlive)
+                return;
+
+            _isCanceled = false;
+            _status = ThreadStatus.StatusEnded;
+
+            DownloadData downloadData = new DownloadData
+            {
+                SubtitleItem = subtitleItem,
+                MediaDetail = mediaDetail,
+                FolderSelectionItem = folderSelectionItem,
+                SearchType = searchType,
+                SkipDefaults = skipDefaults
+            };
+
+            _subtitlesDownloaderThread = new Thread(DownloadSubtitleAsync);
+            _subtitlesDownloaderThread.IsBackground = true;
+            _subtitlesDownloaderThread.Name = "Subtitles Downloader Thread";
+            _subtitlesDownloaderThread.Start(downloadData);
+        }
+
+        public void DownloadSubtitleAsync(object downloadDataObj) {
+            DownloadData downloadData = downloadDataObj as DownloadData;
+            if (downloadData == null)
+                throw new ArgumentException("Download data are of wrong data type", "downloadDataObj");
+
+            SubtitleItem subtitleItem = downloadData.SubtitleItem;
+            BasicMediaDetail mediaDetail = downloadData.MediaDetail;
+            FolderSelectionItem folderSelectionItem = downloadData.FolderSelectionItem;
+            SubtitlesSearchType searchType = downloadData.SearchType;
+            bool skipDefaults = downloadData.SkipDefaults;
+
             logger.Info("Downloading subtitles...");
 
             _status = ThreadStatus.StatusStartedWithWaitCursor;
@@ -478,6 +515,8 @@
                 catch (Exception e) {
                     logger.ErrorException("Error on downloading to temporary folder\n", e);
                     subtitleFiles = null;
+                    if (OnSubtitlesDownloadErrorEvent != null)
+                        OnSubtitlesDownloadErrorEvent(e);
                 }
 
                 if (OnSubtitleDownloadedToTempEvent != null)
@@ -710,5 +749,13 @@
             public int SubtitleIndex { get; set; }
             public int MediaIndex { get; set; }
         }
+
+        private class DownloadData {
+            public SubtitleItem SubtitleItem { get; set; }
+            public BasicMediaDetail MediaDetail { get; set; }
+            public FolderSelectionItem FolderSelectionItem { get; set; }
+            public SubtitlesSearchType SearchType { get; set; }
+            public bool SkipDefaults { get; set; }
+        }
     }
 }
\ No newline at end of file
Index: GUI/SubCentralGUI.cs
===================================================================
--- GUI/SubCentralGUI.cs	(revision 181)
+++ GUI/SubCentralGUI.cs	(working copy)
@@ -221,6 +221,7 @@
             retriever.OnSubtitlesSearchErrorEvent += new Retriever.OnSubtitlesSearchErrorDelegate(retriever_OnSubtitlesSearchErrorEvent);
             retriever.OnSubtitleDownloadedToTempEvent += new Retriever.OnSubtitleDownloadedToTempDelegate(retriever_OnSubtitleDownloadedToTempEvent);
             retriever.OnSubtitleDownloadedEvent += new Retriever.OnSubtitleDownloadedDelegate(retriever_OnSubtitleDownloadedEvent);
+            retriever.OnSubtitlesDownloadErrorEvent += new Retriever.OnSubtitlesDownloadErrorDelegate(retriever_OnSubtitlesDownloadErrorEvent);
 
             GUIUtils.SetProperty("#SubCentral.About", Localization.AboutText);
 
@@ -573,7 +574,7 @@
                         GUIUtils.ShowNotifyDialog(Localization.Error, Localization.SiteDoesNotSupportTVShowSearch, GUIUtils.NoSubtitlesLogoThumbPath);
                         break;
                     default:
-                        GUIUtils.ShowNotifyDialog(Localization.Error, Localization.ErrorWhileRetrievingSubtitles, GUIUtils.NoSubtitlesLogoThumbPath);
+                        GUIUtils.ShowNotifyDialog(Localization.Error, Localization.ErrorWhileRetrievingSubtitlesWithReason, GUIUtils.NoSubtitlesLogoThumbPath);
                         break;
                 }
             }
@@ -581,7 +582,7 @@
                 GUIUtils.ShowNotifyDialog(Localization.Error, Localization.TimedOutWhileRetrievingSubtitles, GUIUtils.NoSubtitlesLogoThumbPath);
             }
             else {
-                GUIUtils.ShowNotifyDialog(Localization.Error, Localization.ErrorWhileRetrievingSubtitles, GUIUtils.NoSubtitlesLogoThumbPath);
+                GUIUtils.ShowNotifyDialog(Localization.Error, string.Format(Localization.ErrorWhileRetrievingSubtitlesWithReason, e.Message), GUIUtils.NoSubtitlesLogoThumbPath);
             }
             _notificationDone = true;
         }
@@ -590,10 +591,18 @@
             retriever.OnProviderSearchErrorEvent -= retriever_OnProviderSearchErrorEvent;
             //HideWaitCursor();
             logger.ErrorException("Error while retrieving subtitles\n", e);
-            GUIUtils.ShowNotifyDialog(Localization.Error, Localization.ErrorWhileRetrievingSubtitles, GUIUtils.NoSubtitlesLogoThumbPath);
+            GUIUtils.ShowNotifyDialog(Localization.Error, string.Format(Localization.ErrorWhileRetrievingSubtitlesWithReason, e.Message), GUIUtils.NoSubtitlesLogoThumbPath);
             _notificationDone = false;
         }
 
+        void retriever_OnSubtitlesDownloadErrorEvent(Exception e)
+        {
+            //HideWaitCursor();
+            logger.ErrorException("Error while downloading subtitles\n", e);
+            GUIUtils.ShowNotifyDialog(Localization.Error, string.Format(Localization.ErrorWhileDownloadingSubtitlesWithReason, e.Message), GUIUtils.NoSubtitlesLogoThumbPath);
+            _notificationDone = false;
+        }
+
         private bool RetrieverRunning() {
             if (retriever == null) return false;
             else return retriever.IsRunning();
Index: Localizations/Localization.cs
===================================================================
--- Localizations/Localization.cs	(revision 181)
+++ Localizations/Localization.cs	(working copy)
@@ -205,6 +205,7 @@
         public static string ErrorWhileDownloadingSubtitles = "Error(s) downloading subtitles!";
         public static string ErrorWhileDownloadingSubtitlesWithReason = "Error downloading subtitles: {0}";
         public static string ErrorWhileRetrievingSubtitles = "Error retrieving subtitles!";
+        public static string ErrorWhileRetrievingSubtitlesWithReason = "Error retrieving subtitles: {0}";
         public static string ErrorWhileCreatingDirectory = "Error creating directory!";
 
         // F
