return;
       }
 
-      Status = StatError;
+      switch (Status)
+      {
+        case StatIdle:
+        case StatFetching:
+        case StatDone:
+           Status = StatError;
+           break;
+        case StatAuthError:
+        case StatError:
+        case StatTransientNetworkError:
+           break;
+      }
       Complete = false;
       Dequeue();
    }
       RenameOnError(MaximumSizeExceeded);
 
    // report mirror failure back to LP if we actually use a mirror
-   if(FailReason.size() != 0)
+   if(FailReason.empty() == false)
       ReportMirrorFailure(FailReason);
    else
       ReportMirrorFailure(ErrorText);
 {
    Item::Failed(Message,Cnf);
 
-   size_t const nextExt = CompressionExtensions.find(' ');
-   if (nextExt != std::string::npos)
+   // authorisation matches will not be fixed by other compression types
+   if (Status != StatAuthError)
    {
-      CompressionExtensions = CompressionExtensions.substr(nextExt+1);
-      Init(RealURI, Desc.Description, Desc.ShortDesc);
-      Status = StatIdle;
-      return;
+      size_t const nextExt = CompressionExtensions.find(' ');
+      if (nextExt != std::string::npos)
+      {
+        CompressionExtensions = CompressionExtensions.substr(nextExt+1);
+        Init(RealURI, Desc.Description, Desc.ShortDesc);
+        Status = StatIdle;
+        return;
+      }
    }
 
-   Item::Failed(Message,Cnf);
-
    if(Target->IsOptional() && ExpectedHashes.empty() && Stage == STAGE_DOWNLOAD)
       Status = StatDone;
    else
 
 methodtest() {
        msgmsg 'Test InRelease with' "$1"
        rm -rf rootdir/var/lib/apt/lists
+       cp -a aptarchive/dists  aptarchive/dists.good
        # get our cache populated
        testsuccess aptget update
        listcurrentlistsdirectory > listsdir.lst
 Reading package lists..." aptget update
        testfileequal 'listsdir-without-amd64.lst' "$(listcurrentlistsdirectory)"
 
-       # readd arch so its downloaded again
+       # readd arch so its downloaded again…
        configarchitecture 'amd64' 'i386'
+       # … but oh noes, hashsum mismatch!
+       find aptarchive/dists/unstable/main/binary-amd64/ -type f -delete
+       cat >> aptarchive/dists/unstable/main/binary-amd64/Packages <<EOF
+
+Package: thisisbad
+Architecture: amd64
+Version: 1
+EOF
+       compressfile aptarchive/dists/unstable/main/binary-amd64/Packages
+       testfailureequal "Hit $1 unstable InRelease
+Get:1 $1 unstable/main amd64 Packages [$(stat -c '%s' 'aptarchive/dists.good/unstable/main/binary-amd64/Packages.gz') B]
+W: Failed to fetch $1/dists/unstable/main/binary-amd64/Packages.gz  Hash Sum mismatch
+
+E: Some index files failed to download. They have been ignored, or old ones used instead." aptget update
+       testfileequal 'listsdir-without-amd64.lst' "$(listcurrentlistsdirectory)"
+       rm -rf aptarchive/dists
+       cp -a aptarchive/dists.good aptarchive/dists
+
+       # … now everything is fine again
        testsuccessequal "Hit $1 unstable InRelease
 Get:1 $1 unstable/main amd64 Packages [$(stat -c '%s' 'aptarchive/dists/unstable/main/binary-amd64/Packages.gz') B]
 Reading package lists..." aptget update
 
        msgmsg 'Test Release.gpg with' "$1"
        rm -rf rootdir/var/lib/apt/lists
-       cp -a aptarchive/dists  aptarchive/dists.good
        find aptarchive/dists -name 'InRelease' -delete
        # get our cache populated
        testsuccess aptget update
 
     break_repository_sources_index '+1hour'
 
     # test the error condition
-    testfailureequal "W: Failed to fetch file:${APTARCHIVE}/dists/unstable/main/source/Sources  Hash Sum mismatch
+    testfailureequal "W: Failed to fetch file:${APTARCHIVE}/dists/unstable/main/source/Sources.gz  Hash Sum mismatch
 
 E: Some index files failed to download. They have been ignored, or old ones used instead." aptget update -qq
     # ensure that the Packages file is also rolled back
     add_new_package '+1hour'
     break_repository_sources_index '+1hour'
 
-    testfailureequal "W: Failed to fetch file:$APTARCHIVE/dists/unstable/main/source/Sources  Hash Sum mismatch
+    testfailureequal "W: Failed to fetch file:$APTARCHIVE/dists/unstable/main/source/Sources.gz  Hash Sum mismatch
 
 E: Some index files failed to download. They have been ignored, or old ones used instead." aptget update -qq
 
 
 
 setupenvironment
 configarchitecture 'i386'
+configcompression '.' 'gz'
 
 insertpackage 'unstable' 'foo' 'all' '1.0'
 insertsource 'unstable' 'foo' 'all' '1.0'
 setupaptarchive --no-update
 
 breakfile() {
-       mv "$1" "${1}.bak"
+       mv "${1}" "${1}.bak"
+       mv "${1}.gz" "${1}.gz.bak"
        cat > "$1" <<EOF
 Package: bar
 EOF
 }
 restorefile() {
        mv "${1}.bak" "$1"
+       mv "${1}.gz.bak" "${1}.gz"
 }
 
 testrun() {
        testrun 'listsdir.lst'
 
        msgmsg 'Test with initial data over' "$1"
-       testsuccess aptget update
+       rm -rf rootdir/var/lib/apt/lists
+       testsuccess aptget update -o Debug::pkgAcquire::Worker=1
        listcurrentlistsdirectory > listsdir.lst
        redatereleasefiles '+1hour'
        testrun 'listsdir.lst'