diff --git a/sickbeard/versionChecker.py b/sickbeard/versionChecker.py
index a57af18982645a81a00cac1ae553774aafe3c58e..df421aee00f94667547ec27f8c7223fea2516f8f 100644
--- a/sickbeard/versionChecker.py
+++ b/sickbeard/versionChecker.py
@@ -20,7 +20,7 @@ import sickbeard
 from sickbeard import helpers, version
 from sickbeard import logger
 
-import os, os.path, platform
+import os, os.path, platform, shutil, time
 import subprocess, re
 import urllib, urllib2
 import zipfile, tarfile
@@ -139,21 +139,38 @@ class WindowsUpdateManager(UpdateManager):
             logger.log(u"Downloading update file from "+str(new_link))
             (filename, headers) = urllib.urlretrieve(new_link)
 
-            # unzip it to sb-update
+            # prepare the update dir
             sb_update_dir = os.path.join(sickbeard.PROG_DIR, 'sb-update')
+            logger.log(u"Clearing out update folder "+sb_update_dir+" before unzipping")
+            if os.path.isdir(sb_update_dir):
+                shutil.rmtree(sb_update_dir)
+
+            # unzip it to sb-update
             logger.log(u"Unzipping from "+str(filename)+" to "+sb_update_dir)
             update_zip = zipfile.ZipFile(filename, 'r')
             update_zip.extractall(sb_update_dir)
             update_zip.close()
+            
+            # find update dir name
+            update_dir_contents = os.listdir(sb_update_dir)
+            if len(update_dir_contents) != 1:
+                logger.log("Invalid update data, update failed.", logger.ERROR)
+                return False
+
+            content_dir = os.path.join(sb_update_dir, update_dir_contents[0])
+            old_update_path = os.path.join(content_dir, 'updater.exe')
+            new_update_path = os.path.join(sickbeard.PROG_DIR, 'updater.exe')
+            logger.log(u"Copying new update.exe file from "+old_update_path+" to "+new_update_path)
+            shutil.move(old_update_path, new_update_path)
+
+            # delete the zip
+            logger.log(u"Deleting zip file from "+str(filename))
+            os.remove(filename)
 
         except Exception, e:
             logger.log(u"Error while trying to update: "+str(e).decode('utf-8'), logger.ERROR)
             return False
 
-        # delete the zip
-        logger.log(u"Deleting old update file from "+str(filename))
-        os.remove(filename)
-
         return True
 
 class GitUpdateManager(UpdateManager):