You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tika.apache.org by ta...@apache.org on 2023/10/03 18:54:16 UTC

[tika] 01/01: TIKA-4132 -- remove some deprecated code, remove deprecation warnings and deprecate AbstractParser,

This is an automated email from the ASF dual-hosted git repository.

tallison pushed a commit to branch TIKA-4132
in repository https://gitbox.apache.org/repos/asf/tika.git

commit 196529481661334be96819c4ccb833cce12d97e1
Author: tallison <ta...@apache.org>
AuthorDate: Tue Oct 3 14:53:57 2023 -0400

    TIKA-4132 -- remove some deprecated code, remove deprecation warnings and deprecate AbstractParser,
---
 CHANGES.txt                                        |  2 +
 .../src/main/java/org/apache/tika/cli/TikaCLI.java |  2 -
 .../src/main/java/org/apache/tika/gui/TikaGUI.java |  3 +-
 .../org/apache/tika/batch/fs/FSFileResource.java   | 12 ----
 .../org/apache/tika/batch/fs/FSListCrawler.java    | 26 --------
 .../tika/batch/fs/FSOutputStreamFactory.java       | 14 -----
 .../main/java/org/apache/tika/util/PropsUtil.java  | 26 --------
 .../java/org/apache/tika/config/TikaConfig.java    |  6 --
 .../tika/extractor/EmbeddedDocumentUtil.java       | 16 -----
 .../main/java/org/apache/tika/fork/ForkParser.java | 35 +----------
 .../java/org/apache/tika/io/TikaInputStream.java   | 11 ----
 .../parser/AbstractEncodingDetectorParser.java     |  2 +-
 .../tika/parser/AbstractExternalProcessParser.java |  2 +-
 .../org/apache/tika/parser/AbstractParser.java     |  2 +
 .../apache/tika/parser/AutoDetectParserConfig.java |  5 --
 .../org/apache/tika/parser/CompositeParser.java    |  2 +-
 .../org/apache/tika/parser/DelegatingParser.java   |  2 +-
 .../java/org/apache/tika/parser/EmptyParser.java   |  2 +-
 .../java/org/apache/tika/parser/ErrorParser.java   |  2 +-
 .../java/org/apache/tika/parser/NetworkParser.java |  2 +-
 .../org/apache/tika/parser/ParserDecorator.java    |  2 +-
 .../org/apache/tika/parser/RegexCaptureParser.java | 11 +---
 .../tika/parser/external/ExternalParser.java       |  4 +-
 .../tika/parser/external2/ExternalParser.java      |  3 +-
 .../parser/multiple/AbstractMultipleParser.java    |  3 +-
 .../apache/tika/pipes/CompositePipesReporter.java  | 12 +---
 .../tika/pipes/fetcher/fs/FileSystemFetcher.java   |  4 --
 .../tika/sax/BasicContentHandlerFactory.java       |  6 --
 .../org/apache/tika/sax/BodyContentHandler.java    | 11 ----
 .../tika/sax/ContentHandlerDecoratorFactory.java   |  9 ---
 .../org/apache/tika/sax/ContentHandlerFactory.java |  8 ---
 .../org/apache/tika/sax/ToTextContentHandler.java  | 12 ----
 .../apache/tika/sax/WriteOutContentHandler.java    | 15 -----
 .../java/org/apache/tika/fork/ForkParserTest.java  | 13 ----
 .../java/org/apache/tika/fork/ForkTestParser.java  |  4 +-
 .../tika/parser/DummyInitializableParser.java      |  2 +-
 .../tika/parser/DummyParameterizedParser.java      |  2 +-
 .../java/org/apache/tika/parser/DummyParser.java   |  2 +-
 .../org/apache/tika/parser/mock/MockParser.java    |  3 +-
 .../tika/sax/BasicContentHandlerFactoryTest.java   | 21 +++----
 .../apache/tika/sax/BodyContentHandlerTest.java    |  5 +-
 .../java/org/apache/tika/eval/app/db/JDBCUtil.java | 28 ---------
 .../eval/core/tokens/CommonTokenCountManager.java  | 31 ---------
 .../tika/example/EncryptedPrescriptionParser.java  |  4 +-
 .../tika/example/PickBestTextEncodingParser.java   |  8 ---
 .../org/apache/tika/example/SpringExample.java     |  5 +-
 .../org/apache/tika/example/TIAParsingExample.java | 11 ++--
 .../org/apache/custom/parser/MyCustomParser.java   |  4 +-
 .../org/apache/tika/parser/gdal/GDALParser.java    |  4 +-
 .../geoinfo/GeographicInformationParser.java       |  4 +-
 .../org/apache/tika/parser/grib/GribParser.java    |  4 +-
 .../java/org/apache/tika/parser/hdf/HDFParser.java |  4 +-
 .../apache/tika/parser/netcdf/NetCDFParser.java    |  3 +-
 .../apache/tika/parser/sqlite3/SQLite3Parser.java  |  4 +-
 .../tika/parser/recognition/AgeRecogniser.java     |  4 +-
 .../tika/parser/pot/PooledTimeSeriesParser.java    |  3 +-
 .../recognition/ObjectRecognitionParser.java       |  4 +-
 .../apache/tika/parser/geo/topic/GeoParser.java    |  4 +-
 .../apache/tika/parser/journal/JournalParser.java  |  4 +-
 .../apache/tika/parser/ner/NamedEntityParser.java  |  4 +-
 .../parser/sentiment/SentimentAnalysisParser.java  |  4 +-
 .../parser/transcribe/aws/AmazonTranscribe.java    |  4 +-
 .../tika/parser/apple/AppleSingleFileParser.java   |  4 +-
 .../org/apache/tika/parser/apple/PListParser.java  |  4 +-
 .../tika/parser/iwork/IWorkPackageParser.java      |  4 +-
 .../parser/iwork/iwana/IWork13PackageParser.java   |  4 +-
 .../parser/iwork/iwana/IWork18PackageParser.java   |  4 +-
 .../apache/tika/parser/iwork/IWorkParserTest.java  |  3 +-
 .../org/apache/tika/parser/audio/AudioParser.java  |  4 +-
 .../org/apache/tika/parser/audio/MidiParser.java   |  4 +-
 .../java/org/apache/tika/parser/mp3/Mp3Parser.java |  4 +-
 .../java/org/apache/tika/parser/mp4/MP4Parser.java |  4 +-
 .../org/apache/tika/parser/video/FLVParser.java    |  4 +-
 .../org/apache/tika/parser/dgn/DGN8Parser.java     |  4 +-
 .../apache/tika/parser/dwg/AbstractDWGParser.java  |  6 +-
 .../java/org/apache/tika/parser/prt/PRTParser.java |  4 +-
 .../org/apache/tika/parser/prt/PRTParserTest.java  |  5 +-
 .../org/apache/tika/parser/asm/ClassParser.java    |  4 +-
 .../tika/parser/executable/ExecutableParser.java   |  4 +-
 .../java/org/apache/tika/parser/mat/MatParser.java |  4 +-
 .../org/apache/tika/parser/sas/SAS7BDATParser.java |  4 +-
 .../org/apache/tika/parser/crypto/Pkcs7Parser.java |  3 +-
 .../org/apache/tika/parser/crypto/TSDParser.java   |  4 +-
 .../tika/parser/digestutils/CommonsDigester.java   |  1 -
 .../tika/parser/font/AdobeFontMetricParser.java    |  4 +-
 .../apache/tika/parser/font/TrueTypeParser.java    |  4 +-
 .../org/apache/tika/parser/html/HtmlHandler.java   | 14 -----
 .../tika/parser/image/AbstractImageParser.java     |  3 +-
 .../org/apache/tika/parser/image/ICNSParser.java   |  4 +-
 .../org/apache/tika/parser/image/JXLParser.java    |  4 +-
 .../org/apache/tika/parser/image/PSDParser.java    |  4 +-
 .../org/apache/tika/parser/image/WebPParser.java   |  4 +-
 .../apache/tika/parser/jdbc/AbstractDBParser.java  |  4 +-
 .../org/apache/tika/parser/mail/RFC822Parser.java  |  4 +-
 .../org/apache/tika/parser/mbox/MboxParser.java    |  4 +-
 .../detect/microsoft/POIFSContainerDetector.java   | 12 ----
 .../parser/microsoft/AbstractOfficeParser.java     |  4 +-
 .../parser/microsoft/AbstractPOIFSExtractor.java   | 12 +---
 .../apache/tika/parser/microsoft/EMFParser.java    |  4 +-
 .../tika/parser/microsoft/JackcessParser.java      |  4 +-
 .../tika/parser/microsoft/MSOwnerFileParser.java   |  4 +-
 .../tika/parser/microsoft/OldExcelParser.java      |  4 +-
 .../tika/parser/microsoft/OutlookExtractor.java    | 73 +++++-----------------
 .../apache/tika/parser/microsoft/TNEFParser.java   |  4 +-
 .../apache/tika/parser/microsoft/WMFParser.java    |  4 +-
 .../microsoft/activemime/ActiveMimeParser.java     |  4 +-
 .../tika/parser/microsoft/chm/ChmParser.java       |  3 +-
 .../parser/microsoft/onenote/OneNoteParser.java    |  4 +-
 .../ooxml/XWPFWordExtractorDecorator.java          | 11 ----
 .../parser/microsoft/pst/OutlookPSTParser.java     |  4 +-
 .../tika/parser/microsoft/rtf/RTFParser.java       | 30 +--------
 .../microsoft/xml/AbstractXML2003Parser.java       |  4 +-
 .../java/org/apache/tika/parser/dbf/DBFParser.java |  4 +-
 .../java/org/apache/tika/parser/dif/DIFParser.java |  4 +-
 .../apache/tika/parser/epub/EpubContentParser.java |  4 +-
 .../org/apache/tika/parser/epub/EpubParser.java    |  3 +-
 .../org/apache/tika/parser/hwp/HwpV5Parser.java    |  4 +-
 .../apache/tika/parser/indesign/IDMLParser.java    |  4 +-
 .../tika/parser/odf/FlatOpenDocumentParser.java    |  4 +-
 .../tika/parser/odf/OpenDocumentContentParser.java |  4 +-
 .../apache/tika/parser/odf/OpenDocumentParser.java |  3 +-
 .../tika/parser/wordperfect/QuattroProParser.java  |  4 +-
 .../tika/parser/wordperfect/WordPerfectParser.java |  4 +-
 .../org/apache/tika/parser/odf/ODFParserTest.java  |  4 +-
 .../org/apache/tika/parser/feed/FeedParser.java    |  4 +-
 .../java/org/apache/tika/parser/pdf/PDFParser.java | 21 +------
 .../apache/tika/parser/pkg/CompressorParser.java   |  4 +-
 .../org/apache/tika/parser/pkg/PackageParser.java  |  1 +
 .../java/org/apache/tika/parser/pkg/RarParser.java |  4 +-
 .../org/apache/tika/parser/pkg/UnrarParser.java    |  4 +-
 .../apache/tika/parser/pkg/AbstractPkgTest.java    |  3 +-
 .../tika/parser/strings/Latin1StringsParser.java   |  4 +-
 .../apache/tika/parser/strings/StringsParser.java  |  4 +-
 .../org/apache/tika/parser/http/HttpParser.java    |  4 +-
 .../org/apache/tika/parser/wacz/WACZParser.java    |  4 +-
 .../org/apache/tika/parser/warc/WARCParser.java    |  4 +-
 .../java/org/apache/tika/parser/tmx/TMXParser.java |  4 +-
 .../apache/tika/parser/xliff/XLIFF12Parser.java    |  4 +-
 .../org/apache/tika/parser/xliff/XLZParser.java    |  3 +-
 .../java/org/apache/tika/parser/xml/XMLParser.java |  4 +-
 .../org/apache/tika/parser/xml/XMLProfiler.java    |  4 +-
 .../apache/tika/parser/xml/DcXMLParserTest.java    |  5 +-
 .../parser/xml/TextAndAttributeXMLParserTest.java  |  8 +--
 .../apache/tika/parser/AutoDetectParserTest.java   |  2 +-
 .../java/org/apache/tika/parser/XMLTestBase.java   |  4 +-
 .../DoublingContentHandlerDecoratorFactory.java    |  5 --
 .../UpcasingContentHandlerDecoratorFactory.java    |  4 --
 .../apache/tika/pipes/fetcher/s3/S3Fetcher.java    |  9 ---
 .../server/core/DefaultInputStreamFactory.java     |  6 --
 .../tika/server/core/FetcherStreamFactory.java     |  7 ---
 .../tika/server/core/InputStreamFactory.java       | 13 ----
 151 files changed, 247 insertions(+), 737 deletions(-)

diff --git a/CHANGES.txt b/CHANGES.txt
index 4ede898b6..375bece96 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -16,6 +16,8 @@ Release 3.0.0-BETA - ??
 
    Other Changes/Updates
 
+   * Deprecated AbstractParser for removal in 4.x (TIKA-4132).
+
    * Fix bug in DateUtils that stripped timezone information from
      incoming Calendar objects (TIKA-4126).
 
diff --git a/tika-app/src/main/java/org/apache/tika/cli/TikaCLI.java b/tika-app/src/main/java/org/apache/tika/cli/TikaCLI.java
index 97ec89629..6ae0f8ca7 100644
--- a/tika-app/src/main/java/org/apache/tika/cli/TikaCLI.java
+++ b/tika-app/src/main/java/org/apache/tika/cli/TikaCLI.java
@@ -701,8 +701,6 @@ public class TikaCLI {
             parser = new AutoDetectParser(config);
             if (digester != null) {
                 parser = new DigestingParser(parser, digester, false);
-                LOG.info("As of Tika 2.5.0, you can set the digester via the AutoDetectParserConfig in " +
-                        "tika-config.xml. We plan to remove this commandline option in 2.8.0");
             }
         }
         detector = config.getDetector();
diff --git a/tika-app/src/main/java/org/apache/tika/gui/TikaGUI.java b/tika-app/src/main/java/org/apache/tika/gui/TikaGUI.java
index 8bb54ac5e..b58b39257 100644
--- a/tika-app/src/main/java/org/apache/tika/gui/TikaGUI.java
+++ b/tika-app/src/main/java/org/apache/tika/gui/TikaGUI.java
@@ -77,7 +77,6 @@ import org.apache.tika.metadata.Metadata;
 import org.apache.tika.metadata.TikaCoreProperties;
 import org.apache.tika.metadata.serialization.JsonMetadataList;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.AutoDetectParser;
 import org.apache.tika.parser.DigestingParser;
 import org.apache.tika.parser.ParseContext;
@@ -590,7 +589,7 @@ public class TikaGUI extends JFrame implements ActionListener, HyperlinkListener
      * directory, and delegates everything else to another downstream
      * parser.
      */
-    private static class ImageSavingParser extends AbstractParser {
+    private static class ImageSavingParser implements Parser {
         private Map<String, File> wanted = new HashMap<>();
         private Parser downstreamParser;
         private File tmpDir;
diff --git a/tika-batch/src/main/java/org/apache/tika/batch/fs/FSFileResource.java b/tika-batch/src/main/java/org/apache/tika/batch/fs/FSFileResource.java
index ab95c023f..34d19a818 100644
--- a/tika-batch/src/main/java/org/apache/tika/batch/fs/FSFileResource.java
+++ b/tika-batch/src/main/java/org/apache/tika/batch/fs/FSFileResource.java
@@ -16,12 +16,10 @@
  */
 package org.apache.tika.batch.fs;
 
-import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
 import java.nio.file.Files;
 import java.nio.file.Path;
-import java.nio.file.Paths;
 import java.util.Locale;
 
 import org.apache.tika.batch.FileResource;
@@ -46,16 +44,6 @@ public class FSFileResource implements FileResource {
     private final String relativePath;
     private final Metadata metadata;
 
-    /**
-     * @param inputRoot
-     * @param fullPath
-     * @see FSFileResource#FSFileResource(Path, Path)
-     * @deprecated to be removed in Tika 2.0
-     */
-    @Deprecated
-    public FSFileResource(File inputRoot, File fullPath) {
-        this(Paths.get(inputRoot.getAbsolutePath()), Paths.get(fullPath.getAbsolutePath()));
-    }
 
     /**
      * Constructor
diff --git a/tika-batch/src/main/java/org/apache/tika/batch/fs/FSListCrawler.java b/tika-batch/src/main/java/org/apache/tika/batch/fs/FSListCrawler.java
index 8f5bfac6a..a8326e5c8 100644
--- a/tika-batch/src/main/java/org/apache/tika/batch/fs/FSListCrawler.java
+++ b/tika-batch/src/main/java/org/apache/tika/batch/fs/FSListCrawler.java
@@ -18,12 +18,7 @@ package org.apache.tika.batch.fs;
 
 
 import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
 import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.UnsupportedEncodingException;
 import java.nio.charset.Charset;
 import java.nio.file.Files;
 import java.nio.file.Path;
@@ -41,27 +36,6 @@ public class FSListCrawler extends FileResourceCrawler {
     private final BufferedReader reader;
     private final Path root;
 
-    /**
-     * @param fileQueue
-     * @param numConsumers
-     * @param root
-     * @param list
-     * @param encoding
-     * @throws FileNotFoundException
-     * @throws UnsupportedEncodingException
-     * @see #FSListCrawler(ArrayBlockingQueue, int, Path, Path, Charset)
-     * @deprecated
-     */
-    @Deprecated
-    public FSListCrawler(ArrayBlockingQueue<FileResource> fileQueue, int numConsumers, File root,
-                         File list, String encoding)
-            throws FileNotFoundException, UnsupportedEncodingException {
-        super(fileQueue, numConsumers);
-        reader = new BufferedReader(new InputStreamReader(new FileInputStream(list), encoding));
-        this.root = Paths.get(root.toURI());
-
-    }
-
     /**
      * Constructor for a crawler that reads a list of files to process.
      * <p>
diff --git a/tika-batch/src/main/java/org/apache/tika/batch/fs/FSOutputStreamFactory.java b/tika-batch/src/main/java/org/apache/tika/batch/fs/FSOutputStreamFactory.java
index b537fdd3c..7760d188a 100644
--- a/tika-batch/src/main/java/org/apache/tika/batch/fs/FSOutputStreamFactory.java
+++ b/tika-batch/src/main/java/org/apache/tika/batch/fs/FSOutputStreamFactory.java
@@ -18,12 +18,10 @@ package org.apache.tika.batch.fs;
 
 
 import java.io.BufferedOutputStream;
-import java.io.File;
 import java.io.IOException;
 import java.io.OutputStream;
 import java.nio.file.Files;
 import java.nio.file.Path;
-import java.nio.file.Paths;
 import java.util.zip.GZIPOutputStream;
 
 import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;
@@ -38,18 +36,6 @@ public class FSOutputStreamFactory implements OutputStreamFactory {
     private final Path outputRoot;
     private final String suffix;
     private final COMPRESSION compression;
-    /**
-     * @param outputRoot
-     * @param handleExisting
-     * @param compression
-     * @param suffix
-     * @see #FSOutputStreamFactory(Path, FSUtil.HANDLE_EXISTING, COMPRESSION, String)
-     */
-    @Deprecated
-    public FSOutputStreamFactory(File outputRoot, FSUtil.HANDLE_EXISTING handleExisting,
-                                 COMPRESSION compression, String suffix) {
-        this(Paths.get(outputRoot.toURI()), handleExisting, compression, suffix);
-    }
 
     public FSOutputStreamFactory(Path outputRoot, FSUtil.HANDLE_EXISTING handleExisting,
                                  COMPRESSION compression, String suffix) {
diff --git a/tika-batch/src/main/java/org/apache/tika/util/PropsUtil.java b/tika-batch/src/main/java/org/apache/tika/util/PropsUtil.java
index 822274ffc..805186a91 100644
--- a/tika-batch/src/main/java/org/apache/tika/util/PropsUtil.java
+++ b/tika-batch/src/main/java/org/apache/tika/util/PropsUtil.java
@@ -16,7 +16,6 @@
  */
 package org.apache.tika.util;
 
-import java.io.File;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.Locale;
@@ -85,31 +84,6 @@ public class PropsUtil {
         return defaultMissing;
     }
 
-
-    /**
-     * Parses v.  If there is a problem, this returns defaultMissing.
-     *
-     * @param v              string to parse
-     * @param defaultMissing value to return if value is null or unparseable
-     * @return parsed value
-     * @see #getPath(String, Path)
-     */
-    @Deprecated
-    public static File getFile(String v, File defaultMissing) {
-        if (v == null || v.length() == 0) {
-            return defaultMissing;
-        }
-        //trim initial and final " if they exist
-        if (v.startsWith("\"")) {
-            v = v.substring(1);
-        }
-        if (v.endsWith("\"")) {
-            v = v.substring(0, v.length() - 1);
-        }
-
-        return new File(v);
-    }
-
     /**
      * Parses v.  If v is null, this returns defaultMissing.
      *
diff --git a/tika-core/src/main/java/org/apache/tika/config/TikaConfig.java b/tika-core/src/main/java/org/apache/tika/config/TikaConfig.java
index ff62af95b..3cef03e17 100644
--- a/tika-core/src/main/java/org/apache/tika/config/TikaConfig.java
+++ b/tika-core/src/main/java/org/apache/tika/config/TikaConfig.java
@@ -540,12 +540,6 @@ public class TikaConfig {
 
     }
 
-    /**
-     * @deprecated Use the {@link #getParser()} method instead
-     */
-    public Parser getParser(MediaType mimeType) {
-        return parser.getParsers().get(mimeType);
-    }
 
     /**
      * Returns the configured parser instance.
diff --git a/tika-core/src/main/java/org/apache/tika/extractor/EmbeddedDocumentUtil.java b/tika-core/src/main/java/org/apache/tika/extractor/EmbeddedDocumentUtil.java
index ccac4f1db..d6e2c28a8 100644
--- a/tika-core/src/main/java/org/apache/tika/extractor/EmbeddedDocumentUtil.java
+++ b/tika-core/src/main/java/org/apache/tika/extractor/EmbeddedDocumentUtil.java
@@ -201,22 +201,6 @@ public class EmbeddedDocumentUtil implements Serializable {
         return ".bin";
     }
 
-    /**
-     * @return Returns a {@link TikaConfig} -- trying to find it first in the ParseContext
-     * that was included in the initialization, and then creating a new one from
-     * via {@link TikaConfig#getDefaultConfig()} if it can't find one in the
-     * ParseContext.
-     * @deprecated as of 1.17, use {@link #getTikaConfig()} instead
-     */
-    @Deprecated
-    public TikaConfig getConfig() {
-        TikaConfig config = context.get(TikaConfig.class);
-        if (config == null) {
-            config = TikaConfig.getDefaultConfig();
-        }
-        return config;
-    }
-
     public static void recordException(Throwable t, Metadata m) {
         String ex = ExceptionUtils.getFilteredStackTrace(t);
         m.add(TikaCoreProperties.TIKA_META_EXCEPTION_WARNING, ex);
diff --git a/tika-core/src/main/java/org/apache/tika/fork/ForkParser.java b/tika-core/src/main/java/org/apache/tika/fork/ForkParser.java
index 43ab5a8d3..84d1156e2 100644
--- a/tika-core/src/main/java/org/apache/tika/fork/ForkParser.java
+++ b/tika-core/src/main/java/org/apache/tika/fork/ForkParser.java
@@ -36,14 +36,13 @@ import org.apache.tika.exception.TikaException;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.metadata.TikaCoreProperties;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.AutoDetectParser;
 import org.apache.tika.parser.ParseContext;
 import org.apache.tika.parser.Parser;
 import org.apache.tika.sax.AbstractRecursiveParserWrapperHandler;
 import org.apache.tika.sax.TeeContentHandler;
 
-public class ForkParser extends AbstractParser implements Closeable {
+public class ForkParser implements Parser, Closeable {
 
     /**
      * Serial version UID
@@ -160,23 +159,6 @@ public class ForkParser extends AbstractParser implements Closeable {
         this.poolSize = poolSize;
     }
 
-    /**
-     * Returns the command used to start the forked server process.
-     *
-     * @return java command line
-     * @see ForkParser#getJavaCommandAsList()
-     * @deprecated since 1.8
-     */
-    @Deprecated
-    public String getJavaCommand() {
-        StringBuilder sb = new StringBuilder();
-        for (String part : getJavaCommandAsList()) {
-            sb.append(part).append(' ');
-        }
-        sb.deleteCharAt(sb.length() - 1);
-        return sb.toString();
-    }
-
     /**
      * Sets the command used to start the forked server process.
      * The arguments "-jar" and "/path/to/bootstrap.jar"
@@ -192,21 +174,6 @@ public class ForkParser extends AbstractParser implements Closeable {
         this.java = new ArrayList<>(java);
     }
 
-    /**
-     * Sets the command used to start the forked server process.
-     * The given command line is split on whitespace and the arguments
-     * "-jar" and "/path/to/bootstrap.jar" are appended to it when starting
-     * the process. The default setting is "java -Xmx32m".
-     *
-     * @param java java command line
-     * @see ForkParser#setJavaCommand(List)
-     * @deprecated since 1.8
-     */
-    @Deprecated
-    public void setJavaCommand(String java) {
-        setJavaCommand(Arrays.asList(java.split(" ")));
-    }
-
     /**
      * Returns the command used to start the forked server process.
      * <p/>
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 62daabcc0..a70ade4c3 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
@@ -240,17 +240,6 @@ public class TikaInputStream extends TaggedInputStream {
         }
     }
 
-    /**
-     * @deprecated use {@link TikaInputStream#get(InputStream, TemporaryResources, Metadata)}
-     * @param stream
-     * @param tmp
-     * @return
-     */
-    @Deprecated
-    public static TikaInputStream get(InputStream stream, TemporaryResources tmp) {
-        return get(stream, tmp, null);
-    }
-
     /**
      * Casts or wraps the given stream to a TikaInputStream instance.
      * This method can be used to access the functionality of this class
diff --git a/tika-core/src/main/java/org/apache/tika/parser/AbstractEncodingDetectorParser.java b/tika-core/src/main/java/org/apache/tika/parser/AbstractEncodingDetectorParser.java
index 8c00f0c4b..2e9f3936f 100644
--- a/tika-core/src/main/java/org/apache/tika/parser/AbstractEncodingDetectorParser.java
+++ b/tika-core/src/main/java/org/apache/tika/parser/AbstractEncodingDetectorParser.java
@@ -25,7 +25,7 @@ import org.apache.tika.detect.EncodingDetector;
  * Abstract base class for parsers that use the AutoDetectReader and need
  * to use the {@link EncodingDetector} configured by {@link TikaConfig}
  */
-public abstract class AbstractEncodingDetectorParser extends AbstractParser {
+public abstract class AbstractEncodingDetectorParser implements Parser {
 
 
     private EncodingDetector encodingDetector;
diff --git a/tika-core/src/main/java/org/apache/tika/parser/AbstractExternalProcessParser.java b/tika-core/src/main/java/org/apache/tika/parser/AbstractExternalProcessParser.java
index 090c91a3a..c5c3315f9 100644
--- a/tika-core/src/main/java/org/apache/tika/parser/AbstractExternalProcessParser.java
+++ b/tika-core/src/main/java/org/apache/tika/parser/AbstractExternalProcessParser.java
@@ -29,7 +29,7 @@ import java.util.concurrent.ConcurrentHashMap;
  *
  * @since Apache Tika 1.27
  */
-public abstract class AbstractExternalProcessParser extends AbstractParser {
+public abstract class AbstractExternalProcessParser implements Parser {
 
     /**
      * Serial version UID.
diff --git a/tika-core/src/main/java/org/apache/tika/parser/AbstractParser.java b/tika-core/src/main/java/org/apache/tika/parser/AbstractParser.java
index d717114d6..ebd37a3d3 100644
--- a/tika-core/src/main/java/org/apache/tika/parser/AbstractParser.java
+++ b/tika-core/src/main/java/org/apache/tika/parser/AbstractParser.java
@@ -29,8 +29,10 @@ import org.apache.tika.metadata.Metadata;
  * Abstract base class for new parsers. This method implements the old
  * deprecated parse method so subclasses won't have to.
  *
+ * @deprecated for removal in 4.x
  * @since Apache Tika 0.10
  */
+@Deprecated
 public abstract class AbstractParser implements Parser {
 
     /**
diff --git a/tika-core/src/main/java/org/apache/tika/parser/AutoDetectParserConfig.java b/tika-core/src/main/java/org/apache/tika/parser/AutoDetectParserConfig.java
index d5a1567e1..bc4904367 100644
--- a/tika-core/src/main/java/org/apache/tika/parser/AutoDetectParserConfig.java
+++ b/tika-core/src/main/java/org/apache/tika/parser/AutoDetectParserConfig.java
@@ -43,11 +43,6 @@ public class AutoDetectParserConfig extends ConfigBase implements Serializable {
 
     private static ContentHandlerDecoratorFactory NOOP_CONTENT_HANDLER_DECORATOR_FACTORY =
             new ContentHandlerDecoratorFactory() {
-                @Override
-                public ContentHandler decorate(ContentHandler contentHandler, Metadata metadata) {
-                    return contentHandler;
-                }
-
                 @Override
                 public ContentHandler decorate(ContentHandler contentHandler, Metadata metadata,
                                                ParseContext parseContext) {
diff --git a/tika-core/src/main/java/org/apache/tika/parser/CompositeParser.java b/tika-core/src/main/java/org/apache/tika/parser/CompositeParser.java
index 6c151e21c..3b50b4da7 100644
--- a/tika-core/src/main/java/org/apache/tika/parser/CompositeParser.java
+++ b/tika-core/src/main/java/org/apache/tika/parser/CompositeParser.java
@@ -48,7 +48,7 @@ import org.apache.tika.utils.ParserUtils;
  * parser is defined for cases where a parser for the given content type is
  * not available.
  */
-public class CompositeParser extends AbstractParser {
+public class CompositeParser implements Parser {
 
     /**
      * Serial version UID
diff --git a/tika-core/src/main/java/org/apache/tika/parser/DelegatingParser.java b/tika-core/src/main/java/org/apache/tika/parser/DelegatingParser.java
index f3f39dd73..f2e007cfe 100644
--- a/tika-core/src/main/java/org/apache/tika/parser/DelegatingParser.java
+++ b/tika-core/src/main/java/org/apache/tika/parser/DelegatingParser.java
@@ -35,7 +35,7 @@ import org.apache.tika.mime.MediaType;
  *
  * @since Apache Tika 0.4, major changes in Tika 0.5
  */
-public class DelegatingParser extends AbstractParser {
+public class DelegatingParser implements Parser {
 
     /**
      * Returns the parser instance to which parsing tasks should be delegated.
diff --git a/tika-core/src/main/java/org/apache/tika/parser/EmptyParser.java b/tika-core/src/main/java/org/apache/tika/parser/EmptyParser.java
index 5f57739ea..546d0c2a7 100644
--- a/tika-core/src/main/java/org/apache/tika/parser/EmptyParser.java
+++ b/tika-core/src/main/java/org/apache/tika/parser/EmptyParser.java
@@ -32,7 +32,7 @@ import org.apache.tika.sax.XHTMLContentHandler;
  * attempting to parse the given document stream. Useful as a sentinel parser
  * for unknown document types.
  */
-public class EmptyParser extends AbstractParser {
+public class EmptyParser implements Parser {
     /**
      * Singleton instance of this class.
      */
diff --git a/tika-core/src/main/java/org/apache/tika/parser/ErrorParser.java b/tika-core/src/main/java/org/apache/tika/parser/ErrorParser.java
index c1d73a4a1..b8071cb52 100644
--- a/tika-core/src/main/java/org/apache/tika/parser/ErrorParser.java
+++ b/tika-core/src/main/java/org/apache/tika/parser/ErrorParser.java
@@ -31,7 +31,7 @@ import org.apache.tika.mime.MediaType;
  * attempting to parse the given document stream. Useful as a sentinel parser
  * for unknown document types.
  */
-public class ErrorParser extends AbstractParser {
+public class ErrorParser implements Parser {
     /**
      * Singleton instance of this class.
      */
diff --git a/tika-core/src/main/java/org/apache/tika/parser/NetworkParser.java b/tika-core/src/main/java/org/apache/tika/parser/NetworkParser.java
index 7ffb409ab..822512d7e 100644
--- a/tika-core/src/main/java/org/apache/tika/parser/NetworkParser.java
+++ b/tika-core/src/main/java/org/apache/tika/parser/NetworkParser.java
@@ -44,7 +44,7 @@ import org.apache.tika.sax.TeeContentHandler;
 import org.apache.tika.utils.XMLReaderUtils;
 
 
-public class NetworkParser extends AbstractParser {
+public class NetworkParser implements Parser {
 
     private final URI uri;
 
diff --git a/tika-core/src/main/java/org/apache/tika/parser/ParserDecorator.java b/tika-core/src/main/java/org/apache/tika/parser/ParserDecorator.java
index a2440f122..587277aad 100644
--- a/tika-core/src/main/java/org/apache/tika/parser/ParserDecorator.java
+++ b/tika-core/src/main/java/org/apache/tika/parser/ParserDecorator.java
@@ -40,7 +40,7 @@ import org.apache.tika.parser.multiple.FallbackParser;
  * <p>To decorate several different parsers at the same time, wrap them in
  * a {@link CompositeParser} instance first.
  */
-public class ParserDecorator extends AbstractParser {
+public class ParserDecorator implements Parser {
 
     /**
      * Serial version UID
diff --git a/tika-core/src/main/java/org/apache/tika/parser/RegexCaptureParser.java b/tika-core/src/main/java/org/apache/tika/parser/RegexCaptureParser.java
index 5a07f3c5b..412673b70 100644
--- a/tika-core/src/main/java/org/apache/tika/parser/RegexCaptureParser.java
+++ b/tika-core/src/main/java/org/apache/tika/parser/RegexCaptureParser.java
@@ -41,7 +41,7 @@ import org.apache.tika.exception.TikaException;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.mime.MediaType;
 
-public class RegexCaptureParser extends AbstractParser implements Initializable {
+public class RegexCaptureParser implements Parser, Initializable {
 
     private static final Set<MediaType> SUPPORTED_TYPES =
             Collections.singleton(MediaType.TEXT_PLAIN);
@@ -115,15 +115,6 @@ public class RegexCaptureParser extends AbstractParser implements Initializable
         }
     }
 
-    @Field
-    @Deprecated
-    /**
-     * @deprecated use setCaptureMap
-     */
-    public void setRegexMap(Map<String, String> map) {
-        setCaptureMap(map);
-    }
-
     @Field
     public void setCaptureMap(Map<String, String> map) {
         for (Map.Entry<String, String> e : map.entrySet()) {
diff --git a/tika-core/src/main/java/org/apache/tika/parser/external/ExternalParser.java b/tika-core/src/main/java/org/apache/tika/parser/external/ExternalParser.java
index 6b607991d..beeed1fd9 100644
--- a/tika-core/src/main/java/org/apache/tika/parser/external/ExternalParser.java
+++ b/tika-core/src/main/java/org/apache/tika/parser/external/ExternalParser.java
@@ -48,15 +48,15 @@ import org.apache.tika.io.TemporaryResources;
 import org.apache.tika.io.TikaInputStream;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 import org.apache.tika.sax.XHTMLContentHandler;
 
 /**
  * Parser that uses an external program (like catdoc or pdf2txt) to extract
  * text content and metadata from a given document.
  */
-public class ExternalParser extends AbstractParser {
+public class ExternalParser implements Parser {
 
     private static final Logger LOG = LoggerFactory.getLogger(ExternalParser.class);
 
diff --git a/tika-core/src/main/java/org/apache/tika/parser/external2/ExternalParser.java b/tika-core/src/main/java/org/apache/tika/parser/external2/ExternalParser.java
index 3bb1825be..5dbea57f0 100644
--- a/tika-core/src/main/java/org/apache/tika/parser/external2/ExternalParser.java
+++ b/tika-core/src/main/java/org/apache/tika/parser/external2/ExternalParser.java
@@ -47,7 +47,6 @@ import org.apache.tika.io.TikaInputStream;
 import org.apache.tika.metadata.ExternalProcess;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.EmptyParser;
 import org.apache.tika.parser.ParseContext;
 import org.apache.tika.parser.Parser;
@@ -64,7 +63,7 @@ import org.apache.tika.utils.ProcessUtils;
  * Further, users can specify a parser to handle the output
  * of the external process.
  */
-public class ExternalParser extends AbstractParser implements Initializable {
+public class ExternalParser implements Parser, Initializable {
 
     public static final long DEFAULT_TIMEOUT_MS = 60000;
 
diff --git a/tika-core/src/main/java/org/apache/tika/parser/multiple/AbstractMultipleParser.java b/tika-core/src/main/java/org/apache/tika/parser/multiple/AbstractMultipleParser.java
index d05305f9f..e1dd2baac 100644
--- a/tika-core/src/main/java/org/apache/tika/parser/multiple/AbstractMultipleParser.java
+++ b/tika-core/src/main/java/org/apache/tika/parser/multiple/AbstractMultipleParser.java
@@ -41,7 +41,6 @@ import org.apache.tika.metadata.Metadata;
 import org.apache.tika.metadata.TikaCoreProperties;
 import org.apache.tika.mime.MediaType;
 import org.apache.tika.mime.MediaTypeRegistry;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
 import org.apache.tika.parser.Parser;
 import org.apache.tika.parser.ParserDecorator;
@@ -59,7 +58,7 @@ import org.apache.tika.utils.ParserUtils;
  *
  * @since Apache Tika 1.18
  */
-public abstract class AbstractMultipleParser extends AbstractParser {
+public abstract class AbstractMultipleParser implements Parser {
     protected static final String METADATA_POLICY_CONFIG_KEY = "metadataPolicy";
     /**
      * Serial version UID.
diff --git a/tika-core/src/main/java/org/apache/tika/pipes/CompositePipesReporter.java b/tika-core/src/main/java/org/apache/tika/pipes/CompositePipesReporter.java
index 6532e2c3c..f8dcffb64 100644
--- a/tika-core/src/main/java/org/apache/tika/pipes/CompositePipesReporter.java
+++ b/tika-core/src/main/java/org/apache/tika/pipes/CompositePipesReporter.java
@@ -71,21 +71,11 @@ public class CompositePipesReporter extends PipesReporter implements Initializab
         }
     }
 
-    /**
-     * 
-     * @param pipesReporters
-     * @deprecated use {@link CompositePipesReporter#addPipesReporter(PipesReporter)}
-     */
-    @Field
-    @Deprecated
-    public void setPipesReporters(List<PipesReporter> pipesReporters) {
-        this.pipesReporters = pipesReporters;
-    }
-
     @Field
     public void addPipesReporter(PipesReporter pipesReporter) {
         this.pipesReporters.add(pipesReporter);
     }
+
     public List<PipesReporter> getPipesReporters() {
         return pipesReporters;
     }
diff --git a/tika-core/src/main/java/org/apache/tika/pipes/fetcher/fs/FileSystemFetcher.java b/tika-core/src/main/java/org/apache/tika/pipes/fetcher/fs/FileSystemFetcher.java
index 70ad5ab86..d926e3ca6 100644
--- a/tika-core/src/main/java/org/apache/tika/pipes/fetcher/fs/FileSystemFetcher.java
+++ b/tika-core/src/main/java/org/apache/tika/pipes/fetcher/fs/FileSystemFetcher.java
@@ -170,9 +170,5 @@ public class FileSystemFetcher extends AbstractFetcher implements Initializable
             throw new TikaConfigException(
                     "base path must not contain \u0000. " + "Seriously, what were you thinking?");
         }
-        LOG.info("A FileSystemFetcher ({}) has been initialized. Clients will be able to read " +
-                "all files under '{}' if this process has permission to read them.",
-                getName(),
-                basePath.toAbsolutePath());
     }
 }
diff --git a/tika-core/src/main/java/org/apache/tika/sax/BasicContentHandlerFactory.java b/tika-core/src/main/java/org/apache/tika/sax/BasicContentHandlerFactory.java
index d10e7adf5..361b7817c 100644
--- a/tika-core/src/main/java/org/apache/tika/sax/BasicContentHandlerFactory.java
+++ b/tika-core/src/main/java/org/apache/tika/sax/BasicContentHandlerFactory.java
@@ -138,12 +138,6 @@ public class BasicContentHandlerFactory implements ContentHandlerFactory, WriteL
         }
     }
 
-    @Override
-    public ContentHandler getNewContentHandler(OutputStream os, String encoding)
-            throws UnsupportedEncodingException {
-        return getNewContentHandler(os, Charset.forName(encoding));
-    }
-
     @Override
     public ContentHandler getNewContentHandler(OutputStream os, Charset charset) {
 
diff --git a/tika-core/src/main/java/org/apache/tika/sax/BodyContentHandler.java b/tika-core/src/main/java/org/apache/tika/sax/BodyContentHandler.java
index bf9401c91..dfdecb83c 100644
--- a/tika-core/src/main/java/org/apache/tika/sax/BodyContentHandler.java
+++ b/tika-core/src/main/java/org/apache/tika/sax/BodyContentHandler.java
@@ -16,7 +16,6 @@
  */
 package org.apache.tika.sax;
 
-import java.io.OutputStream;
 import java.io.Writer;
 
 import org.xml.sax.ContentHandler;
@@ -64,16 +63,6 @@ public class BodyContentHandler extends ContentHandlerDecorator {
         this(new WriteOutContentHandler(writer));
     }
 
-    /**
-     * Creates a content handler that writes XHTML body character events to
-     * the given output stream using the default encoding.
-     *
-     * @param stream output stream
-     */
-    public BodyContentHandler(OutputStream stream) {
-        this(new WriteOutContentHandler(stream));
-    }
-
     /**
      * Creates a content handler that writes XHTML body character events to
      * an internal string buffer. The contents of the buffer can be retrieved
diff --git a/tika-core/src/main/java/org/apache/tika/sax/ContentHandlerDecoratorFactory.java b/tika-core/src/main/java/org/apache/tika/sax/ContentHandlerDecoratorFactory.java
index 52a513560..967e186eb 100644
--- a/tika-core/src/main/java/org/apache/tika/sax/ContentHandlerDecoratorFactory.java
+++ b/tika-core/src/main/java/org/apache/tika/sax/ContentHandlerDecoratorFactory.java
@@ -25,15 +25,6 @@ import org.apache.tika.parser.ParseContext;
 
 public interface ContentHandlerDecoratorFactory extends Serializable {
 
-    /**
-     * @deprecated use {@link ContentHandlerDecoratorFactory#decorate(ContentHandler, Metadata, ParseContext)}
-     *   This will be removed in 2.5.0
-     * @param contentHandler
-     * @param metadata
-     * @return
-     */
-    @Deprecated
-    ContentHandler decorate(ContentHandler contentHandler, Metadata metadata);
     ContentHandler decorate(ContentHandler contentHandler, Metadata metadata,
                             ParseContext parseContext);
 }
diff --git a/tika-core/src/main/java/org/apache/tika/sax/ContentHandlerFactory.java b/tika-core/src/main/java/org/apache/tika/sax/ContentHandlerFactory.java
index 80b89a0bc..dc2f3384f 100644
--- a/tika-core/src/main/java/org/apache/tika/sax/ContentHandlerFactory.java
+++ b/tika-core/src/main/java/org/apache/tika/sax/ContentHandlerFactory.java
@@ -19,7 +19,6 @@ package org.apache.tika.sax;
 
 import java.io.OutputStream;
 import java.io.Serializable;
-import java.io.UnsupportedEncodingException;
 import java.nio.charset.Charset;
 
 import org.xml.sax.ContentHandler;
@@ -30,13 +29,6 @@ import org.xml.sax.ContentHandler;
 public interface ContentHandlerFactory extends Serializable {
     ContentHandler getNewContentHandler();
 
-    /**
-     * @deprecated use {@link #getNewContentHandler(OutputStream, Charset)}
-     */
-    @Deprecated
-    ContentHandler getNewContentHandler(OutputStream os, String encoding)
-            throws UnsupportedEncodingException;
-
     ContentHandler getNewContentHandler(OutputStream os, Charset charset);
 
 }
diff --git a/tika-core/src/main/java/org/apache/tika/sax/ToTextContentHandler.java b/tika-core/src/main/java/org/apache/tika/sax/ToTextContentHandler.java
index 69b275933..868a3bc36 100755
--- a/tika-core/src/main/java/org/apache/tika/sax/ToTextContentHandler.java
+++ b/tika-core/src/main/java/org/apache/tika/sax/ToTextContentHandler.java
@@ -22,7 +22,6 @@ import java.io.OutputStreamWriter;
 import java.io.StringWriter;
 import java.io.UnsupportedEncodingException;
 import java.io.Writer;
-import java.nio.charset.Charset;
 import java.util.Locale;
 
 import org.xml.sax.Attributes;
@@ -61,17 +60,6 @@ public class ToTextContentHandler extends DefaultHandler {
         this.writer = writer;
     }
 
-    /**
-     * Creates a content handler that writes character events to
-     * the given output stream using the platform default encoding.
-     *
-     * @param stream output stream
-     * @deprecated use {@link ToTextContentHandler#ToTextContentHandler(Writer)}
-     */
-    public ToTextContentHandler(OutputStream stream) {
-        this(new OutputStreamWriter(stream, Charset.defaultCharset()));
-    }
-
     /**
      * Creates a content handler that writes character events to
      * the given output stream using the given encoding.
diff --git a/tika-core/src/main/java/org/apache/tika/sax/WriteOutContentHandler.java b/tika-core/src/main/java/org/apache/tika/sax/WriteOutContentHandler.java
index 672a8bf03..22d69f0a4 100644
--- a/tika-core/src/main/java/org/apache/tika/sax/WriteOutContentHandler.java
+++ b/tika-core/src/main/java/org/apache/tika/sax/WriteOutContentHandler.java
@@ -16,11 +16,8 @@
  */
 package org.apache.tika.sax;
 
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
 import java.io.StringWriter;
 import java.io.Writer;
-import java.nio.charset.Charset;
 
 import org.xml.sax.ContentHandler;
 import org.xml.sax.SAXException;
@@ -88,18 +85,6 @@ public class WriteOutContentHandler extends ContentHandlerDecorator {
         this(writer, -1);
     }
 
-    /**
-     * Creates a content handler that writes character events to
-     * the given output stream using the default encoding.
-     *
-     * @param stream output stream
-     * @deprecated -- please use {@link WriteOutContentHandler#WriteOutContentHandler(Writer)}
-     */
-    @Deprecated
-    public WriteOutContentHandler(OutputStream stream) {
-        this(new OutputStreamWriter(stream, Charset.defaultCharset()));
-    }
-
     /**
      * Creates a content handler that writes character events
      * to an internal string buffer. Use the {@link #toString()}
diff --git a/tika-core/src/test/java/org/apache/tika/fork/ForkParserTest.java b/tika-core/src/test/java/org/apache/tika/fork/ForkParserTest.java
index 915efdfc7..b233b44e1 100644
--- a/tika-core/src/test/java/org/apache/tika/fork/ForkParserTest.java
+++ b/tika-core/src/test/java/org/apache/tika/fork/ForkParserTest.java
@@ -32,7 +32,6 @@ import java.io.PipedOutputStream;
 import java.io.Reader;
 import java.io.Serializable;
 import java.io.StringWriter;
-import java.io.UnsupportedEncodingException;
 import java.nio.charset.Charset;
 import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
@@ -560,12 +559,6 @@ public class ForkParserTest extends TikaTest {
             return new SBContentHandler();
         }
 
-        @Override
-        public ContentHandler getNewContentHandler(OutputStream os, String encoding)
-                throws UnsupportedEncodingException {
-            throw new IllegalArgumentException("can't use this option in this test class");
-        }
-
         @Override
         public ContentHandler getNewContentHandler(OutputStream os, Charset charset) {
             throw new IllegalArgumentException("can't use this option in this test class");
@@ -578,12 +571,6 @@ public class ForkParserTest extends TikaTest {
             return new LyingNonSerializableContentHandler();
         }
 
-        @Override
-        public ContentHandler getNewContentHandler(OutputStream os, String encoding)
-                throws UnsupportedEncodingException {
-            throw new IllegalArgumentException("can't use this option in this test class");
-        }
-
         @Override
         public ContentHandler getNewContentHandler(OutputStream os, Charset charset) {
             throw new IllegalArgumentException("can't use this option in this test class");
diff --git a/tika-core/src/test/java/org/apache/tika/fork/ForkTestParser.java b/tika-core/src/test/java/org/apache/tika/fork/ForkTestParser.java
index b417bd4c7..e9c6949fa 100644
--- a/tika-core/src/test/java/org/apache/tika/fork/ForkTestParser.java
+++ b/tika-core/src/test/java/org/apache/tika/fork/ForkTestParser.java
@@ -30,11 +30,11 @@ import org.apache.tika.exception.TikaException;
 import org.apache.tika.fork.unusedpackage.ClassInUnusedPackage;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 import org.apache.tika.sax.XHTMLContentHandler;
 
-class ForkTestParser extends AbstractParser {
+class ForkTestParser implements Parser {
 
     /**
      * Serial version UID
diff --git a/tika-core/src/test/java/org/apache/tika/parser/DummyInitializableParser.java b/tika-core/src/test/java/org/apache/tika/parser/DummyInitializableParser.java
index ba8294a9b..7b329faee 100644
--- a/tika-core/src/test/java/org/apache/tika/parser/DummyInitializableParser.java
+++ b/tika-core/src/test/java/org/apache/tika/parser/DummyInitializableParser.java
@@ -39,7 +39,7 @@ import org.apache.tika.mime.MediaType;
  * This tests that initialize() is called after adding the parameters
  * configured via TikaConfig
  */
-public class DummyInitializableParser extends AbstractParser implements Initializable {
+public class DummyInitializableParser implements Parser, Initializable {
 
     public static String SUM_FIELD = "SUM";
     private static final Set<MediaType> MIMES = new HashSet<>();
diff --git a/tika-core/src/test/java/org/apache/tika/parser/DummyParameterizedParser.java b/tika-core/src/test/java/org/apache/tika/parser/DummyParameterizedParser.java
index 62f6f7a84..548347492 100644
--- a/tika-core/src/test/java/org/apache/tika/parser/DummyParameterizedParser.java
+++ b/tika-core/src/test/java/org/apache/tika/parser/DummyParameterizedParser.java
@@ -40,7 +40,7 @@ import org.apache.tika.mime.MediaType;
  *
  * @since Apache Tika 1.14
  */
-public class DummyParameterizedParser extends AbstractParser {
+public class DummyParameterizedParser implements Parser {
 
     private static final Set<MediaType> MIMES = new HashSet<>();
 
diff --git a/tika-core/src/test/java/org/apache/tika/parser/DummyParser.java b/tika-core/src/test/java/org/apache/tika/parser/DummyParser.java
index 81763f06f..9b1ffcc4e 100644
--- a/tika-core/src/test/java/org/apache/tika/parser/DummyParser.java
+++ b/tika-core/src/test/java/org/apache/tika/parser/DummyParser.java
@@ -35,7 +35,7 @@ import org.apache.tika.sax.XHTMLContentHandler;
  * <p>
  * See also {@link org.apache.tika.parser.mock.MockParser}.
  */
-public class DummyParser extends AbstractParser {
+public class DummyParser implements Parser {
     private final Set<MediaType> types;
     private final Map<String, String> metadata;
     private final String xmlText;
diff --git a/tika-core/src/test/java/org/apache/tika/parser/mock/MockParser.java b/tika-core/src/test/java/org/apache/tika/parser/mock/MockParser.java
index 8a2166f65..0051a7740 100644
--- a/tika-core/src/test/java/org/apache/tika/parser/mock/MockParser.java
+++ b/tika-core/src/test/java/org/apache/tika/parser/mock/MockParser.java
@@ -58,7 +58,6 @@ import org.apache.tika.extractor.ParsingEmbeddedDocumentExtractor;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.metadata.TikaCoreProperties;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
 import org.apache.tika.parser.ParseRecord;
 import org.apache.tika.parser.Parser;
@@ -77,7 +76,7 @@ import org.apache.tika.sax.XHTMLContentHandler;
  * See also {@link org.apache.tika.parser.DummyParser} for another option.
  */
 
-public class MockParser extends AbstractParser {
+public class MockParser implements Parser {
 
 
     private static final long serialVersionUID = 1L;
diff --git a/tika-core/src/test/java/org/apache/tika/sax/BasicContentHandlerFactoryTest.java b/tika-core/src/test/java/org/apache/tika/sax/BasicContentHandlerFactoryTest.java
index f64c85c72..111d2ea3c 100644
--- a/tika-core/src/test/java/org/apache/tika/sax/BasicContentHandlerFactoryTest.java
+++ b/tika-core/src/test/java/org/apache/tika/sax/BasicContentHandlerFactoryTest.java
@@ -46,7 +46,6 @@ import org.apache.tika.parser.Parser;
  */
 public class BasicContentHandlerFactoryTest {
 
-    private static final String ENCODING = UTF_8.name();
     //default max char len (at least in WriteOutContentHandler is 100k)
     private static final int OVER_DEFAULT = 120000;
 
@@ -57,7 +56,7 @@ public class BasicContentHandlerFactoryTest {
 
     public static void assertNotContains(String needle, byte[] hayStack)
             throws UnsupportedEncodingException {
-        assertNotContains(needle, new String(hayStack, ENCODING));
+        assertNotContains(needle, new String(hayStack, UTF_8));
     }
 
     public static void assertContains(String needle, String haystack) {
@@ -66,7 +65,7 @@ public class BasicContentHandlerFactoryTest {
 
     public static void assertContains(String needle, byte[] hayStack)
             throws UnsupportedEncodingException {
-        assertContains(needle, new String(hayStack, ENCODING));
+        assertContains(needle, new String(hayStack, UTF_8));
     }
 
     @Test
@@ -115,7 +114,7 @@ public class BasicContentHandlerFactoryTest {
         //now test outputstream call
         p = new MockParser(OVER_DEFAULT);
         ByteArrayOutputStream os = new ByteArrayOutputStream();
-        handler = new BasicContentHandlerFactory(type, -1).getNewContentHandler(os, ENCODING);
+        handler = new BasicContentHandlerFactory(type, -1).getNewContentHandler(os, UTF_8);
         assertTrue(handler instanceof ToTextContentHandler);
         p.parse(null, handler, null, null);
         assertContains("This is the title", os.toByteArray());
@@ -126,7 +125,7 @@ public class BasicContentHandlerFactoryTest {
 
         p = new MockParser(10);
         os = new ByteArrayOutputStream();
-        handler = new BasicContentHandlerFactory(type, 5).getNewContentHandler(os, ENCODING);
+        handler = new BasicContentHandlerFactory(type, 5).getNewContentHandler(os, UTF_8);
         assertTrue(handler instanceof WriteOutContentHandler);
         assertWriteLimitReached(p, (WriteOutContentHandler) handler);
         //When writing to an OutputStream and a write limit is reached,
@@ -159,7 +158,7 @@ public class BasicContentHandlerFactoryTest {
         //now test outputstream call
         p = new MockParser(OVER_DEFAULT);
         ByteArrayOutputStream os = new ByteArrayOutputStream();
-        handler = new BasicContentHandlerFactory(type, -1).getNewContentHandler(os, ENCODING);
+        handler = new BasicContentHandlerFactory(type, -1).getNewContentHandler(os, UTF_8);
         assertTrue(handler instanceof ToHTMLContentHandler);
         p.parse(null, handler, null, null);
         assertContains("This is the title", os.toByteArray());
@@ -171,7 +170,7 @@ public class BasicContentHandlerFactoryTest {
 
         p = new MockParser(10);
         os = new ByteArrayOutputStream();
-        handler = new BasicContentHandlerFactory(type, 5).getNewContentHandler(os, ENCODING);
+        handler = new BasicContentHandlerFactory(type, 5).getNewContentHandler(os, UTF_8);
         assertTrue(handler instanceof WriteOutContentHandler);
         assertWriteLimitReached(p, (WriteOutContentHandler) handler);
         assertEquals(0, os.toByteArray().length);
@@ -202,7 +201,7 @@ public class BasicContentHandlerFactoryTest {
         //now test outputstream call
         p = new MockParser(OVER_DEFAULT);
         ByteArrayOutputStream os = new ByteArrayOutputStream();
-        handler = new BasicContentHandlerFactory(type, -1).getNewContentHandler(os, ENCODING);
+        handler = new BasicContentHandlerFactory(type, -1).getNewContentHandler(os, UTF_8);
         assertTrue(handler instanceof ToXMLContentHandler);
         p.parse(null, handler, null, null);
 
@@ -215,7 +214,7 @@ public class BasicContentHandlerFactoryTest {
 
         p = new MockParser(10);
         os = new ByteArrayOutputStream();
-        handler = new BasicContentHandlerFactory(type, 5).getNewContentHandler(os, ENCODING);
+        handler = new BasicContentHandlerFactory(type, 5).getNewContentHandler(os, UTF_8);
         assertTrue(handler instanceof WriteOutContentHandler);
         assertWriteLimitReached(p, (WriteOutContentHandler) handler);
         assertEquals(0, os.toByteArray().length);
@@ -247,7 +246,7 @@ public class BasicContentHandlerFactoryTest {
         //now test outputstream call
         p = new MockParser(OVER_DEFAULT);
         ByteArrayOutputStream os = new ByteArrayOutputStream();
-        handler = new BasicContentHandlerFactory(type, -1).getNewContentHandler(os, ENCODING);
+        handler = new BasicContentHandlerFactory(type, -1).getNewContentHandler(os, UTF_8);
         assertTrue(handler instanceof BodyContentHandler);
         p.parse(null, handler, null, null);
         assertNotContains("title", os.toByteArray());
@@ -258,7 +257,7 @@ public class BasicContentHandlerFactoryTest {
 
         p = new MockParser(10);
         os = new ByteArrayOutputStream();
-        handler = new BasicContentHandlerFactory(type, 5).getNewContentHandler(os, ENCODING);
+        handler = new BasicContentHandlerFactory(type, 5).getNewContentHandler(os, UTF_8);
         assertTrue(handler instanceof WriteOutContentHandler);
         assertWriteLimitReached(p, (WriteOutContentHandler) handler);
         assertEquals(0, os.toByteArray().length);
diff --git a/tika-core/src/test/java/org/apache/tika/sax/BodyContentHandlerTest.java b/tika-core/src/test/java/org/apache/tika/sax/BodyContentHandlerTest.java
index b41cc536d..19bf85378 100644
--- a/tika-core/src/test/java/org/apache/tika/sax/BodyContentHandlerTest.java
+++ b/tika-core/src/test/java/org/apache/tika/sax/BodyContentHandlerTest.java
@@ -22,6 +22,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
 import java.io.ByteArrayOutputStream;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.io.OutputStreamWriter;
 
 import org.junit.jupiter.api.Test;
 
@@ -48,7 +49,9 @@ public class BodyContentHandlerTest extends TikaTest {
         ByteArrayOutputStream buffer = new ByteArrayOutputStream();
 
         XHTMLContentHandler xhtml =
-                new XHTMLContentHandler(new BodyContentHandler(buffer), new Metadata());
+                new XHTMLContentHandler(new BodyContentHandler(
+                        new OutputStreamWriter(buffer, UTF_8)),
+                        new Metadata());
         xhtml.startDocument();
         xhtml.element("p", "Test text");
         xhtml.endDocument();
diff --git a/tika-eval/tika-eval-app/src/main/java/org/apache/tika/eval/app/db/JDBCUtil.java b/tika-eval/tika-eval-app/src/main/java/org/apache/tika/eval/app/db/JDBCUtil.java
index 49886420a..64bc0824e 100644
--- a/tika-eval/tika-eval-app/src/main/java/org/apache/tika/eval/app/db/JDBCUtil.java
+++ b/tika-eval/tika-eval-app/src/main/java/org/apache/tika/eval/app/db/JDBCUtil.java
@@ -71,34 +71,6 @@ public class JDBCUtil {
         }
     }
 
-    @Deprecated
-    /**
-     * @deprecated use {@link #batchInsert(PreparedStatement, TableInfo, Map)}
-     */ public static int insert(PreparedStatement insertStatement, TableInfo table,
-                                 Map<Cols, String> data) throws SQLException {
-
-        //clear parameters before setting
-        insertStatement.clearParameters();
-        try {
-            int i = 1;
-            for (ColInfo colInfo : table.getColInfos()) {
-                updateInsertStatement(i, insertStatement, colInfo, data.get(colInfo.getName()));
-                i++;
-            }
-            for (Cols c : data.keySet()) {
-                if (!table.containsColumn(c)) {
-                    throw new IllegalArgumentException(
-                            "Can't add data to " + c + " because it doesn't exist in the table: " +
-                                    table.getName());
-                }
-            }
-            return insertStatement.executeUpdate();
-        } catch (SQLException e) {
-            LOG.warn("couldn't insert data for this row: {}", e.getMessage());
-            return -1;
-        }
-    }
-
     public static void batchInsert(PreparedStatement insertStatement, TableInfo table,
                                    Map<Cols, String> data) throws SQLException {
 
diff --git a/tika-eval/tika-eval-core/src/main/java/org/apache/tika/eval/core/tokens/CommonTokenCountManager.java b/tika-eval/tika-eval-core/src/main/java/org/apache/tika/eval/core/tokens/CommonTokenCountManager.java
index e6dbb5451..696890d04 100644
--- a/tika-eval/tika-eval-core/src/main/java/org/apache/tika/eval/core/tokens/CommonTokenCountManager.java
+++ b/tika-eval/tika-eval-core/src/main/java/org/apache/tika/eval/core/tokens/CommonTokenCountManager.java
@@ -34,7 +34,6 @@ import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
 import org.apache.commons.io.IOUtils;
-import org.apache.commons.lang3.mutable.MutableInt;
 import org.apache.commons.lang3.tuple.Pair;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -77,36 +76,6 @@ public class CommonTokenCountManager {
         }
     }
 
-    @Deprecated
-    /**
-     * @deprecated use {@link eval.textstats.CommonTokens} instead
-     */
-    public CommonTokenResult countTokenOverlaps(String langCode, Map<String, MutableInt> tokens)
-            throws IOException {
-        String actualLangCode = getActualLangCode(langCode);
-        int numUniqueCommonTokens = 0;
-        int numCommonTokens = 0;
-        int numUniqueAlphabeticTokens = 0;
-        int numAlphabeticTokens = 0;
-        LangModel model = commonTokenMap.get(actualLangCode);
-        for (Map.Entry<String, MutableInt> e : tokens.entrySet()) {
-            String token = e.getKey();
-            int count = e.getValue().intValue();
-            if (AlphaIdeographFilterFactory.isAlphabetic(token.toCharArray(), token.length())) {
-                numAlphabeticTokens += count;
-                numUniqueAlphabeticTokens++;
-            }
-            if (model.contains(token)) {
-                numCommonTokens += count;
-                numUniqueCommonTokens++;
-            }
-
-        }
-        return new CommonTokenResult(actualLangCode, numUniqueCommonTokens, numCommonTokens,
-                numUniqueAlphabeticTokens, numAlphabeticTokens);
-    }
-
-
     public Set<String> getTokens(String lang) {
         return Collections.unmodifiableSet(
                 new HashSet(commonTokenMap.get(getActualLangCode(lang)).getTokens()));
diff --git a/tika-example/src/main/java/org/apache/tika/example/EncryptedPrescriptionParser.java b/tika-example/src/main/java/org/apache/tika/example/EncryptedPrescriptionParser.java
index f64a296cb..0459160e6 100755
--- a/tika-example/src/main/java/org/apache/tika/example/EncryptedPrescriptionParser.java
+++ b/tika-example/src/main/java/org/apache/tika/example/EncryptedPrescriptionParser.java
@@ -32,10 +32,10 @@ import org.xml.sax.SAXException;
 import org.apache.tika.exception.TikaException;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 
-public class EncryptedPrescriptionParser extends AbstractParser {
+public class EncryptedPrescriptionParser implements Parser {
     private static final long serialVersionUID = -7816987249611278541L;
 
     public void parse(InputStream stream, ContentHandler handler, Metadata metadata,
diff --git a/tika-example/src/main/java/org/apache/tika/example/PickBestTextEncodingParser.java b/tika-example/src/main/java/org/apache/tika/example/PickBestTextEncodingParser.java
index 76e275216..1888769e8 100644
--- a/tika-example/src/main/java/org/apache/tika/example/PickBestTextEncodingParser.java
+++ b/tika-example/src/main/java/org/apache/tika/example/PickBestTextEncodingParser.java
@@ -19,7 +19,6 @@ package org.apache.tika.example;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
-import java.io.UnsupportedEncodingException;
 import java.nio.charset.Charset;
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -166,13 +165,6 @@ public class PickBestTextEncodingParser extends AbstractMultipleParser {
             }
             return handler;
         }
-
-        @Override
-        public ContentHandler getNewContentHandler(OutputStream os, String encoding)
-                throws UnsupportedEncodingException {
-            return getNewContentHandler();
-        }
-
         @Override
         public ContentHandler getNewContentHandler(OutputStream os, Charset charset) {
             return getNewContentHandler();
diff --git a/tika-example/src/main/java/org/apache/tika/example/SpringExample.java b/tika-example/src/main/java/org/apache/tika/example/SpringExample.java
index 0fe18e141..9cf63e8ad 100755
--- a/tika-example/src/main/java/org/apache/tika/example/SpringExample.java
+++ b/tika-example/src/main/java/org/apache/tika/example/SpringExample.java
@@ -20,6 +20,7 @@ package org.apache.tika.example;
 import static java.nio.charset.StandardCharsets.UTF_8;
 
 import java.io.ByteArrayInputStream;
+import java.io.OutputStreamWriter;
 
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
@@ -35,6 +36,8 @@ public class SpringExample {
                 new String[]{"org/apache/tika/example/spring.xml"});
         Parser parser = context.getBean("tika", Parser.class);
         parser.parse(new ByteArrayInputStream("Hello, World!".getBytes(UTF_8)),
-                new WriteOutContentHandler(System.out), new Metadata(), new ParseContext());
+                new WriteOutContentHandler(new OutputStreamWriter(System.out, UTF_8)),
+                        new Metadata(),
+                new ParseContext());
     }
 }
diff --git a/tika-example/src/main/java/org/apache/tika/example/TIAParsingExample.java b/tika-example/src/main/java/org/apache/tika/example/TIAParsingExample.java
index 614e2cfe3..51007bfdf 100755
--- a/tika-example/src/main/java/org/apache/tika/example/TIAParsingExample.java
+++ b/tika-example/src/main/java/org/apache/tika/example/TIAParsingExample.java
@@ -20,13 +20,15 @@ package org.apache.tika.example;
 import java.io.ByteArrayInputStream;
 import java.io.File;
 import java.io.FileInputStream;
-import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
-import java.io.OutputStream;
 import java.io.Reader;
+import java.io.Writer;
 import java.net.URL;
 import java.nio.CharBuffer;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Paths;
 import java.util.HashMap;
 import java.util.Locale;
 import java.util.Map;
@@ -153,9 +155,10 @@ public class TIAParsingExample {
         ParseContext context = new ParseContext();
         Parser parser = new AutoDetectParser();
         LinkContentHandler linkCollector = new LinkContentHandler();
-        try (OutputStream output = new FileOutputStream(new File(filename))) {
+        try (Writer writer =
+                     Files.newBufferedWriter(Paths.get(filename), StandardCharsets.UTF_8)) {
             ContentHandler handler =
-                    new TeeContentHandler(new BodyContentHandler(output), linkCollector);
+                    new TeeContentHandler(new BodyContentHandler(writer), linkCollector);
             parser.parse(stream, handler, metadata, context);
         }
     }
diff --git a/tika-integration-tests/tika-resource-loading-tests/src/test/java/org/apache/custom/parser/MyCustomParser.java b/tika-integration-tests/tika-resource-loading-tests/src/test/java/org/apache/custom/parser/MyCustomParser.java
index e9b1cf841..bddf0afe0 100644
--- a/tika-integration-tests/tika-resource-loading-tests/src/test/java/org/apache/custom/parser/MyCustomParser.java
+++ b/tika-integration-tests/tika-resource-loading-tests/src/test/java/org/apache/custom/parser/MyCustomParser.java
@@ -27,11 +27,11 @@ import org.xml.sax.SAXException;
 import org.apache.tika.exception.TikaException;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 import org.apache.tika.sax.XHTMLContentHandler;
 
-public class MyCustomParser extends AbstractParser {
+public class MyCustomParser implements Parser {
 
     @Override
     public Set<MediaType> getSupportedTypes(ParseContext context) {
diff --git a/tika-parsers/tika-parsers-extended/tika-parser-scientific-module/src/main/java/org/apache/tika/parser/gdal/GDALParser.java b/tika-parsers/tika-parsers-extended/tika-parser-scientific-module/src/main/java/org/apache/tika/parser/gdal/GDALParser.java
index 468087c32..e82f9b6b7 100644
--- a/tika-parsers/tika-parsers-extended/tika-parser-scientific-module/src/main/java/org/apache/tika/parser/gdal/GDALParser.java
+++ b/tika-parsers/tika-parsers-extended/tika-parser-scientific-module/src/main/java/org/apache/tika/parser/gdal/GDALParser.java
@@ -47,8 +47,8 @@ import org.apache.tika.io.TemporaryResources;
 import org.apache.tika.io.TikaInputStream;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 import org.apache.tika.parser.external.ExternalParser;
 import org.apache.tika.sax.XHTMLContentHandler;
 
@@ -71,7 +71,7 @@ import org.apache.tika.sax.XHTMLContentHandler;
  * {@link ContentHandler} in the
  * {@link #parse(InputStream, ContentHandler, Metadata, ParseContext)} method.
  */
-public class GDALParser extends AbstractParser {
+public class GDALParser implements Parser {
 
     private static final long serialVersionUID = -3869130527323941401L;
     private static final Logger LOG = LoggerFactory.getLogger(GDALParser.class);
diff --git a/tika-parsers/tika-parsers-extended/tika-parser-scientific-module/src/main/java/org/apache/tika/parser/geoinfo/GeographicInformationParser.java b/tika-parsers/tika-parsers-extended/tika-parser-scientific-module/src/main/java/org/apache/tika/parser/geoinfo/GeographicInformationParser.java
index e5732eb75..e606b142e 100644
--- a/tika-parsers/tika-parsers-extended/tika-parser-scientific-module/src/main/java/org/apache/tika/parser/geoinfo/GeographicInformationParser.java
+++ b/tika-parsers/tika-parsers-extended/tika-parser-scientific-module/src/main/java/org/apache/tika/parser/geoinfo/GeographicInformationParser.java
@@ -67,13 +67,13 @@ import org.apache.tika.io.TemporaryResources;
 import org.apache.tika.io.TikaInputStream;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 import org.apache.tika.sax.XHTMLContentHandler;
 import org.apache.tika.utils.DateUtils;
 
 
-public class GeographicInformationParser extends AbstractParser {
+public class GeographicInformationParser implements Parser {
 
     public static final String geoInfoType = "text/iso19139+xml";
     private static final Logger LOG = LoggerFactory.getLogger(GeographicInformationParser.class);
diff --git a/tika-parsers/tika-parsers-extended/tika-parser-scientific-module/src/main/java/org/apache/tika/parser/grib/GribParser.java b/tika-parsers/tika-parsers-extended/tika-parser-scientific-module/src/main/java/org/apache/tika/parser/grib/GribParser.java
index a5b21b08e..b974a481e 100644
--- a/tika-parsers/tika-parsers-extended/tika-parser-scientific-module/src/main/java/org/apache/tika/parser/grib/GribParser.java
+++ b/tika-parsers/tika-parsers-extended/tika-parser-scientific-module/src/main/java/org/apache/tika/parser/grib/GribParser.java
@@ -39,11 +39,11 @@ import org.apache.tika.metadata.Metadata;
 import org.apache.tika.metadata.Property;
 import org.apache.tika.metadata.TikaCoreProperties;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 import org.apache.tika.sax.XHTMLContentHandler;
 
-public class GribParser extends AbstractParser {
+public class GribParser implements Parser {
 
     public static final String GRIB_MIME_TYPE = "application/x-grib2";
     private static final long serialVersionUID = 7855458954474247655L;
diff --git a/tika-parsers/tika-parsers-extended/tika-parser-scientific-module/src/main/java/org/apache/tika/parser/hdf/HDFParser.java b/tika-parsers/tika-parsers-extended/tika-parser-scientific-module/src/main/java/org/apache/tika/parser/hdf/HDFParser.java
index 4102598f4..e324a4bd6 100644
--- a/tika-parsers/tika-parsers-extended/tika-parser-scientific-module/src/main/java/org/apache/tika/parser/hdf/HDFParser.java
+++ b/tika-parsers/tika-parsers-extended/tika-parser-scientific-module/src/main/java/org/apache/tika/parser/hdf/HDFParser.java
@@ -36,8 +36,8 @@ import org.apache.tika.exception.TikaException;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.metadata.TikaCoreProperties;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 import org.apache.tika.parser.netcdf.NetCDFParser;
 import org.apache.tika.sax.XHTMLContentHandler;
 
@@ -48,7 +48,7 @@ import org.apache.tika.sax.XHTMLContentHandler;
  * "http://www.unidata.ucar.edu/software/netcdf-java/formats/FileTypes.html"
  * >this link</a> for more information.
  */
-public class HDFParser extends AbstractParser {
+public class HDFParser implements Parser {
 
     /**
      * Serial version UID
diff --git a/tika-parsers/tika-parsers-extended/tika-parser-scientific-module/src/main/java/org/apache/tika/parser/netcdf/NetCDFParser.java b/tika-parsers/tika-parsers-extended/tika-parser-scientific-module/src/main/java/org/apache/tika/parser/netcdf/NetCDFParser.java
index 7f6f5a77f..9f4ef020c 100644
--- a/tika-parsers/tika-parsers-extended/tika-parser-scientific-module/src/main/java/org/apache/tika/parser/netcdf/NetCDFParser.java
+++ b/tika-parsers/tika-parsers-extended/tika-parser-scientific-module/src/main/java/org/apache/tika/parser/netcdf/NetCDFParser.java
@@ -38,7 +38,6 @@ import org.apache.tika.metadata.Metadata;
 import org.apache.tika.metadata.Property;
 import org.apache.tika.metadata.TikaCoreProperties;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
 import org.apache.tika.parser.Parser;
 import org.apache.tika.sax.XHTMLContentHandler;
@@ -50,7 +49,7 @@ import org.apache.tika.sax.XHTMLContentHandler;
  * href="http://www.unidata.ucar.edu/software/netcdf-java/">NetCDF for Java</a>
  * API.
  */
-public class NetCDFParser extends AbstractParser {
+public class NetCDFParser implements Parser {
 
     /**
      * Serial version UID
diff --git a/tika-parsers/tika-parsers-extended/tika-parser-sqlite3-module/src/main/java/org/apache/tika/parser/sqlite3/SQLite3Parser.java b/tika-parsers/tika-parsers-extended/tika-parser-sqlite3-module/src/main/java/org/apache/tika/parser/sqlite3/SQLite3Parser.java
index 76824a72d..1bd18916e 100644
--- a/tika-parsers/tika-parsers-extended/tika-parser-sqlite3-module/src/main/java/org/apache/tika/parser/sqlite3/SQLite3Parser.java
+++ b/tika-parsers/tika-parsers-extended/tika-parser-sqlite3-module/src/main/java/org/apache/tika/parser/sqlite3/SQLite3Parser.java
@@ -33,8 +33,8 @@ import org.apache.tika.exception.TikaConfigException;
 import org.apache.tika.exception.TikaException;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 
 /**
  * This is the main class for parsing SQLite3 files.  When {@link #parse} is called,
@@ -52,7 +52,7 @@ import org.apache.tika.parser.ParseContext;
  * If using a TikaInputStream, make sure to close it to delete the temp file
  * that has to be created.
  */
-public class SQLite3Parser extends AbstractParser implements Initializable {
+public class SQLite3Parser implements Parser, Initializable {
 
     /**
      * Serial version UID
diff --git a/tika-parsers/tika-parsers-ml/tika-age-recogniser/src/main/java/org/apache/tika/parser/recognition/AgeRecogniser.java b/tika-parsers/tika-parsers-ml/tika-age-recogniser/src/main/java/org/apache/tika/parser/recognition/AgeRecogniser.java
index 2a27ae6e9..509e4e7c0 100644
--- a/tika-parsers/tika-parsers-ml/tika-age-recogniser/src/main/java/org/apache/tika/parser/recognition/AgeRecogniser.java
+++ b/tika-parsers/tika-parsers-ml/tika-age-recogniser/src/main/java/org/apache/tika/parser/recognition/AgeRecogniser.java
@@ -41,8 +41,8 @@ import org.apache.tika.config.TikaConfig;
 import org.apache.tika.exception.TikaConfigException;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 
 
 /**
@@ -52,7 +52,7 @@ import org.apache.tika.parser.ParseContext;
  * <li>Author Age</li>
  * </ul>
  */
-public class AgeRecogniser extends AbstractParser implements Initializable {
+public class AgeRecogniser implements Parser, Initializable {
 
     public static final String MD_KEY_ESTIMATED_AGE_RANGE = "Estimated-Author-Age-Range";
     public static final String MD_KEY_ESTIMATED_AGE = "Estimated-Author-Age";
diff --git a/tika-parsers/tika-parsers-ml/tika-parser-advancedmedia-module/src/main/java/org/apache/tika/parser/pot/PooledTimeSeriesParser.java b/tika-parsers/tika-parsers-ml/tika-parser-advancedmedia-module/src/main/java/org/apache/tika/parser/pot/PooledTimeSeriesParser.java
index cfe37dbbb..ef6990fb5 100644
--- a/tika-parsers/tika-parsers-ml/tika-parser-advancedmedia-module/src/main/java/org/apache/tika/parser/pot/PooledTimeSeriesParser.java
+++ b/tika-parsers/tika-parsers-ml/tika-parser-advancedmedia-module/src/main/java/org/apache/tika/parser/pot/PooledTimeSeriesParser.java
@@ -49,7 +49,6 @@ import org.apache.tika.io.TikaInputStream;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.mime.MediaType;
 import org.apache.tika.mime.MediaTypeRegistry;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.CompositeParser;
 import org.apache.tika.parser.ParseContext;
 import org.apache.tika.parser.Parser;
@@ -64,7 +63,7 @@ import org.apache.tika.sax.XHTMLContentHandler;
  * <p>See https://wiki.apache.org/tika/PooledTimeSeriesParser for
  * more details and setup instructions.
  */
-public class PooledTimeSeriesParser extends AbstractParser {
+public class PooledTimeSeriesParser implements Parser {
 
     static final boolean isAvailable =
             ExternalParser.check(new String[]{"pooled-time-series", "--help"}, -1);
diff --git a/tika-parsers/tika-parsers-ml/tika-parser-advancedmedia-module/src/main/java/org/apache/tika/parser/recognition/ObjectRecognitionParser.java b/tika-parsers/tika-parsers-ml/tika-parser-advancedmedia-module/src/main/java/org/apache/tika/parser/recognition/ObjectRecognitionParser.java
index 0bc0830f1..289289a74 100644
--- a/tika-parsers/tika-parsers-ml/tika-parser-advancedmedia-module/src/main/java/org/apache/tika/parser/recognition/ObjectRecognitionParser.java
+++ b/tika-parsers/tika-parsers-ml/tika-parser-advancedmedia-module/src/main/java/org/apache/tika/parser/recognition/ObjectRecognitionParser.java
@@ -38,8 +38,8 @@ import org.apache.tika.exception.TikaConfigException;
 import org.apache.tika.exception.TikaException;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 import org.apache.tika.parser.captioning.CaptionObject;
 import org.apache.tika.sax.XHTMLContentHandler;
 import org.apache.tika.utils.AnnotationUtils;
@@ -68,7 +68,7 @@ import org.apache.tika.utils.ServiceLoaderUtils;
  *
  * @since Apache Tika 1.14
  */
-public class ObjectRecognitionParser extends AbstractParser implements Initializable {
+public class ObjectRecognitionParser implements Parser, Initializable {
     public static final String MD_KEY_OBJ_REC = "OBJECT";
     public static final String MD_KEY_IMG_CAP = "CAPTION";
     public static final String MD_REC_IMPL_KEY =
diff --git a/tika-parsers/tika-parsers-ml/tika-parser-nlp-module/src/main/java/org/apache/tika/parser/geo/topic/GeoParser.java b/tika-parsers/tika-parsers-ml/tika-parser-nlp-module/src/main/java/org/apache/tika/parser/geo/topic/GeoParser.java
index e40cb1a33..cfa52e7e2 100644
--- a/tika-parsers/tika-parsers-ml/tika-parser-nlp-module/src/main/java/org/apache/tika/parser/geo/topic/GeoParser.java
+++ b/tika-parsers/tika-parsers-ml/tika-parser-nlp-module/src/main/java/org/apache/tika/parser/geo/topic/GeoParser.java
@@ -39,12 +39,12 @@ import org.apache.tika.config.Field;
 import org.apache.tika.exception.TikaException;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 import org.apache.tika.parser.geo.topic.gazetteer.GeoGazetteerClient;
 import org.apache.tika.parser.geo.topic.gazetteer.Location;
 
-public class GeoParser extends AbstractParser {
+public class GeoParser implements Parser {
     private static final long serialVersionUID = -2241391757440215491L;
     private static final Logger LOG = LoggerFactory.getLogger(GeoParser.class);
     private static final MediaType MEDIA_TYPE = MediaType.application("geotopic");
diff --git a/tika-parsers/tika-parsers-ml/tika-parser-nlp-module/src/main/java/org/apache/tika/parser/journal/JournalParser.java b/tika-parsers/tika-parsers-ml/tika-parser-nlp-module/src/main/java/org/apache/tika/parser/journal/JournalParser.java
index cc01e4969..467bbb2af 100644
--- a/tika-parsers/tika-parsers-ml/tika-parser-nlp-module/src/main/java/org/apache/tika/parser/journal/JournalParser.java
+++ b/tika-parsers/tika-parsers-ml/tika-parser-nlp-module/src/main/java/org/apache/tika/parser/journal/JournalParser.java
@@ -32,11 +32,11 @@ import org.apache.tika.io.TemporaryResources;
 import org.apache.tika.io.TikaInputStream;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 import org.apache.tika.parser.pdf.PDFParser;
 
-public class JournalParser extends AbstractParser {
+public class JournalParser implements Parser {
 
     /**
      * Generated serial ID
diff --git a/tika-parsers/tika-parsers-ml/tika-parser-nlp-module/src/main/java/org/apache/tika/parser/ner/NamedEntityParser.java b/tika-parsers/tika-parsers-ml/tika-parser-nlp-module/src/main/java/org/apache/tika/parser/ner/NamedEntityParser.java
index d23d78ead..dae56b250 100644
--- a/tika-parsers/tika-parsers-ml/tika-parser-nlp-module/src/main/java/org/apache/tika/parser/ner/NamedEntityParser.java
+++ b/tika-parsers/tika-parsers-ml/tika-parser-nlp-module/src/main/java/org/apache/tika/parser/ner/NamedEntityParser.java
@@ -39,8 +39,8 @@ import org.apache.tika.config.TikaConfig;
 import org.apache.tika.exception.TikaException;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 import org.apache.tika.parser.ner.opennlp.OpenNLPNERecogniser;
 import org.apache.tika.parser.ner.regex.RegexNERecogniser;
 import org.apache.tika.sax.XHTMLContentHandler;
@@ -56,7 +56,7 @@ import org.apache.tika.sax.XHTMLContentHandler;
  * @see OpenNLPNERecogniser
  * @see NERecogniser
  */
-public class NamedEntityParser extends AbstractParser {
+public class NamedEntityParser implements Parser {
     public static final Logger LOG = LoggerFactory.getLogger(NamedEntityParser.class);
     public static final Set<MediaType> MEDIA_TYPES = new HashSet<>();
     public static final String MD_KEY_PREFIX = "NER_";
diff --git a/tika-parsers/tika-parsers-ml/tika-parser-nlp-module/src/main/java/org/apache/tika/parser/sentiment/SentimentAnalysisParser.java b/tika-parsers/tika-parsers-ml/tika-parser-nlp-module/src/main/java/org/apache/tika/parser/sentiment/SentimentAnalysisParser.java
index a5ca35418..c6fd5597c 100644
--- a/tika-parsers/tika-parsers-ml/tika-parser-nlp-module/src/main/java/org/apache/tika/parser/sentiment/SentimentAnalysisParser.java
+++ b/tika-parsers/tika-parsers-ml/tika-parser-nlp-module/src/main/java/org/apache/tika/parser/sentiment/SentimentAnalysisParser.java
@@ -41,14 +41,14 @@ import org.apache.tika.exception.TikaConfigException;
 import org.apache.tika.exception.TikaException;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 
 /**
  * This parser classifies documents based on the sentiment of document.
  * The classifier is powered by Apache OpenNLP's Maximum Entropy Classifier
  */
-public class SentimentAnalysisParser extends AbstractParser implements Initializable {
+public class SentimentAnalysisParser implements Parser, Initializable {
 
     public static final String DEF_MODEL =
             "https://raw.githubusercontent.com/USCDataScience/SentimentAnalysisParser/master/sentiment-models/src/main/resources/edu/usc/irds/sentiment/en-netflix-sentiment.bin";
diff --git a/tika-parsers/tika-parsers-ml/tika-transcribe-aws/src/main/java/org/apache/tika/parser/transcribe/aws/AmazonTranscribe.java b/tika-parsers/tika-parsers-ml/tika-transcribe-aws/src/main/java/org/apache/tika/parser/transcribe/aws/AmazonTranscribe.java
index 91e845206..f290c1b7f 100644
--- a/tika-parsers/tika-parsers-ml/tika-transcribe-aws/src/main/java/org/apache/tika/parser/transcribe/aws/AmazonTranscribe.java
+++ b/tika-parsers/tika-parsers-ml/tika-transcribe-aws/src/main/java/org/apache/tika/parser/transcribe/aws/AmazonTranscribe.java
@@ -76,8 +76,8 @@ import org.apache.tika.exception.TikaConfigException;
 import org.apache.tika.exception.TikaException;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 import org.apache.tika.sax.XHTMLContentHandler;
 
 /**
@@ -93,7 +93,7 @@ import org.apache.tika.sax.XHTMLContentHandler;
  * @since Tika 2.0
  */
 
-public class AmazonTranscribe extends AbstractParser implements Initializable {
+public class AmazonTranscribe implements Parser, Initializable {
     private static final Logger LOG = LoggerFactory.getLogger(AmazonTranscribe.class);
     private AmazonTranscribeAsync amazonTranscribeAsync;
     private AmazonS3 amazonS3;
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-apple-module/src/main/java/org/apache/tika/parser/apple/AppleSingleFileParser.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-apple-module/src/main/java/org/apache/tika/parser/apple/AppleSingleFileParser.java
index 3801faee2..ac43b2985 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-apple-module/src/main/java/org/apache/tika/parser/apple/AppleSingleFileParser.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-apple-module/src/main/java/org/apache/tika/parser/apple/AppleSingleFileParser.java
@@ -38,8 +38,8 @@ import org.apache.tika.io.EndianUtils;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.metadata.TikaCoreProperties;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 import org.apache.tika.sax.XHTMLContentHandler;
 
 /**
@@ -48,7 +48,7 @@ import org.apache.tika.sax.XHTMLContentHandler;
  * <p>
  * See <a href="http://kaiser-edv.de/documents/AppleSingle_AppleDouble.pdf">spec document</a>.
  */
-public class AppleSingleFileParser extends AbstractParser {
+public class AppleSingleFileParser implements Parser {
 
     private static final int MAX_FIELD_LENGTH = 1_073_741_824;
     /**
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-apple-module/src/main/java/org/apache/tika/parser/apple/PListParser.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-apple-module/src/main/java/org/apache/tika/parser/apple/PListParser.java
index 8b1583913..e90324ba2 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-apple-module/src/main/java/org/apache/tika/parser/apple/PListParser.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-apple-module/src/main/java/org/apache/tika/parser/apple/PListParser.java
@@ -50,8 +50,8 @@ import org.apache.tika.extractor.EmbeddedDocumentUtil;
 import org.apache.tika.io.TikaInputStream;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 import org.apache.tika.sax.XHTMLContentHandler;
 
 /**
@@ -63,7 +63,7 @@ import org.apache.tika.sax.XHTMLContentHandler;
  *
  * @since 1.25
  */
-public class PListParser extends AbstractParser {
+public class PListParser implements Parser {
 
     private static final String ARR = "array";
     private static final String DATA = "data";
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-apple-module/src/main/java/org/apache/tika/parser/iwork/IWorkPackageParser.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-apple-module/src/main/java/org/apache/tika/parser/iwork/IWorkPackageParser.java
index de2d93bfe..6a8d48f7c 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-apple-module/src/main/java/org/apache/tika/parser/iwork/IWorkPackageParser.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-apple-module/src/main/java/org/apache/tika/parser/iwork/IWorkPackageParser.java
@@ -37,8 +37,8 @@ import org.apache.tika.detect.XmlRootExtractor;
 import org.apache.tika.exception.TikaException;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 import org.apache.tika.sax.XHTMLContentHandler;
 import org.apache.tika.utils.XMLReaderUtils;
 
@@ -53,7 +53,7 @@ import org.apache.tika.utils.XMLReaderUtils;
  * <li>Numbers format version 1.x. Currently only tested with Numbers version 2.0.x
  * </ol>
  */
-public class IWorkPackageParser extends AbstractParser {
+public class IWorkPackageParser implements Parser {
 
     /**
      * Which files within an iWork file contain the actual content?
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-apple-module/src/main/java/org/apache/tika/parser/iwork/iwana/IWork13PackageParser.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-apple-module/src/main/java/org/apache/tika/parser/iwork/iwana/IWork13PackageParser.java
index 8fe7dc607..9b3f3a55f 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-apple-module/src/main/java/org/apache/tika/parser/iwork/iwana/IWork13PackageParser.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-apple-module/src/main/java/org/apache/tika/parser/iwork/iwana/IWork13PackageParser.java
@@ -48,11 +48,11 @@ import org.apache.tika.metadata.Metadata;
 import org.apache.tika.metadata.Property;
 import org.apache.tika.metadata.TikaCoreProperties;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 import org.apache.tika.sax.XHTMLContentHandler;
 
-public class IWork13PackageParser extends AbstractParser {
+public class IWork13PackageParser implements Parser {
 
     /**
      * All iWork 13 files contain this, so we can detect based on it
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-apple-module/src/main/java/org/apache/tika/parser/iwork/iwana/IWork18PackageParser.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-apple-module/src/main/java/org/apache/tika/parser/iwork/iwana/IWork18PackageParser.java
index 78d379ccc..ea99e8f46 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-apple-module/src/main/java/org/apache/tika/parser/iwork/iwana/IWork18PackageParser.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-apple-module/src/main/java/org/apache/tika/parser/iwork/iwana/IWork18PackageParser.java
@@ -35,14 +35,14 @@ import org.apache.tika.exception.TikaException;
 import org.apache.tika.io.TikaInputStream;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 
 /**
  * For now, this parser isn't even registered.  It contains
  * code that will detect the newer 2018 .keynote, .numbers, .pages files.
  */
-public class IWork18PackageParser extends AbstractParser {
+public class IWork18PackageParser implements Parser {
 
     private final static Set<MediaType> supportedTypes = Collections.unmodifiableSet(
             new HashSet<>(Arrays.asList(IWork18DocumentType.KEYNOTE18.getType(),
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-apple-module/src/test/java/org/apache/tika/parser/iwork/IWorkParserTest.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-apple-module/src/test/java/org/apache/tika/parser/iwork/IWorkParserTest.java
index a02404f0a..fffc38f9a 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-apple-module/src/test/java/org/apache/tika/parser/iwork/IWorkParserTest.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-apple-module/src/test/java/org/apache/tika/parser/iwork/IWorkParserTest.java
@@ -38,6 +38,7 @@ import org.apache.tika.metadata.Metadata;
 import org.apache.tika.metadata.Office;
 import org.apache.tika.metadata.TikaCoreProperties;
 import org.apache.tika.mime.MediaType;
+import org.apache.tika.parser.ParseContext;
 import org.apache.tika.sax.BodyContentHandler;
 
 /**
@@ -62,7 +63,7 @@ public class IWorkParserTest extends TikaTest {
         InputStream input = getResourceAsStream("/test-documents/testKeynote.key");
         Metadata metadata = new Metadata();
         ContentHandler handler = new BodyContentHandler();
-        iWorkParser.parse(input, handler, metadata);
+        iWorkParser.parse(input, handler, metadata, new ParseContext());
         input.read();   // Will throw an Exception if the stream was already closed.
     }
 
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-audiovideo-module/src/main/java/org/apache/tika/parser/audio/AudioParser.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-audiovideo-module/src/main/java/org/apache/tika/parser/audio/AudioParser.java
index 06fe0ac84..64596b9ac 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-audiovideo-module/src/main/java/org/apache/tika/parser/audio/AudioParser.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-audiovideo-module/src/main/java/org/apache/tika/parser/audio/AudioParser.java
@@ -41,11 +41,11 @@ import org.apache.tika.metadata.Metadata;
 import org.apache.tika.metadata.TikaCoreProperties;
 import org.apache.tika.metadata.XMPDM;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 import org.apache.tika.sax.XHTMLContentHandler;
 
-public class AudioParser extends AbstractParser {
+public class AudioParser implements Parser {
 
     /**
      * Serial version UID
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-audiovideo-module/src/main/java/org/apache/tika/parser/audio/MidiParser.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-audiovideo-module/src/main/java/org/apache/tika/parser/audio/MidiParser.java
index 0d0fb69a1..d7622e97a 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-audiovideo-module/src/main/java/org/apache/tika/parser/audio/MidiParser.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-audiovideo-module/src/main/java/org/apache/tika/parser/audio/MidiParser.java
@@ -39,11 +39,11 @@ import org.xml.sax.SAXException;
 import org.apache.tika.exception.TikaException;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 import org.apache.tika.sax.XHTMLContentHandler;
 
-public class MidiParser extends AbstractParser {
+public class MidiParser implements Parser {
 
     /**
      * Serial version UID
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-audiovideo-module/src/main/java/org/apache/tika/parser/mp3/Mp3Parser.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-audiovideo-module/src/main/java/org/apache/tika/parser/mp3/Mp3Parser.java
index 55e5ac69b..57d44a8c9 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-audiovideo-module/src/main/java/org/apache/tika/parser/mp3/Mp3Parser.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-audiovideo-module/src/main/java/org/apache/tika/parser/mp3/Mp3Parser.java
@@ -33,8 +33,8 @@ import org.apache.tika.metadata.Metadata;
 import org.apache.tika.metadata.TikaCoreProperties;
 import org.apache.tika.metadata.XMPDM;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 import org.apache.tika.parser.mp3.ID3Tags.ID3Comment;
 import org.apache.tika.sax.XHTMLContentHandler;
 
@@ -46,7 +46,7 @@ import org.apache.tika.sax.XHTMLContentHandler;
  * @see <a href="https://id3.org/id3v2.4.0-structure">MP3 ID3 Version 2.4 Structure Specification</a>
  * @see <a href="https://id3.org/id3v2.4.0-frames">MP3 ID3 Version 2.4 Frames Specification</a>
  */
-public class Mp3Parser extends AbstractParser {
+public class Mp3Parser implements Parser {
 
     /**
      * Serial version UID
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-audiovideo-module/src/main/java/org/apache/tika/parser/mp4/MP4Parser.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-audiovideo-module/src/main/java/org/apache/tika/parser/mp4/MP4Parser.java
index 67f74d218..5e1db299a 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-audiovideo-module/src/main/java/org/apache/tika/parser/mp4/MP4Parser.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-audiovideo-module/src/main/java/org/apache/tika/parser/mp4/MP4Parser.java
@@ -52,8 +52,8 @@ import org.apache.tika.metadata.Property;
 import org.apache.tika.metadata.TikaCoreProperties;
 import org.apache.tika.metadata.XMPDM;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 import org.apache.tika.sax.XHTMLContentHandler;
 import org.apache.tika.utils.StringUtils;
 
@@ -63,7 +63,7 @@ import org.apache.tika.utils.StringUtils;
  * <p>
  * This uses Drew Noakes' metadata-extractor: https://github.com/drewnoakes/metadata-extractor
  */
-public class MP4Parser extends AbstractParser {
+public class MP4Parser implements Parser {
     /**
      * Serial version UID
      */
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-audiovideo-module/src/main/java/org/apache/tika/parser/video/FLVParser.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-audiovideo-module/src/main/java/org/apache/tika/parser/video/FLVParser.java
index 49f3537e3..6674d7445 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-audiovideo-module/src/main/java/org/apache/tika/parser/video/FLVParser.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-audiovideo-module/src/main/java/org/apache/tika/parser/video/FLVParser.java
@@ -36,8 +36,8 @@ import org.xml.sax.SAXException;
 import org.apache.tika.exception.TikaException;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 import org.apache.tika.sax.XHTMLContentHandler;
 
 /**
@@ -63,7 +63,7 @@ import org.apache.tika.sax.XHTMLContentHandler;
  * hasCuePoints width, cuePoints, lasttimestamp, canSeekToEnd, datasize,
  * duration, videosize, filesize, audiodatarate, hasAudio, stereo audiodelay
  */
-public class FLVParser extends AbstractParser {
+public class FLVParser implements Parser {
 
     /**
      * Serial version UID
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-cad-module/src/main/java/org/apache/tika/parser/dgn/DGN8Parser.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-cad-module/src/main/java/org/apache/tika/parser/dgn/DGN8Parser.java
index e9dae2281..a0eba36c1 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-cad-module/src/main/java/org/apache/tika/parser/dgn/DGN8Parser.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-cad-module/src/main/java/org/apache/tika/parser/dgn/DGN8Parser.java
@@ -32,15 +32,15 @@ import org.apache.tika.exception.TikaException;
 import org.apache.tika.io.TikaInputStream;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 import org.apache.tika.parser.microsoft.SummaryExtractor;
 import org.apache.tika.sax.XHTMLContentHandler;
 
 /**
  * This is a VERY LIMITED parser. It parses metadata out of dgn8 files.
  */
-public class DGN8Parser extends AbstractParser {
+public class DGN8Parser implements Parser {
 
     Set<MediaType> SUPPORTED_TYPES = Collections.singleton(MediaType.image("vnd.dgn; version=8"));
 
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-cad-module/src/main/java/org/apache/tika/parser/dwg/AbstractDWGParser.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-cad-module/src/main/java/org/apache/tika/parser/dwg/AbstractDWGParser.java
index 938ef9db0..e1c4ae3ed 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-cad-module/src/main/java/org/apache/tika/parser/dwg/AbstractDWGParser.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-cad-module/src/main/java/org/apache/tika/parser/dwg/AbstractDWGParser.java
@@ -18,13 +18,11 @@ package org.apache.tika.parser.dwg;
 
 
 import org.apache.tika.config.Field;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 
 
-
-
-public abstract class AbstractDWGParser extends AbstractParser {
+public abstract class AbstractDWGParser implements Parser {
 
 
     /**
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-cad-module/src/main/java/org/apache/tika/parser/prt/PRTParser.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-cad-module/src/main/java/org/apache/tika/parser/prt/PRTParser.java
index f17e69389..4e978329e 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-cad-module/src/main/java/org/apache/tika/parser/prt/PRTParser.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-cad-module/src/main/java/org/apache/tika/parser/prt/PRTParser.java
@@ -33,8 +33,8 @@ import org.apache.tika.io.EndianUtils;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.metadata.TikaCoreProperties;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 import org.apache.tika.sax.XHTMLContentHandler;
 
 /**
@@ -42,7 +42,7 @@ import org.apache.tika.sax.XHTMLContentHandler;
  * format. It outputs text from note entries.
  */
 
-public class PRTParser extends AbstractParser {
+public class PRTParser implements Parser {
 
     public static final String PRT_MIME_TYPE = "application/x-prt";
     /**
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-cad-module/src/test/java/org/apache/tika/parser/prt/PRTParserTest.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-cad-module/src/test/java/org/apache/tika/parser/prt/PRTParserTest.java
index c23516349..d1243fd72 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-cad-module/src/test/java/org/apache/tika/parser/prt/PRTParserTest.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-cad-module/src/test/java/org/apache/tika/parser/prt/PRTParserTest.java
@@ -26,6 +26,7 @@ import org.xml.sax.ContentHandler;
 import org.apache.tika.TikaTest;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.metadata.TikaCoreProperties;
+import org.apache.tika.parser.ParseContext;
 import org.apache.tika.sax.BodyContentHandler;
 
 public class PRTParserTest extends TikaTest {
@@ -37,7 +38,7 @@ public class PRTParserTest extends TikaTest {
         try (InputStream input = getResourceAsStream("/test-documents/testCADKEY.prt")) {
             Metadata metadata = new Metadata();
             ContentHandler handler = new BodyContentHandler();
-            new PRTParser().parse(input, handler, metadata);
+            new PRTParser().parse(input, handler, metadata, new ParseContext());
 
             assertEquals("application/x-prt", metadata.get(Metadata.CONTENT_TYPE));
 
@@ -71,7 +72,7 @@ public class PRTParserTest extends TikaTest {
         try (InputStream input = getResourceAsStream("/test-documents/testCADKEY2.prt")) {
             Metadata metadata = new Metadata();
             ContentHandler handler = new BodyContentHandler();
-            new PRTParser().parse(input, handler, metadata);
+            new PRTParser().parse(input, handler, metadata, new ParseContext());
 
             assertEquals("application/x-prt", metadata.get(Metadata.CONTENT_TYPE));
 
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-code-module/src/main/java/org/apache/tika/parser/asm/ClassParser.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-code-module/src/main/java/org/apache/tika/parser/asm/ClassParser.java
index 47f6d0cfb..1b42334a2 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-code-module/src/main/java/org/apache/tika/parser/asm/ClassParser.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-code-module/src/main/java/org/apache/tika/parser/asm/ClassParser.java
@@ -27,13 +27,13 @@ import org.xml.sax.SAXException;
 import org.apache.tika.exception.TikaException;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 
 /**
  * Parser for Java .class files.
  */
-public class ClassParser extends AbstractParser {
+public class ClassParser implements Parser {
 
     /**
      * Serial version UID
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-code-module/src/main/java/org/apache/tika/parser/executable/ExecutableParser.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-code-module/src/main/java/org/apache/tika/parser/executable/ExecutableParser.java
index 0d94babba..53723290b 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-code-module/src/main/java/org/apache/tika/parser/executable/ExecutableParser.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-code-module/src/main/java/org/apache/tika/parser/executable/ExecutableParser.java
@@ -34,14 +34,14 @@ import org.apache.tika.metadata.MachineMetadata;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.metadata.TikaCoreProperties;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 import org.apache.tika.sax.XHTMLContentHandler;
 
 /**
  * Parser for executable files. Currently supports ELF and PE
  */
-public class ExecutableParser extends AbstractParser implements MachineMetadata {
+public class ExecutableParser implements Parser, MachineMetadata {
     /**
      * Serial version UID
      */
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-code-module/src/main/java/org/apache/tika/parser/mat/MatParser.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-code-module/src/main/java/org/apache/tika/parser/mat/MatParser.java
index dff494787..042d1db5e 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-code-module/src/main/java/org/apache/tika/parser/mat/MatParser.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-code-module/src/main/java/org/apache/tika/parser/mat/MatParser.java
@@ -38,14 +38,14 @@ import org.apache.tika.io.TemporaryResources;
 import org.apache.tika.io.TikaInputStream;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 import org.apache.tika.sax.XHTMLContentHandler;
 
 //JMatIO imports
 
 
-public class MatParser extends AbstractParser {
+public class MatParser implements Parser {
 
     public static final String MATLAB_MIME_TYPE = "application/x-matlab-data";
 
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-code-module/src/main/java/org/apache/tika/parser/sas/SAS7BDATParser.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-code-module/src/main/java/org/apache/tika/parser/sas/SAS7BDATParser.java
index 4740d6cf2..4dab3499d 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-code-module/src/main/java/org/apache/tika/parser/sas/SAS7BDATParser.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-code-module/src/main/java/org/apache/tika/parser/sas/SAS7BDATParser.java
@@ -41,15 +41,15 @@ import org.apache.tika.metadata.OfficeOpenXMLExtended;
 import org.apache.tika.metadata.PagedText;
 import org.apache.tika.metadata.TikaCoreProperties;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 import org.apache.tika.sax.XHTMLContentHandler;
 
 /**
  * Processes the SAS7BDAT data columnar database file used by SAS and
  * other similar languages.
  */
-public class SAS7BDATParser extends AbstractParser {
+public class SAS7BDATParser implements Parser {
     private static final long serialVersionUID = -2775485539937983150L;
 
     private static final MediaType TYPE_SAS7BDAT = MediaType.application("x-sas-data");
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-crypto-module/src/main/java/org/apache/tika/parser/crypto/Pkcs7Parser.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-crypto-module/src/main/java/org/apache/tika/parser/crypto/Pkcs7Parser.java
index 13e46f825..0c5ade368 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-crypto-module/src/main/java/org/apache/tika/parser/crypto/Pkcs7Parser.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-crypto-module/src/main/java/org/apache/tika/parser/crypto/Pkcs7Parser.java
@@ -33,7 +33,6 @@ import org.xml.sax.SAXException;
 import org.apache.tika.exception.TikaException;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.EmptyParser;
 import org.apache.tika.parser.ParseContext;
 import org.apache.tika.parser.Parser;
@@ -41,7 +40,7 @@ import org.apache.tika.parser.Parser;
 /**
  * Basic parser for PKCS7 data.
  */
-public class Pkcs7Parser extends AbstractParser {
+public class Pkcs7Parser implements Parser {
 
     /**
      * Serial version UID
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-crypto-module/src/main/java/org/apache/tika/parser/crypto/TSDParser.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-crypto-module/src/main/java/org/apache/tika/parser/crypto/TSDParser.java
index 4c38b11e0..c5a362464 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-crypto-module/src/main/java/org/apache/tika/parser/crypto/TSDParser.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-crypto-module/src/main/java/org/apache/tika/parser/crypto/TSDParser.java
@@ -57,15 +57,15 @@ import org.apache.tika.extractor.EmbeddedDocumentUtil;
 import org.apache.tika.io.TikaInputStream;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 import org.apache.tika.sax.XHTMLContentHandler;
 import org.apache.tika.utils.RereadableInputStream;
 
 /**
  * Tika parser for Time Stamped Data Envelope (application/timestamped-data)
  */
-public class TSDParser extends AbstractParser {
+public class TSDParser implements Parser {
     public static final String TSD_MIME_TYPE = "application/timestamped-data";
     private static final long serialVersionUID = 3268158344501763323L;
     private static final Logger LOG = LoggerFactory.getLogger(TSDParser.class);
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-digest-commons/src/main/java/org/apache/tika/parser/digestutils/CommonsDigester.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-digest-commons/src/main/java/org/apache/tika/parser/digestutils/CommonsDigester.java
index 7dd27cf25..7da68e7af 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-digest-commons/src/main/java/org/apache/tika/parser/digestutils/CommonsDigester.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-digest-commons/src/main/java/org/apache/tika/parser/digestutils/CommonsDigester.java
@@ -58,7 +58,6 @@ public class CommonsDigester extends CompositeDigester {
      * @param markLimit  limit for mark/reset; after this limit is hit, the
      *                   stream is reset and spooled to disk
      * @param algorithms algorithms to run
-     * @deprecated use {@link #CommonsDigester(int, String)}
      */
     public CommonsDigester(int markLimit, DigestAlgorithm... algorithms) {
         super(buildDigesters(markLimit, algorithms));
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-font-module/src/main/java/org/apache/tika/parser/font/AdobeFontMetricParser.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-font-module/src/main/java/org/apache/tika/parser/font/AdobeFontMetricParser.java
index 6caf5d3c2..aa4c3fed8 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-font-module/src/main/java/org/apache/tika/parser/font/AdobeFontMetricParser.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-font-module/src/main/java/org/apache/tika/parser/font/AdobeFontMetricParser.java
@@ -33,14 +33,14 @@ import org.apache.tika.metadata.Metadata;
 import org.apache.tika.metadata.Property;
 import org.apache.tika.metadata.TikaCoreProperties;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 import org.apache.tika.sax.XHTMLContentHandler;
 
 /**
  * Parser for AFM Font Files
  */
-public class AdobeFontMetricParser extends AbstractParser {
+public class AdobeFontMetricParser implements Parser {
     // TIKA-1325 Replace these with properties, from a well known standard
     static final String MET_AVG_CHAR_WIDTH = "AvgCharacterWidth";
     static final String MET_DOC_VERSION = "DocVersion";
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-font-module/src/main/java/org/apache/tika/parser/font/TrueTypeParser.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-font-module/src/main/java/org/apache/tika/parser/font/TrueTypeParser.java
index 2efadd0fc..d982122a1 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-font-module/src/main/java/org/apache/tika/parser/font/TrueTypeParser.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-font-module/src/main/java/org/apache/tika/parser/font/TrueTypeParser.java
@@ -33,14 +33,14 @@ import org.apache.tika.io.TikaInputStream;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.metadata.TikaCoreProperties;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 import org.apache.tika.sax.XHTMLContentHandler;
 
 /**
  * Parser for TrueType font files (TTF).
  */
-public class TrueTypeParser extends AbstractParser {
+public class TrueTypeParser implements Parser {
 
     /**
      * Serial version UID
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-html-module/src/main/java/org/apache/tika/parser/html/HtmlHandler.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-html-module/src/main/java/org/apache/tika/parser/html/HtmlHandler.java
index 3050422c4..d5f736cb0 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-html-module/src/main/java/org/apache/tika/parser/html/HtmlHandler.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-html-module/src/main/java/org/apache/tika/parser/html/HtmlHandler.java
@@ -111,20 +111,6 @@ class HtmlHandler extends TextContentHandler {
         this(mapper, new XHTMLContentHandler(handler, metadata), metadata, context, extractScripts);
     }
 
-    /**
-     * @param mapper
-     * @param handler
-     * @param metadata
-     * @deprecated use {@link HtmlHandler#HtmlHandler(HtmlMapper,
-     * ContentHandler, Metadata, ParseContext, boolean)}
-     */
-    @Deprecated
-    public HtmlHandler(HtmlMapper mapper, ContentHandler handler, Metadata metadata) {
-        this(mapper, new XHTMLContentHandler(handler, metadata), metadata, new ParseContext(),
-                false);
-    }
-
-
     @Override
     public void startElement(String uri, String local, String name, Attributes atts)
             throws SAXException {
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-image-module/src/main/java/org/apache/tika/parser/image/AbstractImageParser.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-image-module/src/main/java/org/apache/tika/parser/image/AbstractImageParser.java
index c07e05e49..9b5359296 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-image-module/src/main/java/org/apache/tika/parser/image/AbstractImageParser.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-image-module/src/main/java/org/apache/tika/parser/image/AbstractImageParser.java
@@ -31,14 +31,13 @@ import org.apache.tika.io.TikaInputStream;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.metadata.TikaCoreProperties;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
 import org.apache.tika.parser.Parser;
 import org.apache.tika.sax.BodyContentHandler;
 import org.apache.tika.sax.EmbeddedContentHandler;
 import org.apache.tika.sax.XHTMLContentHandler;
 
-public abstract class AbstractImageParser extends AbstractParser {
+public abstract class AbstractImageParser implements Parser {
 
     public static String OCR_MEDIATYPE_PREFIX = "ocr-";
 
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-image-module/src/main/java/org/apache/tika/parser/image/ICNSParser.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-image-module/src/main/java/org/apache/tika/parser/image/ICNSParser.java
index 7423eedd2..4cb9c65d6 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-image-module/src/main/java/org/apache/tika/parser/image/ICNSParser.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-image-module/src/main/java/org/apache/tika/parser/image/ICNSParser.java
@@ -32,14 +32,14 @@ import org.apache.tika.exception.TikaException;
 import org.apache.tika.exception.TikaMemoryLimitException;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 import org.apache.tika.sax.XHTMLContentHandler;
 
 /**
  * A basic parser class for Apple ICNS icon files
  */
-public class ICNSParser extends AbstractParser {
+public class ICNSParser implements Parser {
     public static final String ICNS_MIME_TYPE = "image/icns";
     private static final long serialVersionUID = 922010233654248327L;
     private static final long MAX_IMAGE_LENGTH_BYTES = 10485760;// 10MB
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-image-module/src/main/java/org/apache/tika/parser/image/JXLParser.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-image-module/src/main/java/org/apache/tika/parser/image/JXLParser.java
index cde232ee6..499af8cfa 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-image-module/src/main/java/org/apache/tika/parser/image/JXLParser.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-image-module/src/main/java/org/apache/tika/parser/image/JXLParser.java
@@ -27,14 +27,14 @@ import org.xml.sax.SAXException;
 import org.apache.tika.exception.TikaException;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 import org.apache.tika.parser.xmp.JempboxExtractor;
 
 /**
  * Tries to scrape XMP out of JXL
  */
-public class JXLParser extends AbstractParser {
+public class JXLParser implements Parser {
 
     private static final Set<MediaType> SUPPORTED_TYPES = Collections.singleton(MediaType.image(
             "jxl"));
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-image-module/src/main/java/org/apache/tika/parser/image/PSDParser.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-image-module/src/main/java/org/apache/tika/parser/image/PSDParser.java
index b7222239e..667e1019b 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-image-module/src/main/java/org/apache/tika/parser/image/PSDParser.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-image-module/src/main/java/org/apache/tika/parser/image/PSDParser.java
@@ -39,8 +39,8 @@ import org.apache.tika.metadata.Photoshop;
 import org.apache.tika.metadata.TIFF;
 import org.apache.tika.metadata.TikaCoreProperties;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 import org.apache.tika.parser.xmp.JempboxExtractor;
 import org.apache.tika.sax.XHTMLContentHandler;
 
@@ -53,7 +53,7 @@ import org.apache.tika.sax.XHTMLContentHandler;
  * An MIT-licensed python parser with test files is:
  * https://github.com/psd-tools/psd-tools
  */
-public class PSDParser extends AbstractParser {
+public class PSDParser implements Parser {
 
     /**
      * Serial version UID
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-image-module/src/main/java/org/apache/tika/parser/image/WebPParser.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-image-module/src/main/java/org/apache/tika/parser/image/WebPParser.java
index 98f7422f4..c01cec26d 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-image-module/src/main/java/org/apache/tika/parser/image/WebPParser.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-image-module/src/main/java/org/apache/tika/parser/image/WebPParser.java
@@ -29,12 +29,12 @@ import org.apache.tika.io.TemporaryResources;
 import org.apache.tika.io.TikaInputStream;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 import org.apache.tika.sax.XHTMLContentHandler;
 
 
-public class WebPParser extends AbstractParser {
+public class WebPParser implements Parser {
 
     /**
      * Serial version UID
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-jdbc-commons/src/main/java/org/apache/tika/parser/jdbc/AbstractDBParser.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-jdbc-commons/src/main/java/org/apache/tika/parser/jdbc/AbstractDBParser.java
index 63c089aba..c2af83e63 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-jdbc-commons/src/main/java/org/apache/tika/parser/jdbc/AbstractDBParser.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-jdbc-commons/src/main/java/org/apache/tika/parser/jdbc/AbstractDBParser.java
@@ -33,14 +33,14 @@ import org.apache.tika.extractor.EmbeddedDocumentUtil;
 import org.apache.tika.metadata.Database;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 import org.apache.tika.sax.XHTMLContentHandler;
 
 /**
  * Abstract class that handles iterating through tables within a database.
  */
-public abstract class AbstractDBParser extends AbstractParser {
+public abstract class AbstractDBParser implements Parser {
 
     private final static byte[] EMPTY_BYTE_ARR = new byte[0];
 
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-mail-module/src/main/java/org/apache/tika/parser/mail/RFC822Parser.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-mail-module/src/main/java/org/apache/tika/parser/mail/RFC822Parser.java
index 3717b13b5..bd964db4a 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-mail-module/src/main/java/org/apache/tika/parser/mail/RFC822Parser.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-mail-module/src/main/java/org/apache/tika/parser/mail/RFC822Parser.java
@@ -35,8 +35,8 @@ import org.apache.tika.extractor.EmbeddedDocumentUtil;
 import org.apache.tika.io.TikaInputStream;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 import org.apache.tika.sax.XHTMLContentHandler;
 
 /**
@@ -48,7 +48,7 @@ import org.apache.tika.sax.XHTMLContentHandler;
  *
  * @author jnioche@digitalpebble.com
  */
-public class RFC822Parser extends AbstractParser {
+public class RFC822Parser implements Parser {
     /**
      * Serial version UID
      */
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-mail-module/src/main/java/org/apache/tika/parser/mbox/MboxParser.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-mail-module/src/main/java/org/apache/tika/parser/mbox/MboxParser.java
index d01ae191a..b66c87be4 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-mail-module/src/main/java/org/apache/tika/parser/mbox/MboxParser.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-mail-module/src/main/java/org/apache/tika/parser/mbox/MboxParser.java
@@ -44,8 +44,8 @@ import org.apache.tika.metadata.Message;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.metadata.TikaCoreProperties;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 import org.apache.tika.parser.mailcommons.MailUtil;
 import org.apache.tika.sax.XHTMLContentHandler;
 
@@ -53,7 +53,7 @@ import org.apache.tika.sax.XHTMLContentHandler;
  * Mbox (mailbox) parser. This version extracts each mail from Mbox and uses the
  * DelegatingParser to process each mail.
  */
-public class MboxParser extends AbstractParser {
+public class MboxParser implements Parser {
 
     public static final String MBOX_MIME_TYPE = "application/mbox";
     public static final String MBOX_RECORD_DIVIDER = "From ";
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/detect/microsoft/POIFSContainerDetector.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/detect/microsoft/POIFSContainerDetector.java
index b67638f8d..69be0361f 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/detect/microsoft/POIFSContainerDetector.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/detect/microsoft/POIFSContainerDetector.java
@@ -250,18 +250,6 @@ public class POIFSContainerDetector implements Detector {
     @Field
     private int markLimit = 128 * 1024 * 1024;
 
-    /**
-     * Internal detection of the specific kind of OLE2 document, based on the
-     * names of the top level streams within the file.
-     *
-     * @deprecated Use {@link #detect(Set, DirectoryEntry)} and pass the root
-     * entry of the filesystem whose type is to be detected, as a
-     * second argument.
-     */
-    public static MediaType detect(Set<String> names) {
-        return detect(names, null);
-    }
-
     /**
      * Internal detection of the specific kind of OLE2 document, based on the
      * names of the top-level streams within the file. In some cases the
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/AbstractOfficeParser.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/AbstractOfficeParser.java
index 2ff728074..ec785f5d2 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/AbstractOfficeParser.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/AbstractOfficeParser.java
@@ -19,13 +19,13 @@ package org.apache.tika.parser.microsoft;
 import org.apache.poi.util.IOUtils;
 
 import org.apache.tika.config.Field;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 
 /**
  * Intermediate layer to set {@link OfficeParserConfig} uniformly.
  */
-public abstract class AbstractOfficeParser extends AbstractParser {
+public abstract class AbstractOfficeParser implements Parser {
 
     private final OfficeParserConfig defaultOfficeParserConfig = new OfficeParserConfig();
 
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/AbstractPOIFSExtractor.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/AbstractPOIFSExtractor.java
index df4668eb8..f04c72e62 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/AbstractPOIFSExtractor.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/AbstractPOIFSExtractor.java
@@ -44,7 +44,6 @@ import org.apache.tika.metadata.TikaCoreProperties;
 import org.apache.tika.mime.MediaType;
 import org.apache.tika.mime.MimeType;
 import org.apache.tika.mime.MimeTypeException;
-import org.apache.tika.mime.MimeTypes;
 import org.apache.tika.parser.ParseContext;
 import org.apache.tika.parser.PasswordProvider;
 import org.apache.tika.parser.microsoft.OfficeParser.POIFSDocumentType;
@@ -82,14 +81,6 @@ abstract class AbstractPOIFSExtractor {
         return embeddedDocumentUtil.getDetector();
     }
 
-    /**
-     * @return mimetypes
-     * @deprecated use {@link #embeddedDocumentUtil}
-     */
-    protected MimeTypes getMimeTypes() {
-        return embeddedDocumentUtil.getMimeTypes();
-    }
-
     /**
      * Returns the password to be used for this file, or null
      * if no / default password should be used
@@ -290,7 +281,8 @@ abstract class AbstractPOIFSExtractor {
             MediaType mediaType = getDetector().detect(tis, metadata);
             String extension = type.getExtension();
             try {
-                MimeType mimeType = getMimeTypes().forName(mediaType.toString());
+                MimeType mimeType =
+                        embeddedDocumentUtil.getMimeTypes().forName(mediaType.toString());
                 extension = mimeType.getExtension();
             } catch (MimeTypeException mte) {
                 // No details on this type are known
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/EMFParser.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/EMFParser.java
index c82cc3e8a..ae80cb62b 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/EMFParser.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/EMFParser.java
@@ -39,8 +39,8 @@ import org.apache.tika.io.TikaInputStream;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.metadata.Property;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 import org.apache.tika.sax.EmbeddedContentHandler;
 import org.apache.tika.sax.XHTMLContentHandler;
 
@@ -54,7 +54,7 @@ import org.apache.tika.sax.XHTMLContentHandler;
  * in font and use that information for identifying character sets,
  * inserting spaces and new lines.
  */
-public class EMFParser extends AbstractParser {
+public class EMFParser implements Parser {
 
     public static Property EMF_ICON_ONLY = Property.internalBoolean("emf:iconOnly");
     public static Property EMF_ICON_STRING = Property.internalText("emf:iconString");
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/JackcessParser.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/JackcessParser.java
index d7251a4f5..3e5ff0cb9 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/JackcessParser.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/JackcessParser.java
@@ -39,8 +39,8 @@ import org.apache.tika.metadata.Metadata;
 import org.apache.tika.metadata.Property;
 import org.apache.tika.metadata.TikaCoreProperties;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 import org.apache.tika.parser.PasswordProvider;
 import org.apache.tika.sax.XHTMLContentHandler;
 
@@ -51,7 +51,7 @@ import org.apache.tika.sax.XHTMLContentHandler;
  * Many, many thanks to LexisNexis®/Health Market Science (HMS), Brian O'Neill,
  * and James Ahlborn for relicensing Jackcess to Apache v2.0!
  */
-public class JackcessParser extends AbstractParser {
+public class JackcessParser implements Parser {
 
     public static final String SUMMARY_PROPERTY_PREFIX =
             "MDB_SUMMARY_PROP" + TikaCoreProperties.NAMESPACE_PREFIX_DELIMITER;
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/MSOwnerFileParser.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/MSOwnerFileParser.java
index 81ba429a8..f319b6d0a 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/MSOwnerFileParser.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/MSOwnerFileParser.java
@@ -30,15 +30,15 @@ import org.apache.tika.exception.TikaException;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.metadata.TikaCoreProperties;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 import org.apache.tika.sax.XHTMLContentHandler;
 
 /**
  * Parser for temporary MSOFfice files.
  * This currently only extracts the owner's name.
  */
-public class MSOwnerFileParser extends AbstractParser {
+public class MSOwnerFileParser implements Parser {
 
     private static final int ASCII_CHUNK_LENGTH = 54;
     private static final MediaType MEDIA_TYPE = MediaType.application("x-ms-owner");
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/OldExcelParser.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/OldExcelParser.java
index bd096ed51..7c8ca2e63 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/OldExcelParser.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/OldExcelParser.java
@@ -32,15 +32,15 @@ import org.xml.sax.SAXException;
 import org.apache.tika.exception.TikaException;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 import org.apache.tika.sax.XHTMLContentHandler;
 
 /**
  * A POI-powered Tika Parser for very old versions of Excel, from
  * pre-OLE2 days, such as Excel 4.
  */
-public class OldExcelParser extends AbstractParser {
+public class OldExcelParser implements Parser {
     private static final long serialVersionUID = 4611820730372823452L;
 
     private static final Set<MediaType> SUPPORTED_TYPES = Collections.unmodifiableSet(
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/OutlookExtractor.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/OutlookExtractor.java
index 6f38af313..58b74a54d 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/OutlookExtractor.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/OutlookExtractor.java
@@ -50,7 +50,6 @@ import org.apache.poi.hsmf.datatypes.StringChunk;
 import org.apache.poi.hsmf.datatypes.Types;
 import org.apache.poi.hsmf.exceptions.ChunkNotFoundException;
 import org.apache.poi.poifs.filesystem.DirectoryNode;
-import org.apache.poi.poifs.filesystem.POIFSFileSystem;
 import org.apache.poi.util.CodePageUtil;
 import org.xml.sax.SAXException;
 
@@ -96,37 +95,6 @@ public class OutlookExtractor extends AbstractPOIFSExtractor {
     private final boolean extractAllAlternatives;
     HtmlEncodingDetector detector = new HtmlEncodingDetector();
 
-    /**
-     * @deprecated use {@link OutlookExtractor#OutlookExtractor(DirectoryNode, Metadata, ParseContext)}
-     *      Will be removed after 2.4.0
-     * @param filesystem
-     * @param context
-     * @throws TikaException
-     */
-    @Deprecated
-    public OutlookExtractor(POIFSFileSystem filesystem, ParseContext context) throws TikaException {
-        this(filesystem.getRoot(), context);
-    }
-
-    /**
-     * @deprecated use {@link OutlookExtractor#OutlookExtractor(DirectoryNode, Metadata, ParseContext)}
-     *              Will be removed after 2.4.0
-     * @param root
-     * @param context
-     * @throws TikaException
-     */
-    @Deprecated
-    public OutlookExtractor(DirectoryNode root, ParseContext context) throws TikaException {
-        super(context);
-        this.parseContext = context;
-        this.extractAllAlternatives =
-                context.get(OfficeParserConfig.class).isExtractAllAlternativesFromMSG();
-        try {
-            this.msg = new MAPIMessage(root);
-        } catch (IOException e) {
-            throw new TikaException("Failed to parse Outlook message", e);
-        }
-    }
 
     public OutlookExtractor(DirectoryNode root, Metadata metadata, ParseContext context) throws TikaException {
         super(context, metadata);
@@ -184,26 +152,13 @@ public class OutlookExtractor extends AbstractPOIFSExtractor {
         }
     }
 
-    public void parse(XHTMLContentHandler xhtml) throws TikaException, SAXException, IOException {
-        parse(xhtml, parentMetadata);
-    }
-
-    /**
-     * @deprecated use {@link #parse(XHTMLContentHandler), will be removed after 2.4.0}
-     * @param xhtml
-     * @param metadata
-     * @throws TikaException
-     * @throws SAXException
-     * @throws IOException
-     */
-    @Deprecated
-    public void parse(XHTMLContentHandler xhtml, Metadata metadata)
+    public void parse(XHTMLContentHandler xhtml)
             throws TikaException, SAXException, IOException {
         try {
             msg.setReturnNullOnMissingChunk(true);
 
             try {
-                metadata.set(Office.MAPI_MESSAGE_CLASS, msg.getMessageClassEnum().name());
+                parentMetadata.set(Office.MAPI_MESSAGE_CLASS, msg.getMessageClassEnum().name());
             } catch (ChunkNotFoundException e) {
                 //swallow
             }
@@ -219,16 +174,16 @@ public class OutlookExtractor extends AbstractPOIFSExtractor {
             Map<String, String[]> headers = normalizeHeaders(msg.getHeaders());
             String from = msg.getDisplayFrom();
 
-            handleFromTo(headers, metadata);
+            handleFromTo(headers, parentMetadata);
 
-            metadata.set(TikaCoreProperties.TITLE, subject);
-            metadata.set(TikaCoreProperties.SUBJECT, msg.getConversationTopic());
-            metadata.set(TikaCoreProperties.DESCRIPTION, msg.getConversationTopic());
+            parentMetadata.set(TikaCoreProperties.TITLE, subject);
+            parentMetadata.set(TikaCoreProperties.SUBJECT, msg.getConversationTopic());
+            parentMetadata.set(TikaCoreProperties.DESCRIPTION, msg.getConversationTopic());
 
             try {
                 for (String recipientAddress : msg.getRecipientEmailAddressList()) {
                     if (recipientAddress != null) {
-                        metadata.add(Metadata.MESSAGE_RECIPIENT_ADDRESS, recipientAddress);
+                        parentMetadata.add(Metadata.MESSAGE_RECIPIENT_ADDRESS, recipientAddress);
                     }
                 }
             } catch (ChunkNotFoundException he) {
@@ -238,15 +193,15 @@ public class OutlookExtractor extends AbstractPOIFSExtractor {
             for (Map.Entry<String, String[]> e : headers.entrySet()) {
                 String headerKey = e.getKey();
                 for (String headerValue : e.getValue()) {
-                    metadata.add(Metadata.MESSAGE_RAW_HEADER_PREFIX + headerKey, headerValue);
+                    parentMetadata.add(Metadata.MESSAGE_RAW_HEADER_PREFIX + headerKey, headerValue);
                 }
             }
 
             // Date - try two ways to find it
             // First try via the proper chunk
             if (msg.getMessageDate() != null) {
-                metadata.set(TikaCoreProperties.CREATED, msg.getMessageDate().getTime());
-                metadata.set(TikaCoreProperties.MODIFIED, msg.getMessageDate().getTime());
+                parentMetadata.set(TikaCoreProperties.CREATED, msg.getMessageDate().getTime());
+                parentMetadata.set(TikaCoreProperties.MODIFIED, msg.getMessageDate().getTime());
             } else {
                 if (headers != null && headers.size() > 0) {
                     for (Map.Entry<String, String[]> header : headers.entrySet()) {
@@ -257,14 +212,14 @@ public class OutlookExtractor extends AbstractPOIFSExtractor {
                             // See if we can parse it as a normal mail date
                             try {
                                 Date d = MailDateParser.parseDateLenient(date);
-                                metadata.set(TikaCoreProperties.CREATED, d);
-                                metadata.set(TikaCoreProperties.MODIFIED, d);
+                                parentMetadata.set(TikaCoreProperties.CREATED, d);
+                                parentMetadata.set(TikaCoreProperties.MODIFIED, d);
                             } catch (SecurityException e ) {
                                 throw e;
                             } catch (Exception e) {
                                 // Store it as-is, and hope for the best...
-                                metadata.set(TikaCoreProperties.CREATED, date);
-                                metadata.set(TikaCoreProperties.MODIFIED, date);
+                                parentMetadata.set(TikaCoreProperties.CREATED, date);
+                                parentMetadata.set(TikaCoreProperties.MODIFIED, date);
                             }
                             break;
                         }
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/TNEFParser.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/TNEFParser.java
index 1fba5e399..98c6b1631 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/TNEFParser.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/TNEFParser.java
@@ -38,8 +38,8 @@ import org.apache.tika.io.TikaInputStream;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.metadata.TikaCoreProperties;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 import org.apache.tika.sax.EmbeddedContentHandler;
 import org.apache.tika.sax.XHTMLContentHandler;
 
@@ -47,7 +47,7 @@ import org.apache.tika.sax.XHTMLContentHandler;
  * A POI-powered Tika Parser for TNEF (Transport Neutral
  * Encoding Format) messages, aka winmail.dat
  */
-public class TNEFParser extends AbstractParser {
+public class TNEFParser implements Parser {
     private static final long serialVersionUID = 4611820730372823452L;
 
     private static final Set<MediaType> SUPPORTED_TYPES = Collections.unmodifiableSet(
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/WMFParser.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/WMFParser.java
index 26a39ff0b..73b95b58c 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/WMFParser.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/WMFParser.java
@@ -36,15 +36,15 @@ import org.xml.sax.SAXException;
 import org.apache.tika.exception.TikaException;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 import org.apache.tika.sax.XHTMLContentHandler;
 
 /**
  * This parser offers a very rough capability to extract text if there
  * is text stored in the WMF files.
  */
-public class WMFParser extends AbstractParser {
+public class WMFParser implements Parser {
 
     private static final MediaType MEDIA_TYPE = MediaType.image("wmf");
 
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/activemime/ActiveMimeParser.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/activemime/ActiveMimeParser.java
index 9e2c94d05..5ac13fda5 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/activemime/ActiveMimeParser.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/activemime/ActiveMimeParser.java
@@ -33,8 +33,8 @@ import org.apache.tika.extractor.EmbeddedDocumentExtractor;
 import org.apache.tika.extractor.EmbeddedDocumentUtil;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 import org.apache.tika.parser.microsoft.OfficeParser;
 import org.apache.tika.sax.XHTMLContentHandler;
 
@@ -42,7 +42,7 @@ import org.apache.tika.sax.XHTMLContentHandler;
  * ActiveMime is a macro container format used in some mso files.  See, e.g.
  * <a href="https://mastodon.social/@Ange/110027138524274526">Ange's toot</a>.
  */
-public class ActiveMimeParser extends AbstractParser {
+public class ActiveMimeParser implements Parser {
 
     private static final MediaType MEDIA_TYPE = MediaType.application("x-activemime");
     private static final Set<MediaType> SUPPORTED = Collections.singleton(MEDIA_TYPE);
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/chm/ChmParser.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/chm/ChmParser.java
index 075050ed0..7159cc0e9 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/chm/ChmParser.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/chm/ChmParser.java
@@ -31,7 +31,6 @@ import org.apache.tika.exception.TikaException;
 import org.apache.tika.extractor.EmbeddedDocumentUtil;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
 import org.apache.tika.parser.Parser;
 import org.apache.tika.parser.html.JSoupParser;
@@ -39,7 +38,7 @@ import org.apache.tika.sax.BodyContentHandler;
 import org.apache.tika.sax.EmbeddedContentHandler;
 import org.apache.tika.sax.XHTMLContentHandler;
 
-public class ChmParser extends AbstractParser {
+public class ChmParser implements Parser {
 
     /**
      * Serial version UID
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/onenote/OneNoteParser.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/onenote/OneNoteParser.java
index 679893980..55913515f 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/onenote/OneNoteParser.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/onenote/OneNoteParser.java
@@ -38,8 +38,8 @@ import org.apache.tika.metadata.Metadata;
 import org.apache.tika.metadata.Property;
 import org.apache.tika.metadata.TikaCoreProperties;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 import org.apache.tika.parser.microsoft.onenote.fsshttpb.MSOneStorePackage;
 import org.apache.tika.parser.microsoft.onenote.fsshttpb.MSOneStoreParser;
 import org.apache.tika.parser.microsoft.onenote.fsshttpb.streamobj.basic.AlternativePackaging;
@@ -50,7 +50,7 @@ import org.apache.tika.sax.XHTMLContentHandler;
  * <p>
  * Based on the Microsoft specs MS-ONE and MS-ONESTORE.
  */
-public class OneNoteParser extends AbstractParser {
+public class OneNoteParser implements Parser {
 
     public static final String ONE_NOTE_PREFIX = "onenote:";
     private static final Map<MediaType, List<String>> TYPES_MAP = new HashMap<>();
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/ooxml/XWPFWordExtractorDecorator.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/ooxml/XWPFWordExtractorDecorator.java
index f4dbd352b..922cdbd01 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/ooxml/XWPFWordExtractorDecorator.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/ooxml/XWPFWordExtractorDecorator.java
@@ -110,17 +110,6 @@ public class XWPFWordExtractorDecorator extends AbstractOOXMLExtractor {
         styles = document.getStyles();
     }
 
-    /**
-     * @param context
-     * @param extractor
-     * @deprecated use {@link XWPFWordExtractorDecorator#XWPFWordExtractorDecorator(Metadata,
-     * ParseContext, XWPFWordExtractor)}
-     */
-    @Deprecated
-    public XWPFWordExtractorDecorator(ParseContext context, XWPFWordExtractor extractor) {
-        this(new Metadata(), context, extractor);
-    }
-
     /**
      * @see org.apache.poi.xwpf.extractor.XWPFWordExtractor#getText()
      */
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/pst/OutlookPSTParser.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/pst/OutlookPSTParser.java
index 8379d671a..9257b0e4e 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/pst/OutlookPSTParser.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/pst/OutlookPSTParser.java
@@ -44,15 +44,15 @@ import org.apache.tika.metadata.Metadata;
 import org.apache.tika.metadata.Office;
 import org.apache.tika.metadata.TikaCoreProperties;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 import org.apache.tika.parser.microsoft.OutlookExtractor;
 import org.apache.tika.sax.XHTMLContentHandler;
 
 /**
  * Parser for MS Outlook PST email storage files
  */
-public class OutlookPSTParser extends AbstractParser {
+public class OutlookPSTParser implements Parser {
 
     public static final MediaType MS_OUTLOOK_PST_MIMETYPE =
             MediaType.application("vnd.ms-outlook-pst");
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/rtf/RTFParser.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/rtf/RTFParser.java
index 50c77ca91..faa808fa1 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/rtf/RTFParser.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/rtf/RTFParser.java
@@ -29,14 +29,14 @@ import org.apache.tika.config.Field;
 import org.apache.tika.exception.TikaException;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 import org.apache.tika.sax.XHTMLContentHandler;
 
 /**
  * RTF parser
  */
-public class RTFParser extends AbstractParser {
+public class RTFParser implements Parser {
 
     /**
      * Serial version UID
@@ -56,32 +56,6 @@ public class RTFParser extends AbstractParser {
     @Field
     private boolean ignoreListMarkup = false;
 
-    /**
-     * See {@link #setMaxBytesForEmbeddedObject(int)}.
-     *
-     * @return maximum number of bytes allowed for an embedded object.
-     */
-    @Deprecated
-    public static int getMaxBytesForEmbeddedObject() {
-        return EMB_OBJ_MAX_BYTES;
-    }
-
-    /**
-     * Bytes for embedded objects are currently cached in memory.
-     * If something goes wrong during the parsing of an embedded object,
-     * it is possible that a read length may be crazily too long
-     * and cause a heap crash.
-     *
-     * @param max maximum number of bytes to allow for embedded objects.  If
-     *            the embedded object has more than this number of bytes, skip it.
-     * @deprecated use {@link #setMemoryLimitInKb(int)} instead
-     */
-    @Deprecated
-    public static void setMaxBytesForEmbeddedObject(int max) {
-        EMB_OBJ_MAX_BYTES = max;
-        USE_STATIC = true;
-    }
-
     public Set<MediaType> getSupportedTypes(ParseContext context) {
         return SUPPORTED_TYPES;
     }
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/xml/AbstractXML2003Parser.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/xml/AbstractXML2003Parser.java
index ea6f295e3..a8896c6b5 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/xml/AbstractXML2003Parser.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/xml/AbstractXML2003Parser.java
@@ -33,8 +33,8 @@ import org.apache.tika.metadata.OfficeOpenXMLCore;
 import org.apache.tika.metadata.OfficeOpenXMLExtended;
 import org.apache.tika.metadata.Property;
 import org.apache.tika.metadata.TikaCoreProperties;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 import org.apache.tika.parser.xml.ElementMetadataHandler;
 import org.apache.tika.sax.EmbeddedContentHandler;
 import org.apache.tika.sax.TaggedContentHandler;
@@ -43,7 +43,7 @@ import org.apache.tika.sax.XHTMLContentHandler;
 import org.apache.tika.utils.XMLReaderUtils;
 
 
-public abstract class AbstractXML2003Parser extends AbstractParser {
+public abstract class AbstractXML2003Parser implements Parser {
 
     final static String MS_OFFICE_PROPERTIES_URN = "urn:schemas-microsoft-com:office:office";
     final static String MS_DOC_PROPERTIES_URN = "urn:schemas-microsoft-com:office:office";
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-miscoffice-module/src/main/java/org/apache/tika/parser/dbf/DBFParser.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-miscoffice-module/src/main/java/org/apache/tika/parser/dbf/DBFParser.java
index c22848a7f..da47cee94 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-miscoffice-module/src/main/java/org/apache/tika/parser/dbf/DBFParser.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-miscoffice-module/src/main/java/org/apache/tika/parser/dbf/DBFParser.java
@@ -37,8 +37,8 @@ import org.apache.tika.io.TikaInputStream;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.metadata.TikaCoreProperties;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 import org.apache.tika.parser.txt.Icu4jEncodingDetector;
 import org.apache.tika.sax.XHTMLContentHandler;
 
@@ -50,7 +50,7 @@ import org.apache.tika.sax.XHTMLContentHandler;
  * It caches the first 10 rows and then runs encoding dectection
  * on the "character" cells.
  */
-public class DBFParser extends AbstractParser {
+public class DBFParser implements Parser {
 
     private static final int ROWS_TO_BUFFER_FOR_CHARSET_DETECTION = 10;
     private static final int MAX_CHARS_FOR_CHARSET_DETECTION = 20000;
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-miscoffice-module/src/main/java/org/apache/tika/parser/dif/DIFParser.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-miscoffice-module/src/main/java/org/apache/tika/parser/dif/DIFParser.java
index 328a3da32..b42270718 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-miscoffice-module/src/main/java/org/apache/tika/parser/dif/DIFParser.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-miscoffice-module/src/main/java/org/apache/tika/parser/dif/DIFParser.java
@@ -29,14 +29,14 @@ import org.xml.sax.SAXException;
 import org.apache.tika.exception.TikaException;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 import org.apache.tika.sax.EmbeddedContentHandler;
 import org.apache.tika.sax.TaggedContentHandler;
 import org.apache.tika.sax.XHTMLContentHandler;
 import org.apache.tika.utils.XMLReaderUtils;
 
-public class DIFParser extends AbstractParser {
+public class DIFParser implements Parser {
 
     /**
      *
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-miscoffice-module/src/main/java/org/apache/tika/parser/epub/EpubContentParser.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-miscoffice-module/src/main/java/org/apache/tika/parser/epub/EpubContentParser.java
index c29eb7c20..a63a7ecfe 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-miscoffice-module/src/main/java/org/apache/tika/parser/epub/EpubContentParser.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-miscoffice-module/src/main/java/org/apache/tika/parser/epub/EpubContentParser.java
@@ -28,8 +28,8 @@ import org.xml.sax.SAXException;
 import org.apache.tika.exception.TikaException;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 import org.apache.tika.utils.XMLReaderUtils;
 
 /**
@@ -37,7 +37,7 @@ import org.apache.tika.utils.XMLReaderUtils;
  * <p>
  * For the time being, assume XHTML (TODO: DTBook)
  */
-public class EpubContentParser extends AbstractParser {
+public class EpubContentParser implements Parser {
 
     public Set<MediaType> getSupportedTypes(ParseContext context) {
         return Collections.emptySet(); // not a top-level parser
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-miscoffice-module/src/main/java/org/apache/tika/parser/epub/EpubParser.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-miscoffice-module/src/main/java/org/apache/tika/parser/epub/EpubParser.java
index d0a7dab25..00b42d77f 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-miscoffice-module/src/main/java/org/apache/tika/parser/epub/EpubParser.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-miscoffice-module/src/main/java/org/apache/tika/parser/epub/EpubParser.java
@@ -54,7 +54,6 @@ import org.apache.tika.io.TemporaryResources;
 import org.apache.tika.io.TikaInputStream;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
 import org.apache.tika.parser.Parser;
 import org.apache.tika.parser.xml.DcXMLParser;
@@ -68,7 +67,7 @@ import org.apache.tika.zip.utils.ZipSalvager;
 /**
  * Epub parser
  */
-public class EpubParser extends AbstractParser {
+public class EpubParser implements Parser {
 
     /**
      * Serial version UID
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-miscoffice-module/src/main/java/org/apache/tika/parser/hwp/HwpV5Parser.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-miscoffice-module/src/main/java/org/apache/tika/parser/hwp/HwpV5Parser.java
index 83307a128..0fe186c4e 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-miscoffice-module/src/main/java/org/apache/tika/parser/hwp/HwpV5Parser.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-miscoffice-module/src/main/java/org/apache/tika/parser/hwp/HwpV5Parser.java
@@ -27,11 +27,11 @@ import org.xml.sax.SAXException;
 import org.apache.tika.exception.TikaException;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 import org.apache.tika.sax.XHTMLContentHandler;
 
-public class HwpV5Parser extends AbstractParser {
+public class HwpV5Parser implements Parser {
 
     public static final String HWP_MIME_TYPE = "application/x-hwp-v5";
     private static final long serialVersionUID = 1L;
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-miscoffice-module/src/main/java/org/apache/tika/parser/indesign/IDMLParser.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-miscoffice-module/src/main/java/org/apache/tika/parser/indesign/IDMLParser.java
index e280966c8..a76bf90b1 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-miscoffice-module/src/main/java/org/apache/tika/parser/indesign/IDMLParser.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-miscoffice-module/src/main/java/org/apache/tika/parser/indesign/IDMLParser.java
@@ -35,8 +35,8 @@ import org.apache.tika.exception.TikaException;
 import org.apache.tika.io.TikaInputStream;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 import org.apache.tika.parser.xmp.XMPMetadataExtractor;
 import org.apache.tika.sax.EndDocumentShieldingContentHandler;
 import org.apache.tika.sax.XHTMLContentHandler;
@@ -45,7 +45,7 @@ import org.apache.tika.sax.XHTMLContentHandler;
 /**
  * Adobe InDesign IDML Parser.
  */
-public class IDMLParser extends AbstractParser {
+public class IDMLParser implements Parser {
 
     /**
      * IDML MimeType
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-miscoffice-module/src/main/java/org/apache/tika/parser/odf/FlatOpenDocumentParser.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-miscoffice-module/src/main/java/org/apache/tika/parser/odf/FlatOpenDocumentParser.java
index 2467febfc..5f2f1ef4d 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-miscoffice-module/src/main/java/org/apache/tika/parser/odf/FlatOpenDocumentParser.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-miscoffice-module/src/main/java/org/apache/tika/parser/odf/FlatOpenDocumentParser.java
@@ -33,14 +33,14 @@ import org.apache.tika.config.Field;
 import org.apache.tika.exception.TikaException;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 import org.apache.tika.sax.ContentHandlerDecorator;
 import org.apache.tika.sax.EmbeddedContentHandler;
 import org.apache.tika.sax.XHTMLContentHandler;
 import org.apache.tika.utils.XMLReaderUtils;
 
-public class FlatOpenDocumentParser extends AbstractParser {
+public class FlatOpenDocumentParser implements Parser {
 
     static final MediaType FLAT_OD =
             MediaType.application("vnd.oasis.opendocument.tika.flat.document");
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-miscoffice-module/src/main/java/org/apache/tika/parser/odf/OpenDocumentContentParser.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-miscoffice-module/src/main/java/org/apache/tika/parser/odf/OpenDocumentContentParser.java
index f6d310ca8..e34fbe1eb 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-miscoffice-module/src/main/java/org/apache/tika/parser/odf/OpenDocumentContentParser.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-miscoffice-module/src/main/java/org/apache/tika/parser/odf/OpenDocumentContentParser.java
@@ -29,15 +29,15 @@ import org.xml.sax.helpers.DefaultHandler;
 import org.apache.tika.exception.TikaException;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 import org.apache.tika.sax.XHTMLContentHandler;
 import org.apache.tika.utils.XMLReaderUtils;
 
 /**
  * Parser for ODF <code>content.xml</code> files.
  */
-public class OpenDocumentContentParser extends AbstractParser {
+public class OpenDocumentContentParser implements Parser {
 
     public Set<MediaType> getSupportedTypes(ParseContext context) {
         return Collections.emptySet(); // not a top-level parser
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-miscoffice-module/src/main/java/org/apache/tika/parser/odf/OpenDocumentParser.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-miscoffice-module/src/main/java/org/apache/tika/parser/odf/OpenDocumentParser.java
index 42d37e150..222819a6f 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-miscoffice-module/src/main/java/org/apache/tika/parser/odf/OpenDocumentParser.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-miscoffice-module/src/main/java/org/apache/tika/parser/odf/OpenDocumentParser.java
@@ -46,7 +46,6 @@ import org.apache.tika.io.TikaInputStream;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.metadata.TikaCoreProperties;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
 import org.apache.tika.parser.Parser;
 import org.apache.tika.sax.EmbeddedContentHandler;
@@ -57,7 +56,7 @@ import org.apache.tika.utils.XMLReaderUtils;
 /**
  * OpenOffice parser
  */
-public class OpenDocumentParser extends AbstractParser {
+public class OpenDocumentParser implements Parser {
 
     /**
      * Serial version UID
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-miscoffice-module/src/main/java/org/apache/tika/parser/wordperfect/QuattroProParser.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-miscoffice-module/src/main/java/org/apache/tika/parser/wordperfect/QuattroProParser.java
index 89e813502..c24f30685 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-miscoffice-module/src/main/java/org/apache/tika/parser/wordperfect/QuattroProParser.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-miscoffice-module/src/main/java/org/apache/tika/parser/wordperfect/QuattroProParser.java
@@ -27,8 +27,8 @@ import org.xml.sax.SAXException;
 import org.apache.tika.exception.TikaException;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 import org.apache.tika.sax.XHTMLContentHandler;
 
 /**
@@ -39,7 +39,7 @@ import org.apache.tika.sax.XHTMLContentHandler;
  *
  * @author Pascal Essiembre
  */
-public class QuattroProParser extends AbstractParser {
+public class QuattroProParser implements Parser {
 
     private static final long serialVersionUID = 8941810225917012232L;
 
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-miscoffice-module/src/main/java/org/apache/tika/parser/wordperfect/WordPerfectParser.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-miscoffice-module/src/main/java/org/apache/tika/parser/wordperfect/WordPerfectParser.java
index 6d20ce811..bd81e088c 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-miscoffice-module/src/main/java/org/apache/tika/parser/wordperfect/WordPerfectParser.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-miscoffice-module/src/main/java/org/apache/tika/parser/wordperfect/WordPerfectParser.java
@@ -33,8 +33,8 @@ import org.apache.tika.exception.UnsupportedFormatException;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.metadata.WordPerfect;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 import org.apache.tika.sax.XHTMLContentHandler;
 
 /**
@@ -43,7 +43,7 @@ import org.apache.tika.sax.XHTMLContentHandler;
  *
  * @author Pascal Essiembre
  */
-public class WordPerfectParser extends AbstractParser {
+public class WordPerfectParser implements Parser {
 
     final static MediaType WP_BASE = MediaType.application("vnd.wordperfect");
     final static MediaType WP_UNK = new MediaType(WP_BASE, "version", "unknown");
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-miscoffice-module/src/test/java/org/apache/tika/parser/odf/ODFParserTest.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-miscoffice-module/src/test/java/org/apache/tika/parser/odf/ODFParserTest.java
index 7feab3a38..da7028a91 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-miscoffice-module/src/test/java/org/apache/tika/parser/odf/ODFParserTest.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-miscoffice-module/src/test/java/org/apache/tika/parser/odf/ODFParserTest.java
@@ -136,7 +136,7 @@ public class ODFParserTest extends TikaTest {
         try (InputStream input = getResourceAsStream("/test-documents/testOpenOffice2.odf")) {
             Metadata metadata = new Metadata();
             ContentHandler handler = new BodyContentHandler();
-            new OpenDocumentParser().parse(input, handler, metadata);
+            new OpenDocumentParser().parse(input, handler, metadata, new ParseContext());
 
             assertEquals("application/vnd.oasis.opendocument.formula",
                     metadata.get(Metadata.CONTENT_TYPE));
@@ -192,7 +192,7 @@ public class ODFParserTest extends TikaTest {
         try (InputStream input = getResourceAsStream("/test-documents/testODFwithOOo3.odt")) {
             Metadata metadata = new Metadata();
             ContentHandler handler = new BodyContentHandler();
-            new OpenDocumentParser().parse(input, handler, metadata);
+            new OpenDocumentParser().parse(input, handler, metadata, new ParseContext());
 
             assertEquals("application/vnd.oasis.opendocument.text",
                     metadata.get(Metadata.CONTENT_TYPE));
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-news-module/src/main/java/org/apache/tika/parser/feed/FeedParser.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-news-module/src/main/java/org/apache/tika/parser/feed/FeedParser.java
index b42f371fc..cfa5d3d47 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-news-module/src/main/java/org/apache/tika/parser/feed/FeedParser.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-news-module/src/main/java/org/apache/tika/parser/feed/FeedParser.java
@@ -37,8 +37,8 @@ import org.apache.tika.exception.TikaException;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.metadata.TikaCoreProperties;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 import org.apache.tika.sax.XHTMLContentHandler;
 
 /**
@@ -47,7 +47,7 @@ import org.apache.tika.sax.XHTMLContentHandler;
  * Uses Rome for parsing the feeds. A feed description is put in a paragraph
  * with its link and title in an anchor.
  */
-public class FeedParser extends AbstractParser {
+public class FeedParser implements Parser {
 
     /**
      * Serial version UID
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-pdf-module/src/main/java/org/apache/tika/parser/pdf/PDFParser.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-pdf-module/src/main/java/org/apache/tika/parser/pdf/PDFParser.java
index 0be92429a..67346d952 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-pdf-module/src/main/java/org/apache/tika/parser/pdf/PDFParser.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-pdf-module/src/main/java/org/apache/tika/parser/pdf/PDFParser.java
@@ -69,8 +69,8 @@ import org.apache.tika.metadata.PDF;
 import org.apache.tika.metadata.PagedText;
 import org.apache.tika.metadata.TikaCoreProperties;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 import org.apache.tika.parser.PasswordProvider;
 import org.apache.tika.parser.RenderingParser;
 import org.apache.tika.parser.pdf.image.ImageGraphicsEngineFactory;
@@ -117,15 +117,8 @@ import org.apache.tika.sax.XHTMLContentHandler;
  * If your PDFs contain marked content or tags, consider
  * {@link PDFParserConfig#setExtractMarkedContent(boolean)}
  */
-public class PDFParser extends AbstractParser implements RenderingParser, Initializable {
+public class PDFParser implements Parser, RenderingParser, Initializable {
 
-    /**
-     * Metadata key for giving the document password to the parser.
-     *
-     * @since Apache Tika 0.5
-     * @deprecated Supply a {@link PasswordProvider} on the {@link ParseContext} instead
-     */
-    public static final String PASSWORD = "org.apache.tika.parser.pdf.password";
     public static final MediaType MEDIA_TYPE = MediaType.application("pdf");
     /**
      * Serial version UID
@@ -552,17 +545,12 @@ public class PDFParser extends AbstractParser implements RenderingParser, Initia
     private String getPassword(Metadata metadata, ParseContext context) {
         String password = null;
 
-        // Did they supply a new style Password Provider?
+        // Did they supply a Password Provider?
         PasswordProvider passwordProvider = context.get(PasswordProvider.class);
         if (passwordProvider != null) {
             password = passwordProvider.getPassword(metadata);
         }
 
-        // Fall back on the old style metadata if set
-        if (password == null && metadata.get(PASSWORD) != null) {
-            password = metadata.get(PASSWORD);
-        }
-
         // If no password is given, use an empty string as the default
         if (password == null) {
             password = "";
@@ -752,7 +740,6 @@ public class PDFParser extends AbstractParser implements RenderingParser, Initia
     /**
      * If true, text in annotations will be extracted.
      *
-     * @deprecated use {@link #getPDFParserConfig()}
      */
     public boolean isExtractAnnotationText() {
         return defaultConfig.isExtractAnnotationText();
@@ -769,7 +756,6 @@ public class PDFParser extends AbstractParser implements RenderingParser, Initia
 
     /**
      * @see #setSuppressDuplicateOverlappingText(boolean)
-     * @deprecated use {@link #getPDFParserConfig()}
      */
     public boolean isSuppressDuplicateOverlappingText() {
         return defaultConfig.isSuppressDuplicateOverlappingText();
@@ -791,7 +777,6 @@ public class PDFParser extends AbstractParser implements RenderingParser, Initia
 
     /**
      * @see #setSortByPosition(boolean)
-     * @deprecated use {@link #getPDFParserConfig()}
      */
     public boolean isSortByPosition() {
         return defaultConfig.isSortByPosition();
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-pkg-module/src/main/java/org/apache/tika/parser/pkg/CompressorParser.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-pkg-module/src/main/java/org/apache/tika/parser/pkg/CompressorParser.java
index 77f5b9647..e5f9767e2 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-pkg-module/src/main/java/org/apache/tika/parser/pkg/CompressorParser.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-pkg-module/src/main/java/org/apache/tika/parser/pkg/CompressorParser.java
@@ -68,14 +68,14 @@ import org.apache.tika.extractor.EmbeddedDocumentUtil;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.metadata.TikaCoreProperties;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 import org.apache.tika.sax.XHTMLContentHandler;
 
 /**
  * Parser for various compression formats.
  */
-public class CompressorParser extends AbstractParser {
+public class CompressorParser implements Parser {
 
     /**
      * Serial version UID
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-pkg-module/src/main/java/org/apache/tika/parser/pkg/PackageParser.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-pkg-module/src/main/java/org/apache/tika/parser/pkg/PackageParser.java
index f6c1f622f..e04062082 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-pkg-module/src/main/java/org/apache/tika/parser/pkg/PackageParser.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-pkg-module/src/main/java/org/apache/tika/parser/pkg/PackageParser.java
@@ -181,6 +181,7 @@ public class PackageParser extends AbstractEncodingDetectorParser {
         return Collections.unmodifiableSet(zipSpecializations);
     }
 
+    //not clear what we should use instead?
     @Deprecated
     static MediaType getMediaType(ArchiveInputStream stream) {
         if (stream instanceof JarArchiveInputStream) {
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-pkg-module/src/main/java/org/apache/tika/parser/pkg/RarParser.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-pkg-module/src/main/java/org/apache/tika/parser/pkg/RarParser.java
index ac9fbe21c..871f29388 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-pkg-module/src/main/java/org/apache/tika/parser/pkg/RarParser.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-pkg-module/src/main/java/org/apache/tika/parser/pkg/RarParser.java
@@ -36,14 +36,14 @@ import org.apache.tika.io.TemporaryResources;
 import org.apache.tika.io.TikaInputStream;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 import org.apache.tika.sax.XHTMLContentHandler;
 
 /**
  * Parser for Rar files.
  */
-public class RarParser extends AbstractParser {
+public class RarParser implements Parser {
     private static final long serialVersionUID = 6157727985054451501L;
 
     private static final Set<MediaType> SUPPORTED_TYPES =
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-pkg-module/src/main/java/org/apache/tika/parser/pkg/UnrarParser.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-pkg-module/src/main/java/org/apache/tika/parser/pkg/UnrarParser.java
index a59563a49..20ee89dd7 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-pkg-module/src/main/java/org/apache/tika/parser/pkg/UnrarParser.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-pkg-module/src/main/java/org/apache/tika/parser/pkg/UnrarParser.java
@@ -41,8 +41,8 @@ import org.apache.tika.io.TikaInputStream;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.metadata.TikaCoreProperties;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 import org.apache.tika.sax.XHTMLContentHandler;
 import org.apache.tika.utils.FileProcessResult;
 import org.apache.tika.utils.ProcessUtils;
@@ -52,7 +52,7 @@ import org.apache.tika.utils.ProcessUtils;
  * and on the path.  This is not the default rar parser and must
  * be selected via the tika-config.xml.
  */
-public class UnrarParser extends AbstractParser {
+public class UnrarParser implements Parser {
     private static final long serialVersionUID = 6157727985054451501L;
 
     private static final Set<MediaType> SUPPORTED_TYPES =
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-pkg-module/src/test/java/org/apache/tika/parser/pkg/AbstractPkgTest.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-pkg-module/src/test/java/org/apache/tika/parser/pkg/AbstractPkgTest.java
index 587554685..a86ffed71 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-pkg-module/src/test/java/org/apache/tika/parser/pkg/AbstractPkgTest.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-pkg-module/src/test/java/org/apache/tika/parser/pkg/AbstractPkgTest.java
@@ -31,7 +31,6 @@ import org.apache.tika.exception.TikaException;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.metadata.TikaCoreProperties;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
 import org.apache.tika.parser.Parser;
 
@@ -56,7 +55,7 @@ public abstract class AbstractPkgTest extends TikaTest {
 
 
     @SuppressWarnings("serial")
-    protected static class EmbeddedTrackingParser extends AbstractParser {
+    protected static class EmbeddedTrackingParser implements Parser {
         protected List<String> filenames = new ArrayList<>();
         protected List<String> mediatypes = new ArrayList<>();
         protected List<String> createdAts = new ArrayList<>();
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-text-module/src/main/java/org/apache/tika/parser/strings/Latin1StringsParser.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-text-module/src/main/java/org/apache/tika/parser/strings/Latin1StringsParser.java
index 47eee7c04..8657237dc 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-text-module/src/main/java/org/apache/tika/parser/strings/Latin1StringsParser.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-text-module/src/main/java/org/apache/tika/parser/strings/Latin1StringsParser.java
@@ -27,8 +27,8 @@ import org.xml.sax.SAXException;
 
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 import org.apache.tika.sax.XHTMLContentHandler;
 
 /**
@@ -47,7 +47,7 @@ import org.apache.tika.sax.XHTMLContentHandler;
  * <p>
  * The implementation is optimized for fast parsing with only one pass.
  */
-public class Latin1StringsParser extends AbstractParser {
+public class Latin1StringsParser implements Parser {
 
     private static final long serialVersionUID = 1L;
 
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-text-module/src/main/java/org/apache/tika/parser/strings/StringsParser.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-text-module/src/main/java/org/apache/tika/parser/strings/StringsParser.java
index 3be4f32dc..63b6a88be 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-text-module/src/main/java/org/apache/tika/parser/strings/StringsParser.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-text-module/src/main/java/org/apache/tika/parser/strings/StringsParser.java
@@ -46,8 +46,8 @@ import org.apache.tika.io.TemporaryResources;
 import org.apache.tika.io.TikaInputStream;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 import org.apache.tika.parser.external.ExternalParser;
 import org.apache.tika.sax.XHTMLContentHandler;
 import org.apache.tika.utils.SystemUtils;
@@ -60,7 +60,7 @@ import org.apache.tika.utils.SystemUtils;
  *
  * @author gtotaro
  */
-public class StringsParser extends AbstractParser implements Initializable {
+public class StringsParser implements Parser, Initializable {
     /**
      * Serial version UID
      */
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-webarchive-module/src/main/java/org/apache/tika/parser/http/HttpParser.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-webarchive-module/src/main/java/org/apache/tika/parser/http/HttpParser.java
index 8e6061284..440291aee 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-webarchive-module/src/main/java/org/apache/tika/parser/http/HttpParser.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-webarchive-module/src/main/java/org/apache/tika/parser/http/HttpParser.java
@@ -37,11 +37,11 @@ import org.apache.tika.extractor.EmbeddedDocumentExtractor;
 import org.apache.tika.extractor.EmbeddedDocumentUtil;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 import org.apache.tika.sax.XHTMLContentHandler;
 
-public class HttpParser extends AbstractParser {
+public class HttpParser implements Parser {
 
     private static final MediaType MEDIA_TYPE = MediaType.application("x-httpresponse");
     private static final Set<MediaType> SUPPORTED_TYPES = Collections.singleton(MEDIA_TYPE);
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-webarchive-module/src/main/java/org/apache/tika/parser/wacz/WACZParser.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-webarchive-module/src/main/java/org/apache/tika/parser/wacz/WACZParser.java
index 0d414aac1..106ed3350 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-webarchive-module/src/main/java/org/apache/tika/parser/wacz/WACZParser.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-webarchive-module/src/main/java/org/apache/tika/parser/wacz/WACZParser.java
@@ -41,11 +41,11 @@ import org.apache.tika.io.TikaInputStream;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.metadata.TikaCoreProperties;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 import org.apache.tika.sax.XHTMLContentHandler;
 
-public class WACZParser extends AbstractParser {
+public class WACZParser implements Parser {
 
     private static final Set<MediaType> SUPPORTED_TYPES = Collections.unmodifiableSet(
             new HashSet<>(Arrays.asList(MediaType.application("x-wacz"))));
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-webarchive-module/src/main/java/org/apache/tika/parser/warc/WARCParser.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-webarchive-module/src/main/java/org/apache/tika/parser/warc/WARCParser.java
index 8025f6643..2c61cae91 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-webarchive-module/src/main/java/org/apache/tika/parser/warc/WARCParser.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-webarchive-module/src/main/java/org/apache/tika/parser/warc/WARCParser.java
@@ -44,12 +44,12 @@ import org.apache.tika.metadata.Property;
 import org.apache.tika.metadata.TikaCoreProperties;
 import org.apache.tika.metadata.WARC;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 import org.apache.tika.sax.XHTMLContentHandler;
 import org.apache.tika.utils.StringUtils;
 
-public class WARCParser extends AbstractParser {
+public class WARCParser implements Parser {
 
     private static final Set<MediaType> SUPPORTED_TYPES = Collections.unmodifiableSet(
             new HashSet<>(Arrays.asList(MediaType.application("warc"),
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-xml-module/src/main/java/org/apache/tika/parser/tmx/TMXParser.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-xml-module/src/main/java/org/apache/tika/parser/tmx/TMXParser.java
index a16619356..5fce5de20 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-xml-module/src/main/java/org/apache/tika/parser/tmx/TMXParser.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-xml-module/src/main/java/org/apache/tika/parser/tmx/TMXParser.java
@@ -28,15 +28,15 @@ import org.xml.sax.SAXException;
 import org.apache.tika.exception.TikaException;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 import org.apache.tika.sax.XHTMLContentHandler;
 import org.apache.tika.utils.XMLReaderUtils;
 
 /**
  * Parser for Translation Memory eXchange (TMX) files.
  */
-public class TMXParser extends AbstractParser {
+public class TMXParser implements Parser {
 
     /**
      * Serial Version UID.
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-xml-module/src/main/java/org/apache/tika/parser/xliff/XLIFF12Parser.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-xml-module/src/main/java/org/apache/tika/parser/xliff/XLIFF12Parser.java
index f5acbc1aa..bd789802f 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-xml-module/src/main/java/org/apache/tika/parser/xliff/XLIFF12Parser.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-xml-module/src/main/java/org/apache/tika/parser/xliff/XLIFF12Parser.java
@@ -28,15 +28,15 @@ import org.xml.sax.SAXException;
 import org.apache.tika.exception.TikaException;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 import org.apache.tika.sax.XHTMLContentHandler;
 import org.apache.tika.utils.XMLReaderUtils;
 
 /**
  * Parser for XLIFF 1.2 files.
  */
-public class XLIFF12Parser extends AbstractParser {
+public class XLIFF12Parser implements Parser {
 
     /**
      * Serial Version UID.
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-xml-module/src/main/java/org/apache/tika/parser/xliff/XLZParser.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-xml-module/src/main/java/org/apache/tika/parser/xliff/XLZParser.java
index 2058871ea..4bd947923 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-xml-module/src/main/java/org/apache/tika/parser/xliff/XLZParser.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-xml-module/src/main/java/org/apache/tika/parser/xliff/XLZParser.java
@@ -32,7 +32,6 @@ import org.apache.tika.exception.TikaException;
 import org.apache.tika.io.TikaInputStream;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
 import org.apache.tika.parser.Parser;
 import org.apache.tika.sax.EndDocumentShieldingContentHandler;
@@ -41,7 +40,7 @@ import org.apache.tika.sax.XHTMLContentHandler;
 /**
  * Parser for XLZ Archives.
  */
-public class XLZParser extends AbstractParser {
+public class XLZParser implements Parser {
 
     /**
      * Serial version UID
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-xml-module/src/main/java/org/apache/tika/parser/xml/XMLParser.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-xml-module/src/main/java/org/apache/tika/parser/xml/XMLParser.java
index 4fa57fbb9..30d48ea1d 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-xml-module/src/main/java/org/apache/tika/parser/xml/XMLParser.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-xml-module/src/main/java/org/apache/tika/parser/xml/XMLParser.java
@@ -30,8 +30,8 @@ import org.xml.sax.SAXException;
 import org.apache.tika.exception.TikaException;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 import org.apache.tika.sax.EmbeddedContentHandler;
 import org.apache.tika.sax.TaggedContentHandler;
 import org.apache.tika.sax.TextContentHandler;
@@ -41,7 +41,7 @@ import org.apache.tika.utils.XMLReaderUtils;
 /**
  * XML parser.
  */
-public class XMLParser extends AbstractParser {
+public class XMLParser implements Parser {
 
     /**
      * Serial version UID
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-xml-module/src/main/java/org/apache/tika/parser/xml/XMLProfiler.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-xml-module/src/main/java/org/apache/tika/parser/xml/XMLProfiler.java
index bfe8d5790..86957ad7f 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-xml-module/src/main/java/org/apache/tika/parser/xml/XMLProfiler.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-xml-module/src/main/java/org/apache/tika/parser/xml/XMLProfiler.java
@@ -37,8 +37,8 @@ import org.apache.tika.exception.TikaException;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.metadata.Property;
 import org.apache.tika.mime.MediaType;
-import org.apache.tika.parser.AbstractParser;
 import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
 import org.apache.tika.utils.XMLReaderUtils;
 
 
@@ -66,7 +66,7 @@ import org.apache.tika.utils.XMLReaderUtils;
  * xmp in other file formats.  Please open a ticket.
  * </p>
  */
-public class XMLProfiler extends AbstractParser {
+public class XMLProfiler implements Parser {
 
 
     private static final Set<MediaType> SUPPORTED_TYPES =
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-xml-module/src/test/java/org/apache/tika/parser/xml/DcXMLParserTest.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-xml-module/src/test/java/org/apache/tika/parser/xml/DcXMLParserTest.java
index 94af7d629..f6c5ac7c7 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-xml-module/src/test/java/org/apache/tika/parser/xml/DcXMLParserTest.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-xml-module/src/test/java/org/apache/tika/parser/xml/DcXMLParserTest.java
@@ -29,6 +29,7 @@ import org.xml.sax.helpers.DefaultHandler;
 import org.apache.tika.TikaTest;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.metadata.TikaCoreProperties;
+import org.apache.tika.parser.ParseContext;
 import org.apache.tika.sax.BodyContentHandler;
 
 public class DcXMLParserTest extends TikaTest {
@@ -38,7 +39,7 @@ public class DcXMLParserTest extends TikaTest {
         try (InputStream input = getResourceAsStream("/test-documents/testXML.xml")) {
             Metadata metadata = new Metadata();
             ContentHandler handler = new BodyContentHandler();
-            new DcXMLParser().parse(input, handler, metadata);
+            new DcXMLParser().parse(input, handler, metadata, new ParseContext());
 
             assertEquals("application/xml", metadata.get(Metadata.CONTENT_TYPE));
             assertEquals("Tika test document", metadata.get(TikaCoreProperties.TITLE));
@@ -73,7 +74,7 @@ public class DcXMLParserTest extends TikaTest {
     public void testXMLParserNonAsciiChars() throws Exception {
         try (InputStream input = getResourceAsStream("/test-documents/testXML.xml")) {
             Metadata metadata = new Metadata();
-            new DcXMLParser().parse(input, new DefaultHandler(), metadata);
+            new DcXMLParser().parse(input, new DefaultHandler(), metadata, new ParseContext());
 
             final String expected =
                     "Archim\u00E8de et Lius \u00E0 Ch\u00E2teauneuf testing chars en \u00E9t\u00E9";
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-xml-module/src/test/java/org/apache/tika/parser/xml/TextAndAttributeXMLParserTest.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-xml-module/src/test/java/org/apache/tika/parser/xml/TextAndAttributeXMLParserTest.java
index 7b7578ed9..306763201 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-xml-module/src/test/java/org/apache/tika/parser/xml/TextAndAttributeXMLParserTest.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-xml-module/src/test/java/org/apache/tika/parser/xml/TextAndAttributeXMLParserTest.java
@@ -19,9 +19,9 @@ package org.apache.tika.parser.xml;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.StringWriter;
 
 import org.junit.jupiter.api.Test;
 import org.xml.sax.ContentHandler;
@@ -40,10 +40,10 @@ public class TextAndAttributeXMLParserTest extends TikaTest {
         try (InputStream input = getResourceAsStream("/test-documents/testXML2.xml")) {
             Metadata metadata = new Metadata();
             ParseContext context = new ParseContext();
-            ByteArrayOutputStream buffer = new ByteArrayOutputStream();
-            ContentHandler handler = new BodyContentHandler(buffer);
+            StringWriter writer = new StringWriter();
+            ContentHandler handler = new BodyContentHandler(writer);
             new TextAndAttributeXMLParser().parse(input, handler, metadata, context);
-            String output = buffer.toString("UTF-8");
+            String output = writer.toString();
 
             assertEquals("application/xml", metadata.get(Metadata.CONTENT_TYPE));
             assertTrue(output.contains("document type Microsoft Word 2003/2004"));
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-package/src/test/java/org/apache/tika/parser/AutoDetectParserTest.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-package/src/test/java/org/apache/tika/parser/AutoDetectParserTest.java
index f1c6dfd50..ed01ae9b0 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-package/src/test/java/org/apache/tika/parser/AutoDetectParserTest.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-package/src/test/java/org/apache/tika/parser/AutoDetectParserTest.java
@@ -497,7 +497,7 @@ public class AutoDetectParserTest extends TikaTest {
     }
 
     @SuppressWarnings("serial")
-    private static class MyParser extends AbstractParser {
+    private static class MyParser implements Parser {
         public Set<MediaType> getSupportedTypes(ParseContext context) {
             Set<MediaType> supportedTypes = new HashSet<>();
             supportedTypes.add(MY_MEDIA_TYPE);
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-package/src/test/java/org/apache/tika/parser/XMLTestBase.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-package/src/test/java/org/apache/tika/parser/XMLTestBase.java
index f2ddf0e6b..99c906a4a 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-package/src/test/java/org/apache/tika/parser/XMLTestBase.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-package/src/test/java/org/apache/tika/parser/XMLTestBase.java
@@ -103,7 +103,7 @@ public class XMLTestBase extends TikaTest {
         parser.parse(is, new DefaultHandler(), new Metadata(), context);
     }
 
-    static class VulnerableDOMParser extends AbstractParser {
+    static class VulnerableDOMParser implements Parser {
 
         @Override
         public Set<MediaType> getSupportedTypes(ParseContext context) {
@@ -128,7 +128,7 @@ public class XMLTestBase extends TikaTest {
         }
     }
 
-    static class VulnerableSAXParser extends AbstractParser {
+    static class VulnerableSAXParser implements Parser {
 
         @Override
         public Set<MediaType> getSupportedTypes(ParseContext context) {
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-package/src/test/java/org/apache/tika/sax/DoublingContentHandlerDecoratorFactory.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-package/src/test/java/org/apache/tika/sax/DoublingContentHandlerDecoratorFactory.java
index cc71ca398..60aa7c7d2 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-package/src/test/java/org/apache/tika/sax/DoublingContentHandlerDecoratorFactory.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-package/src/test/java/org/apache/tika/sax/DoublingContentHandlerDecoratorFactory.java
@@ -27,11 +27,6 @@ import org.apache.tika.parser.ParseContext;
 public class DoublingContentHandlerDecoratorFactory implements ContentHandlerDecoratorFactory {
     private static final char[] NEWLINE = new char[]{'\n'};
 
-    @Override
-    public ContentHandler decorate(ContentHandler contentHandler, Metadata metadata) {
-        return decorate(contentHandler, metadata, new ParseContext());
-    }
-
     @Override
     public ContentHandler decorate(ContentHandler contentHandler, Metadata metadata,
                                    ParseContext parseContext) {
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-package/src/test/java/org/apache/tika/sax/UpcasingContentHandlerDecoratorFactory.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-package/src/test/java/org/apache/tika/sax/UpcasingContentHandlerDecoratorFactory.java
index f78aa29e7..b6f0beb35 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-package/src/test/java/org/apache/tika/sax/UpcasingContentHandlerDecoratorFactory.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-package/src/test/java/org/apache/tika/sax/UpcasingContentHandlerDecoratorFactory.java
@@ -25,10 +25,6 @@ import org.apache.tika.metadata.Metadata;
 import org.apache.tika.parser.ParseContext;
 
 public class UpcasingContentHandlerDecoratorFactory implements ContentHandlerDecoratorFactory {
-    @Override
-    public ContentHandler decorate(ContentHandler contentHandler, Metadata metadata) {
-        return decorate(contentHandler, metadata, new ParseContext());
-    }
 
     @Override
     public ContentHandler decorate(ContentHandler contentHandler, Metadata metadata,
diff --git a/tika-pipes/tika-fetchers/tika-fetcher-s3/src/main/java/org/apache/tika/pipes/fetcher/s3/S3Fetcher.java b/tika-pipes/tika-fetchers/tika-fetcher-s3/src/main/java/org/apache/tika/pipes/fetcher/s3/S3Fetcher.java
index d91a06aa7..b57c361b9 100644
--- a/tika-pipes/tika-fetchers/tika-fetcher-s3/src/main/java/org/apache/tika/pipes/fetcher/s3/S3Fetcher.java
+++ b/tika-pipes/tika-fetchers/tika-fetcher-s3/src/main/java/org/apache/tika/pipes/fetcher/s3/S3Fetcher.java
@@ -286,15 +286,6 @@ public class S3Fetcher extends AbstractFetcher implements Initializable, RangeFe
         this.maxConnections = maxConnections;
     }
 
-    @Field
-    /**
-     * @deprecated use {@link #setThrottleSeconds(String)} instead
-     */
-    public void setRetries(int retries) {
-        LOGGER.info("retries is deprecated. Use setThrottleSeconds instead.");
-        this.retries = retries;
-    }
-
     @Field
     public void setCredentialsProvider(String credentialsProvider) {
         if (!credentialsProvider.equals("profile") && !credentialsProvider.equals("instance")
diff --git a/tika-server/tika-server-core/src/main/java/org/apache/tika/server/core/DefaultInputStreamFactory.java b/tika-server/tika-server-core/src/main/java/org/apache/tika/server/core/DefaultInputStreamFactory.java
index 4b6e399be..1bff2eb48 100644
--- a/tika-server/tika-server-core/src/main/java/org/apache/tika/server/core/DefaultInputStreamFactory.java
+++ b/tika-server/tika-server-core/src/main/java/org/apache/tika/server/core/DefaultInputStreamFactory.java
@@ -29,12 +29,6 @@ import org.apache.tika.metadata.Metadata;
  */
 public class DefaultInputStreamFactory implements InputStreamFactory {
 
-    @Override
-    public InputStream getInputStream(InputStream is, Metadata metadata, HttpHeaders httpHeaders)
-            throws IOException {
-        return is;
-    }
-
     @Override
     public InputStream getInputStream(InputStream is, Metadata metadata, HttpHeaders httpHeaders,
                                       UriInfo uriInfo) throws IOException {
diff --git a/tika-server/tika-server-core/src/main/java/org/apache/tika/server/core/FetcherStreamFactory.java b/tika-server/tika-server-core/src/main/java/org/apache/tika/server/core/FetcherStreamFactory.java
index eb9188f51..d53064321 100644
--- a/tika-server/tika-server-core/src/main/java/org/apache/tika/server/core/FetcherStreamFactory.java
+++ b/tika-server/tika-server-core/src/main/java/org/apache/tika/server/core/FetcherStreamFactory.java
@@ -131,13 +131,6 @@ public class FetcherStreamFactory implements InputStreamFactory {
         return (String)uriParams.getFirst(paramName);
     }
 
-    @Override
-    public InputStream getInputStream(InputStream is, Metadata metadata, HttpHeaders httpHeaders)
-            throws IOException {
-        return getInputStream(is, metadata, httpHeaders, null);
-
-    }
-
     /**
      * Tries to parse a long out of the value.  If the val is blank, it returns -1.
      * Throws {@link NumberFormatException}
diff --git a/tika-server/tika-server-core/src/main/java/org/apache/tika/server/core/InputStreamFactory.java b/tika-server/tika-server-core/src/main/java/org/apache/tika/server/core/InputStreamFactory.java
index a1f65c4b2..ce4a54a9d 100644
--- a/tika-server/tika-server-core/src/main/java/org/apache/tika/server/core/InputStreamFactory.java
+++ b/tika-server/tika-server-core/src/main/java/org/apache/tika/server/core/InputStreamFactory.java
@@ -32,19 +32,6 @@ import org.apache.tika.metadata.Metadata;
  */
 public interface InputStreamFactory {
 
-    /**
-     * @deprecated use {@link #getInputStream(InputStream, Metadata, HttpHeaders, UriInfo)}
-     * @param is
-     * @param metadata
-     * @param httpHeaders
-     * @return
-     * @throws IOException
-     */
-    @Deprecated
-    InputStream getInputStream(InputStream is, Metadata metadata, HttpHeaders httpHeaders)
-            throws IOException;
-
-
     InputStream getInputStream(InputStream is, Metadata metadata, HttpHeaders httpHeaders,
                                UriInfo uriInfo)
             throws IOException;