diff --git a/tika-core/src/main/java/org/apache/tika/io/TikaInputStream.java b/tika-core/src/main/java/org/apache/tika/io/TikaInputStream.java
index 8103811..e5840b7 100644
--- a/tika-core/src/main/java/org/apache/tika/io/TikaInputStream.java
+++ b/tika-core/src/main/java/org/apache/tika/io/TikaInputStream.java
@@ -420,7 +420,7 @@ public class TikaInputStream extends TaggedInputStream {
      * @throws FileNotFoundException if the file does not exist
      */
     private TikaInputStream(File file) throws FileNotFoundException {
-        super(new BufferedInputStream(new FileInputStream(file)));
+        super(new CountingInputStream(new BufferedInputStream(new FileInputStream(file))));
         this.file = file;
         this.tmp = new TemporaryFiles();
         this.length = file.length();
@@ -435,12 +435,16 @@ public class TikaInputStream extends TaggedInputStream {
      */
     private TikaInputStream(
             InputStream stream, TemporaryFiles tmp, long length) {
-        super(withBufferingAndMarkSupport(stream));
+        super(new CountingInputStream(withBufferingAndMarkSupport(stream)));
         this.file = null;
         this.tmp = tmp;
         this.length = length;
     }
 
+    public CountingInputStream getCountingInputStream() {
+        return (CountingInputStream) in;
+    }
+
     /**
      * Fills the given buffer with upcoming bytes from this stream without
      * advancing the current stream position. The buffer is filled up unless
@@ -511,7 +515,7 @@ public class TikaInputStream extends TaggedInputStream {
                 }
                 in.close();
                 // Re-point the stream at the file now we have it
-                in = new BufferedInputStream(new FileInputStream(file));
+                in = new CountingInputStream(new BufferedInputStream(new FileInputStream(file)));
             }
         }
         return file;
diff --git a/tika-core/src/main/java/org/apache/tika/parser/AutoDetectParser.java b/tika-core/src/main/java/org/apache/tika/parser/AutoDetectParser.java
index 7f26178..75dd445 100644
--- a/tika-core/src/main/java/org/apache/tika/parser/AutoDetectParser.java
+++ b/tika-core/src/main/java/org/apache/tika/parser/AutoDetectParser.java
@@ -127,12 +127,20 @@ public class AutoDetectParser extends CompositeParser {
         metadata.set(Metadata.CONTENT_TYPE, type.toString());
 
         // TIKA-216: Zip bomb prevention
-        CountingInputStream count = new CountingInputStream(stream);
+        CountingInputStream count;
+
+        if (stream instanceof TikaInputStream) {
+            count = ((TikaInputStream) stream).getCountingInputStream();
+        } else {
+            count = new CountingInputStream(stream);
+            stream = count;
+        }
+
         SecureContentHandler secure = new SecureContentHandler(handler, count);
 
         // Parse the document
         try {
-            super.parse(count, secure, metadata, context);
+            super.parse(stream, secure, metadata, context);
         } catch (SAXException e) {
             // Convert zip bomb exceptions to TikaExceptions
             secure.throwIfCauseOf(e);
diff --git a/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/OOXMLExtractorFactory.java b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/OOXMLExtractorFactory.java
index 90de33b..d5c4a92 100644
--- a/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/OOXMLExtractorFactory.java
+++ b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/OOXMLExtractorFactory.java
@@ -62,6 +62,9 @@ public class OOXMLExtractorFactory {
                poiExtractor = ExtractorFactory.createExtractor(
                     (OPCPackage)((TikaInputStream)stream).getOpenContainer()
                );
+            } if (stream instanceof TikaInputStream &&
+                    ((TikaInputStream) stream).hasFile()) {
+               poiExtractor = (POIXMLTextExtractor) ExtractorFactory.createExtractor(((TikaInputStream) stream).getFile());
             } else {
                poiExtractor = (POIXMLTextExtractor) ExtractorFactory.createExtractor(stream);
             }
