diff --git a/commands/helpers/cache_extractor.go b/commands/helpers/cache_extractor.go
index 4221f9154b1e444bda9c9dc62566d2aed4bbdf04..7cee47990d15f50bd4f63eaa2c6e0f9a3e8de334 100644
--- a/commands/helpers/cache_extractor.go
+++ b/commands/helpers/cache_extractor.go
@@ -35,16 +35,15 @@ func (c *CacheExtractorCommand) getClient() *CacheClient {
 	return c.client
 }
 
+func checkIfUpToDate(path string, resp *http.Response) (bool, time.Time) {
+	fi, _ := os.Lstat(path)
+	date, _ := time.Parse(http.TimeFormat, resp.Header.Get("Last-Modified"))
+	return fi != nil && !date.After(fi.ModTime()), date
+}
+
 func (c *CacheExtractorCommand) download() (bool, error) {
 	os.MkdirAll(filepath.Dir(c.File), 0700)
 
-	file, err := ioutil.TempFile(filepath.Dir(c.File), "cache")
-	if err != nil {
-		return false, err
-	}
-	defer file.Close()
-	defer os.Remove(file.Name())
-
 	resp, err := c.getClient().Get(c.URL)
 	if err != nil {
 		return true, err
@@ -59,13 +58,19 @@ func (c *CacheExtractorCommand) download() (bool, error) {
 		return retry, fmt.Errorf("Received: %s", resp.Status)
 	}
 
-	fi, _ := os.Lstat(c.File)
-	date, _ := time.Parse(http.TimeFormat, resp.Header.Get("Last-Modified"))
-	if fi != nil && !date.After(fi.ModTime()) {
+	upToDate, date := checkIfUpToDate(c.File, resp)
+	if upToDate {
 		logrus.Infoln(filepath.Base(c.File), "is up to date")
 		return false, nil
 	}
 
+	file, err := ioutil.TempFile(filepath.Dir(c.File), "cache")
+	if err != nil {
+		return false, err
+	}
+	defer os.Remove(file.Name())
+	defer file.Close()
+
 	logrus.Infoln("Downloading", filepath.Base(c.File), "from", url_helpers.CleanURL(c.URL))
 	_, err = io.Copy(file, resp.Body)
 	if err != nil {
@@ -73,6 +78,11 @@ func (c *CacheExtractorCommand) download() (bool, error) {
 	}
 	os.Chtimes(file.Name(), time.Now(), date)
 
+	err = file.Close()
+	if err != nil {
+		return false, err
+	}
+
 	err = os.Rename(file.Name(), c.File)
 	if err != nil {
 		return false, err