Rex Dieter 0ba12b0
diff --git a/app/batchextract.cpp b/app/batchextract.cpp
Rex Dieter 0ba12b0
index 9e466350568384247e99362745205c417b27873f..86f946b18f94f83b42d4bcd0bc320e6a5a3e7e64 100644
Rex Dieter 0ba12b0
--- a/app/batchextract.cpp
Rex Dieter 0ba12b0
+++ b/app/batchextract.cpp
Rex Dieter 0ba12b0
@@ -68,9 +68,9 @@ void BatchExtract::addExtraction(Kerfuffle::Archive* archive)
Rex Dieter 0ba12b0
 {
Rex Dieter 0ba12b0
     QString destination = destinationFolder();
Rex Dieter 1a425c6
 
Rex Dieter 0ba12b0
-    if ((autoSubfolder()) && (!archive->isSingleFolderArchive())) {
Rex Dieter 0ba12b0
+    if ((autoSubfolder()) && (!archive->isSingleFolderArchive() || !archive->fileBaseName().startsWith(archive->subfolderName()))) {
Rex Dieter 0ba12b0
         const QDir d(destination);
Rex Dieter 0ba12b0
-        QString subfolderName = archive->subfolderName();
Rex Dieter 0ba12b0
+        QString subfolderName = archive->fileBaseName();
Rex Dieter 1a425c6
 
Rex Dieter 0ba12b0
         if (d.exists(subfolderName)) {
Rex Dieter 0ba12b0
             subfolderName = KIO::RenameDialog::suggestName(destination, subfolderName);
Rex Dieter 0ba12b0
diff --git a/kerfuffle/archive.h b/kerfuffle/archive.h
Rex Dieter 0ba12b0
index 515788f978c1d29146c25dcb57a9dad2d46371f7..38049f2c949eb2ab804fc61f9da9336e6e848b77 100644
Rex Dieter 0ba12b0
--- a/kerfuffle/archive.h
Rex Dieter 0ba12b0
+++ b/kerfuffle/archive.h
Rex Dieter 0ba12b0
@@ -95,6 +95,7 @@ public:
Rex Dieter 0ba12b0
     ~Archive();
Rex Dieter 0ba12b0
 
Rex Dieter 0ba12b0
     QString fileName() const;
Rex Dieter 0ba12b0
+    QString fileBaseName() const;
Rex Dieter 0ba12b0
     bool isReadOnly() const;
Rex Dieter 0ba12b0
 
Rex Dieter 0ba12b0
     KJob* open();
Rex Dieter 1a425c6
diff --git a/kerfuffle/archive.cpp b/kerfuffle/archive.cpp
Rex Dieter 1a425c6
index c2c5b18528def63405a8703475b1c592ca945973..470fc56879a2d5e579389b69591da9f230af74ea 100644
Rex Dieter 1a425c6
--- a/kerfuffle/archive.cpp
Rex Dieter 1a425c6
+++ b/kerfuffle/archive.cpp
Rex Dieter 1a425c6
@@ -196,6 +196,16 @@ QString Archive::fileName() const
Rex Dieter 1a425c6
     return m_iface->filename();
Rex Dieter 1a425c6
 }
Rex Dieter 1a425c6
 
Rex Dieter 1a425c6
+QString Archive::fileBaseName() const
Rex Dieter 1a425c6
+{
Rex Dieter 1a425c6
+    QString base = QFileInfo(m_iface->filename()).completeBaseName();
Rex Dieter 1a425c6
+    //special case for tar.gz/bzip2 files
Rex Dieter 1a425c6
+    if (base.right(4).toUpper() == QLatin1String(".TAR")) {
Rex Dieter 1a425c6
+        base.chop(4);
Rex Dieter 1a425c6
+    }
Rex Dieter 1a425c6
+    return base;
Rex Dieter 1a425c6
+}
Rex Dieter 1a425c6
+
Rex Dieter 1a425c6
 void Archive::onAddFinished(KJob* job)
Rex Dieter 1a425c6
 {
Rex Dieter 1a425c6
     //if the archive was previously a single folder archive and an add job
Rex Dieter 1a425c6
@@ -217,15 +227,7 @@ void Archive::onListFinished(KJob* job)
Rex Dieter 1a425c6
     m_isPasswordProtected = ljob->isPasswordProtected();
Rex Dieter 1a425c6
     m_subfolderName = ljob->subfolderName();
Rex Dieter 1a425c6
     if (m_subfolderName.isEmpty()) {
Rex Dieter 1a425c6
-        QFileInfo fi(fileName());
Rex Dieter 1a425c6
-        QString base = fi.completeBaseName();
Rex Dieter 1a425c6
-
Rex Dieter 1a425c6
-        //special case for tar.gz/bzip2 files
Rex Dieter 1a425c6
-        if (base.right(4).toUpper() == QLatin1String(".TAR")) {
Rex Dieter 1a425c6
-            base.chop(4);
Rex Dieter 1a425c6
-        }
Rex Dieter 1a425c6
-
Rex Dieter 1a425c6
-        m_subfolderName = base;
Rex Dieter 1a425c6
+        m_subfolderName = fileBaseName();
Rex Dieter 1a425c6
     }
Rex Dieter 1a425c6
 
Rex Dieter 1a425c6
     m_hasBeenListed = true;
Rex Dieter 0ba12b0
diff --git a/kerfuffle/jobs.cpp b/kerfuffle/jobs.cpp
Rex Dieter 0ba12b0
index aedc62c4c9902c4f3207c648747f2e427446d5e5..de16439ce46283956e7741662bda19d1e8e591fa 100644
Rex Dieter 0ba12b0
--- a/kerfuffle/jobs.cpp
Rex Dieter 0ba12b0
+++ b/kerfuffle/jobs.cpp
Rex Dieter 0ba12b0
@@ -217,7 +217,8 @@ void ListJob::onNewEntry(const ArchiveEntry& entry)
Rex Dieter 0ba12b0
     m_isPasswordProtected |= entry [ IsPasswordProtected ].toBool();
Rex Dieter 1a425c6
 
Rex Dieter 0ba12b0
     if (m_isSingleFolderArchive) {
Rex Dieter 0ba12b0
-        const QString fileName(entry[FileName].toString());
Rex Dieter 0ba12b0
+        const QString fileName(entry[FileName].toString()
Rex Dieter 0ba12b0
+		             .replace(QRegExp(QString::fromAscii("^\\./")), QString()));
Rex Dieter 0ba12b0
         const QString basePath(fileName.split(QLatin1Char( '/' )).at(0));
Rex Dieter 1a425c6
 
Rex Dieter 0ba12b0
         if (m_basePath.isEmpty()) {