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 2025/09/26 16:51:53 UTC

(tika) 01/01: move tika-pipes out of core

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

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

commit b53376d9f28ea7ece45cd5738aad5941a7f8e83e
Author: tallison <ta...@apache.org>
AuthorDate: Fri Sep 26 12:51:34 2025 -0400

    move tika-pipes out of core
---
 .../java/org/apache/tika/cli/TikaCLIAsyncTest.java |   7 +-
 tika-eval/tika-eval-app/pom.xml                    |   2 +-
 .../org/apache/tika/eval/app/ExtractComparer.java  |   2 +-
 .../tika/eval/app/ExtractComparerRunner.java       |   8 +-
 .../apache/tika/eval/app/ExtractProfileRunner.java |   8 +-
 .../org/apache/tika/eval/app/ExtractProfiler.java  |   2 +-
 .../org/apache/tika/eval/app/ProfilerBase.java     |   2 +-
 .../org/apache/tika/eval/app/StatusReporter.java   |   2 +-
 tika-fuzzing/pom.xml                               |   2 +-
 .../org/apache/tika/fuzzing/cli/FuzzingCLI.java    |  16 +--
 .../test/resources/configs/tika-fuzzing-config.xml |   4 +-
 .../tika/pipes/grpc/ExpiringFetcherStore.java      |   4 +-
 .../apache/tika/pipes/grpc/TikaGrpcServerImpl.java |  18 ++--
 .../tika/pipes/grpc/ExpiringFetcherStoreTest.java  |   4 +-
 .../apache/tika/pipes/grpc/TikaGrpcServerTest.java |   4 +-
 .../tika/pipes/kafka/tests/TikaPipesKafkaTest.java |   2 +-
 .../src/test/resources/tika-config-kafka.xml       |   4 +-
 .../pipes/opensearch/tests/OpenSearchTest.java     |   8 +-
 .../opensearch/tika-config-opensearch.xml          |   4 +-
 .../tika/pipes/s3/tests/PipeIntegrationTests.java  |  14 +--
 .../tika/pipes/s3/tests/S3PipeIntegrationTest.java |   2 +-
 .../tika/pipes/solr/tests/TikaPipesSolr9Test.java  |   2 +-
 .../pipes/solr/tests/TikaPipesSolrTestBase.java    |   2 +-
 .../src/test/resources/tika-config-solr-urls.xml   |   4 +-
 tika-pipes/pom.xml                                 |   1 +
 tika-pipes/tika-async-cli/pom.xml                  |   2 +-
 .../org/apache/tika/async/cli/TikaAsyncCLI.java    |   6 +-
 .../tika/async/cli/TikaConfigAsyncWriter.java      |   2 +-
 .../apache/tika/async/cli/AsyncProcessorTest.java  |  14 +--
 .../test/resources/configs/TIKA-4207-emitter.xml   |   6 +-
 tika-pipes/tika-emitters/pom.xml                   |   1 -
 .../tika-emitters/tika-emitter-az-blob/pom.xml     |   2 +-
 .../tika/pipes/emitter/azblob/AZBlobEmitter.java   |   6 +-
 .../pipes/emitter/azblob/TestAZBlobEmitter.java    |   4 +-
 tika-pipes/tika-emitters/tika-emitter-fs/pom.xml   | 109 ---------------------
 tika-pipes/tika-emitters/tika-emitter-gcs/pom.xml  |   2 +-
 .../apache/tika/pipes/emitter/gcs/GCSEmitter.java  |   6 +-
 .../tika/pipes/emitter/gcs/TestGCSEmitter.java     |   4 +-
 tika-pipes/tika-emitters/tika-emitter-jdbc/pom.xml |   2 +-
 .../tika/pipes/emitter/jdbc/JDBCEmitter.java       |   8 +-
 .../tika/pipes/emitter/jdbc/JDBCEmitterTest.java   |   4 +-
 .../tika-emitters/tika-emitter-kafka/pom.xml       |   9 +-
 .../tika/pipes/emitter/kafka/KafkaEmitter.java     |   4 +-
 .../tika-emitters/tika-emitter-opensearch/pom.xml  |   2 +-
 .../pipes/emitter/opensearch/OpenSearchClient.java |   2 +-
 .../emitter/opensearch/OpenSearchEmitter.java      |   6 +-
 tika-pipes/tika-emitters/tika-emitter-s3/pom.xml   |   9 +-
 .../apache/tika/pipes/emitter/s3/S3Emitter.java    |   6 +-
 tika-pipes/tika-emitters/tika-emitter-solr/pom.xml |   2 +-
 .../tika/pipes/emitter/solr/SolrEmitter.java       |   6 +-
 .../tika-fetchers/tika-fetcher-az-blob/pom.xml     |   2 +-
 .../tika/pipes/fetcher/azblob/AZBlobFetcher.java   |   2 +-
 .../fetcher/azblob/config/AZBlobFetcherConfig.java |   2 +-
 .../pipes/fetcher/azblob/TestAZBlobFetcher.java    |   4 +-
 tika-pipes/tika-fetchers/tika-fetcher-gcs/pom.xml  |   2 +-
 .../apache/tika/pipes/fetcher/gcs/GCSFetcher.java  |   2 +-
 .../pipes/fetcher/gcs/config/GCSFetcherConfig.java |   2 +-
 .../tika/pipes/fetcher/s3/TestGCSFetcher.java      |   4 +-
 tika-pipes/tika-fetchers/tika-fetcher-http/pom.xml |   2 +-
 .../tika/pipes/fetcher/http/HttpFetcher.java       |   6 +-
 .../fetcher/http/config/HttpFetcherConfig.java     |   2 +-
 .../tika/pipes/fetcher/http/HttpFetcherTest.java   |   4 +-
 .../tika-fetcher-microsoft-graph/pom.xml           |   2 +-
 .../microsoftgraph/MicrosoftGraphFetcher.java      |   2 +-
 .../config/MicrosoftGraphFetcherConfig.java        |   2 +-
 tika-pipes/tika-fetchers/tika-fetcher-s3/pom.xml   |   2 +-
 .../apache/tika/pipes/fetcher/s3/S3Fetcher.java    |   4 +-
 .../pipes/fetcher/s3/config/S3FetcherConfig.java   |   2 +-
 .../tika/pipes/fetcher/s3/TestS3Fetcher.java       |   4 +-
 tika-pipes/tika-httpclient-commons/pom.xml         |   2 +-
 .../pom.xml                                        |  46 +++++----
 .../tika/pipes/core}/CompositePipesReporter.java   |   4 +-
 .../pipes/core}/FailedToStartClientException.java  |   2 +-
 .../apache/tika/pipes/core}/FetchEmitTuple.java    |   8 +-
 .../org/apache/tika/pipes/core}/HandlerConfig.java |   2 +-
 .../tika/pipes/core}/LoggingPipesReporter.java     |   2 +-
 .../org/apache/tika/pipes/core}/PipesClient.java   |  21 ++--
 .../org/apache/tika/pipes/core}/PipesConfig.java   |   2 +-
 .../apache/tika/pipes/core}/PipesConfigBase.java   |   2 +-
 .../apache/tika/pipes/core}/PipesException.java    |   2 +-
 .../org/apache/tika/pipes/core}/PipesParser.java   |   2 +-
 .../org/apache/tika/pipes/core}/PipesReporter.java |   4 +-
 .../apache/tika/pipes/core}/PipesReporterBase.java |   2 +-
 .../org/apache/tika/pipes/core}/PipesResult.java   |   4 +-
 .../org/apache/tika/pipes/core}/PipesServer.java   |  24 ++---
 .../apache/tika/pipes/core}/async/AsyncConfig.java |   6 +-
 .../tika/pipes/core}/async/AsyncEmitter.java       |  10 +-
 .../tika/pipes/core}/async/AsyncProcessor.java     |  22 ++---
 .../apache/tika/pipes/core}/async/AsyncStatus.java |   6 +-
 .../core}/async/OfferLargerThanQueueSize.java      |   2 +-
 .../tika/pipes/core}/emitter/AbstractEmitter.java  |   2 +-
 .../apache/tika/pipes/core}/emitter/EmitData.java  |   2 +-
 .../apache/tika/pipes/core}/emitter/EmitKey.java   |   2 +-
 .../apache/tika/pipes/core}/emitter/Emitter.java   |   2 +-
 .../tika/pipes/core}/emitter/EmitterManager.java   |   2 +-
 .../tika/pipes/core}/emitter/EmptyEmitter.java     |   2 +-
 .../tika/pipes/core}/emitter/StreamEmitter.java    |   2 +-
 .../pipes/core}/emitter/TikaEmitterException.java  |   2 +-
 .../pipes/core}/emitter/fs/FileSystemEmitter.java  |  10 +-
 .../AbstractEmbeddedDocumentBytesHandler.java      |   5 +-
 .../BasicEmbeddedDocumentBytesHandler.java         |   4 +-
 .../extractor/EmbeddedDocumentBytesConfig.java     |   2 +-
 .../EmittingEmbeddedDocumentBytesHandler.java      |  15 ++-
 .../tika/pipes/core}/fetcher/AbstractFetcher.java  |   2 +-
 .../tika/pipes/core}/fetcher/EmptyFetcher.java     |   2 +-
 .../apache/tika/pipes/core}/fetcher/FetchKey.java  |   2 +-
 .../apache/tika/pipes/core}/fetcher/Fetcher.java   |   2 +-
 .../tika/pipes/core}/fetcher/FetcherManager.java   |   2 +-
 .../core}/fetcher/FetcherStringException.java      |   2 +-
 .../tika/pipes/core}/fetcher/RangeFetcher.java     |   2 +-
 .../pipes/core}/fetcher/config/AbstractConfig.java |   2 +-
 .../fetcher/config/FetcherConfigContainer.java     |   2 +-
 .../pipes/core}/fetcher/fs/FileSystemFetcher.java  |   6 +-
 .../fetcher/fs/config/FileSystemFetcherConfig.java |   4 +-
 .../tika/pipes/core}/fetcher/url/UrlFetcher.java   |   4 +-
 .../core}/pipesiterator/CallablePipesIterator.java |   4 +-
 .../pipes/core}/pipesiterator/PipesIterator.java   |   6 +-
 .../core}/pipesiterator/TotalCountResult.java      |   2 +-
 .../pipes/core}/pipesiterator/TotalCounter.java    |   2 +-
 .../filelist/FileListPipesIterator.java            |  12 +--
 .../pipesiterator/fs/FileSystemPipesIterator.java  |  18 ++--
 .../pipes/core/serialization}/JsonEmitData.java    |   6 +-
 .../core/serialization}/JsonFetchEmitTuple.java    |  12 +--
 .../serialization}/JsonFetchEmitTupleList.java     |   4 +-
 .../resources/pipes-fork-server-default-log4j2.xml |  27 ++---
 .../apache/tika/pipes/core}/PipesClientTest.java   |   8 +-
 .../apache/tika/pipes/core}/PipesServerTest.java   |  14 +--
 .../tika/pipes/core}/TikaPipesConfigTest.java      |  21 ++--
 .../pipes/core}/async/AsyncChaosMonkeyTest.java    |  22 ++---
 .../pipes/core}/async/MockDigesterFactory.java     |   2 +-
 .../apache/tika/pipes/core}/async/MockEmitter.java |  10 +-
 .../apache/tika/pipes/core}/async/MockFetcher.java |   4 +-
 .../tika/pipes/core}/async/MockReporter.java       |   8 +-
 .../tika/pipes/core}/async/MockReporterTest.java   |   6 +-
 .../tika/pipes/core}/emitter/MockEmitter.java      |   2 +-
 .../tika/pipes/core}/fetcher/MockFetcher.java      |   2 +-
 .../core}/fetcher/fs/FileSystemFetcherTest.java    |   2 +-
 .../pipesiterator/FileSystemPipesIteratorTest.java |   6 +-
 .../filelist/FileListPipesIteratorTest.java        |   4 +-
 .../serialization}/JsonFetchEmitTupleListTest.java |   8 +-
 .../serialization}/JsonFetchEmitTupleTest.java     |  10 +-
 .../test/resources/configs/TIKA-4207-emitter.xml   |   6 +-
 .../test/resources/configs/tika-config-broken.xml  |  15 +--
 .../org/apache/tika/config/TIKA-3865-params.xml    |   6 +-
 .../org/apache/tika/config/emitters-config.xml     |   4 +-
 .../tika/config/emitters-duplicate-config.xml      |   4 +-
 .../tika/config/emitters-mock-throw-on-check.xml   |   2 +-
 .../org/apache/tika/config/fetchers-config.xml     |   4 +-
 .../tika/config/fetchers-duplicate-config.xml      |   4 +-
 .../tika/config/fetchers-mock-throw-on-check.xml   |   2 +-
 .../tika/config/fetchers-nobasepath-config.xml     |   4 +-
 .../apache/tika/config/fetchers-noname-config.xml  |   4 +-
 .../apache/tika/config/pipes-iterator-config.xml   |   2 +-
 .../tika/config/pipes-iterator-multiple-config.xml |   4 +-
 .../org/apache/tika/pipes/core}/TIKA-3941.xml      |   4 +-
 .../tika/pipes/core}/TIKA-4207-limit-bytes.xml     |   4 +-
 .../org/apache/tika/pipes/core}/TIKA-4207.xml      |   4 +-
 .../apache/tika/pipes/core}/async/TIKA-3507.xml    |   2 +-
 .../apache/tika/pipes/core}/async/TIKA-3865.xml    |   6 +-
 .../apache/tika/pipes/core}/tika-sample-config.xml |   4 +-
 .../resources/test-documents/basic_embedded.xml    |  27 ++---
 .../test/resources/test-documents/file-list.txt    |   0
 .../resources/test-documents/mock/embedded.xml     |   0
 .../test/resources/test-documents/mock_times.xml   |  19 ++--
 .../test-documents/testOverlappingText.pdf         | Bin 0 -> 899 bytes
 .../tika-pipes-iterator-az-blob/pom.xml            |   2 +-
 .../pipesiterator/azblob/AZBlobPipesIterator.java  |  10 +-
 .../azblob/TestAZBlobPipesIterator.java            |   4 +-
 .../tika-pipes-iterator-csv/pom.xml                |   2 +-
 .../pipes/pipesiterator/csv/CSVPipesIterator.java  |  10 +-
 .../src/test/java/TestCSVPipesIterator.java        |   4 +-
 .../tika-pipes-iterator-gcs/pom.xml                |   2 +-
 .../pipes/pipesiterator/gcs/GCSPipesIterator.java  |  10 +-
 .../pipesiterator/gcs/TestGCSPipesIterator.java    |   4 +-
 .../tika-pipes-iterator-jdbc/pom.xml               |   2 +-
 .../pipesiterator/jdbc/JDBCPipesIterator.java      |  10 +-
 .../pipesiterator/jdbc/TestJDBCPipesIterator.java  |   4 +-
 .../tika-pipes-iterator-json/pom.xml               |   2 +-
 .../pipesiterator/json/JsonPipesIterator.java      |   6 +-
 .../pipesiterator/json/TestJsonPipesIterator.java  |   2 +-
 .../tika-pipes-iterator-kafka/pom.xml              |   2 +-
 .../pipesiterator/kafka/KafkaPipesIterator.java    |  10 +-
 .../kafka/TestKafkaPipesIterator.java              |   4 +-
 .../tika-pipes-iterator-s3/pom.xml                 |   2 +-
 .../pipes/pipesiterator/s3/S3PipesIterator.java    |  10 +-
 .../pipesiterator/s3/TestS3PipesIterator.java      |   4 +-
 .../tika-pipes-iterator-solr/pom.xml               |   2 +-
 .../pipesiterator/solr/SolrPipesIterator.java      |  10 +-
 .../tika-pipes-reporter-fs-status/pom.xml          |   7 +-
 .../reporters/fs/FileSystemStatusReporter.java     |  10 +-
 .../reporters/fs/TestFileSystemStatusReporter.java |  10 +-
 .../tika-pipes-reporter-jdbc/pom.xml               |   3 +-
 .../pipes/reporters/jdbc/JDBCPipesReporter.java    |   6 +-
 .../reporters/jdbc/TestJDBCPipesReporter.java      |  19 ++--
 .../tika-pipes-reporter-opensearch/pom.xml         |   2 +-
 .../opensearch/OpenSearchPipesReporter.java        |   6 +-
 tika-server/tika-server-client/pom.xml             |   2 +-
 .../org/apache/tika/server/client/TikaClient.java  |   4 +-
 .../apache/tika/server/client/TikaClientCLI.java   |   6 +-
 .../resources/tika-config-simple-fs-emitter.xml    |   2 +-
 tika-server/tika-server-core/pom.xml               |   2 +-
 .../tika/server/core/FetcherStreamFactory.java     |   6 +-
 .../apache/tika/server/core/TikaServerProcess.java |   4 +-
 .../tika/server/core/resource/AsyncRequest.java    |   2 +-
 .../tika/server/core/resource/AsyncResource.java   |  16 +--
 .../tika/server/core/resource/PipesResource.java   |  12 +--
 .../core/resource/RecursiveMetadataResource.java   |   2 +-
 .../tika/server/core/resource/TikaResource.java    |   2 +-
 .../org/apache/tika/server/core/TikaPipesTest.java |  21 ++--
 .../tika/server/core/TikaResourceFetcherTest.java  |   2 +-
 .../core/TikaServerAsyncIntegrationTest.java       |  12 +--
 .../core/TikaServerPipesIntegrationTest.java       |  23 +++--
 .../tika-config-server-fetcher-template.xml        |   2 +-
 .../tika-config-server-fetchers-emitters.xml       |   2 +-
 .../apache/tika/server/standard/FetcherTest.java   |   2 +-
 .../apache/tika/server/standard/TikaPipesTest.java |  35 ++++---
 .../resources/config/tika-config-url-fetcher.xml   |   2 +-
 217 files changed, 627 insertions(+), 731 deletions(-)

diff --git a/tika-app/src/test/java/org/apache/tika/cli/TikaCLIAsyncTest.java b/tika-app/src/test/java/org/apache/tika/cli/TikaCLIAsyncTest.java
index 56e1289b8..b653507f8 100644
--- a/tika-app/src/test/java/org/apache/tika/cli/TikaCLIAsyncTest.java
+++ b/tika-app/src/test/java/org/apache/tika/cli/TikaCLIAsyncTest.java
@@ -53,10 +53,11 @@ public class TikaCLIAsyncTest {
     public static void setUpClass() throws Exception {
         ASYNC_CONFIG = Files.createTempFile(ASYNC_OUTPUT_DIR, "async-config-", ".xml");
         String xml = "<properties>" + "<async>" + "<numClients>3</numClients>" + "<tikaConfig>" + ASYNC_CONFIG.toAbsolutePath() + "</tikaConfig>" + "</async>" + "<fetchers>" +
-                "<fetcher class=\"org.apache.tika.pipes.fetcher.fs.FileSystemFetcher\">" + "<name>fsf</name>" + "<basePath>" + TEST_DATA_FILE.getAbsolutePath() + "</basePath>" +
-                "</fetcher>" + "</fetchers>" + "<emitters>" + "<emitter class=\"org.apache.tika.pipes.emitter.fs.FileSystemEmitter\">" + "<name>fse</name>" + "<basePath>" +
+                "<fetcher class=\"org.apache.tika.pipes.core.fetcher.fs.FileSystemFetcher\">" + "<name>fsf</name>" + "<basePath>" + TEST_DATA_FILE.getAbsolutePath() +
+                "</basePath>" +
+                "</fetcher>" + "</fetchers>" + "<emitters>" + "<emitter class=\"org.apache.tika.pipes.core.emitter.fs.FileSystemEmitter\">" + "<name>fse</name>" + "<basePath>" +
                 ASYNC_OUTPUT_DIR.toAbsolutePath() + "</basePath>" + "<prettyPrint>true</prettyPrint>" + "</emitter>" + "</emitters>" +
-                "<pipesIterator class=\"org.apache.tika.pipes.pipesiterator.fs.FileSystemPipesIterator\">" + "<basePath>" + TEST_DATA_FILE.getAbsolutePath() + "</basePath>" +
+                "<pipesIterator class=\"org.apache.tika.pipes.core.pipesiterator.fs.FileSystemPipesIterator\">" + "<basePath>" + TEST_DATA_FILE.getAbsolutePath() + "</basePath>" +
                 "<fetcherName>fsf</fetcherName>" + "<emitterName>fse</emitterName>" + "</pipesIterator>" + "</properties>";
         Files.write(ASYNC_CONFIG, xml.getBytes(UTF_8));
     }
diff --git a/tika-eval/tika-eval-app/pom.xml b/tika-eval/tika-eval-app/pom.xml
index 07342dbf9..aee970e8e 100644
--- a/tika-eval/tika-eval-app/pom.xml
+++ b/tika-eval/tika-eval-app/pom.xml
@@ -32,7 +32,7 @@
   <dependencies>
     <dependency>
       <groupId>org.apache.tika</groupId>
-      <artifactId>tika-core</artifactId>
+      <artifactId>tika-pipes-core</artifactId>
       <version>${project.version}</version>
     </dependency>
     <dependency>
diff --git a/tika-eval/tika-eval-app/src/main/java/org/apache/tika/eval/app/ExtractComparer.java b/tika-eval/tika-eval-app/src/main/java/org/apache/tika/eval/app/ExtractComparer.java
index e4fb0f8a7..48cea521a 100644
--- a/tika-eval/tika-eval-app/src/main/java/org/apache/tika/eval/app/ExtractComparer.java
+++ b/tika-eval/tika-eval-app/src/main/java/org/apache/tika/eval/app/ExtractComparer.java
@@ -43,7 +43,7 @@ import org.apache.tika.eval.core.tokens.TokenIntPair;
 import org.apache.tika.eval.core.util.ContentTags;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.metadata.TikaCoreProperties;
-import org.apache.tika.pipes.fetcher.FetchKey;
+import org.apache.tika.pipes.core.fetcher.FetchKey;
 
 public class ExtractComparer extends ProfilerBase {
 
diff --git a/tika-eval/tika-eval-app/src/main/java/org/apache/tika/eval/app/ExtractComparerRunner.java b/tika-eval/tika-eval-app/src/main/java/org/apache/tika/eval/app/ExtractComparerRunner.java
index a06c07c3a..f9334cb03 100644
--- a/tika-eval/tika-eval-app/src/main/java/org/apache/tika/eval/app/ExtractComparerRunner.java
+++ b/tika-eval/tika-eval-app/src/main/java/org/apache/tika/eval/app/ExtractComparerRunner.java
@@ -55,10 +55,10 @@ import org.apache.tika.eval.app.io.DBWriter;
 import org.apache.tika.eval.app.io.ExtractReader;
 import org.apache.tika.eval.app.io.ExtractReaderException;
 import org.apache.tika.eval.app.io.IDBWriter;
-import org.apache.tika.pipes.FetchEmitTuple;
-import org.apache.tika.pipes.pipesiterator.CallablePipesIterator;
-import org.apache.tika.pipes.pipesiterator.PipesIterator;
-import org.apache.tika.pipes.pipesiterator.fs.FileSystemPipesIterator;
+import org.apache.tika.pipes.core.FetchEmitTuple;
+import org.apache.tika.pipes.core.pipesiterator.CallablePipesIterator;
+import org.apache.tika.pipes.core.pipesiterator.PipesIterator;
+import org.apache.tika.pipes.core.pipesiterator.fs.FileSystemPipesIterator;
 
 public class ExtractComparerRunner {
 
diff --git a/tika-eval/tika-eval-app/src/main/java/org/apache/tika/eval/app/ExtractProfileRunner.java b/tika-eval/tika-eval-app/src/main/java/org/apache/tika/eval/app/ExtractProfileRunner.java
index e8c955c21..d83d098e5 100644
--- a/tika-eval/tika-eval-app/src/main/java/org/apache/tika/eval/app/ExtractProfileRunner.java
+++ b/tika-eval/tika-eval-app/src/main/java/org/apache/tika/eval/app/ExtractProfileRunner.java
@@ -55,10 +55,10 @@ import org.apache.tika.eval.app.io.DBWriter;
 import org.apache.tika.eval.app.io.ExtractReader;
 import org.apache.tika.eval.app.io.ExtractReaderException;
 import org.apache.tika.eval.app.io.IDBWriter;
-import org.apache.tika.pipes.FetchEmitTuple;
-import org.apache.tika.pipes.pipesiterator.CallablePipesIterator;
-import org.apache.tika.pipes.pipesiterator.PipesIterator;
-import org.apache.tika.pipes.pipesiterator.fs.FileSystemPipesIterator;
+import org.apache.tika.pipes.core.FetchEmitTuple;
+import org.apache.tika.pipes.core.pipesiterator.CallablePipesIterator;
+import org.apache.tika.pipes.core.pipesiterator.PipesIterator;
+import org.apache.tika.pipes.core.pipesiterator.fs.FileSystemPipesIterator;
 
 public class ExtractProfileRunner {
 
diff --git a/tika-eval/tika-eval-app/src/main/java/org/apache/tika/eval/app/ExtractProfiler.java b/tika-eval/tika-eval-app/src/main/java/org/apache/tika/eval/app/ExtractProfiler.java
index a623c97cf..40c4b9cdc 100644
--- a/tika-eval/tika-eval-app/src/main/java/org/apache/tika/eval/app/ExtractProfiler.java
+++ b/tika-eval/tika-eval-app/src/main/java/org/apache/tika/eval/app/ExtractProfiler.java
@@ -34,7 +34,7 @@ import org.apache.tika.eval.app.io.IDBWriter;
 import org.apache.tika.eval.core.util.ContentTags;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.metadata.TikaCoreProperties;
-import org.apache.tika.pipes.fetcher.FetchKey;
+import org.apache.tika.pipes.core.fetcher.FetchKey;
 
 public class ExtractProfiler extends ProfilerBase {
 
diff --git a/tika-eval/tika-eval-app/src/main/java/org/apache/tika/eval/app/ProfilerBase.java b/tika-eval/tika-eval-app/src/main/java/org/apache/tika/eval/app/ProfilerBase.java
index 80ddd1b45..18e30a5e4 100644
--- a/tika-eval/tika-eval-app/src/main/java/org/apache/tika/eval/app/ProfilerBase.java
+++ b/tika-eval/tika-eval-app/src/main/java/org/apache/tika/eval/app/ProfilerBase.java
@@ -71,7 +71,7 @@ import org.apache.tika.metadata.PDF;
 import org.apache.tika.metadata.PagedText;
 import org.apache.tika.metadata.Property;
 import org.apache.tika.metadata.TikaCoreProperties;
-import org.apache.tika.pipes.fetcher.FetchKey;
+import org.apache.tika.pipes.core.fetcher.FetchKey;
 import org.apache.tika.sax.ToXMLContentHandler;
 import org.apache.tika.utils.StringUtils;
 
diff --git a/tika-eval/tika-eval-app/src/main/java/org/apache/tika/eval/app/StatusReporter.java b/tika-eval/tika-eval-app/src/main/java/org/apache/tika/eval/app/StatusReporter.java
index ffc003217..3f81f1775 100644
--- a/tika-eval/tika-eval-app/src/main/java/org/apache/tika/eval/app/StatusReporter.java
+++ b/tika-eval/tika-eval-app/src/main/java/org/apache/tika/eval/app/StatusReporter.java
@@ -25,7 +25,7 @@ import java.util.concurrent.atomic.AtomicInteger;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import org.apache.tika.pipes.pipesiterator.CallablePipesIterator;
+import org.apache.tika.pipes.core.pipesiterator.CallablePipesIterator;
 import org.apache.tika.utils.DurationFormatUtils;
 
 public class StatusReporter implements Callable<Long> {
diff --git a/tika-fuzzing/pom.xml b/tika-fuzzing/pom.xml
index ce0596b7e..cbe98d7bc 100644
--- a/tika-fuzzing/pom.xml
+++ b/tika-fuzzing/pom.xml
@@ -35,7 +35,7 @@
   <dependencies>
     <dependency>
       <groupId>${project.groupId}</groupId>
-      <artifactId>tika-core</artifactId>
+      <artifactId>tika-pipes-core</artifactId>
       <version>${project.version}</version>
       <scope>provided</scope>
     </dependency>
diff --git a/tika-fuzzing/src/main/java/org/apache/tika/fuzzing/cli/FuzzingCLI.java b/tika-fuzzing/src/main/java/org/apache/tika/fuzzing/cli/FuzzingCLI.java
index 088f63ec0..baa0e14a2 100644
--- a/tika-fuzzing/src/main/java/org/apache/tika/fuzzing/cli/FuzzingCLI.java
+++ b/tika-fuzzing/src/main/java/org/apache/tika/fuzzing/cli/FuzzingCLI.java
@@ -46,14 +46,14 @@ import org.apache.tika.fuzzing.general.ByteInjector;
 import org.apache.tika.fuzzing.general.GeneralTransformer;
 import org.apache.tika.fuzzing.general.SpanSwapper;
 import org.apache.tika.fuzzing.general.Truncator;
-import org.apache.tika.pipes.FetchEmitTuple;
-import org.apache.tika.pipes.PipesConfig;
-import org.apache.tika.pipes.PipesParser;
-import org.apache.tika.pipes.PipesResult;
-import org.apache.tika.pipes.emitter.EmitKey;
-import org.apache.tika.pipes.fetcher.FetchKey;
-import org.apache.tika.pipes.fetcher.FetcherManager;
-import org.apache.tika.pipes.pipesiterator.PipesIterator;
+import org.apache.tika.pipes.core.FetchEmitTuple;
+import org.apache.tika.pipes.core.PipesConfig;
+import org.apache.tika.pipes.core.PipesParser;
+import org.apache.tika.pipes.core.PipesResult;
+import org.apache.tika.pipes.core.emitter.EmitKey;
+import org.apache.tika.pipes.core.fetcher.FetchKey;
+import org.apache.tika.pipes.core.fetcher.FetcherManager;
+import org.apache.tika.pipes.core.pipesiterator.PipesIterator;
 
 public class FuzzingCLI {
 
diff --git a/tika-fuzzing/src/test/resources/configs/tika-fuzzing-config.xml b/tika-fuzzing/src/test/resources/configs/tika-fuzzing-config.xml
index 2210ae68e..a57bb7bda 100644
--- a/tika-fuzzing/src/test/resources/configs/tika-fuzzing-config.xml
+++ b/tika-fuzzing/src/test/resources/configs/tika-fuzzing-config.xml
@@ -32,11 +32,11 @@
     </fetcher>
   </fetchers>
   <emitters>
-    <emitter class="org.apache.tika.pipes.emitter.fs.FileSystemEmitter">
+    <emitter class="org.apache.tika.pipes.core.emitter.fs.FileSystemEmitter">
       <name>fse</name>
       <basePath>{FILL_IN_HERE}</basePath>
     </emitter>
-    <emitter class="org.apache.tika.pipes.emitter.fs.FileSystemEmitter">
+    <emitter class="org.apache.tika.pipes.core.emitter.fs.FileSystemEmitter">
       <name>temp</name>
     </emitter>
   </emitters>
diff --git a/tika-grpc/src/main/java/org/apache/tika/pipes/grpc/ExpiringFetcherStore.java b/tika-grpc/src/main/java/org/apache/tika/pipes/grpc/ExpiringFetcherStore.java
index d21f11b08..3dc10f09c 100644
--- a/tika-grpc/src/main/java/org/apache/tika/pipes/grpc/ExpiringFetcherStore.java
+++ b/tika-grpc/src/main/java/org/apache/tika/pipes/grpc/ExpiringFetcherStore.java
@@ -29,8 +29,8 @@ import java.util.concurrent.TimeUnit;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import org.apache.tika.pipes.fetcher.AbstractFetcher;
-import org.apache.tika.pipes.fetcher.config.AbstractConfig;
+import org.apache.tika.pipes.core.fetcher.AbstractFetcher;
+import org.apache.tika.pipes.core.fetcher.config.AbstractConfig;
 
 public class ExpiringFetcherStore implements AutoCloseable {
     private static final Logger LOG = LoggerFactory.getLogger(ExpiringFetcherStore.class);
diff --git a/tika-grpc/src/main/java/org/apache/tika/pipes/grpc/TikaGrpcServerImpl.java b/tika-grpc/src/main/java/org/apache/tika/pipes/grpc/TikaGrpcServerImpl.java
index 63ad8a256..7f06cb681 100644
--- a/tika-grpc/src/main/java/org/apache/tika/pipes/grpc/TikaGrpcServerImpl.java
+++ b/tika-grpc/src/main/java/org/apache/tika/pipes/grpc/TikaGrpcServerImpl.java
@@ -70,15 +70,15 @@ import org.apache.tika.exception.TikaConfigException;
 import org.apache.tika.exception.TikaException;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.parser.ParseContext;
-import org.apache.tika.pipes.FetchEmitTuple;
-import org.apache.tika.pipes.PipesClient;
-import org.apache.tika.pipes.PipesConfig;
-import org.apache.tika.pipes.PipesResult;
-import org.apache.tika.pipes.emitter.EmitKey;
-import org.apache.tika.pipes.fetcher.AbstractFetcher;
-import org.apache.tika.pipes.fetcher.FetchKey;
-import org.apache.tika.pipes.fetcher.config.AbstractConfig;
-import org.apache.tika.pipes.fetcher.config.FetcherConfigContainer;
+import org.apache.tika.pipes.core.FetchEmitTuple;
+import org.apache.tika.pipes.core.PipesClient;
+import org.apache.tika.pipes.core.PipesConfig;
+import org.apache.tika.pipes.core.PipesResult;
+import org.apache.tika.pipes.core.emitter.EmitKey;
+import org.apache.tika.pipes.core.fetcher.AbstractFetcher;
+import org.apache.tika.pipes.core.fetcher.FetchKey;
+import org.apache.tika.pipes.core.fetcher.config.AbstractConfig;
+import org.apache.tika.pipes.core.fetcher.config.FetcherConfigContainer;
 import org.apache.tika.utils.XMLReaderUtils;
 
 class TikaGrpcServerImpl extends TikaGrpc.TikaImplBase {
diff --git a/tika-grpc/src/test/java/org/apache/tika/pipes/grpc/ExpiringFetcherStoreTest.java b/tika-grpc/src/test/java/org/apache/tika/pipes/grpc/ExpiringFetcherStoreTest.java
index 264c366f3..91a8b8a19 100644
--- a/tika-grpc/src/test/java/org/apache/tika/pipes/grpc/ExpiringFetcherStoreTest.java
+++ b/tika-grpc/src/test/java/org/apache/tika/pipes/grpc/ExpiringFetcherStoreTest.java
@@ -27,8 +27,8 @@ import org.junit.jupiter.api.Test;
 
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.parser.ParseContext;
-import org.apache.tika.pipes.fetcher.AbstractFetcher;
-import org.apache.tika.pipes.fetcher.config.AbstractConfig;
+import org.apache.tika.pipes.core.fetcher.AbstractFetcher;
+import org.apache.tika.pipes.core.fetcher.config.AbstractConfig;
 
 class ExpiringFetcherStoreTest {
 
diff --git a/tika-grpc/src/test/java/org/apache/tika/pipes/grpc/TikaGrpcServerTest.java b/tika-grpc/src/test/java/org/apache/tika/pipes/grpc/TikaGrpcServerTest.java
index b5d4c0763..a17ce1634 100644
--- a/tika-grpc/src/test/java/org/apache/tika/pipes/grpc/TikaGrpcServerTest.java
+++ b/tika-grpc/src/test/java/org/apache/tika/pipes/grpc/TikaGrpcServerTest.java
@@ -65,8 +65,8 @@ import org.apache.tika.GetFetcherRequest;
 import org.apache.tika.SaveFetcherReply;
 import org.apache.tika.SaveFetcherRequest;
 import org.apache.tika.TikaGrpc;
-import org.apache.tika.pipes.PipesResult;
-import org.apache.tika.pipes.fetcher.fs.FileSystemFetcher;
+import org.apache.tika.pipes.core.PipesResult;
+import org.apache.tika.pipes.core.fetcher.fs.FileSystemFetcher;
 
 @ExtendWith(GrpcCleanupExtension.class)
 public class TikaGrpcServerTest {
diff --git a/tika-integration-tests/tika-pipes-kafka-integration-tests/src/test/java/org/apache/tika/pipes/kafka/tests/TikaPipesKafkaTest.java b/tika-integration-tests/tika-pipes-kafka-integration-tests/src/test/java/org/apache/tika/pipes/kafka/tests/TikaPipesKafkaTest.java
index 4b6d91ad3..efc8786b0 100644
--- a/tika-integration-tests/tika-pipes-kafka-integration-tests/src/test/java/org/apache/tika/pipes/kafka/tests/TikaPipesKafkaTest.java
+++ b/tika-integration-tests/tika-pipes-kafka-integration-tests/src/test/java/org/apache/tika/pipes/kafka/tests/TikaPipesKafkaTest.java
@@ -62,7 +62,7 @@ import org.testcontainers.shaded.org.apache.commons.io.FileUtils;
 import org.testcontainers.utility.DockerImageName;
 
 import org.apache.tika.cli.TikaCLI;
-import org.apache.tika.pipes.HandlerConfig;
+import org.apache.tika.pipes.core.HandlerConfig;
 import org.apache.tika.utils.SystemUtils;
 
 /**
diff --git a/tika-integration-tests/tika-pipes-kafka-integration-tests/src/test/resources/tika-config-kafka.xml b/tika-integration-tests/tika-pipes-kafka-integration-tests/src/test/resources/tika-config-kafka.xml
index 68d517cbb..02c848c9c 100644
--- a/tika-integration-tests/tika-pipes-kafka-integration-tests/src/test/resources/tika-config-kafka.xml
+++ b/tika-integration-tests/tika-pipes-kafka-integration-tests/src/test/resources/tika-config-kafka.xml
@@ -82,7 +82,7 @@
     </params>
   </async>
   <fetchers>
-    <fetcher class="org.apache.tika.pipes.fetcher.fs.FileSystemFetcher">
+    <fetcher class="org.apache.tika.pipes.core.fetcher.fs.FileSystemFetcher">
       <params>
         <name>fsf</name>
         <basePath>{PATH_TO_DOCS}</basePath>
@@ -97,7 +97,7 @@
         <bootstrapServers>{BOOTSTRAP_SERVERS}</bootstrapServers>
       </params>
     </emitter>
-    <emitter class="org.apache.tika.pipes.emitter.fs.FileSystemEmitter">
+    <emitter class="org.apache.tika.pipes.core.emitter.fs.FileSystemEmitter">
       <params>
         <name>fse</name>
         <basePath>/path/to/extracts</basePath>
diff --git a/tika-integration-tests/tika-pipes-opensearch-integration-tests/src/test/java/org/apache/tika/pipes/opensearch/tests/OpenSearchTest.java b/tika-integration-tests/tika-pipes-opensearch-integration-tests/src/test/java/org/apache/tika/pipes/opensearch/tests/OpenSearchTest.java
index 228778074..b0d882f15 100644
--- a/tika-integration-tests/tika-pipes-opensearch-integration-tests/src/test/java/org/apache/tika/pipes/opensearch/tests/OpenSearchTest.java
+++ b/tika-integration-tests/tika-pipes-opensearch-integration-tests/src/test/java/org/apache/tika/pipes/opensearch/tests/OpenSearchTest.java
@@ -50,15 +50,15 @@ import org.apache.tika.client.HttpClientFactory;
 import org.apache.tika.exception.TikaConfigException;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.parser.ParseContext;
-import org.apache.tika.pipes.HandlerConfig;
-import org.apache.tika.pipes.emitter.Emitter;
-import org.apache.tika.pipes.emitter.EmitterManager;
+import org.apache.tika.pipes.core.HandlerConfig;
+import org.apache.tika.pipes.core.emitter.Emitter;
+import org.apache.tika.pipes.core.emitter.EmitterManager;
 import org.apache.tika.pipes.emitter.opensearch.JsonResponse;
 import org.apache.tika.pipes.emitter.opensearch.OpenSearchEmitter;
 
 @Testcontainers(disabledWithoutDocker = true)
 public class OpenSearchTest {
-    private static DockerImageName OPENSEARCH_IMAGE = DockerImageName.parse("opensearchproject/opensearch:2.17.1");
+    private static DockerImageName OPENSEARCH_IMAGE = DockerImageName.parse("opensearchproject/opensearch:2.19.3");
     private static OpensearchContainer<?> CONTAINER;
 
     protected static final String TEST_INDEX = "tika-pipes-index";
diff --git a/tika-integration-tests/tika-pipes-opensearch-integration-tests/src/test/resources/opensearch/tika-config-opensearch.xml b/tika-integration-tests/tika-pipes-opensearch-integration-tests/src/test/resources/opensearch/tika-config-opensearch.xml
index 9fc820cb7..50b78318a 100644
--- a/tika-integration-tests/tika-pipes-opensearch-integration-tests/src/test/resources/opensearch/tika-config-opensearch.xml
+++ b/tika-integration-tests/tika-pipes-opensearch-integration-tests/src/test/resources/opensearch/tika-config-opensearch.xml
@@ -86,7 +86,7 @@
     </pipesReporter>
   </async>
   <fetchers>
-    <fetcher class="org.apache.tika.pipes.fetcher.fs.FileSystemFetcher">
+    <fetcher class="org.apache.tika.pipes.core.fetcher.fs.FileSystemFetcher">
       <name>fsf</name>
       <basePath>{PATH_TO_DOCS}</basePath>
     </fetcher>
@@ -105,7 +105,7 @@
       <password>{OPENSEARCH_PASSWORD}</password>
     </emitter>
   </emitters>
-  <pipesIterator class="org.apache.tika.pipes.pipesiterator.fs.FileSystemPipesIterator">
+  <pipesIterator class="org.apache.tika.pipes.core.pipesiterator.fs.FileSystemPipesIterator">
     <basePath>{PATH_TO_DOCS}</basePath>
     <fetcherName>fsf</fetcherName>
     <emitterName>ose</emitterName>
diff --git a/tika-integration-tests/tika-pipes-s3-integration-tests/src/test/java/org/apache/tika/pipes/s3/tests/PipeIntegrationTests.java b/tika-integration-tests/tika-pipes-s3-integration-tests/src/test/java/org/apache/tika/pipes/s3/tests/PipeIntegrationTests.java
index b32304d69..e1e6ea78c 100644
--- a/tika-integration-tests/tika-pipes-s3-integration-tests/src/test/java/org/apache/tika/pipes/s3/tests/PipeIntegrationTests.java
+++ b/tika-integration-tests/tika-pipes-s3-integration-tests/src/test/java/org/apache/tika/pipes/s3/tests/PipeIntegrationTests.java
@@ -43,14 +43,14 @@ import org.junit.jupiter.api.Test;
 
 import org.apache.tika.exception.TikaException;
 import org.apache.tika.metadata.Metadata;
-import org.apache.tika.pipes.FetchEmitTuple;
-import org.apache.tika.pipes.emitter.Emitter;
-import org.apache.tika.pipes.emitter.EmitterManager;
+import org.apache.tika.pipes.core.FetchEmitTuple;
+import org.apache.tika.pipes.core.emitter.Emitter;
+import org.apache.tika.pipes.core.emitter.EmitterManager;
+import org.apache.tika.pipes.core.fetcher.Fetcher;
+import org.apache.tika.pipes.core.fetcher.FetcherManager;
+import org.apache.tika.pipes.core.pipesiterator.CallablePipesIterator;
+import org.apache.tika.pipes.core.pipesiterator.PipesIterator;
 import org.apache.tika.pipes.emitter.s3.S3Emitter;
-import org.apache.tika.pipes.fetcher.Fetcher;
-import org.apache.tika.pipes.fetcher.FetcherManager;
-import org.apache.tika.pipes.pipesiterator.CallablePipesIterator;
-import org.apache.tika.pipes.pipesiterator.PipesIterator;
 
 @Disabled("turn these into actual tests with mock s3")
 public class PipeIntegrationTests {
diff --git a/tika-integration-tests/tika-pipes-s3-integration-tests/src/test/java/org/apache/tika/pipes/s3/tests/S3PipeIntegrationTest.java b/tika-integration-tests/tika-pipes-s3-integration-tests/src/test/java/org/apache/tika/pipes/s3/tests/S3PipeIntegrationTest.java
index d03b549ed..c59b0d699 100644
--- a/tika-integration-tests/tika-pipes-s3-integration-tests/src/test/java/org/apache/tika/pipes/s3/tests/S3PipeIntegrationTest.java
+++ b/tika-integration-tests/tika-pipes-s3-integration-tests/src/test/java/org/apache/tika/pipes/s3/tests/S3PipeIntegrationTest.java
@@ -47,7 +47,7 @@ import org.testcontainers.shaded.org.hamcrest.MatcherAssert;
 import org.testcontainers.shaded.org.hamcrest.Matchers;
 
 import org.apache.tika.cli.TikaCLI;
-import org.apache.tika.pipes.HandlerConfig;
+import org.apache.tika.pipes.core.HandlerConfig;
 
 @TestInstance(TestInstance.Lifecycle.PER_CLASS)
 @Testcontainers(disabledWithoutDocker = true)
diff --git a/tika-integration-tests/tika-pipes-solr-integration-tests/src/test/java/org/apache/tika/pipes/solr/tests/TikaPipesSolr9Test.java b/tika-integration-tests/tika-pipes-solr-integration-tests/src/test/java/org/apache/tika/pipes/solr/tests/TikaPipesSolr9Test.java
index f60cdd696..1a6d16595 100644
--- a/tika-integration-tests/tika-pipes-solr-integration-tests/src/test/java/org/apache/tika/pipes/solr/tests/TikaPipesSolr9Test.java
+++ b/tika-integration-tests/tika-pipes-solr-integration-tests/src/test/java/org/apache/tika/pipes/solr/tests/TikaPipesSolr9Test.java
@@ -23,7 +23,7 @@ public class TikaPipesSolr9Test extends TikaPipesSolrTestBase {
 
     @Override
     public String getSolrImageName() {
-        return "solr:9.7.0";
+        return "solr:9.9.0";
     }
 
     @Override
diff --git a/tika-integration-tests/tika-pipes-solr-integration-tests/src/test/java/org/apache/tika/pipes/solr/tests/TikaPipesSolrTestBase.java b/tika-integration-tests/tika-pipes-solr-integration-tests/src/test/java/org/apache/tika/pipes/solr/tests/TikaPipesSolrTestBase.java
index d9d33d6af..6121ee166 100644
--- a/tika-integration-tests/tika-pipes-solr-integration-tests/src/test/java/org/apache/tika/pipes/solr/tests/TikaPipesSolrTestBase.java
+++ b/tika-integration-tests/tika-pipes-solr-integration-tests/src/test/java/org/apache/tika/pipes/solr/tests/TikaPipesSolrTestBase.java
@@ -44,7 +44,7 @@ import org.testcontainers.shaded.org.apache.commons.io.FileUtils;
 import org.testcontainers.utility.DockerImageName;
 
 import org.apache.tika.cli.TikaCLI;
-import org.apache.tika.pipes.HandlerConfig;
+import org.apache.tika.pipes.core.HandlerConfig;
 import org.apache.tika.pipes.emitter.solr.SolrEmitter;
 import org.apache.tika.utils.SystemUtils;
 
diff --git a/tika-integration-tests/tika-pipes-solr-integration-tests/src/test/resources/tika-config-solr-urls.xml b/tika-integration-tests/tika-pipes-solr-integration-tests/src/test/resources/tika-config-solr-urls.xml
index 3345ab487..33b0847a0 100644
--- a/tika-integration-tests/tika-pipes-solr-integration-tests/src/test/resources/tika-config-solr-urls.xml
+++ b/tika-integration-tests/tika-pipes-solr-integration-tests/src/test/resources/tika-config-solr-urls.xml
@@ -78,7 +78,7 @@
     <timeoutMillis>60000</timeoutMillis>
   </async>
   <fetchers>
-    <fetcher class="org.apache.tika.pipes.fetcher.fs.FileSystemFetcher">
+    <fetcher class="org.apache.tika.pipes.core.fetcher.fs.FileSystemFetcher">
       <name>fsf</name>
       <basePath>{PATH_TO_DOCS}</basePath>
     </fetcher>
@@ -95,7 +95,7 @@
       <connectionTimeout>10000</connectionTimeout>
       <socketTimeout>60000</socketTimeout>
     </emitter>
-    <emitter class="org.apache.tika.pipes.emitter.fs.FileSystemEmitter">
+    <emitter class="org.apache.tika.pipes.core.emitter.fs.FileSystemEmitter">
       <name>fse</name>
       <basePath>/path/to/extracts</basePath>
     </emitter>
diff --git a/tika-pipes/pom.xml b/tika-pipes/pom.xml
index ce415b90a..204311932 100644
--- a/tika-pipes/pom.xml
+++ b/tika-pipes/pom.xml
@@ -30,6 +30,7 @@
   <packaging>pom</packaging>
 
   <modules>
+    <module>tika-pipes-core</module>
     <module>tika-httpclient-commons</module>
     <module>tika-fetchers</module>
     <module>tika-emitters</module>
diff --git a/tika-pipes/tika-async-cli/pom.xml b/tika-pipes/tika-async-cli/pom.xml
index eac1667bb..f52489bd9 100644
--- a/tika-pipes/tika-async-cli/pom.xml
+++ b/tika-pipes/tika-async-cli/pom.xml
@@ -34,7 +34,7 @@
   <dependencies>
     <dependency>
       <groupId>${project.groupId}</groupId>
-      <artifactId>tika-core</artifactId>
+      <artifactId>tika-pipes-core</artifactId>
       <version>${project.version}</version>
     </dependency>
     <dependency>
diff --git a/tika-pipes/tika-async-cli/src/main/java/org/apache/tika/async/cli/TikaAsyncCLI.java b/tika-pipes/tika-async-cli/src/main/java/org/apache/tika/async/cli/TikaAsyncCLI.java
index 3f0d6a0e2..769265ed1 100644
--- a/tika-pipes/tika-async-cli/src/main/java/org/apache/tika/async/cli/TikaAsyncCLI.java
+++ b/tika-pipes/tika-async-cli/src/main/java/org/apache/tika/async/cli/TikaAsyncCLI.java
@@ -30,9 +30,9 @@ import org.apache.commons.cli.ParseException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import org.apache.tika.pipes.FetchEmitTuple;
-import org.apache.tika.pipes.async.AsyncProcessor;
-import org.apache.tika.pipes.pipesiterator.PipesIterator;
+import org.apache.tika.pipes.core.FetchEmitTuple;
+import org.apache.tika.pipes.core.async.AsyncProcessor;
+import org.apache.tika.pipes.core.pipesiterator.PipesIterator;
 
 public class TikaAsyncCLI {
 
diff --git a/tika-pipes/tika-async-cli/src/main/java/org/apache/tika/async/cli/TikaConfigAsyncWriter.java b/tika-pipes/tika-async-cli/src/main/java/org/apache/tika/async/cli/TikaConfigAsyncWriter.java
index ddb5ecdb4..d24141023 100644
--- a/tika-pipes/tika-async-cli/src/main/java/org/apache/tika/async/cli/TikaConfigAsyncWriter.java
+++ b/tika-pipes/tika-async-cli/src/main/java/org/apache/tika/async/cli/TikaConfigAsyncWriter.java
@@ -106,7 +106,7 @@ class TikaConfigAsyncWriter {
     private void writeEmitters(Document document, Element properties) {
         Element emitters = createAndGetElement(document, properties, "emitters");
         Element emitter = createAndGetElement( document, emitters, "emitter",
-                "class", "org.apache.tika.pipes.emitter.fs.FileSystemEmitter");
+                "class", "org.apache.tika.pipes.core.emitter.fs.FileSystemEmitter");
         appendTextElement(document, emitter, "name", EMITTER_NAME);
         appendTextElement(document, emitter, "basePath",
                 Paths.get(simpleAsyncConfig.getOutputDir()).toAbsolutePath().toString());
diff --git a/tika-pipes/tika-async-cli/src/test/java/org/apache/tika/async/cli/AsyncProcessorTest.java b/tika-pipes/tika-async-cli/src/test/java/org/apache/tika/async/cli/AsyncProcessorTest.java
index acadeeb7a..482e20ea2 100644
--- a/tika-pipes/tika-async-cli/src/test/java/org/apache/tika/async/cli/AsyncProcessorTest.java
+++ b/tika-pipes/tika-async-cli/src/test/java/org/apache/tika/async/cli/AsyncProcessorTest.java
@@ -36,13 +36,13 @@ 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.pipes.FetchEmitTuple;
-import org.apache.tika.pipes.HandlerConfig;
-import org.apache.tika.pipes.async.AsyncProcessor;
-import org.apache.tika.pipes.emitter.EmitKey;
-import org.apache.tika.pipes.extractor.EmbeddedDocumentBytesConfig;
-import org.apache.tika.pipes.fetcher.FetchKey;
-import org.apache.tika.pipes.pipesiterator.PipesIterator;
+import org.apache.tika.pipes.core.FetchEmitTuple;
+import org.apache.tika.pipes.core.HandlerConfig;
+import org.apache.tika.pipes.core.async.AsyncProcessor;
+import org.apache.tika.pipes.core.emitter.EmitKey;
+import org.apache.tika.pipes.core.extractor.EmbeddedDocumentBytesConfig;
+import org.apache.tika.pipes.core.fetcher.FetchKey;
+import org.apache.tika.pipes.core.pipesiterator.PipesIterator;
 import org.apache.tika.serialization.JsonMetadataList;
 
 /**
diff --git a/tika-pipes/tika-async-cli/src/test/resources/configs/TIKA-4207-emitter.xml b/tika-pipes/tika-async-cli/src/test/resources/configs/TIKA-4207-emitter.xml
index 5391c8496..bb8bfe77f 100644
--- a/tika-pipes/tika-async-cli/src/test/resources/configs/TIKA-4207-emitter.xml
+++ b/tika-pipes/tika-async-cli/src/test/resources/configs/TIKA-4207-emitter.xml
@@ -17,17 +17,17 @@
 -->
 <properties>
   <fetchers>
-    <fetcher class="org.apache.tika.pipes.fetcher.fs.FileSystemFetcher">
+    <fetcher class="org.apache.tika.pipes.core.fetcher.fs.FileSystemFetcher">
       <name>fs</name>
       <basePath>BASE_PATH</basePath>
     </fetcher>
   </fetchers>
   <emitters>
-    <emitter class="org.apache.tika.pipes.emitter.fs.FileSystemEmitter">
+    <emitter class="org.apache.tika.pipes.core.emitter.fs.FileSystemEmitter">
       <name>json</name>
       <basePath>JSON_PATH</basePath>
     </emitter>
-    <emitter class="org.apache.tika.pipes.emitter.fs.FileSystemEmitter">
+    <emitter class="org.apache.tika.pipes.core.emitter.fs.FileSystemEmitter">
       <name>bytes</name>
       <basePath>BYTES_PATH</basePath>
     </emitter>
diff --git a/tika-pipes/tika-emitters/pom.xml b/tika-pipes/tika-emitters/pom.xml
index 3991d43f6..b63c797e1 100644
--- a/tika-pipes/tika-emitters/pom.xml
+++ b/tika-pipes/tika-emitters/pom.xml
@@ -32,7 +32,6 @@
   <packaging>pom</packaging>
 
   <modules>
-    <module>tika-emitter-fs</module>
     <module>tika-emitter-s3</module>
     <module>tika-emitter-kafka</module>
     <module>tika-emitter-solr</module>
diff --git a/tika-pipes/tika-emitters/tika-emitter-az-blob/pom.xml b/tika-pipes/tika-emitters/tika-emitter-az-blob/pom.xml
index 25efc3279..5b3e1eb05 100644
--- a/tika-pipes/tika-emitters/tika-emitter-az-blob/pom.xml
+++ b/tika-pipes/tika-emitters/tika-emitter-az-blob/pom.xml
@@ -39,7 +39,7 @@
     </dependency>
     <dependency>
       <groupId>${project.groupId}</groupId>
-      <artifactId>tika-core</artifactId>
+      <artifactId>tika-pipes-core</artifactId>
       <version>${project.version}</version>
       <scope>provided</scope>
     </dependency>
diff --git a/tika-pipes/tika-emitters/tika-emitter-az-blob/src/main/java/org/apache/tika/pipes/emitter/azblob/AZBlobEmitter.java b/tika-pipes/tika-emitters/tika-emitter-az-blob/src/main/java/org/apache/tika/pipes/emitter/azblob/AZBlobEmitter.java
index 4d22ff83b..a4e81f2cc 100644
--- a/tika-pipes/tika-emitters/tika-emitter-az-blob/src/main/java/org/apache/tika/pipes/emitter/azblob/AZBlobEmitter.java
+++ b/tika-pipes/tika-emitters/tika-emitter-az-blob/src/main/java/org/apache/tika/pipes/emitter/azblob/AZBlobEmitter.java
@@ -47,9 +47,9 @@ import org.apache.tika.io.TikaInputStream;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.metadata.TikaCoreProperties;
 import org.apache.tika.parser.ParseContext;
-import org.apache.tika.pipes.emitter.AbstractEmitter;
-import org.apache.tika.pipes.emitter.StreamEmitter;
-import org.apache.tika.pipes.emitter.TikaEmitterException;
+import org.apache.tika.pipes.core.emitter.AbstractEmitter;
+import org.apache.tika.pipes.core.emitter.StreamEmitter;
+import org.apache.tika.pipes.core.emitter.TikaEmitterException;
 import org.apache.tika.serialization.JsonMetadataList;
 import org.apache.tika.utils.StringUtils;
 
diff --git a/tika-pipes/tika-emitters/tika-emitter-az-blob/src/test/java/org/apache/tika/pipes/emitter/azblob/TestAZBlobEmitter.java b/tika-pipes/tika-emitters/tika-emitter-az-blob/src/test/java/org/apache/tika/pipes/emitter/azblob/TestAZBlobEmitter.java
index 803513e37..bed2367a0 100644
--- a/tika-pipes/tika-emitters/tika-emitter-az-blob/src/test/java/org/apache/tika/pipes/emitter/azblob/TestAZBlobEmitter.java
+++ b/tika-pipes/tika-emitters/tika-emitter-az-blob/src/test/java/org/apache/tika/pipes/emitter/azblob/TestAZBlobEmitter.java
@@ -27,8 +27,8 @@ import org.junit.jupiter.api.Test;
 
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.parser.ParseContext;
-import org.apache.tika.pipes.emitter.Emitter;
-import org.apache.tika.pipes.emitter.EmitterManager;
+import org.apache.tika.pipes.core.emitter.Emitter;
+import org.apache.tika.pipes.core.emitter.EmitterManager;
 
 @Disabled("turn into an actual test")
 public class TestAZBlobEmitter {
diff --git a/tika-pipes/tika-emitters/tika-emitter-fs/pom.xml b/tika-pipes/tika-emitters/tika-emitter-fs/pom.xml
deleted file mode 100644
index df6ed2262..000000000
--- a/tika-pipes/tika-emitters/tika-emitter-fs/pom.xml
+++ /dev/null
@@ -1,109 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing,
-  software distributed under the License is distributed on an
-  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-  KIND, either express or implied.  See the License for the
-  specific language governing permissions and limitations
-  under the License.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <parent>
-    <artifactId>tika-emitters</artifactId>
-    <groupId>org.apache.tika</groupId>
-    <version>4.0.0-SNAPSHOT</version>
-  </parent>
-  <modelVersion>4.0.0</modelVersion>
-
-  <artifactId>tika-emitter-fs</artifactId>
-  <name>Apache Tika filesystem emitter</name>
-
-  <dependencies>
-    <dependency>
-      <groupId>${project.groupId}</groupId>
-      <artifactId>tika-core</artifactId>
-      <version>${project.version}</version>
-      <scope>provided</scope>
-    </dependency>
-    <!-- should serialization be provided or bundled? -->
-    <dependency>
-      <groupId>${project.groupId}</groupId>
-      <artifactId>tika-serialization</artifactId>
-      <version>${project.version}</version>
-      <scope>provided</scope>
-    </dependency>
-  </dependencies>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-jar-plugin</artifactId>
-        <configuration>
-          <archive>
-            <manifestEntries>
-              <Automatic-Module-Name>org.apache.tika.pipes.emitter.fs</Automatic-Module-Name>
-            </manifestEntries>
-          </archive>
-        </configuration>
-      </plugin>
-      <plugin>
-        <artifactId>maven-shade-plugin</artifactId>
-        <version>${maven.shade.version}</version>
-        <executions>
-          <execution>
-            <phase>package</phase>
-            <goals>
-              <goal>shade</goal>
-            </goals>
-            <configuration>
-              <createDependencyReducedPom>
-                false
-              </createDependencyReducedPom>
-              <!-- <filters> -->
-              <filters>
-                <filter>
-                  <artifact>*:*</artifact>
-                  <excludes>
-                    <exclude>META-INF/*</exclude>
-                    <exclude>LICENSE.txt</exclude>
-                    <exclude>NOTICE.txt</exclude>
-                  </excludes>
-                </filter>
-              </filters>
-              <transformers>
-                <transformer implementation="org.apache.maven.plugins.shade.resource.IncludeResourceTransformer">
-                  <resource>META-INF/LICENSE</resource>
-                  <file>target/classes/META-INF/LICENSE</file>
-                </transformer>
-                <transformer implementation="org.apache.maven.plugins.shade.resource.IncludeResourceTransformer">
-                  <resource>META-INF/NOTICE</resource>
-                  <file>target/classes/META-INF/NOTICE</file>
-                </transformer>
-                <transformer implementation="org.apache.maven.plugins.shade.resource.IncludeResourceTransformer">
-                  <resource>META-INF/DEPENDENCIES</resource>
-                  <file>target/classes/META-INF/DEPENDENCIES</file>
-                </transformer>
-              </transformers>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-
-    </plugins>
-  </build>
-
-  <scm>
-    <tag>3.0.0-rc1</tag>
-  </scm>
-</project>
\ No newline at end of file
diff --git a/tika-pipes/tika-emitters/tika-emitter-gcs/pom.xml b/tika-pipes/tika-emitters/tika-emitter-gcs/pom.xml
index 473c4d709..afdba7ace 100644
--- a/tika-pipes/tika-emitters/tika-emitter-gcs/pom.xml
+++ b/tika-pipes/tika-emitters/tika-emitter-gcs/pom.xml
@@ -39,7 +39,7 @@
     </dependency>
     <dependency>
       <groupId>${project.groupId}</groupId>
-      <artifactId>tika-core</artifactId>
+      <artifactId>tika-pipes-core</artifactId>
       <version>${project.version}</version>
       <scope>provided</scope>
     </dependency>
diff --git a/tika-pipes/tika-emitters/tika-emitter-gcs/src/main/java/org/apache/tika/pipes/emitter/gcs/GCSEmitter.java b/tika-pipes/tika-emitters/tika-emitter-gcs/src/main/java/org/apache/tika/pipes/emitter/gcs/GCSEmitter.java
index 02a42b696..fd0f0ce7c 100644
--- a/tika-pipes/tika-emitters/tika-emitter-gcs/src/main/java/org/apache/tika/pipes/emitter/gcs/GCSEmitter.java
+++ b/tika-pipes/tika-emitters/tika-emitter-gcs/src/main/java/org/apache/tika/pipes/emitter/gcs/GCSEmitter.java
@@ -46,9 +46,9 @@ import org.apache.tika.io.TikaInputStream;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.metadata.TikaCoreProperties;
 import org.apache.tika.parser.ParseContext;
-import org.apache.tika.pipes.emitter.AbstractEmitter;
-import org.apache.tika.pipes.emitter.StreamEmitter;
-import org.apache.tika.pipes.emitter.TikaEmitterException;
+import org.apache.tika.pipes.core.emitter.AbstractEmitter;
+import org.apache.tika.pipes.core.emitter.StreamEmitter;
+import org.apache.tika.pipes.core.emitter.TikaEmitterException;
 import org.apache.tika.serialization.JsonMetadataList;
 import org.apache.tika.utils.StringUtils;
 
diff --git a/tika-pipes/tika-emitters/tika-emitter-gcs/src/test/java/org/apache/tika/pipes/emitter/gcs/TestGCSEmitter.java b/tika-pipes/tika-emitters/tika-emitter-gcs/src/test/java/org/apache/tika/pipes/emitter/gcs/TestGCSEmitter.java
index 1f288bf27..23c42aa0f 100644
--- a/tika-pipes/tika-emitters/tika-emitter-gcs/src/test/java/org/apache/tika/pipes/emitter/gcs/TestGCSEmitter.java
+++ b/tika-pipes/tika-emitters/tika-emitter-gcs/src/test/java/org/apache/tika/pipes/emitter/gcs/TestGCSEmitter.java
@@ -27,8 +27,8 @@ import org.junit.jupiter.api.Test;
 
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.parser.ParseContext;
-import org.apache.tika.pipes.emitter.Emitter;
-import org.apache.tika.pipes.emitter.EmitterManager;
+import org.apache.tika.pipes.core.emitter.Emitter;
+import org.apache.tika.pipes.core.emitter.EmitterManager;
 
 @Disabled("turn into an actual test")
 public class TestGCSEmitter {
diff --git a/tika-pipes/tika-emitters/tika-emitter-jdbc/pom.xml b/tika-pipes/tika-emitters/tika-emitter-jdbc/pom.xml
index 062cdab1c..6698b624d 100644
--- a/tika-pipes/tika-emitters/tika-emitter-jdbc/pom.xml
+++ b/tika-pipes/tika-emitters/tika-emitter-jdbc/pom.xml
@@ -31,7 +31,7 @@
   <dependencies>
     <dependency>
       <groupId>${project.groupId}</groupId>
-      <artifactId>tika-core</artifactId>
+      <artifactId>tika-pipes-core</artifactId>
       <version>${project.version}</version>
       <scope>provided</scope>
     </dependency>
diff --git a/tika-pipes/tika-emitters/tika-emitter-jdbc/src/main/java/org/apache/tika/pipes/emitter/jdbc/JDBCEmitter.java b/tika-pipes/tika-emitters/tika-emitter-jdbc/src/main/java/org/apache/tika/pipes/emitter/jdbc/JDBCEmitter.java
index 7349dd921..ced0a92ff 100644
--- a/tika-pipes/tika-emitters/tika-emitter-jdbc/src/main/java/org/apache/tika/pipes/emitter/jdbc/JDBCEmitter.java
+++ b/tika-pipes/tika-emitters/tika-emitter-jdbc/src/main/java/org/apache/tika/pipes/emitter/jdbc/JDBCEmitter.java
@@ -51,10 +51,10 @@ import org.apache.tika.config.Param;
 import org.apache.tika.exception.TikaConfigException;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.parser.ParseContext;
-import org.apache.tika.pipes.emitter.AbstractEmitter;
-import org.apache.tika.pipes.emitter.EmitData;
-import org.apache.tika.pipes.emitter.EmitKey;
-import org.apache.tika.pipes.emitter.TikaEmitterException;
+import org.apache.tika.pipes.core.emitter.AbstractEmitter;
+import org.apache.tika.pipes.core.emitter.EmitData;
+import org.apache.tika.pipes.core.emitter.EmitKey;
+import org.apache.tika.pipes.core.emitter.TikaEmitterException;
 import org.apache.tika.utils.StringUtils;
 
 /**
diff --git a/tika-pipes/tika-emitters/tika-emitter-jdbc/src/test/java/org/apache/tika/pipes/emitter/jdbc/JDBCEmitterTest.java b/tika-pipes/tika-emitters/tika-emitter-jdbc/src/test/java/org/apache/tika/pipes/emitter/jdbc/JDBCEmitterTest.java
index 03a8472d5..448484197 100644
--- a/tika-pipes/tika-emitters/tika-emitter-jdbc/src/test/java/org/apache/tika/pipes/emitter/jdbc/JDBCEmitterTest.java
+++ b/tika-pipes/tika-emitters/tika-emitter-jdbc/src/test/java/org/apache/tika/pipes/emitter/jdbc/JDBCEmitterTest.java
@@ -41,8 +41,8 @@ import org.junit.jupiter.api.io.TempDir;
 
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.parser.ParseContext;
-import org.apache.tika.pipes.emitter.Emitter;
-import org.apache.tika.pipes.emitter.EmitterManager;
+import org.apache.tika.pipes.core.emitter.Emitter;
+import org.apache.tika.pipes.core.emitter.EmitterManager;
 
 public class JDBCEmitterTest {
 
diff --git a/tika-pipes/tika-emitters/tika-emitter-kafka/pom.xml b/tika-pipes/tika-emitters/tika-emitter-kafka/pom.xml
index 7037e6668..dd7b2d2de 100644
--- a/tika-pipes/tika-emitters/tika-emitter-kafka/pom.xml
+++ b/tika-pipes/tika-emitters/tika-emitter-kafka/pom.xml
@@ -30,16 +30,9 @@
 
 
   <dependencies>
-    <!-- should serialization be provided or bundled? -->
     <dependency>
       <groupId>${project.groupId}</groupId>
-      <artifactId>tika-serialization</artifactId>
-      <version>${project.version}</version>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>${project.groupId}</groupId>
-      <artifactId>tika-core</artifactId>
+      <artifactId>tika-pipes-core</artifactId>
       <version>${project.version}</version>
       <scope>provided</scope>
     </dependency>
diff --git a/tika-pipes/tika-emitters/tika-emitter-kafka/src/main/java/org/apache/tika/pipes/emitter/kafka/KafkaEmitter.java b/tika-pipes/tika-emitters/tika-emitter-kafka/src/main/java/org/apache/tika/pipes/emitter/kafka/KafkaEmitter.java
index 7dd8f90ad..cc7f4ea67 100644
--- a/tika-pipes/tika-emitters/tika-emitter-kafka/src/main/java/org/apache/tika/pipes/emitter/kafka/KafkaEmitter.java
+++ b/tika-pipes/tika-emitters/tika-emitter-kafka/src/main/java/org/apache/tika/pipes/emitter/kafka/KafkaEmitter.java
@@ -40,8 +40,8 @@ import org.apache.tika.config.Param;
 import org.apache.tika.exception.TikaConfigException;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.parser.ParseContext;
-import org.apache.tika.pipes.emitter.AbstractEmitter;
-import org.apache.tika.pipes.emitter.TikaEmitterException;
+import org.apache.tika.pipes.core.emitter.AbstractEmitter;
+import org.apache.tika.pipes.core.emitter.TikaEmitterException;
 
 /**
  * Emits the now-parsed documents into a specified Apache Kafka topic.
diff --git a/tika-pipes/tika-emitters/tika-emitter-opensearch/pom.xml b/tika-pipes/tika-emitters/tika-emitter-opensearch/pom.xml
index fb8a13102..7853eceb9 100644
--- a/tika-pipes/tika-emitters/tika-emitter-opensearch/pom.xml
+++ b/tika-pipes/tika-emitters/tika-emitter-opensearch/pom.xml
@@ -31,7 +31,7 @@
   <dependencies>
     <dependency>
       <groupId>${project.groupId}</groupId>
-      <artifactId>tika-core</artifactId>
+      <artifactId>tika-pipes-core</artifactId>
       <version>${project.version}</version>
       <scope>provided</scope>
     </dependency>
diff --git a/tika-pipes/tika-emitters/tika-emitter-opensearch/src/main/java/org/apache/tika/pipes/emitter/opensearch/OpenSearchClient.java b/tika-pipes/tika-emitters/tika-emitter-opensearch/src/main/java/org/apache/tika/pipes/emitter/opensearch/OpenSearchClient.java
index d9e5c3342..d26ac46e0 100644
--- a/tika-pipes/tika-emitters/tika-emitter-opensearch/src/main/java/org/apache/tika/pipes/emitter/opensearch/OpenSearchClient.java
+++ b/tika-pipes/tika-emitters/tika-emitter-opensearch/src/main/java/org/apache/tika/pipes/emitter/opensearch/OpenSearchClient.java
@@ -40,7 +40,7 @@ import org.slf4j.LoggerFactory;
 
 import org.apache.tika.client.TikaClientException;
 import org.apache.tika.metadata.Metadata;
-import org.apache.tika.pipes.emitter.EmitData;
+import org.apache.tika.pipes.core.emitter.EmitData;
 import org.apache.tika.utils.StringUtils;
 
 public class OpenSearchClient {
diff --git a/tika-pipes/tika-emitters/tika-emitter-opensearch/src/main/java/org/apache/tika/pipes/emitter/opensearch/OpenSearchEmitter.java b/tika-pipes/tika-emitters/tika-emitter-opensearch/src/main/java/org/apache/tika/pipes/emitter/opensearch/OpenSearchEmitter.java
index 397dbda8e..3b8c21b8d 100644
--- a/tika-pipes/tika-emitters/tika-emitter-opensearch/src/main/java/org/apache/tika/pipes/emitter/opensearch/OpenSearchEmitter.java
+++ b/tika-pipes/tika-emitters/tika-emitter-opensearch/src/main/java/org/apache/tika/pipes/emitter/opensearch/OpenSearchEmitter.java
@@ -35,9 +35,9 @@ import org.apache.tika.config.Param;
 import org.apache.tika.exception.TikaConfigException;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.parser.ParseContext;
-import org.apache.tika.pipes.emitter.AbstractEmitter;
-import org.apache.tika.pipes.emitter.EmitData;
-import org.apache.tika.pipes.emitter.TikaEmitterException;
+import org.apache.tika.pipes.core.emitter.AbstractEmitter;
+import org.apache.tika.pipes.core.emitter.EmitData;
+import org.apache.tika.pipes.core.emitter.TikaEmitterException;
 import org.apache.tika.utils.StringUtils;
 
 
diff --git a/tika-pipes/tika-emitters/tika-emitter-s3/pom.xml b/tika-pipes/tika-emitters/tika-emitter-s3/pom.xml
index 247d1d7ad..b48a8c302 100644
--- a/tika-pipes/tika-emitters/tika-emitter-s3/pom.xml
+++ b/tika-pipes/tika-emitters/tika-emitter-s3/pom.xml
@@ -30,16 +30,9 @@
 
 
   <dependencies>
-    <!-- should serialization be provided or bundled? -->
     <dependency>
       <groupId>${project.groupId}</groupId>
-      <artifactId>tika-serialization</artifactId>
-      <version>${project.version}</version>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>${project.groupId}</groupId>
-      <artifactId>tika-core</artifactId>
+      <artifactId>tika-pipes-core</artifactId>
       <version>${project.version}</version>
       <scope>provided</scope>
     </dependency>
diff --git a/tika-pipes/tika-emitters/tika-emitter-s3/src/main/java/org/apache/tika/pipes/emitter/s3/S3Emitter.java b/tika-pipes/tika-emitters/tika-emitter-s3/src/main/java/org/apache/tika/pipes/emitter/s3/S3Emitter.java
index 7f5537356..c454c6c6a 100644
--- a/tika-pipes/tika-emitters/tika-emitter-s3/src/main/java/org/apache/tika/pipes/emitter/s3/S3Emitter.java
+++ b/tika-pipes/tika-emitters/tika-emitter-s3/src/main/java/org/apache/tika/pipes/emitter/s3/S3Emitter.java
@@ -57,9 +57,9 @@ import org.apache.tika.io.TikaInputStream;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.metadata.TikaCoreProperties;
 import org.apache.tika.parser.ParseContext;
-import org.apache.tika.pipes.emitter.AbstractEmitter;
-import org.apache.tika.pipes.emitter.StreamEmitter;
-import org.apache.tika.pipes.emitter.TikaEmitterException;
+import org.apache.tika.pipes.core.emitter.AbstractEmitter;
+import org.apache.tika.pipes.core.emitter.StreamEmitter;
+import org.apache.tika.pipes.core.emitter.TikaEmitterException;
 import org.apache.tika.serialization.JsonMetadataList;
 import org.apache.tika.utils.StringUtils;
 
diff --git a/tika-pipes/tika-emitters/tika-emitter-solr/pom.xml b/tika-pipes/tika-emitters/tika-emitter-solr/pom.xml
index b9a720663..b74dd0a67 100644
--- a/tika-pipes/tika-emitters/tika-emitter-solr/pom.xml
+++ b/tika-pipes/tika-emitters/tika-emitter-solr/pom.xml
@@ -31,7 +31,7 @@
   <dependencies>
     <dependency>
       <groupId>${project.groupId}</groupId>
-      <artifactId>tika-core</artifactId>
+      <artifactId>tika-pipes-core</artifactId>
       <version>${project.version}</version>
       <scope>provided</scope>
     </dependency>
diff --git a/tika-pipes/tika-emitters/tika-emitter-solr/src/main/java/org/apache/tika/pipes/emitter/solr/SolrEmitter.java b/tika-pipes/tika-emitters/tika-emitter-solr/src/main/java/org/apache/tika/pipes/emitter/solr/SolrEmitter.java
index 4b17ee64f..7f46304d5 100644
--- a/tika-pipes/tika-emitters/tika-emitter-solr/src/main/java/org/apache/tika/pipes/emitter/solr/SolrEmitter.java
+++ b/tika-pipes/tika-emitters/tika-emitter-solr/src/main/java/org/apache/tika/pipes/emitter/solr/SolrEmitter.java
@@ -45,9 +45,9 @@ import org.apache.tika.config.Param;
 import org.apache.tika.exception.TikaConfigException;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.parser.ParseContext;
-import org.apache.tika.pipes.emitter.AbstractEmitter;
-import org.apache.tika.pipes.emitter.EmitData;
-import org.apache.tika.pipes.emitter.TikaEmitterException;
+import org.apache.tika.pipes.core.emitter.AbstractEmitter;
+import org.apache.tika.pipes.core.emitter.EmitData;
+import org.apache.tika.pipes.core.emitter.TikaEmitterException;
 import org.apache.tika.utils.StringUtils;
 
 
diff --git a/tika-pipes/tika-fetchers/tika-fetcher-az-blob/pom.xml b/tika-pipes/tika-fetchers/tika-fetcher-az-blob/pom.xml
index 8d0951d7d..2fd9153e3 100644
--- a/tika-pipes/tika-fetchers/tika-fetcher-az-blob/pom.xml
+++ b/tika-pipes/tika-fetchers/tika-fetcher-az-blob/pom.xml
@@ -31,7 +31,7 @@
     <dependencies>
         <dependency>
             <groupId>${project.groupId}</groupId>
-            <artifactId>tika-core</artifactId>
+            <artifactId>tika-pipes-core</artifactId>
             <version>${project.version}</version>
             <scope>provided</scope>
         </dependency>
diff --git a/tika-pipes/tika-fetchers/tika-fetcher-az-blob/src/main/java/org/apache/tika/pipes/fetcher/azblob/AZBlobFetcher.java b/tika-pipes/tika-fetchers/tika-fetcher-az-blob/src/main/java/org/apache/tika/pipes/fetcher/azblob/AZBlobFetcher.java
index 0dc05a2d5..62f082b7f 100644
--- a/tika-pipes/tika-fetchers/tika-fetcher-az-blob/src/main/java/org/apache/tika/pipes/fetcher/azblob/AZBlobFetcher.java
+++ b/tika-pipes/tika-fetchers/tika-fetcher-az-blob/src/main/java/org/apache/tika/pipes/fetcher/azblob/AZBlobFetcher.java
@@ -42,7 +42,7 @@ import org.apache.tika.io.TemporaryResources;
 import org.apache.tika.io.TikaInputStream;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.parser.ParseContext;
-import org.apache.tika.pipes.fetcher.AbstractFetcher;
+import org.apache.tika.pipes.core.fetcher.AbstractFetcher;
 import org.apache.tika.pipes.fetcher.azblob.config.AZBlobFetcherConfig;
 import org.apache.tika.utils.StringUtils;
 
diff --git a/tika-pipes/tika-fetchers/tika-fetcher-az-blob/src/main/java/org/apache/tika/pipes/fetcher/azblob/config/AZBlobFetcherConfig.java b/tika-pipes/tika-fetchers/tika-fetcher-az-blob/src/main/java/org/apache/tika/pipes/fetcher/azblob/config/AZBlobFetcherConfig.java
index 2bfe61fa7..e29e62319 100644
--- a/tika-pipes/tika-fetchers/tika-fetcher-az-blob/src/main/java/org/apache/tika/pipes/fetcher/azblob/config/AZBlobFetcherConfig.java
+++ b/tika-pipes/tika-fetchers/tika-fetcher-az-blob/src/main/java/org/apache/tika/pipes/fetcher/azblob/config/AZBlobFetcherConfig.java
@@ -16,7 +16,7 @@
  */
 package org.apache.tika.pipes.fetcher.azblob.config;
 
-import org.apache.tika.pipes.fetcher.config.AbstractConfig;
+import org.apache.tika.pipes.core.fetcher.config.AbstractConfig;
 
 public class AZBlobFetcherConfig extends AbstractConfig {
     private boolean spoolToTemp;
diff --git a/tika-pipes/tika-fetchers/tika-fetcher-az-blob/src/test/java/org/apache/tika/pipes/fetcher/azblob/TestAZBlobFetcher.java b/tika-pipes/tika-fetchers/tika-fetcher-az-blob/src/test/java/org/apache/tika/pipes/fetcher/azblob/TestAZBlobFetcher.java
index 1ba2cfdcd..bbfc63c65 100644
--- a/tika-pipes/tika-fetchers/tika-fetcher-az-blob/src/test/java/org/apache/tika/pipes/fetcher/azblob/TestAZBlobFetcher.java
+++ b/tika-pipes/tika-fetchers/tika-fetcher-az-blob/src/test/java/org/apache/tika/pipes/fetcher/azblob/TestAZBlobFetcher.java
@@ -30,8 +30,8 @@ import org.junit.jupiter.api.Test;
 import org.apache.tika.TikaTest;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.parser.ParseContext;
-import org.apache.tika.pipes.fetcher.Fetcher;
-import org.apache.tika.pipes.fetcher.FetcherManager;
+import org.apache.tika.pipes.core.fetcher.Fetcher;
+import org.apache.tika.pipes.core.fetcher.FetcherManager;
 import org.apache.tika.serialization.JsonMetadataList;
 
 @Disabled("write actual unit tests")
diff --git a/tika-pipes/tika-fetchers/tika-fetcher-gcs/pom.xml b/tika-pipes/tika-fetchers/tika-fetcher-gcs/pom.xml
index cc556a8c5..cbf4555e3 100644
--- a/tika-pipes/tika-fetchers/tika-fetcher-gcs/pom.xml
+++ b/tika-pipes/tika-fetchers/tika-fetcher-gcs/pom.xml
@@ -31,7 +31,7 @@
     <dependencies>
         <dependency>
             <groupId>${project.groupId}</groupId>
-            <artifactId>tika-core</artifactId>
+            <artifactId>tika-pipes-core</artifactId>
             <version>${project.version}</version>
             <scope>provided</scope>
         </dependency>
diff --git a/tika-pipes/tika-fetchers/tika-fetcher-gcs/src/main/java/org/apache/tika/pipes/fetcher/gcs/GCSFetcher.java b/tika-pipes/tika-fetchers/tika-fetcher-gcs/src/main/java/org/apache/tika/pipes/fetcher/gcs/GCSFetcher.java
index 75f89527e..42e7cf486 100644
--- a/tika-pipes/tika-fetchers/tika-fetcher-gcs/src/main/java/org/apache/tika/pipes/fetcher/gcs/GCSFetcher.java
+++ b/tika-pipes/tika-fetchers/tika-fetcher-gcs/src/main/java/org/apache/tika/pipes/fetcher/gcs/GCSFetcher.java
@@ -40,7 +40,7 @@ import org.apache.tika.io.TemporaryResources;
 import org.apache.tika.io.TikaInputStream;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.parser.ParseContext;
-import org.apache.tika.pipes.fetcher.AbstractFetcher;
+import org.apache.tika.pipes.core.fetcher.AbstractFetcher;
 import org.apache.tika.pipes.fetcher.gcs.config.GCSFetcherConfig;
 
 /**
diff --git a/tika-pipes/tika-fetchers/tika-fetcher-gcs/src/main/java/org/apache/tika/pipes/fetcher/gcs/config/GCSFetcherConfig.java b/tika-pipes/tika-fetchers/tika-fetcher-gcs/src/main/java/org/apache/tika/pipes/fetcher/gcs/config/GCSFetcherConfig.java
index a8dad6417..6a808f1ec 100644
--- a/tika-pipes/tika-fetchers/tika-fetcher-gcs/src/main/java/org/apache/tika/pipes/fetcher/gcs/config/GCSFetcherConfig.java
+++ b/tika-pipes/tika-fetchers/tika-fetcher-gcs/src/main/java/org/apache/tika/pipes/fetcher/gcs/config/GCSFetcherConfig.java
@@ -16,7 +16,7 @@
  */
 package org.apache.tika.pipes.fetcher.gcs.config;
 
-import org.apache.tika.pipes.fetcher.config.AbstractConfig;
+import org.apache.tika.pipes.core.fetcher.config.AbstractConfig;
 
 public class GCSFetcherConfig extends AbstractConfig {
     private boolean spoolToTemp;
diff --git a/tika-pipes/tika-fetchers/tika-fetcher-gcs/src/test/java/org/apache/tika/pipes/fetcher/s3/TestGCSFetcher.java b/tika-pipes/tika-fetchers/tika-fetcher-gcs/src/test/java/org/apache/tika/pipes/fetcher/s3/TestGCSFetcher.java
index e68552050..3844337f3 100644
--- a/tika-pipes/tika-fetchers/tika-fetcher-gcs/src/test/java/org/apache/tika/pipes/fetcher/s3/TestGCSFetcher.java
+++ b/tika-pipes/tika-fetchers/tika-fetcher-gcs/src/test/java/org/apache/tika/pipes/fetcher/s3/TestGCSFetcher.java
@@ -31,8 +31,8 @@ import org.junit.jupiter.api.io.TempDir;
 
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.parser.ParseContext;
-import org.apache.tika.pipes.fetcher.Fetcher;
-import org.apache.tika.pipes.fetcher.FetcherManager;
+import org.apache.tika.pipes.core.fetcher.Fetcher;
+import org.apache.tika.pipes.core.fetcher.FetcherManager;
 
 @Disabled("write actual unit tests")
 public class TestGCSFetcher {
diff --git a/tika-pipes/tika-fetchers/tika-fetcher-http/pom.xml b/tika-pipes/tika-fetchers/tika-fetcher-http/pom.xml
index 5cae41d64..00c27fc18 100644
--- a/tika-pipes/tika-fetchers/tika-fetcher-http/pom.xml
+++ b/tika-pipes/tika-fetchers/tika-fetcher-http/pom.xml
@@ -36,7 +36,7 @@
     </dependency>
     <dependency>
       <groupId>${project.groupId}</groupId>
-      <artifactId>tika-core</artifactId>
+      <artifactId>tika-pipes-core</artifactId>
       <version>${project.version}</version>
       <scope>provided</scope>
     </dependency>
diff --git a/tika-pipes/tika-fetchers/tika-fetcher-http/src/main/java/org/apache/tika/pipes/fetcher/http/HttpFetcher.java b/tika-pipes/tika-fetchers/tika-fetcher-http/src/main/java/org/apache/tika/pipes/fetcher/http/HttpFetcher.java
index 893e6c77b..ee1953cb7 100644
--- a/tika-pipes/tika-fetchers/tika-fetcher-http/src/main/java/org/apache/tika/pipes/fetcher/http/HttpFetcher.java
+++ b/tika-pipes/tika-fetchers/tika-fetcher-http/src/main/java/org/apache/tika/pipes/fetcher/http/HttpFetcher.java
@@ -75,9 +75,9 @@ import org.apache.tika.metadata.Metadata;
 import org.apache.tika.metadata.Property;
 import org.apache.tika.metadata.TikaCoreProperties;
 import org.apache.tika.parser.ParseContext;
-import org.apache.tika.pipes.fetcher.AbstractFetcher;
-import org.apache.tika.pipes.fetcher.RangeFetcher;
-import org.apache.tika.pipes.fetcher.config.FetcherConfigContainer;
+import org.apache.tika.pipes.core.fetcher.AbstractFetcher;
+import org.apache.tika.pipes.core.fetcher.RangeFetcher;
+import org.apache.tika.pipes.core.fetcher.config.FetcherConfigContainer;
 import org.apache.tika.pipes.fetcher.http.config.HttpFetcherConfig;
 import org.apache.tika.pipes.fetcher.http.config.HttpHeaders;
 import org.apache.tika.pipes.fetcher.http.jwt.JwtGenerator;
diff --git a/tika-pipes/tika-fetchers/tika-fetcher-http/src/main/java/org/apache/tika/pipes/fetcher/http/config/HttpFetcherConfig.java b/tika-pipes/tika-fetchers/tika-fetcher-http/src/main/java/org/apache/tika/pipes/fetcher/http/config/HttpFetcherConfig.java
index 5274a65f9..61d768e9c 100644
--- a/tika-pipes/tika-fetchers/tika-fetcher-http/src/main/java/org/apache/tika/pipes/fetcher/http/config/HttpFetcherConfig.java
+++ b/tika-pipes/tika-fetchers/tika-fetcher-http/src/main/java/org/apache/tika/pipes/fetcher/http/config/HttpFetcherConfig.java
@@ -19,7 +19,7 @@ package org.apache.tika.pipes.fetcher.http.config;
 import java.util.ArrayList;
 import java.util.List;
 
-import org.apache.tika.pipes.fetcher.config.AbstractConfig;
+import org.apache.tika.pipes.core.fetcher.config.AbstractConfig;
 
 public class HttpFetcherConfig extends AbstractConfig {
     private String userName;
diff --git a/tika-pipes/tika-fetchers/tika-fetcher-http/src/test/java/org/apache/tika/pipes/fetcher/http/HttpFetcherTest.java b/tika-pipes/tika-fetchers/tika-fetcher-http/src/test/java/org/apache/tika/pipes/fetcher/http/HttpFetcherTest.java
index c888db8ae..4e43f488d 100644
--- a/tika-pipes/tika-fetchers/tika-fetcher-http/src/test/java/org/apache/tika/pipes/fetcher/http/HttpFetcherTest.java
+++ b/tika-pipes/tika-fetchers/tika-fetcher-http/src/test/java/org/apache/tika/pipes/fetcher/http/HttpFetcherTest.java
@@ -69,8 +69,8 @@ import org.apache.tika.metadata.Metadata;
 import org.apache.tika.metadata.Property;
 import org.apache.tika.metadata.TikaCoreProperties;
 import org.apache.tika.parser.ParseContext;
-import org.apache.tika.pipes.fetcher.FetcherManager;
-import org.apache.tika.pipes.fetcher.config.FetcherConfigContainer;
+import org.apache.tika.pipes.core.fetcher.FetcherManager;
+import org.apache.tika.pipes.core.fetcher.config.FetcherConfigContainer;
 import org.apache.tika.pipes.fetcher.http.config.HttpFetcherConfig;
 import org.apache.tika.pipes.fetcher.http.config.HttpHeaders;
 import org.apache.tika.pipes.fetcher.http.jwt.JwtGenerator;
diff --git a/tika-pipes/tika-fetchers/tika-fetcher-microsoft-graph/pom.xml b/tika-pipes/tika-fetchers/tika-fetcher-microsoft-graph/pom.xml
index 870defccf..c9665924c 100644
--- a/tika-pipes/tika-fetchers/tika-fetcher-microsoft-graph/pom.xml
+++ b/tika-pipes/tika-fetchers/tika-fetcher-microsoft-graph/pom.xml
@@ -94,7 +94,7 @@
     </dependency>
     <dependency>
       <groupId>${project.groupId}</groupId>
-      <artifactId>tika-core</artifactId>
+      <artifactId>tika-pipes-core</artifactId>
       <version>${project.version}</version>
     </dependency>
     <dependency>
diff --git a/tika-pipes/tika-fetchers/tika-fetcher-microsoft-graph/src/main/java/org/apache/tika/pipes/fetchers/microsoftgraph/MicrosoftGraphFetcher.java b/tika-pipes/tika-fetchers/tika-fetcher-microsoft-graph/src/main/java/org/apache/tika/pipes/fetchers/microsoftgraph/MicrosoftGraphFetcher.java
index 6871a70b6..a1fa01ad2 100644
--- a/tika-pipes/tika-fetchers/tika-fetcher-microsoft-graph/src/main/java/org/apache/tika/pipes/fetchers/microsoftgraph/MicrosoftGraphFetcher.java
+++ b/tika-pipes/tika-fetchers/tika-fetcher-microsoft-graph/src/main/java/org/apache/tika/pipes/fetchers/microsoftgraph/MicrosoftGraphFetcher.java
@@ -35,7 +35,7 @@ import org.apache.tika.exception.TikaConfigException;
 import org.apache.tika.exception.TikaException;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.parser.ParseContext;
-import org.apache.tika.pipes.fetcher.AbstractFetcher;
+import org.apache.tika.pipes.core.fetcher.AbstractFetcher;
 import org.apache.tika.pipes.fetchers.microsoftgraph.config.ClientCertificateCredentialsConfig;
 import org.apache.tika.pipes.fetchers.microsoftgraph.config.ClientSecretCredentialsConfig;
 import org.apache.tika.pipes.fetchers.microsoftgraph.config.MicrosoftGraphFetcherConfig;
diff --git a/tika-pipes/tika-fetchers/tika-fetcher-microsoft-graph/src/main/java/org/apache/tika/pipes/fetchers/microsoftgraph/config/MicrosoftGraphFetcherConfig.java b/tika-pipes/tika-fetchers/tika-fetcher-microsoft-graph/src/main/java/org/apache/tika/pipes/fetchers/microsoftgraph/config/MicrosoftGraphFetcherConfig.java
index 495f83ba6..d2970773c 100644
--- a/tika-pipes/tika-fetchers/tika-fetcher-microsoft-graph/src/main/java/org/apache/tika/pipes/fetchers/microsoftgraph/config/MicrosoftGraphFetcherConfig.java
+++ b/tika-pipes/tika-fetchers/tika-fetcher-microsoft-graph/src/main/java/org/apache/tika/pipes/fetchers/microsoftgraph/config/MicrosoftGraphFetcherConfig.java
@@ -19,7 +19,7 @@ package org.apache.tika.pipes.fetchers.microsoftgraph.config;
 import java.util.ArrayList;
 import java.util.List;
 
-import org.apache.tika.pipes.fetcher.config.AbstractConfig;
+import org.apache.tika.pipes.core.fetcher.config.AbstractConfig;
 
 public class MicrosoftGraphFetcherConfig extends AbstractConfig {
     private long[] throttleSeconds;
diff --git a/tika-pipes/tika-fetchers/tika-fetcher-s3/pom.xml b/tika-pipes/tika-fetchers/tika-fetcher-s3/pom.xml
index fdcf6cf86..e50d7bbdf 100644
--- a/tika-pipes/tika-fetchers/tika-fetcher-s3/pom.xml
+++ b/tika-pipes/tika-fetchers/tika-fetcher-s3/pom.xml
@@ -40,7 +40,7 @@
         </dependency>
         <dependency>
             <groupId>${project.groupId}</groupId>
-            <artifactId>tika-core</artifactId>
+            <artifactId>tika-pipes-core</artifactId>
             <version>${project.version}</version>
             <scope>provided</scope>
         </dependency>
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 ab4a139a0..9176a7409 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
@@ -56,8 +56,8 @@ import org.apache.tika.io.TemporaryResources;
 import org.apache.tika.io.TikaInputStream;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.parser.ParseContext;
-import org.apache.tika.pipes.fetcher.AbstractFetcher;
-import org.apache.tika.pipes.fetcher.RangeFetcher;
+import org.apache.tika.pipes.core.fetcher.AbstractFetcher;
+import org.apache.tika.pipes.core.fetcher.RangeFetcher;
 import org.apache.tika.pipes.fetcher.s3.config.S3FetcherConfig;
 import org.apache.tika.utils.StringUtils;
 
diff --git a/tika-pipes/tika-fetchers/tika-fetcher-s3/src/main/java/org/apache/tika/pipes/fetcher/s3/config/S3FetcherConfig.java b/tika-pipes/tika-fetchers/tika-fetcher-s3/src/main/java/org/apache/tika/pipes/fetcher/s3/config/S3FetcherConfig.java
index 84a335a2b..8fa70bfa0 100644
--- a/tika-pipes/tika-fetchers/tika-fetcher-s3/src/main/java/org/apache/tika/pipes/fetcher/s3/config/S3FetcherConfig.java
+++ b/tika-pipes/tika-fetchers/tika-fetcher-s3/src/main/java/org/apache/tika/pipes/fetcher/s3/config/S3FetcherConfig.java
@@ -16,7 +16,7 @@
  */
 package org.apache.tika.pipes.fetcher.s3.config;
 
-import org.apache.tika.pipes.fetcher.config.AbstractConfig;
+import org.apache.tika.pipes.core.fetcher.config.AbstractConfig;
 
 public class S3FetcherConfig extends AbstractConfig {
     private boolean spoolToTemp;
diff --git a/tika-pipes/tika-fetchers/tika-fetcher-s3/src/test/java/org/apache/tika/pipes/fetcher/s3/TestS3Fetcher.java b/tika-pipes/tika-fetchers/tika-fetcher-s3/src/test/java/org/apache/tika/pipes/fetcher/s3/TestS3Fetcher.java
index 0055bf68a..d492f9a41 100644
--- a/tika-pipes/tika-fetchers/tika-fetcher-s3/src/test/java/org/apache/tika/pipes/fetcher/s3/TestS3Fetcher.java
+++ b/tika-pipes/tika-fetchers/tika-fetcher-s3/src/test/java/org/apache/tika/pipes/fetcher/s3/TestS3Fetcher.java
@@ -28,8 +28,8 @@ import org.junit.jupiter.api.Test;
 
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.parser.ParseContext;
-import org.apache.tika.pipes.fetcher.Fetcher;
-import org.apache.tika.pipes.fetcher.FetcherManager;
+import org.apache.tika.pipes.core.fetcher.Fetcher;
+import org.apache.tika.pipes.core.fetcher.FetcherManager;
 
 @Disabled("write actual unit tests")
 public class TestS3Fetcher {
diff --git a/tika-pipes/tika-httpclient-commons/pom.xml b/tika-pipes/tika-httpclient-commons/pom.xml
index 43e529527..d59ad985e 100644
--- a/tika-pipes/tika-httpclient-commons/pom.xml
+++ b/tika-pipes/tika-httpclient-commons/pom.xml
@@ -32,7 +32,7 @@
   <dependencies>
     <dependency>
       <groupId>${project.groupId}</groupId>
-      <artifactId>tika-core</artifactId>
+      <artifactId>tika-pipes-core</artifactId>
       <version>${project.version}</version>
       <scope>provided</scope>
     </dependency>
diff --git a/tika-pipes/tika-httpclient-commons/pom.xml b/tika-pipes/tika-pipes-core/pom.xml
similarity index 69%
copy from tika-pipes/tika-httpclient-commons/pom.xml
copy to tika-pipes/tika-pipes-core/pom.xml
index 43e529527..7948325da 100644
--- a/tika-pipes/tika-httpclient-commons/pom.xml
+++ b/tika-pipes/tika-pipes-core/pom.xml
@@ -19,46 +19,44 @@
 -->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
   <parent>
-    <artifactId>tika-pipes</artifactId>
     <groupId>org.apache.tika</groupId>
+    <artifactId>tika-pipes</artifactId>
     <version>4.0.0-SNAPSHOT</version>
     <relativePath>../pom.xml</relativePath>
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
-  <artifactId>tika-httpclient-commons</artifactId>
-  <name>Apache Tika httpclient commons</name>
+  <artifactId>tika-pipes-core</artifactId>
+
+  <name>Apache Tika Async CLI</name>
+  <url>https://tika.apache.org/</url>
 
   <dependencies>
     <dependency>
       <groupId>${project.groupId}</groupId>
       <artifactId>tika-core</artifactId>
       <version>${project.version}</version>
-      <scope>provided</scope>
     </dependency>
     <dependency>
-      <groupId>org.apache.httpcomponents</groupId>
-      <artifactId>httpclient</artifactId>
+      <groupId>${project.groupId}</groupId>
+      <artifactId>tika-serialization</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>com.martensigwart</groupId>
+      <artifactId>fakeload</artifactId>
+      <version>${fakeload.version}</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>${project.groupId}</groupId>
+      <artifactId>tika-core</artifactId>
+      <version>${project.version}</version>
+      <type>test-jar</type>
+      <scope>test</scope>
     </dependency>
   </dependencies>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-jar-plugin</artifactId>
-        <configuration>
-          <archive>
-            <manifestEntries>
-              <Automatic-Module-Name>org.apache.tika.httpclient.commons</Automatic-Module-Name>
-            </manifestEntries>
-          </archive>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-
   <scm>
     <tag>3.0.0-rc1</tag>
   </scm>
-</project>
\ No newline at end of file
+</project>
diff --git a/tika-core/src/main/java/org/apache/tika/pipes/CompositePipesReporter.java b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/CompositePipesReporter.java
similarity index 97%
rename from tika-core/src/main/java/org/apache/tika/pipes/CompositePipesReporter.java
rename to tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/CompositePipesReporter.java
index f8dcffb64..72f540519 100644
--- a/tika-core/src/main/java/org/apache/tika/pipes/CompositePipesReporter.java
+++ b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/CompositePipesReporter.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.tika.pipes;
+package org.apache.tika.pipes.core;
 
 import java.io.IOException;
 import java.util.ArrayList;
@@ -26,7 +26,7 @@ import org.apache.tika.config.Initializable;
 import org.apache.tika.config.InitializableProblemHandler;
 import org.apache.tika.config.Param;
 import org.apache.tika.exception.TikaConfigException;
-import org.apache.tika.pipes.pipesiterator.TotalCountResult;
+import org.apache.tika.pipes.core.pipesiterator.TotalCountResult;
 
 public class CompositePipesReporter extends PipesReporter implements Initializable {
 
diff --git a/tika-core/src/main/java/org/apache/tika/pipes/FailedToStartClientException.java b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/FailedToStartClientException.java
similarity index 96%
rename from tika-core/src/main/java/org/apache/tika/pipes/FailedToStartClientException.java
rename to tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/FailedToStartClientException.java
index fd49927e1..949bb81e8 100644
--- a/tika-core/src/main/java/org/apache/tika/pipes/FailedToStartClientException.java
+++ b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/FailedToStartClientException.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.tika.pipes;
+package org.apache.tika.pipes.core;
 
 /**
  * This should be catastrophic
diff --git a/tika-core/src/main/java/org/apache/tika/pipes/FetchEmitTuple.java b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/FetchEmitTuple.java
similarity index 95%
rename from tika-core/src/main/java/org/apache/tika/pipes/FetchEmitTuple.java
rename to tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/FetchEmitTuple.java
index a0f40901b..8f4bc2ad5 100644
--- a/tika-core/src/main/java/org/apache/tika/pipes/FetchEmitTuple.java
+++ b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/FetchEmitTuple.java
@@ -14,16 +14,16 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.tika.pipes;
+package org.apache.tika.pipes.core;
 
 import java.io.Serializable;
 import java.util.Objects;
 
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.parser.ParseContext;
-import org.apache.tika.pipes.emitter.EmitKey;
-import org.apache.tika.pipes.extractor.EmbeddedDocumentBytesConfig;
-import org.apache.tika.pipes.fetcher.FetchKey;
+import org.apache.tika.pipes.core.emitter.EmitKey;
+import org.apache.tika.pipes.core.extractor.EmbeddedDocumentBytesConfig;
+import org.apache.tika.pipes.core.fetcher.FetchKey;
 
 public class FetchEmitTuple implements Serializable {
 
diff --git a/tika-core/src/main/java/org/apache/tika/pipes/HandlerConfig.java b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/HandlerConfig.java
similarity index 99%
rename from tika-core/src/main/java/org/apache/tika/pipes/HandlerConfig.java
rename to tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/HandlerConfig.java
index 8cb3edfa8..284c6aa6e 100644
--- a/tika-core/src/main/java/org/apache/tika/pipes/HandlerConfig.java
+++ b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/HandlerConfig.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.tika.pipes;
+package org.apache.tika.pipes.core;
 
 import java.io.Serializable;
 import java.util.Locale;
diff --git a/tika-core/src/main/java/org/apache/tika/pipes/LoggingPipesReporter.java b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/LoggingPipesReporter.java
similarity index 97%
rename from tika-core/src/main/java/org/apache/tika/pipes/LoggingPipesReporter.java
rename to tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/LoggingPipesReporter.java
index 5f00880ba..795db7590 100644
--- a/tika-core/src/main/java/org/apache/tika/pipes/LoggingPipesReporter.java
+++ b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/LoggingPipesReporter.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.tika.pipes;
+package org.apache.tika.pipes.core;
 
 
 import org.slf4j.Logger;
diff --git a/tika-core/src/main/java/org/apache/tika/pipes/PipesClient.java b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/PipesClient.java
similarity index 97%
rename from tika-core/src/main/java/org/apache/tika/pipes/PipesClient.java
rename to tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/PipesClient.java
index 0e1ca18e0..2a27320a0 100644
--- a/tika-core/src/main/java/org/apache/tika/pipes/PipesClient.java
+++ b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/PipesClient.java
@@ -14,13 +14,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.tika.pipes;
+package org.apache.tika.pipes.core;
 
-import static org.apache.tika.pipes.PipesServer.STATUS.CALL;
-import static org.apache.tika.pipes.PipesServer.STATUS.PING;
-import static org.apache.tika.pipes.PipesServer.STATUS.READY;
-import static org.apache.tika.pipes.PipesServer.STATUS.lookup;
-import static org.apache.tika.pipes.PipesServer.TIMEOUT_EXIT_CODE;
+
+import static org.apache.tika.pipes.core.PipesServer.STATUS.CALL;
+import static org.apache.tika.pipes.core.PipesServer.STATUS.PING;
+import static org.apache.tika.pipes.core.PipesServer.STATUS.READY;
+import static org.apache.tika.pipes.core.PipesServer.STATUS.lookup;
+import static org.apache.tika.pipes.core.PipesServer.TIMEOUT_EXIT_CODE;
 
 import java.io.Closeable;
 import java.io.DataInputStream;
@@ -49,15 +50,15 @@ import org.slf4j.LoggerFactory;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.metadata.TikaCoreProperties;
 import org.apache.tika.parser.ParseContext;
-import org.apache.tika.pipes.emitter.EmitData;
-import org.apache.tika.pipes.emitter.EmitKey;
+import org.apache.tika.pipes.core.emitter.EmitData;
+import org.apache.tika.pipes.core.emitter.EmitKey;
 import org.apache.tika.utils.ProcessUtils;
 import org.apache.tika.utils.StringUtils;
 
 /**
  * The PipesClient is designed to be single-threaded. It only allots
  * a single thread for {@link #process(FetchEmitTuple)} processing.
- * See {@link org.apache.tika.pipes.async.AsyncProcessor} for handling
+ * See {@link org.apache.tika.pipes.core.async.AsyncProcessor} for handling
  * multiple PipesClients.
  */
 public class PipesClient implements Closeable {
@@ -554,7 +555,7 @@ public class PipesClient implements Closeable {
         }
         commandLine.add("-DpipesClientId=" + pipesClientId);
         commandLine.addAll(configArgs);
-        commandLine.add("org.apache.tika.pipes.PipesServer");
+        commandLine.add("org.apache.tika.pipes.core.PipesServer");
         commandLine.add(ProcessUtils.escapeCommandLine(
                 pipesConfig.getTikaConfig().toAbsolutePath().toString()));
 
diff --git a/tika-core/src/main/java/org/apache/tika/pipes/PipesConfig.java b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/PipesConfig.java
similarity index 98%
rename from tika-core/src/main/java/org/apache/tika/pipes/PipesConfig.java
rename to tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/PipesConfig.java
index 132e657a7..6fd98b019 100644
--- a/tika-core/src/main/java/org/apache/tika/pipes/PipesConfig.java
+++ b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/PipesConfig.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.tika.pipes;
+package org.apache.tika.pipes.core;
 
 import java.io.IOException;
 import java.io.InputStream;
diff --git a/tika-core/src/main/java/org/apache/tika/pipes/PipesConfigBase.java b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/PipesConfigBase.java
similarity index 99%
rename from tika-core/src/main/java/org/apache/tika/pipes/PipesConfigBase.java
rename to tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/PipesConfigBase.java
index 83ad11e9e..985a8b76f 100644
--- a/tika-core/src/main/java/org/apache/tika/pipes/PipesConfigBase.java
+++ b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/PipesConfigBase.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.tika.pipes;
+package org.apache.tika.pipes.core;
 
 import java.nio.file.Path;
 import java.nio.file.Paths;
diff --git a/tika-core/src/main/java/org/apache/tika/pipes/PipesException.java b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/PipesException.java
similarity index 96%
rename from tika-core/src/main/java/org/apache/tika/pipes/PipesException.java
rename to tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/PipesException.java
index ee9545f0a..a5b4414cc 100644
--- a/tika-core/src/main/java/org/apache/tika/pipes/PipesException.java
+++ b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/PipesException.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.tika.pipes;
+package org.apache.tika.pipes.core;
 
 /**
  * Fatal exception that means that something went seriously wrong.
diff --git a/tika-core/src/main/java/org/apache/tika/pipes/PipesParser.java b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/PipesParser.java
similarity index 98%
rename from tika-core/src/main/java/org/apache/tika/pipes/PipesParser.java
rename to tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/PipesParser.java
index 8446983aa..71de57433 100644
--- a/tika-core/src/main/java/org/apache/tika/pipes/PipesParser.java
+++ b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/PipesParser.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.tika.pipes;
+package org.apache.tika.pipes.core;
 
 import java.io.Closeable;
 import java.io.IOException;
diff --git a/tika-core/src/main/java/org/apache/tika/pipes/PipesReporter.java b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/PipesReporter.java
similarity index 96%
rename from tika-core/src/main/java/org/apache/tika/pipes/PipesReporter.java
rename to tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/PipesReporter.java
index 3978039b4..adef71c16 100644
--- a/tika-core/src/main/java/org/apache/tika/pipes/PipesReporter.java
+++ b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/PipesReporter.java
@@ -14,12 +14,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.tika.pipes;
+package org.apache.tika.pipes.core;
 
 import java.io.Closeable;
 import java.io.IOException;
 
-import org.apache.tika.pipes.pipesiterator.TotalCountResult;
+import org.apache.tika.pipes.core.pipesiterator.TotalCountResult;
 
 /**
  * This is called asynchronously by the AsyncProcessor. This
diff --git a/tika-core/src/main/java/org/apache/tika/pipes/PipesReporterBase.java b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/PipesReporterBase.java
similarity index 99%
rename from tika-core/src/main/java/org/apache/tika/pipes/PipesReporterBase.java
rename to tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/PipesReporterBase.java
index 3dcddfa71..d66bbd70e 100644
--- a/tika-core/src/main/java/org/apache/tika/pipes/PipesReporterBase.java
+++ b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/PipesReporterBase.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.tika.pipes;
+package org.apache.tika.pipes.core;
 
 import java.util.HashSet;
 import java.util.List;
diff --git a/tika-core/src/main/java/org/apache/tika/pipes/PipesResult.java b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/PipesResult.java
similarity index 97%
rename from tika-core/src/main/java/org/apache/tika/pipes/PipesResult.java
rename to tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/PipesResult.java
index 639bfc437..efc2f77b5 100644
--- a/tika-core/src/main/java/org/apache/tika/pipes/PipesResult.java
+++ b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/PipesResult.java
@@ -14,9 +14,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.tika.pipes;
+package org.apache.tika.pipes.core;
 
-import org.apache.tika.pipes.emitter.EmitData;
+import org.apache.tika.pipes.core.emitter.EmitData;
 
 public class PipesResult {
 
diff --git a/tika-core/src/main/java/org/apache/tika/pipes/PipesServer.java b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/PipesServer.java
similarity index 98%
rename from tika-core/src/main/java/org/apache/tika/pipes/PipesServer.java
rename to tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/PipesServer.java
index 47283fa64..2978668c8 100644
--- a/tika-core/src/main/java/org/apache/tika/pipes/PipesServer.java
+++ b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/PipesServer.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.tika.pipes;
+package org.apache.tika.pipes.core;
 
 import java.io.Closeable;
 import java.io.DataInputStream;
@@ -45,7 +45,6 @@ import org.apache.tika.detect.Detector;
 import org.apache.tika.exception.EncryptedDocumentException;
 import org.apache.tika.exception.TikaConfigException;
 import org.apache.tika.exception.TikaException;
-import org.apache.tika.extractor.BasicEmbeddedDocumentBytesHandler;
 import org.apache.tika.extractor.DocumentSelector;
 import org.apache.tika.extractor.EmbeddedDocumentByteStoreExtractorFactory;
 import org.apache.tika.extractor.EmbeddedDocumentBytesHandler;
@@ -66,16 +65,17 @@ import org.apache.tika.parser.DigestingParser;
 import org.apache.tika.parser.ParseContext;
 import org.apache.tika.parser.Parser;
 import org.apache.tika.parser.RecursiveParserWrapper;
-import org.apache.tika.pipes.emitter.EmitData;
-import org.apache.tika.pipes.emitter.EmitKey;
-import org.apache.tika.pipes.emitter.Emitter;
-import org.apache.tika.pipes.emitter.EmitterManager;
-import org.apache.tika.pipes.emitter.StreamEmitter;
-import org.apache.tika.pipes.emitter.TikaEmitterException;
-import org.apache.tika.pipes.extractor.EmbeddedDocumentBytesConfig;
-import org.apache.tika.pipes.extractor.EmittingEmbeddedDocumentBytesHandler;
-import org.apache.tika.pipes.fetcher.Fetcher;
-import org.apache.tika.pipes.fetcher.FetcherManager;
+import org.apache.tika.pipes.core.emitter.EmitData;
+import org.apache.tika.pipes.core.emitter.EmitKey;
+import org.apache.tika.pipes.core.emitter.Emitter;
+import org.apache.tika.pipes.core.emitter.EmitterManager;
+import org.apache.tika.pipes.core.emitter.StreamEmitter;
+import org.apache.tika.pipes.core.emitter.TikaEmitterException;
+import org.apache.tika.pipes.core.extractor.BasicEmbeddedDocumentBytesHandler;
+import org.apache.tika.pipes.core.extractor.EmbeddedDocumentBytesConfig;
+import org.apache.tika.pipes.core.extractor.EmittingEmbeddedDocumentBytesHandler;
+import org.apache.tika.pipes.core.fetcher.Fetcher;
+import org.apache.tika.pipes.core.fetcher.FetcherManager;
 import org.apache.tika.sax.BasicContentHandlerFactory;
 import org.apache.tika.sax.ContentHandlerFactory;
 import org.apache.tika.sax.RecursiveParserWrapperHandler;
diff --git a/tika-core/src/main/java/org/apache/tika/pipes/async/AsyncConfig.java b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/async/AsyncConfig.java
similarity index 95%
rename from tika-core/src/main/java/org/apache/tika/pipes/async/AsyncConfig.java
rename to tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/async/AsyncConfig.java
index bc55cca5d..2ecc732b6 100644
--- a/tika-core/src/main/java/org/apache/tika/pipes/async/AsyncConfig.java
+++ b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/async/AsyncConfig.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.tika.pipes.async;
+package org.apache.tika.pipes.core.async;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -22,8 +22,8 @@ import java.nio.file.Files;
 import java.nio.file.Path;
 
 import org.apache.tika.exception.TikaConfigException;
-import org.apache.tika.pipes.PipesConfigBase;
-import org.apache.tika.pipes.PipesReporter;
+import org.apache.tika.pipes.core.PipesConfigBase;
+import org.apache.tika.pipes.core.PipesReporter;
 
 public class AsyncConfig extends PipesConfigBase {
 
diff --git a/tika-core/src/main/java/org/apache/tika/pipes/async/AsyncEmitter.java b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/async/AsyncEmitter.java
similarity index 94%
rename from tika-core/src/main/java/org/apache/tika/pipes/async/AsyncEmitter.java
rename to tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/async/AsyncEmitter.java
index e0fe605f3..7f2857740 100644
--- a/tika-core/src/main/java/org/apache/tika/pipes/async/AsyncEmitter.java
+++ b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/async/AsyncEmitter.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.tika.pipes.async;
+package org.apache.tika.pipes.core.async;
 
 import java.io.IOException;
 import java.time.Instant;
@@ -30,10 +30,10 @@ import java.util.concurrent.TimeUnit;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import org.apache.tika.pipes.emitter.EmitData;
-import org.apache.tika.pipes.emitter.Emitter;
-import org.apache.tika.pipes.emitter.EmitterManager;
-import org.apache.tika.pipes.emitter.TikaEmitterException;
+import org.apache.tika.pipes.core.emitter.EmitData;
+import org.apache.tika.pipes.core.emitter.Emitter;
+import org.apache.tika.pipes.core.emitter.EmitterManager;
+import org.apache.tika.pipes.core.emitter.TikaEmitterException;
 import org.apache.tika.utils.ExceptionUtils;
 
 /**
diff --git a/tika-core/src/main/java/org/apache/tika/pipes/async/AsyncProcessor.java b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/async/AsyncProcessor.java
similarity index 96%
rename from tika-core/src/main/java/org/apache/tika/pipes/async/AsyncProcessor.java
rename to tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/async/AsyncProcessor.java
index 3a6751f4f..be43762ed 100644
--- a/tika-core/src/main/java/org/apache/tika/pipes/async/AsyncProcessor.java
+++ b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/async/AsyncProcessor.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.tika.pipes.async;
+package org.apache.tika.pipes.core.async;
 
 import java.io.Closeable;
 import java.io.IOException;
@@ -34,16 +34,16 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import org.apache.tika.exception.TikaException;
-import org.apache.tika.pipes.FetchEmitTuple;
-import org.apache.tika.pipes.PipesClient;
-import org.apache.tika.pipes.PipesException;
-import org.apache.tika.pipes.PipesReporter;
-import org.apache.tika.pipes.PipesResult;
-import org.apache.tika.pipes.emitter.EmitData;
-import org.apache.tika.pipes.emitter.EmitterManager;
-import org.apache.tika.pipes.pipesiterator.PipesIterator;
-import org.apache.tika.pipes.pipesiterator.TotalCountResult;
-import org.apache.tika.pipes.pipesiterator.TotalCounter;
+import org.apache.tika.pipes.core.FetchEmitTuple;
+import org.apache.tika.pipes.core.PipesClient;
+import org.apache.tika.pipes.core.PipesException;
+import org.apache.tika.pipes.core.PipesReporter;
+import org.apache.tika.pipes.core.PipesResult;
+import org.apache.tika.pipes.core.emitter.EmitData;
+import org.apache.tika.pipes.core.emitter.EmitterManager;
+import org.apache.tika.pipes.core.pipesiterator.PipesIterator;
+import org.apache.tika.pipes.core.pipesiterator.TotalCountResult;
+import org.apache.tika.pipes.core.pipesiterator.TotalCounter;
 
 /**
  * This is the main class for handling async requests. This manages
diff --git a/tika-core/src/main/java/org/apache/tika/pipes/async/AsyncStatus.java b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/async/AsyncStatus.java
similarity index 94%
rename from tika-core/src/main/java/org/apache/tika/pipes/async/AsyncStatus.java
rename to tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/async/AsyncStatus.java
index 46a58ff2b..71c2edd54 100644
--- a/tika-core/src/main/java/org/apache/tika/pipes/async/AsyncStatus.java
+++ b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/async/AsyncStatus.java
@@ -14,14 +14,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.tika.pipes.async;
+package org.apache.tika.pipes.core.async;
 
 import java.time.Instant;
 import java.util.HashMap;
 import java.util.Map;
 
-import org.apache.tika.pipes.PipesResult;
-import org.apache.tika.pipes.pipesiterator.TotalCountResult;
+import org.apache.tika.pipes.core.PipesResult;
+import org.apache.tika.pipes.core.pipesiterator.TotalCountResult;
 import org.apache.tika.utils.StringUtils;
 
 public class AsyncStatus {
diff --git a/tika-core/src/main/java/org/apache/tika/pipes/async/OfferLargerThanQueueSize.java b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/async/OfferLargerThanQueueSize.java
similarity index 97%
rename from tika-core/src/main/java/org/apache/tika/pipes/async/OfferLargerThanQueueSize.java
rename to tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/async/OfferLargerThanQueueSize.java
index da96c80ba..620a740e0 100644
--- a/tika-core/src/main/java/org/apache/tika/pipes/async/OfferLargerThanQueueSize.java
+++ b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/async/OfferLargerThanQueueSize.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.tika.pipes.async;
+package org.apache.tika.pipes.core.async;
 
 public class OfferLargerThanQueueSize extends IllegalArgumentException {
     private final int sizeOffered;
diff --git a/tika-core/src/main/java/org/apache/tika/pipes/emitter/AbstractEmitter.java b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/emitter/AbstractEmitter.java
similarity index 97%
rename from tika-core/src/main/java/org/apache/tika/pipes/emitter/AbstractEmitter.java
rename to tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/emitter/AbstractEmitter.java
index 4629f9263..56e8e8129 100644
--- a/tika-core/src/main/java/org/apache/tika/pipes/emitter/AbstractEmitter.java
+++ b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/emitter/AbstractEmitter.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.tika.pipes.emitter;
+package org.apache.tika.pipes.core.emitter;
 
 import java.io.IOException;
 import java.util.List;
diff --git a/tika-core/src/main/java/org/apache/tika/pipes/emitter/EmitData.java b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/emitter/EmitData.java
similarity index 98%
rename from tika-core/src/main/java/org/apache/tika/pipes/emitter/EmitData.java
rename to tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/emitter/EmitData.java
index 09d448adf..4c9996d12 100644
--- a/tika-core/src/main/java/org/apache/tika/pipes/emitter/EmitData.java
+++ b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/emitter/EmitData.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.tika.pipes.emitter;
+package org.apache.tika.pipes.core.emitter;
 
 import java.io.Serializable;
 import java.util.List;
diff --git a/tika-core/src/main/java/org/apache/tika/pipes/emitter/EmitKey.java b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/emitter/EmitKey.java
similarity index 98%
rename from tika-core/src/main/java/org/apache/tika/pipes/emitter/EmitKey.java
rename to tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/emitter/EmitKey.java
index 0f62ee06a..9274d8f74 100644
--- a/tika-core/src/main/java/org/apache/tika/pipes/emitter/EmitKey.java
+++ b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/emitter/EmitKey.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.tika.pipes.emitter;
+package org.apache.tika.pipes.core.emitter;
 
 import java.io.Serializable;
 import java.util.Objects;
diff --git a/tika-core/src/main/java/org/apache/tika/pipes/emitter/Emitter.java b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/emitter/Emitter.java
similarity index 96%
rename from tika-core/src/main/java/org/apache/tika/pipes/emitter/Emitter.java
rename to tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/emitter/Emitter.java
index c748541af..f3450330e 100644
--- a/tika-core/src/main/java/org/apache/tika/pipes/emitter/Emitter.java
+++ b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/emitter/Emitter.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.tika.pipes.emitter;
+package org.apache.tika.pipes.core.emitter;
 
 import java.io.IOException;
 import java.util.List;
diff --git a/tika-core/src/main/java/org/apache/tika/pipes/emitter/EmitterManager.java b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/emitter/EmitterManager.java
similarity index 98%
rename from tika-core/src/main/java/org/apache/tika/pipes/emitter/EmitterManager.java
rename to tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/emitter/EmitterManager.java
index 7d1aba1cf..236fc6e65 100644
--- a/tika-core/src/main/java/org/apache/tika/pipes/emitter/EmitterManager.java
+++ b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/emitter/EmitterManager.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.tika.pipes.emitter;
+package org.apache.tika.pipes.core.emitter;
 
 import java.io.IOException;
 import java.io.InputStream;
diff --git a/tika-core/src/main/java/org/apache/tika/pipes/emitter/EmptyEmitter.java b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/emitter/EmptyEmitter.java
similarity index 96%
rename from tika-core/src/main/java/org/apache/tika/pipes/emitter/EmptyEmitter.java
rename to tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/emitter/EmptyEmitter.java
index ef7adbef5..6d9f03b7d 100644
--- a/tika-core/src/main/java/org/apache/tika/pipes/emitter/EmptyEmitter.java
+++ b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/emitter/EmptyEmitter.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.tika.pipes.emitter;
+package org.apache.tika.pipes.core.emitter;
 
 import java.io.IOException;
 import java.util.List;
diff --git a/tika-core/src/main/java/org/apache/tika/pipes/emitter/StreamEmitter.java b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/emitter/StreamEmitter.java
similarity index 96%
rename from tika-core/src/main/java/org/apache/tika/pipes/emitter/StreamEmitter.java
rename to tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/emitter/StreamEmitter.java
index 30249b877..93a0505c2 100644
--- a/tika-core/src/main/java/org/apache/tika/pipes/emitter/StreamEmitter.java
+++ b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/emitter/StreamEmitter.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.tika.pipes.emitter;
+package org.apache.tika.pipes.core.emitter;
 
 import java.io.IOException;
 import java.io.InputStream;
diff --git a/tika-core/src/main/java/org/apache/tika/pipes/emitter/TikaEmitterException.java b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/emitter/TikaEmitterException.java
similarity index 96%
rename from tika-core/src/main/java/org/apache/tika/pipes/emitter/TikaEmitterException.java
rename to tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/emitter/TikaEmitterException.java
index f74a6e574..8b07e7698 100644
--- a/tika-core/src/main/java/org/apache/tika/pipes/emitter/TikaEmitterException.java
+++ b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/emitter/TikaEmitterException.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.tika.pipes.emitter;
+package org.apache.tika.pipes.core.emitter;
 
 import org.apache.tika.exception.TikaException;
 
diff --git a/tika-pipes/tika-emitters/tika-emitter-fs/src/main/java/org/apache/tika/pipes/emitter/fs/FileSystemEmitter.java b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/emitter/fs/FileSystemEmitter.java
similarity index 95%
rename from tika-pipes/tika-emitters/tika-emitter-fs/src/main/java/org/apache/tika/pipes/emitter/fs/FileSystemEmitter.java
rename to tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/emitter/fs/FileSystemEmitter.java
index 0da31981c..3c4018d32 100644
--- a/tika-pipes/tika-emitters/tika-emitter-fs/src/main/java/org/apache/tika/pipes/emitter/fs/FileSystemEmitter.java
+++ b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/emitter/fs/FileSystemEmitter.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.tika.pipes.emitter.fs;
+package org.apache.tika.pipes.core.emitter.fs;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -31,9 +31,9 @@ import org.apache.tika.config.Field;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.metadata.TikaCoreProperties;
 import org.apache.tika.parser.ParseContext;
-import org.apache.tika.pipes.emitter.AbstractEmitter;
-import org.apache.tika.pipes.emitter.StreamEmitter;
-import org.apache.tika.pipes.emitter.TikaEmitterException;
+import org.apache.tika.pipes.core.emitter.AbstractEmitter;
+import org.apache.tika.pipes.core.emitter.StreamEmitter;
+import org.apache.tika.pipes.core.emitter.TikaEmitterException;
 import org.apache.tika.serialization.JsonMetadataList;
 
 /**
@@ -45,7 +45,7 @@ import org.apache.tika.serialization.JsonMetadataList;
  * <pre class="prettyprint">
  *  &lt;properties&gt;
  *      &lt;emitters&gt;
- *          &lt;emitter class="org.apache.tika.pipes.emitter.fs.FileSystemEmitter&gt;
+ *          &lt;emitter class="org.apache.tika.pipes.core.emitter.fs.FileSystemEmitter&gt;
  *              &lt;params&gt;
  *                  &lt;!-- required --&gt;
  *                  &lt;param name="name" type="string"&gt;fs&lt;/param&gt;
diff --git a/tika-core/src/main/java/org/apache/tika/extractor/AbstractEmbeddedDocumentBytesHandler.java b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/extractor/AbstractEmbeddedDocumentBytesHandler.java
similarity index 94%
rename from tika-core/src/main/java/org/apache/tika/extractor/AbstractEmbeddedDocumentBytesHandler.java
rename to tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/extractor/AbstractEmbeddedDocumentBytesHandler.java
index 3e009f666..3348eb720 100644
--- a/tika-core/src/main/java/org/apache/tika/extractor/AbstractEmbeddedDocumentBytesHandler.java
+++ b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/extractor/AbstractEmbeddedDocumentBytesHandler.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.tika.extractor;
+package org.apache.tika.pipes.core.extractor;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -22,10 +22,11 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Locale;
 
+import org.apache.tika.extractor.EmbeddedDocumentBytesHandler;
 import org.apache.tika.io.FilenameUtils;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.metadata.TikaCoreProperties;
-import org.apache.tika.pipes.extractor.EmbeddedDocumentBytesConfig;
+import org.apache.tika.pipes.core.extractor.EmbeddedDocumentBytesConfig;
 import org.apache.tika.utils.StringUtils;
 
 public abstract class AbstractEmbeddedDocumentBytesHandler implements EmbeddedDocumentBytesHandler {
diff --git a/tika-core/src/main/java/org/apache/tika/extractor/BasicEmbeddedDocumentBytesHandler.java b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/extractor/BasicEmbeddedDocumentBytesHandler.java
similarity index 94%
rename from tika-core/src/main/java/org/apache/tika/extractor/BasicEmbeddedDocumentBytesHandler.java
rename to tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/extractor/BasicEmbeddedDocumentBytesHandler.java
index cf6441b4f..094f4a2ab 100644
--- a/tika-core/src/main/java/org/apache/tika/extractor/BasicEmbeddedDocumentBytesHandler.java
+++ b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/extractor/BasicEmbeddedDocumentBytesHandler.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.tika.extractor;
+package org.apache.tika.pipes.core.extractor;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -25,7 +25,7 @@ import org.apache.commons.io.IOUtils;
 import org.apache.commons.io.input.UnsynchronizedBufferedInputStream;
 
 import org.apache.tika.metadata.Metadata;
-import org.apache.tika.pipes.extractor.EmbeddedDocumentBytesConfig;
+import org.apache.tika.pipes.core.extractor.EmbeddedDocumentBytesConfig;
 
 /**
  * For now, this is an in-memory EmbeddedDocumentBytesHandler that stores
diff --git a/tika-core/src/main/java/org/apache/tika/pipes/extractor/EmbeddedDocumentBytesConfig.java b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/extractor/EmbeddedDocumentBytesConfig.java
similarity index 99%
rename from tika-core/src/main/java/org/apache/tika/pipes/extractor/EmbeddedDocumentBytesConfig.java
rename to tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/extractor/EmbeddedDocumentBytesConfig.java
index 542c1c8a3..dca605da7 100644
--- a/tika-core/src/main/java/org/apache/tika/pipes/extractor/EmbeddedDocumentBytesConfig.java
+++ b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/extractor/EmbeddedDocumentBytesConfig.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.tika.pipes.extractor;
+package org.apache.tika.pipes.core.extractor;
 
 import java.io.Serializable;
 import java.util.Objects;
diff --git a/tika-core/src/main/java/org/apache/tika/pipes/extractor/EmittingEmbeddedDocumentBytesHandler.java b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/extractor/EmittingEmbeddedDocumentBytesHandler.java
similarity index 87%
rename from tika-core/src/main/java/org/apache/tika/pipes/extractor/EmittingEmbeddedDocumentBytesHandler.java
rename to tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/extractor/EmittingEmbeddedDocumentBytesHandler.java
index 07c9f7507..22854c4ce 100644
--- a/tika-core/src/main/java/org/apache/tika/pipes/extractor/EmittingEmbeddedDocumentBytesHandler.java
+++ b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/extractor/EmittingEmbeddedDocumentBytesHandler.java
@@ -14,22 +14,21 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.tika.pipes.extractor;
+package org.apache.tika.pipes.core.extractor;
 
 import java.io.Closeable;
 import java.io.IOException;
 import java.io.InputStream;
 
 import org.apache.tika.exception.TikaConfigException;
-import org.apache.tika.extractor.AbstractEmbeddedDocumentBytesHandler;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.parser.ParseContext;
-import org.apache.tika.pipes.FetchEmitTuple;
-import org.apache.tika.pipes.emitter.EmitKey;
-import org.apache.tika.pipes.emitter.Emitter;
-import org.apache.tika.pipes.emitter.EmitterManager;
-import org.apache.tika.pipes.emitter.StreamEmitter;
-import org.apache.tika.pipes.emitter.TikaEmitterException;
+import org.apache.tika.pipes.core.FetchEmitTuple;
+import org.apache.tika.pipes.core.emitter.EmitKey;
+import org.apache.tika.pipes.core.emitter.Emitter;
+import org.apache.tika.pipes.core.emitter.EmitterManager;
+import org.apache.tika.pipes.core.emitter.StreamEmitter;
+import org.apache.tika.pipes.core.emitter.TikaEmitterException;
 
 public class EmittingEmbeddedDocumentBytesHandler extends AbstractEmbeddedDocumentBytesHandler {
     private final EmitKey containerEmitKey;
diff --git a/tika-core/src/main/java/org/apache/tika/pipes/fetcher/AbstractFetcher.java b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/fetcher/AbstractFetcher.java
similarity index 96%
rename from tika-core/src/main/java/org/apache/tika/pipes/fetcher/AbstractFetcher.java
rename to tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/fetcher/AbstractFetcher.java
index 0b417e3fb..872f603f0 100644
--- a/tika-core/src/main/java/org/apache/tika/pipes/fetcher/AbstractFetcher.java
+++ b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/fetcher/AbstractFetcher.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.tika.pipes.fetcher;
+package org.apache.tika.pipes.core.fetcher;
 
 import org.apache.tika.config.Field;
 
diff --git a/tika-core/src/main/java/org/apache/tika/pipes/fetcher/EmptyFetcher.java b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/fetcher/EmptyFetcher.java
similarity index 96%
rename from tika-core/src/main/java/org/apache/tika/pipes/fetcher/EmptyFetcher.java
rename to tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/fetcher/EmptyFetcher.java
index d64f81524..8e604662a 100644
--- a/tika-core/src/main/java/org/apache/tika/pipes/fetcher/EmptyFetcher.java
+++ b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/fetcher/EmptyFetcher.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.tika.pipes.fetcher;
+package org.apache.tika.pipes.core.fetcher;
 
 import java.io.IOException;
 import java.io.InputStream;
diff --git a/tika-core/src/main/java/org/apache/tika/pipes/fetcher/FetchKey.java b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/fetcher/FetchKey.java
similarity index 98%
rename from tika-core/src/main/java/org/apache/tika/pipes/fetcher/FetchKey.java
rename to tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/fetcher/FetchKey.java
index 148e3532c..0c363119c 100644
--- a/tika-core/src/main/java/org/apache/tika/pipes/fetcher/FetchKey.java
+++ b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/fetcher/FetchKey.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.tika.pipes.fetcher;
+package org.apache.tika.pipes.core.fetcher;
 
 import java.io.Serializable;
 import java.util.Objects;
diff --git a/tika-core/src/main/java/org/apache/tika/pipes/fetcher/Fetcher.java b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/fetcher/Fetcher.java
similarity index 96%
rename from tika-core/src/main/java/org/apache/tika/pipes/fetcher/Fetcher.java
rename to tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/fetcher/Fetcher.java
index 8f7a186fd..07e9fe077 100644
--- a/tika-core/src/main/java/org/apache/tika/pipes/fetcher/Fetcher.java
+++ b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/fetcher/Fetcher.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.tika.pipes.fetcher;
+package org.apache.tika.pipes.core.fetcher;
 
 import java.io.IOException;
 import java.io.InputStream;
diff --git a/tika-core/src/main/java/org/apache/tika/pipes/fetcher/FetcherManager.java b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/fetcher/FetcherManager.java
similarity index 98%
rename from tika-core/src/main/java/org/apache/tika/pipes/fetcher/FetcherManager.java
rename to tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/fetcher/FetcherManager.java
index f99806a90..7eff996ef 100644
--- a/tika-core/src/main/java/org/apache/tika/pipes/fetcher/FetcherManager.java
+++ b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/fetcher/FetcherManager.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.tika.pipes.fetcher;
+package org.apache.tika.pipes.core.fetcher;
 
 import java.io.IOException;
 import java.io.InputStream;
diff --git a/tika-core/src/main/java/org/apache/tika/pipes/fetcher/FetcherStringException.java b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/fetcher/FetcherStringException.java
similarity index 95%
rename from tika-core/src/main/java/org/apache/tika/pipes/fetcher/FetcherStringException.java
rename to tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/fetcher/FetcherStringException.java
index a07439a00..8f3cb2735 100644
--- a/tika-core/src/main/java/org/apache/tika/pipes/fetcher/FetcherStringException.java
+++ b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/fetcher/FetcherStringException.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.tika.pipes.fetcher;
+package org.apache.tika.pipes.core.fetcher;
 
 import org.apache.tika.exception.TikaException;
 
diff --git a/tika-core/src/main/java/org/apache/tika/pipes/fetcher/RangeFetcher.java b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/fetcher/RangeFetcher.java
similarity index 97%
rename from tika-core/src/main/java/org/apache/tika/pipes/fetcher/RangeFetcher.java
rename to tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/fetcher/RangeFetcher.java
index 246165c98..f35f43e1a 100644
--- a/tika-core/src/main/java/org/apache/tika/pipes/fetcher/RangeFetcher.java
+++ b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/fetcher/RangeFetcher.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.tika.pipes.fetcher;
+package org.apache.tika.pipes.core.fetcher;
 
 import java.io.IOException;
 import java.io.InputStream;
diff --git a/tika-core/src/main/java/org/apache/tika/pipes/fetcher/config/AbstractConfig.java b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/fetcher/config/AbstractConfig.java
similarity index 94%
rename from tika-core/src/main/java/org/apache/tika/pipes/fetcher/config/AbstractConfig.java
rename to tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/fetcher/config/AbstractConfig.java
index a1c7e4873..853223ed0 100644
--- a/tika-core/src/main/java/org/apache/tika/pipes/fetcher/config/AbstractConfig.java
+++ b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/fetcher/config/AbstractConfig.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.tika.pipes.fetcher.config;
+package org.apache.tika.pipes.core.fetcher.config;
 
 public abstract class AbstractConfig {
     //  Nothing to do here yet.
diff --git a/tika-core/src/main/java/org/apache/tika/pipes/fetcher/config/FetcherConfigContainer.java b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/fetcher/config/FetcherConfigContainer.java
similarity index 96%
rename from tika-core/src/main/java/org/apache/tika/pipes/fetcher/config/FetcherConfigContainer.java
rename to tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/fetcher/config/FetcherConfigContainer.java
index 5dacf6d8d..d416d0e6e 100644
--- a/tika-core/src/main/java/org/apache/tika/pipes/fetcher/config/FetcherConfigContainer.java
+++ b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/fetcher/config/FetcherConfigContainer.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.tika.pipes.fetcher.config;
+package org.apache.tika.pipes.core.fetcher.config;
 
 public class FetcherConfigContainer {
     private String configClassName;
diff --git a/tika-core/src/main/java/org/apache/tika/pipes/fetcher/fs/FileSystemFetcher.java b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/fetcher/fs/FileSystemFetcher.java
similarity index 97%
rename from tika-core/src/main/java/org/apache/tika/pipes/fetcher/fs/FileSystemFetcher.java
rename to tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/fetcher/fs/FileSystemFetcher.java
index 7289aa673..d53e711ec 100644
--- a/tika-core/src/main/java/org/apache/tika/pipes/fetcher/fs/FileSystemFetcher.java
+++ b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/fetcher/fs/FileSystemFetcher.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.tika.pipes.fetcher.fs;
+package org.apache.tika.pipes.core.fetcher.fs;
 
 import java.io.FileNotFoundException;
 import java.io.IOException;
@@ -42,8 +42,8 @@ import org.apache.tika.metadata.Metadata;
 import org.apache.tika.metadata.Property;
 import org.apache.tika.metadata.TikaCoreProperties;
 import org.apache.tika.parser.ParseContext;
-import org.apache.tika.pipes.fetcher.AbstractFetcher;
-import org.apache.tika.pipes.fetcher.fs.config.FileSystemFetcherConfig;
+import org.apache.tika.pipes.core.fetcher.AbstractFetcher;
+import org.apache.tika.pipes.core.fetcher.fs.config.FileSystemFetcherConfig;
 
 public class FileSystemFetcher extends AbstractFetcher implements Initializable {
     public FileSystemFetcher() {
diff --git a/tika-core/src/main/java/org/apache/tika/pipes/fetcher/fs/config/FileSystemFetcherConfig.java b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/fetcher/fs/config/FileSystemFetcherConfig.java
similarity index 92%
rename from tika-core/src/main/java/org/apache/tika/pipes/fetcher/fs/config/FileSystemFetcherConfig.java
rename to tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/fetcher/fs/config/FileSystemFetcherConfig.java
index b9f155fbd..d29455c48 100644
--- a/tika-core/src/main/java/org/apache/tika/pipes/fetcher/fs/config/FileSystemFetcherConfig.java
+++ b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/fetcher/fs/config/FileSystemFetcherConfig.java
@@ -14,9 +14,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.tika.pipes.fetcher.fs.config;
+package org.apache.tika.pipes.core.fetcher.fs.config;
 
-import org.apache.tika.pipes.fetcher.config.AbstractConfig;
+import org.apache.tika.pipes.core.fetcher.config.AbstractConfig;
 
 public class FileSystemFetcherConfig extends AbstractConfig {
     private String basePath;
diff --git a/tika-core/src/main/java/org/apache/tika/pipes/fetcher/url/UrlFetcher.java b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/fetcher/url/UrlFetcher.java
similarity index 95%
rename from tika-core/src/main/java/org/apache/tika/pipes/fetcher/url/UrlFetcher.java
rename to tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/fetcher/url/UrlFetcher.java
index 7692516cd..f222c27cd 100644
--- a/tika-core/src/main/java/org/apache/tika/pipes/fetcher/url/UrlFetcher.java
+++ b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/fetcher/url/UrlFetcher.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.tika.pipes.fetcher.url;
+package org.apache.tika.pipes.core.fetcher.url;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -25,7 +25,7 @@ import org.apache.tika.exception.TikaException;
 import org.apache.tika.io.TikaInputStream;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.parser.ParseContext;
-import org.apache.tika.pipes.fetcher.AbstractFetcher;
+import org.apache.tika.pipes.core.fetcher.AbstractFetcher;
 
 /**
  * Simple fetcher for URLs. This simply calls {@link TikaInputStream#get(URL)}.
diff --git a/tika-core/src/main/java/org/apache/tika/pipes/pipesiterator/CallablePipesIterator.java b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/pipesiterator/CallablePipesIterator.java
similarity index 98%
rename from tika-core/src/main/java/org/apache/tika/pipes/pipesiterator/CallablePipesIterator.java
rename to tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/pipesiterator/CallablePipesIterator.java
index 7b22d2c6c..28aa55f63 100644
--- a/tika-core/src/main/java/org/apache/tika/pipes/pipesiterator/CallablePipesIterator.java
+++ b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/pipesiterator/CallablePipesIterator.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.tika.pipes.pipesiterator;
+package org.apache.tika.pipes.core.pipesiterator;
 
 import java.util.concurrent.ArrayBlockingQueue;
 import java.util.concurrent.Callable;
@@ -22,7 +22,7 @@ import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
 import java.util.concurrent.atomic.AtomicLong;
 
-import org.apache.tika.pipes.FetchEmitTuple;
+import org.apache.tika.pipes.core.FetchEmitTuple;
 
 /**
  * This is a simple wrapper around {@link PipesIterator}
diff --git a/tika-core/src/main/java/org/apache/tika/pipes/pipesiterator/PipesIterator.java b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/pipesiterator/PipesIterator.java
similarity index 98%
rename from tika-core/src/main/java/org/apache/tika/pipes/pipesiterator/PipesIterator.java
rename to tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/pipesiterator/PipesIterator.java
index 34706f7e8..848ef1736 100644
--- a/tika-core/src/main/java/org/apache/tika/pipes/pipesiterator/PipesIterator.java
+++ b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/pipesiterator/PipesIterator.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.tika.pipes.pipesiterator;
+package org.apache.tika.pipes.core.pipesiterator;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -39,8 +39,8 @@ import org.apache.tika.config.InitializableProblemHandler;
 import org.apache.tika.config.Param;
 import org.apache.tika.exception.TikaConfigException;
 import org.apache.tika.exception.TikaTimeoutException;
-import org.apache.tika.pipes.FetchEmitTuple;
-import org.apache.tika.pipes.HandlerConfig;
+import org.apache.tika.pipes.core.FetchEmitTuple;
+import org.apache.tika.pipes.core.HandlerConfig;
 import org.apache.tika.sax.BasicContentHandlerFactory;
 
 /**
diff --git a/tika-core/src/main/java/org/apache/tika/pipes/pipesiterator/TotalCountResult.java b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/pipesiterator/TotalCountResult.java
similarity index 97%
rename from tika-core/src/main/java/org/apache/tika/pipes/pipesiterator/TotalCountResult.java
rename to tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/pipesiterator/TotalCountResult.java
index 493596da3..06e402623 100644
--- a/tika-core/src/main/java/org/apache/tika/pipes/pipesiterator/TotalCountResult.java
+++ b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/pipesiterator/TotalCountResult.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.tika.pipes.pipesiterator;
+package org.apache.tika.pipes.core.pipesiterator;
 
 public class TotalCountResult {
 
diff --git a/tika-core/src/main/java/org/apache/tika/pipes/pipesiterator/TotalCounter.java b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/pipesiterator/TotalCounter.java
similarity index 97%
rename from tika-core/src/main/java/org/apache/tika/pipes/pipesiterator/TotalCounter.java
rename to tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/pipesiterator/TotalCounter.java
index 8ab7086e9..65a63adf9 100644
--- a/tika-core/src/main/java/org/apache/tika/pipes/pipesiterator/TotalCounter.java
+++ b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/pipesiterator/TotalCounter.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.tika.pipes.pipesiterator;
+package org.apache.tika.pipes.core.pipesiterator;
 
 /**
  * Interface for pipesiterators that allow counting of total
diff --git a/tika-core/src/main/java/org/apache/tika/pipes/pipesiterator/filelist/FileListPipesIterator.java b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/pipesiterator/filelist/FileListPipesIterator.java
similarity index 92%
rename from tika-core/src/main/java/org/apache/tika/pipes/pipesiterator/filelist/FileListPipesIterator.java
rename to tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/pipesiterator/filelist/FileListPipesIterator.java
index 75cb8390c..47a15a900 100644
--- a/tika-core/src/main/java/org/apache/tika/pipes/pipesiterator/filelist/FileListPipesIterator.java
+++ b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/pipesiterator/filelist/FileListPipesIterator.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.tika.pipes.pipesiterator.filelist;
+package org.apache.tika.pipes.core.pipesiterator.filelist;
 
 import java.io.BufferedReader;
 import java.io.IOException;
@@ -31,11 +31,11 @@ import org.apache.tika.config.TikaConfig;
 import org.apache.tika.exception.TikaConfigException;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.parser.ParseContext;
-import org.apache.tika.pipes.FetchEmitTuple;
-import org.apache.tika.pipes.HandlerConfig;
-import org.apache.tika.pipes.emitter.EmitKey;
-import org.apache.tika.pipes.fetcher.FetchKey;
-import org.apache.tika.pipes.pipesiterator.PipesIterator;
+import org.apache.tika.pipes.core.FetchEmitTuple;
+import org.apache.tika.pipes.core.HandlerConfig;
+import org.apache.tika.pipes.core.emitter.EmitKey;
+import org.apache.tika.pipes.core.fetcher.FetchKey;
+import org.apache.tika.pipes.core.pipesiterator.PipesIterator;
 import org.apache.tika.utils.StringUtils;
 
 /**
diff --git a/tika-core/src/main/java/org/apache/tika/pipes/pipesiterator/fs/FileSystemPipesIterator.java b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/pipesiterator/fs/FileSystemPipesIterator.java
similarity index 94%
rename from tika-core/src/main/java/org/apache/tika/pipes/pipesiterator/fs/FileSystemPipesIterator.java
rename to tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/pipesiterator/fs/FileSystemPipesIterator.java
index 967df73b9..53d460276 100644
--- a/tika-core/src/main/java/org/apache/tika/pipes/pipesiterator/fs/FileSystemPipesIterator.java
+++ b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/pipesiterator/fs/FileSystemPipesIterator.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.tika.pipes.pipesiterator.fs;
+package org.apache.tika.pipes.core.pipesiterator.fs;
 
 import java.io.Closeable;
 import java.io.IOException;
@@ -39,14 +39,14 @@ import org.apache.tika.config.TikaConfig;
 import org.apache.tika.exception.TikaConfigException;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.parser.ParseContext;
-import org.apache.tika.pipes.FetchEmitTuple;
-import org.apache.tika.pipes.HandlerConfig;
-import org.apache.tika.pipes.async.AsyncProcessor;
-import org.apache.tika.pipes.emitter.EmitKey;
-import org.apache.tika.pipes.fetcher.FetchKey;
-import org.apache.tika.pipes.pipesiterator.PipesIterator;
-import org.apache.tika.pipes.pipesiterator.TotalCountResult;
-import org.apache.tika.pipes.pipesiterator.TotalCounter;
+import org.apache.tika.pipes.core.FetchEmitTuple;
+import org.apache.tika.pipes.core.HandlerConfig;
+import org.apache.tika.pipes.core.async.AsyncProcessor;
+import org.apache.tika.pipes.core.emitter.EmitKey;
+import org.apache.tika.pipes.core.fetcher.FetchKey;
+import org.apache.tika.pipes.core.pipesiterator.PipesIterator;
+import org.apache.tika.pipes.core.pipesiterator.TotalCountResult;
+import org.apache.tika.pipes.core.pipesiterator.TotalCounter;
 
 public class FileSystemPipesIterator extends PipesIterator
         implements TotalCounter, Initializable, Closeable {
diff --git a/tika-serialization/src/main/java/org/apache/tika/serialization/pipes/JsonEmitData.java b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/serialization/JsonEmitData.java
similarity index 93%
rename from tika-serialization/src/main/java/org/apache/tika/serialization/pipes/JsonEmitData.java
rename to tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/serialization/JsonEmitData.java
index a8e9788b7..8eb03c51d 100644
--- a/tika-serialization/src/main/java/org/apache/tika/serialization/pipes/JsonEmitData.java
+++ b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/serialization/JsonEmitData.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.tika.serialization.pipes;
+package org.apache.tika.pipes.core.serialization;
 
 import java.io.IOException;
 import java.io.Writer;
@@ -25,8 +25,8 @@ import com.fasterxml.jackson.core.StreamReadConstraints;
 
 import org.apache.tika.config.TikaConfig;
 import org.apache.tika.metadata.Metadata;
-import org.apache.tika.pipes.emitter.EmitData;
-import org.apache.tika.pipes.emitter.EmitKey;
+import org.apache.tika.pipes.core.emitter.EmitData;
+import org.apache.tika.pipes.core.emitter.EmitKey;
 import org.apache.tika.serialization.JsonMetadata;
 
 public class JsonEmitData {
diff --git a/tika-serialization/src/main/java/org/apache/tika/serialization/pipes/JsonFetchEmitTuple.java b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/serialization/JsonFetchEmitTuple.java
similarity index 95%
rename from tika-serialization/src/main/java/org/apache/tika/serialization/pipes/JsonFetchEmitTuple.java
rename to tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/serialization/JsonFetchEmitTuple.java
index 0987fdcf8..b92685521 100644
--- a/tika-serialization/src/main/java/org/apache/tika/serialization/pipes/JsonFetchEmitTuple.java
+++ b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/serialization/JsonFetchEmitTuple.java
@@ -14,9 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.tika.serialization.pipes;
-
-import static org.apache.tika.serialization.ParseContextSerializer.PARSE_CONTEXT;
+package org.apache.tika.pipes.core.serialization;
 
 import java.io.IOException;
 import java.io.Reader;
@@ -32,9 +30,9 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.parser.ParseContext;
-import org.apache.tika.pipes.FetchEmitTuple;
-import org.apache.tika.pipes.emitter.EmitKey;
-import org.apache.tika.pipes.fetcher.FetchKey;
+import org.apache.tika.pipes.core.FetchEmitTuple;
+import org.apache.tika.pipes.core.emitter.EmitKey;
+import org.apache.tika.pipes.core.fetcher.FetchKey;
 import org.apache.tika.serialization.JsonMetadata;
 import org.apache.tika.serialization.ParseContextDeserializer;
 import org.apache.tika.serialization.ParseContextSerializer;
@@ -67,7 +65,7 @@ public class JsonFetchEmitTuple {
         long fetchRangeStart = readLong(FETCH_RANGE_START, root, -1l, false);
         long fetchRangeEnd = readLong(FETCH_RANGE_END, root, -1l, false);
         Metadata metadata = readMetadata(root);
-        JsonNode parseContextNode = root.get(PARSE_CONTEXT);
+        JsonNode parseContextNode = root.get(ParseContextSerializer.PARSE_CONTEXT);
         ParseContext parseContext = parseContextNode == null ? new ParseContext() : ParseContextDeserializer.readParseContext(parseContextNode);
         FetchEmitTuple.ON_PARSE_EXCEPTION onParseException = readOnParseException(root);
 
diff --git a/tika-serialization/src/main/java/org/apache/tika/serialization/pipes/JsonFetchEmitTupleList.java b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/serialization/JsonFetchEmitTupleList.java
similarity index 96%
rename from tika-serialization/src/main/java/org/apache/tika/serialization/pipes/JsonFetchEmitTupleList.java
rename to tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/serialization/JsonFetchEmitTupleList.java
index 652c724f1..26a1cc501 100644
--- a/tika-serialization/src/main/java/org/apache/tika/serialization/pipes/JsonFetchEmitTupleList.java
+++ b/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/serialization/JsonFetchEmitTupleList.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.tika.serialization.pipes;
+package org.apache.tika.pipes.core.serialization;
 
 import java.io.IOException;
 import java.io.Reader;
@@ -31,7 +31,7 @@ import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
 
 import org.apache.tika.config.TikaConfig;
-import org.apache.tika.pipes.FetchEmitTuple;
+import org.apache.tika.pipes.core.FetchEmitTuple;
 
 public class JsonFetchEmitTupleList {
 
diff --git a/tika-server/tika-server-standard/src/test/resources/config/tika-config-url-fetcher.xml b/tika-pipes/tika-pipes-core/src/main/resources/pipes-fork-server-default-log4j2.xml
similarity index 67%
copy from tika-server/tika-server-standard/src/test/resources/config/tika-config-url-fetcher.xml
copy to tika-pipes/tika-pipes-core/src/main/resources/pipes-fork-server-default-log4j2.xml
index 25f01b87d..5f946e6e5 100644
--- a/tika-server/tika-server-standard/src/test/resources/config/tika-config-url-fetcher.xml
+++ b/tika-pipes/tika-pipes-core/src/main/resources/pipes-fork-server-default-log4j2.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8" ?>
+<?xml version="1.0" encoding="UTF-8"?>
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
   or more contributor license agreements.  See the NOTICE file
@@ -17,15 +17,16 @@
   specific language governing permissions and limitations
   under the License.
 -->
-<properties>
-  <parsers>
-    <parser class="org.apache.tika.parser.DefaultParser"/>
-  </parsers>
-  <fetchers>
-    <fetcher class="org.apache.tika.pipes.fetcher.url.UrlFetcher">
-      <params>
-        <name>url</name>
-      </params>
-    </fetcher>
-  </fetchers>
-</properties>
\ No newline at end of file
+<Configuration status="INFO">
+  <Appenders>
+    <Console name="console" target="SYSTEM_ERR">
+      <PatternLayout
+          pattern="%-5p [%t] %d{HH:mm:ss,SSS} %c %m%n" />
+    </Console>
+  </Appenders>
+  <Loggers>
+    <Root level="info" additivity="false">
+      <AppenderRef ref="console" />
+    </Root>
+  </Loggers>
+</Configuration>
diff --git a/tika-core/src/test/java/org/apache/tika/pipes/PipesClientTest.java b/tika-pipes/tika-pipes-core/src/test/java/org/apache/tika/pipes/core/PipesClientTest.java
similarity index 96%
rename from tika-core/src/test/java/org/apache/tika/pipes/PipesClientTest.java
rename to tika-pipes/tika-pipes-core/src/test/java/org/apache/tika/pipes/core/PipesClientTest.java
index 2a3f71138..813409efa 100644
--- a/tika-core/src/test/java/org/apache/tika/pipes/PipesClientTest.java
+++ b/tika-pipes/tika-pipes-core/src/test/java/org/apache/tika/pipes/core/PipesClientTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.tika.pipes;
+package org.apache.tika.pipes.core;
 
 import java.io.IOException;
 import java.nio.file.Path;
@@ -37,8 +37,8 @@ import org.apache.tika.metadata.listfilter.AttachmentCountingListFilter;
 import org.apache.tika.metadata.listfilter.CompositeMetadataListFilter;
 import org.apache.tika.metadata.listfilter.MetadataListFilter;
 import org.apache.tika.parser.ParseContext;
-import org.apache.tika.pipes.emitter.EmitKey;
-import org.apache.tika.pipes.fetcher.FetchKey;
+import org.apache.tika.pipes.core.emitter.EmitKey;
+import org.apache.tika.pipes.core.fetcher.FetchKey;
 
 public class PipesClientTest {
     String fetcherName = "fs";
@@ -50,7 +50,7 @@ public class PipesClientTest {
     public void init()
             throws TikaConfigException, IOException, ParserConfigurationException, SAXException {
         Path tikaConfigPath =
-                Paths.get("src", "test", "resources", "org", "apache", "tika", "pipes",
+                Paths.get("src", "test", "resources", "org", "apache", "tika", "pipes", "core",
                         "tika-sample-config.xml");
         PipesConfig pipesConfig = PipesConfig.load(tikaConfigPath);
         pipesClient = new PipesClient(pipesConfig);
diff --git a/tika-core/src/test/java/org/apache/tika/pipes/PipesServerTest.java b/tika-pipes/tika-pipes-core/src/test/java/org/apache/tika/pipes/core/PipesServerTest.java
similarity index 95%
rename from tika-core/src/test/java/org/apache/tika/pipes/PipesServerTest.java
rename to tika-pipes/tika-pipes-core/src/test/java/org/apache/tika/pipes/core/PipesServerTest.java
index ff80bb916..f116bb65f 100644
--- a/tika-core/src/test/java/org/apache/tika/pipes/PipesServerTest.java
+++ b/tika-pipes/tika-pipes-core/src/test/java/org/apache/tika/pipes/core/PipesServerTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.tika.pipes;
+package org.apache.tika.pipes.core;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
@@ -31,14 +31,14 @@ import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.io.TempDir;
 
 import org.apache.tika.TikaTest;
-import org.apache.tika.extractor.BasicEmbeddedDocumentBytesHandler;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.parser.ParseContext;
-import org.apache.tika.pipes.emitter.EmitKey;
-import org.apache.tika.pipes.extractor.EmbeddedDocumentBytesConfig;
-import org.apache.tika.pipes.fetcher.FetchKey;
-import org.apache.tika.pipes.fetcher.Fetcher;
-import org.apache.tika.pipes.fetcher.FetcherManager;
+import org.apache.tika.pipes.core.emitter.EmitKey;
+import org.apache.tika.pipes.core.extractor.BasicEmbeddedDocumentBytesHandler;
+import org.apache.tika.pipes.core.extractor.EmbeddedDocumentBytesConfig;
+import org.apache.tika.pipes.core.fetcher.FetchKey;
+import org.apache.tika.pipes.core.fetcher.Fetcher;
+import org.apache.tika.pipes.core.fetcher.FetcherManager;
 
 public class PipesServerTest extends TikaTest {
 
diff --git a/tika-core/src/test/java/org/apache/tika/config/TikaPipesConfigTest.java b/tika-pipes/tika-pipes-core/src/test/java/org/apache/tika/pipes/core/TikaPipesConfigTest.java
similarity index 89%
rename from tika-core/src/test/java/org/apache/tika/config/TikaPipesConfigTest.java
rename to tika-pipes/tika-pipes-core/src/test/java/org/apache/tika/pipes/core/TikaPipesConfigTest.java
index 3ea1e538c..7dcadc0a7 100644
--- a/tika-core/src/test/java/org/apache/tika/config/TikaPipesConfigTest.java
+++ b/tika-pipes/tika-pipes-core/src/test/java/org/apache/tika/pipes/core/TikaPipesConfigTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.tika.config;
+package org.apache.tika.pipes.core;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
@@ -27,17 +27,16 @@ import java.util.List;
 
 import org.junit.jupiter.api.Test;
 
+import org.apache.tika.config.AbstractTikaConfigTest;
 import org.apache.tika.exception.TikaConfigException;
-import org.apache.tika.pipes.CompositePipesReporter;
-import org.apache.tika.pipes.PipesReporter;
-import org.apache.tika.pipes.async.AsyncConfig;
-import org.apache.tika.pipes.async.MockReporter;
-import org.apache.tika.pipes.emitter.Emitter;
-import org.apache.tika.pipes.emitter.EmitterManager;
-import org.apache.tika.pipes.fetcher.Fetcher;
-import org.apache.tika.pipes.fetcher.FetcherManager;
-import org.apache.tika.pipes.fetcher.fs.FileSystemFetcher;
-import org.apache.tika.pipes.pipesiterator.PipesIterator;
+import org.apache.tika.pipes.core.async.AsyncConfig;
+import org.apache.tika.pipes.core.async.MockReporter;
+import org.apache.tika.pipes.core.emitter.Emitter;
+import org.apache.tika.pipes.core.emitter.EmitterManager;
+import org.apache.tika.pipes.core.fetcher.Fetcher;
+import org.apache.tika.pipes.core.fetcher.FetcherManager;
+import org.apache.tika.pipes.core.fetcher.fs.FileSystemFetcher;
+import org.apache.tika.pipes.core.pipesiterator.PipesIterator;
 
 public class TikaPipesConfigTest extends AbstractTikaConfigTest {
     //this handles tests for the newer pipes type configs.
diff --git a/tika-core/src/test/java/org/apache/tika/pipes/async/AsyncChaosMonkeyTest.java b/tika-pipes/tika-pipes-core/src/test/java/org/apache/tika/pipes/core/async/AsyncChaosMonkeyTest.java
similarity index 92%
rename from tika-core/src/test/java/org/apache/tika/pipes/async/AsyncChaosMonkeyTest.java
rename to tika-pipes/tika-pipes-core/src/test/java/org/apache/tika/pipes/core/async/AsyncChaosMonkeyTest.java
index 4522a2ea1..cda4b4b26 100644
--- a/tika-core/src/test/java/org/apache/tika/pipes/async/AsyncChaosMonkeyTest.java
+++ b/tika-pipes/tika-pipes-core/src/test/java/org/apache/tika/pipes/core/async/AsyncChaosMonkeyTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.tika.pipes.async;
+package org.apache.tika.pipes.core.async;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
@@ -32,12 +32,12 @@ import org.junit.jupiter.api.io.TempDir;
 
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.metadata.TikaCoreProperties;
-import org.apache.tika.pipes.FetchEmitTuple;
-import org.apache.tika.pipes.PipesResult;
-import org.apache.tika.pipes.emitter.EmitData;
-import org.apache.tika.pipes.emitter.EmitKey;
-import org.apache.tika.pipes.fetcher.FetchKey;
-import org.apache.tika.pipes.pipesiterator.PipesIterator;
+import org.apache.tika.pipes.core.FetchEmitTuple;
+import org.apache.tika.pipes.core.PipesResult;
+import org.apache.tika.pipes.core.emitter.EmitData;
+import org.apache.tika.pipes.core.emitter.EmitKey;
+import org.apache.tika.pipes.core.fetcher.FetchKey;
+import org.apache.tika.pipes.core.pipesiterator.PipesIterator;
 import org.apache.tika.utils.ProcessUtils;
 
 public class AsyncChaosMonkeyTest {
@@ -81,18 +81,18 @@ public class AsyncChaosMonkeyTest {
         Path tikaConfigPath = Files.createTempFile(configDir, "tika-config-", ".xml");
         String xml =
                 "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>" + "<properties>" + "  <emitters>" +
-                "  <emitter class=\"org.apache.tika.pipes.async.MockEmitter\">\n" +
+                "  <emitter class=\"org.apache.tika.pipes.core.async.MockEmitter\">\n" +
                 "         <name>mock</name>\n" + "  </emitter>" +
                 "  </emitters>" + "  <fetchers>" +
-                "    <fetcher class=\"org.apache.tika.pipes.fetcher.fs.FileSystemFetcher\">" +
+                "    <fetcher class=\"org.apache.tika.pipes.core.fetcher.fs.FileSystemFetcher\">" +
                 "      <name>mock</name>\n" + "      <basePath>" +
                 ProcessUtils.escapeCommandLine(inputDir.toAbsolutePath().toString()) +
                 "</basePath>\n" + "    </fetcher>" + "  </fetchers>" +
                 " <autoDetectParserConfig>\n" +
                         "    <digesterFactory\n" +
-                        "        class=\"org.apache.tika.pipes.async.MockDigesterFactory\"/>\n" +
+                        "        class=\"org.apache.tika.pipes.core.async.MockDigesterFactory\"/>\n" +
                 "</autoDetectParserConfig>" +
-                "<async><pipesReporter class=\"org.apache.tika.pipes.async.MockReporter\"/>" +
+                "<async><pipesReporter class=\"org.apache.tika.pipes.core.async.MockReporter\"/>" +
                         "<emitIntermediateResults>" + emitIntermediateResults +
                         "</emitIntermediateResults>" +
                         "<tikaConfig>" +
diff --git a/tika-core/src/test/java/org/apache/tika/pipes/async/MockDigesterFactory.java b/tika-pipes/tika-pipes-core/src/test/java/org/apache/tika/pipes/core/async/MockDigesterFactory.java
similarity index 97%
rename from tika-core/src/test/java/org/apache/tika/pipes/async/MockDigesterFactory.java
rename to tika-pipes/tika-pipes-core/src/test/java/org/apache/tika/pipes/core/async/MockDigesterFactory.java
index ee1eacdab..e10f69b8e 100644
--- a/tika-core/src/test/java/org/apache/tika/pipes/async/MockDigesterFactory.java
+++ b/tika-pipes/tika-pipes-core/src/test/java/org/apache/tika/pipes/core/async/MockDigesterFactory.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.tika.pipes.async;
+package org.apache.tika.pipes.core.async;
 
 import org.apache.tika.parser.DigestingParser;
 import org.apache.tika.parser.digest.InputStreamDigester;
diff --git a/tika-core/src/test/java/org/apache/tika/pipes/async/MockEmitter.java b/tika-pipes/tika-pipes-core/src/test/java/org/apache/tika/pipes/core/async/MockEmitter.java
similarity index 87%
rename from tika-core/src/test/java/org/apache/tika/pipes/async/MockEmitter.java
rename to tika-pipes/tika-pipes-core/src/test/java/org/apache/tika/pipes/core/async/MockEmitter.java
index b940ec7be..a3da808dc 100644
--- a/tika-core/src/test/java/org/apache/tika/pipes/async/MockEmitter.java
+++ b/tika-pipes/tika-pipes-core/src/test/java/org/apache/tika/pipes/core/async/MockEmitter.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.tika.pipes.async;
+package org.apache.tika.pipes.core.async;
 
 import java.io.IOException;
 import java.util.ArrayList;
@@ -24,10 +24,10 @@ import java.util.concurrent.ArrayBlockingQueue;
 
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.parser.ParseContext;
-import org.apache.tika.pipes.emitter.AbstractEmitter;
-import org.apache.tika.pipes.emitter.EmitData;
-import org.apache.tika.pipes.emitter.EmitKey;
-import org.apache.tika.pipes.emitter.TikaEmitterException;
+import org.apache.tika.pipes.core.emitter.AbstractEmitter;
+import org.apache.tika.pipes.core.emitter.EmitData;
+import org.apache.tika.pipes.core.emitter.EmitKey;
+import org.apache.tika.pipes.core.emitter.TikaEmitterException;
 
 public class MockEmitter extends AbstractEmitter {
 
diff --git a/tika-core/src/test/java/org/apache/tika/pipes/async/MockFetcher.java b/tika-pipes/tika-pipes-core/src/test/java/org/apache/tika/pipes/core/async/MockFetcher.java
similarity index 94%
rename from tika-core/src/test/java/org/apache/tika/pipes/async/MockFetcher.java
rename to tika-pipes/tika-pipes-core/src/test/java/org/apache/tika/pipes/core/async/MockFetcher.java
index acb533ece..afcd6a33a 100644
--- a/tika-core/src/test/java/org/apache/tika/pipes/async/MockFetcher.java
+++ b/tika-pipes/tika-pipes-core/src/test/java/org/apache/tika/pipes/core/async/MockFetcher.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.tika.pipes.async;
+package org.apache.tika.pipes.core.async;
 
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
@@ -24,7 +24,7 @@ import java.nio.charset.StandardCharsets;
 import org.apache.tika.exception.TikaException;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.parser.ParseContext;
-import org.apache.tika.pipes.fetcher.Fetcher;
+import org.apache.tika.pipes.core.fetcher.Fetcher;
 
 public class MockFetcher implements Fetcher {
 
diff --git a/tika-core/src/test/java/org/apache/tika/pipes/async/MockReporter.java b/tika-pipes/tika-pipes-core/src/test/java/org/apache/tika/pipes/core/async/MockReporter.java
similarity index 89%
rename from tika-core/src/test/java/org/apache/tika/pipes/async/MockReporter.java
rename to tika-pipes/tika-pipes-core/src/test/java/org/apache/tika/pipes/core/async/MockReporter.java
index 6e8308c89..6ec545bc0 100644
--- a/tika-core/src/test/java/org/apache/tika/pipes/async/MockReporter.java
+++ b/tika-pipes/tika-pipes-core/src/test/java/org/apache/tika/pipes/core/async/MockReporter.java
@@ -14,14 +14,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.tika.pipes.async;
+package org.apache.tika.pipes.core.async;
 
 import java.util.concurrent.ArrayBlockingQueue;
 
 import org.apache.tika.config.Field;
-import org.apache.tika.pipes.FetchEmitTuple;
-import org.apache.tika.pipes.PipesReporter;
-import org.apache.tika.pipes.PipesResult;
+import org.apache.tika.pipes.core.FetchEmitTuple;
+import org.apache.tika.pipes.core.PipesReporter;
+import org.apache.tika.pipes.core.PipesResult;
 
 public class MockReporter extends PipesReporter {
 
diff --git a/tika-core/src/test/java/org/apache/tika/pipes/async/MockReporterTest.java b/tika-pipes/tika-pipes-core/src/test/java/org/apache/tika/pipes/core/async/MockReporterTest.java
similarity index 93%
rename from tika-core/src/test/java/org/apache/tika/pipes/async/MockReporterTest.java
rename to tika-pipes/tika-pipes-core/src/test/java/org/apache/tika/pipes/core/async/MockReporterTest.java
index 9bfcd5591..f5a5db464 100644
--- a/tika-core/src/test/java/org/apache/tika/pipes/async/MockReporterTest.java
+++ b/tika-pipes/tika-pipes-core/src/test/java/org/apache/tika/pipes/core/async/MockReporterTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.tika.pipes.async;
+package org.apache.tika.pipes.core.async;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -25,8 +25,8 @@ import java.util.List;
 
 import org.junit.jupiter.api.Test;
 
-import org.apache.tika.pipes.CompositePipesReporter;
-import org.apache.tika.pipes.PipesReporter;
+import org.apache.tika.pipes.core.CompositePipesReporter;
+import org.apache.tika.pipes.core.PipesReporter;
 
 public class MockReporterTest {
 
diff --git a/tika-core/src/test/java/org/apache/tika/pipes/emitter/MockEmitter.java b/tika-pipes/tika-pipes-core/src/test/java/org/apache/tika/pipes/core/emitter/MockEmitter.java
similarity index 97%
rename from tika-core/src/test/java/org/apache/tika/pipes/emitter/MockEmitter.java
rename to tika-pipes/tika-pipes-core/src/test/java/org/apache/tika/pipes/core/emitter/MockEmitter.java
index 89c3c2ce4..6d32ea2c4 100644
--- a/tika-core/src/test/java/org/apache/tika/pipes/emitter/MockEmitter.java
+++ b/tika-pipes/tika-pipes-core/src/test/java/org/apache/tika/pipes/core/emitter/MockEmitter.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.tika.pipes.emitter;
+package org.apache.tika.pipes.core.emitter;
 
 import java.io.IOException;
 import java.util.List;
diff --git a/tika-core/src/test/java/org/apache/tika/pipes/fetcher/MockFetcher.java b/tika-pipes/tika-pipes-core/src/test/java/org/apache/tika/pipes/core/fetcher/MockFetcher.java
similarity index 98%
rename from tika-core/src/test/java/org/apache/tika/pipes/fetcher/MockFetcher.java
rename to tika-pipes/tika-pipes-core/src/test/java/org/apache/tika/pipes/core/fetcher/MockFetcher.java
index e9104e0a8..a1f6ac548 100644
--- a/tika-core/src/test/java/org/apache/tika/pipes/fetcher/MockFetcher.java
+++ b/tika-pipes/tika-pipes-core/src/test/java/org/apache/tika/pipes/core/fetcher/MockFetcher.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.tika.pipes.fetcher;
+package org.apache.tika.pipes.core.fetcher;
 
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
diff --git a/tika-core/src/test/java/org/apache/tika/pipes/fetcher/fs/FileSystemFetcherTest.java b/tika-pipes/tika-pipes-core/src/test/java/org/apache/tika/pipes/core/fetcher/fs/FileSystemFetcherTest.java
similarity index 97%
rename from tika-core/src/test/java/org/apache/tika/pipes/fetcher/fs/FileSystemFetcherTest.java
rename to tika-pipes/tika-pipes-core/src/test/java/org/apache/tika/pipes/core/fetcher/fs/FileSystemFetcherTest.java
index 7e29ac20a..fd3d6d8b4 100644
--- a/tika-core/src/test/java/org/apache/tika/pipes/fetcher/fs/FileSystemFetcherTest.java
+++ b/tika-pipes/tika-pipes-core/src/test/java/org/apache/tika/pipes/core/fetcher/fs/FileSystemFetcherTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.tika.pipes.fetcher.fs;
+package org.apache.tika.pipes.core.fetcher.fs;
 
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertThrows;
diff --git a/tika-core/src/test/java/org/apache/tika/pipes/pipesiterator/FileSystemPipesIteratorTest.java b/tika-pipes/tika-pipes-core/src/test/java/org/apache/tika/pipes/core/pipesiterator/FileSystemPipesIteratorTest.java
similarity index 93%
rename from tika-core/src/test/java/org/apache/tika/pipes/pipesiterator/FileSystemPipesIteratorTest.java
rename to tika-pipes/tika-pipes-core/src/test/java/org/apache/tika/pipes/core/pipesiterator/FileSystemPipesIteratorTest.java
index 7b37ec551..4cfd7495f 100644
--- a/tika-core/src/test/java/org/apache/tika/pipes/pipesiterator/FileSystemPipesIteratorTest.java
+++ b/tika-pipes/tika-pipes-core/src/test/java/org/apache/tika/pipes/core/pipesiterator/FileSystemPipesIteratorTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.tika.pipes.pipesiterator;
+package org.apache.tika.pipes.core.pipesiterator;
 
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
@@ -32,8 +32,8 @@ import java.util.stream.Stream;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.Timeout;
 
-import org.apache.tika.pipes.FetchEmitTuple;
-import org.apache.tika.pipes.pipesiterator.fs.FileSystemPipesIterator;
+import org.apache.tika.pipes.core.FetchEmitTuple;
+import org.apache.tika.pipes.core.pipesiterator.fs.FileSystemPipesIterator;
 
 
 public class FileSystemPipesIteratorTest {
diff --git a/tika-core/src/test/java/org/apache/tika/pipes/pipesiterator/filelist/FileListPipesIteratorTest.java b/tika-pipes/tika-pipes-core/src/test/java/org/apache/tika/pipes/core/pipesiterator/filelist/FileListPipesIteratorTest.java
similarity index 96%
rename from tika-core/src/test/java/org/apache/tika/pipes/pipesiterator/filelist/FileListPipesIteratorTest.java
rename to tika-pipes/tika-pipes-core/src/test/java/org/apache/tika/pipes/core/pipesiterator/filelist/FileListPipesIteratorTest.java
index fec827d0e..a9440979f 100644
--- a/tika-core/src/test/java/org/apache/tika/pipes/pipesiterator/filelist/FileListPipesIteratorTest.java
+++ b/tika-pipes/tika-pipes-core/src/test/java/org/apache/tika/pipes/core/pipesiterator/filelist/FileListPipesIteratorTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.tika.pipes.pipesiterator.filelist;
+package org.apache.tika.pipes.core.pipesiterator.filelist;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
@@ -27,7 +27,7 @@ import java.util.List;
 import org.junit.jupiter.api.Test;
 
 import org.apache.tika.config.InitializableProblemHandler;
-import org.apache.tika.pipes.FetchEmitTuple;
+import org.apache.tika.pipes.core.FetchEmitTuple;
 
 public class FileListPipesIteratorTest {
 
diff --git a/tika-serialization/src/test/java/org/apache/tika/serialization/pipes/JsonFetchEmitTupleListTest.java b/tika-pipes/tika-pipes-core/src/test/java/org/apache/tika/pipes/core/serialization/JsonFetchEmitTupleListTest.java
similarity index 90%
rename from tika-serialization/src/test/java/org/apache/tika/serialization/pipes/JsonFetchEmitTupleListTest.java
rename to tika-pipes/tika-pipes-core/src/test/java/org/apache/tika/pipes/core/serialization/JsonFetchEmitTupleListTest.java
index 1ff068d5d..7e85d9d7b 100644
--- a/tika-serialization/src/test/java/org/apache/tika/serialization/pipes/JsonFetchEmitTupleListTest.java
+++ b/tika-pipes/tika-pipes-core/src/test/java/org/apache/tika/pipes/core/serialization/JsonFetchEmitTupleListTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.tika.serialization.pipes;
+package org.apache.tika.pipes.core.serialization;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
@@ -27,9 +27,9 @@ import java.util.List;
 import org.junit.jupiter.api.Test;
 
 import org.apache.tika.metadata.Metadata;
-import org.apache.tika.pipes.FetchEmitTuple;
-import org.apache.tika.pipes.emitter.EmitKey;
-import org.apache.tika.pipes.fetcher.FetchKey;
+import org.apache.tika.pipes.core.FetchEmitTuple;
+import org.apache.tika.pipes.core.emitter.EmitKey;
+import org.apache.tika.pipes.core.fetcher.FetchKey;
 
 public class JsonFetchEmitTupleListTest {
 
diff --git a/tika-serialization/src/test/java/org/apache/tika/serialization/pipes/JsonFetchEmitTupleTest.java b/tika-pipes/tika-pipes-core/src/test/java/org/apache/tika/pipes/core/serialization/JsonFetchEmitTupleTest.java
similarity index 94%
rename from tika-serialization/src/test/java/org/apache/tika/serialization/pipes/JsonFetchEmitTupleTest.java
rename to tika-pipes/tika-pipes-core/src/test/java/org/apache/tika/pipes/core/serialization/JsonFetchEmitTupleTest.java
index 0d4743e2c..84e2748a9 100644
--- a/tika-serialization/src/test/java/org/apache/tika/serialization/pipes/JsonFetchEmitTupleTest.java
+++ b/tika-pipes/tika-pipes-core/src/test/java/org/apache/tika/pipes/core/serialization/JsonFetchEmitTupleTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.tika.serialization.pipes;
+package org.apache.tika.pipes.core.serialization;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
@@ -26,10 +26,10 @@ import org.junit.jupiter.api.Test;
 
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.parser.ParseContext;
-import org.apache.tika.pipes.FetchEmitTuple;
-import org.apache.tika.pipes.HandlerConfig;
-import org.apache.tika.pipes.emitter.EmitKey;
-import org.apache.tika.pipes.fetcher.FetchKey;
+import org.apache.tika.pipes.core.FetchEmitTuple;
+import org.apache.tika.pipes.core.HandlerConfig;
+import org.apache.tika.pipes.core.emitter.EmitKey;
+import org.apache.tika.pipes.core.fetcher.FetchKey;
 import org.apache.tika.sax.BasicContentHandlerFactory;
 
 public class JsonFetchEmitTupleTest {
diff --git a/tika-pipes/tika-async-cli/src/test/resources/configs/TIKA-4207-emitter.xml b/tika-pipes/tika-pipes-core/src/test/resources/configs/TIKA-4207-emitter.xml
similarity index 81%
copy from tika-pipes/tika-async-cli/src/test/resources/configs/TIKA-4207-emitter.xml
copy to tika-pipes/tika-pipes-core/src/test/resources/configs/TIKA-4207-emitter.xml
index 5391c8496..bb8bfe77f 100644
--- a/tika-pipes/tika-async-cli/src/test/resources/configs/TIKA-4207-emitter.xml
+++ b/tika-pipes/tika-pipes-core/src/test/resources/configs/TIKA-4207-emitter.xml
@@ -17,17 +17,17 @@
 -->
 <properties>
   <fetchers>
-    <fetcher class="org.apache.tika.pipes.fetcher.fs.FileSystemFetcher">
+    <fetcher class="org.apache.tika.pipes.core.fetcher.fs.FileSystemFetcher">
       <name>fs</name>
       <basePath>BASE_PATH</basePath>
     </fetcher>
   </fetchers>
   <emitters>
-    <emitter class="org.apache.tika.pipes.emitter.fs.FileSystemEmitter">
+    <emitter class="org.apache.tika.pipes.core.emitter.fs.FileSystemEmitter">
       <name>json</name>
       <basePath>JSON_PATH</basePath>
     </emitter>
-    <emitter class="org.apache.tika.pipes.emitter.fs.FileSystemEmitter">
+    <emitter class="org.apache.tika.pipes.core.emitter.fs.FileSystemEmitter">
       <name>bytes</name>
       <basePath>BYTES_PATH</basePath>
     </emitter>
diff --git a/tika-server/tika-server-standard/src/test/resources/config/tika-config-url-fetcher.xml b/tika-pipes/tika-pipes-core/src/test/resources/configs/tika-config-broken.xml
similarity index 71%
copy from tika-server/tika-server-standard/src/test/resources/config/tika-config-url-fetcher.xml
copy to tika-pipes/tika-pipes-core/src/test/resources/configs/tika-config-broken.xml
index 25f01b87d..f3acac39a 100644
--- a/tika-server/tika-server-standard/src/test/resources/config/tika-config-url-fetcher.xml
+++ b/tika-pipes/tika-pipes-core/src/test/resources/configs/tika-config-broken.xml
@@ -18,14 +18,15 @@
   under the License.
 -->
 <properties>
-  <parsers>
-    <parser class="org.apache.tika.parser.DefaultParser"/>
-  </parsers>
   <fetchers>
-    <fetcher class="org.apache.tika.pipes.fetcher.url.UrlFetcher">
-      <params>
-        <name>url</name>
-      </params>
+    <fetcher class="org.apache.tika.pipes.fetcher.s3.S3Fetcher">
+      <name>s3</name>
+      <region>us-east-1</region>
+      <profile><!-- fill in here --></profile>
     </fetcher>
   </fetchers>
+  <pipesIterator class="org.apache.tika.pipes.core.pipesiterator.fs.FileSystemPipesIterator">
+    <fetcherName>fs</fetcherName>
+    <basePath>basePath</basePath>
+  </pipesIterator>
 </properties>
\ No newline at end of file
diff --git a/tika-core/src/test/resources/org/apache/tika/config/TIKA-3865-params.xml b/tika-pipes/tika-pipes-core/src/test/resources/org/apache/tika/config/TIKA-3865-params.xml
similarity index 84%
rename from tika-core/src/test/resources/org/apache/tika/config/TIKA-3865-params.xml
rename to tika-pipes/tika-pipes-core/src/test/resources/org/apache/tika/config/TIKA-3865-params.xml
index 44733a495..8face69eb 100644
--- a/tika-core/src/test/resources/org/apache/tika/config/TIKA-3865-params.xml
+++ b/tika-pipes/tika-pipes-core/src/test/resources/org/apache/tika/config/TIKA-3865-params.xml
@@ -25,13 +25,13 @@
       <emitWithinMillis>60000</emitWithinMillis>
       <numEmitters>1</numEmitters>
     </params>
-    <pipesReporter class="org.apache.tika.pipes.CompositePipesReporter">
-      <pipesReporter class="org.apache.tika.pipes.async.MockReporter">
+    <pipesReporter class="org.apache.tika.pipes.core.CompositePipesReporter">
+      <pipesReporter class="org.apache.tika.pipes.core.async.MockReporter">
         <params>
           <endpoint>somethingOrOther1</endpoint>
         </params>
       </pipesReporter>
-      <pipesReporter class="org.apache.tika.pipes.async.MockReporter">
+      <pipesReporter class="org.apache.tika.pipes.core.async.MockReporter">
         <params>
           <endpoint>somethingOrOther2</endpoint>
         </params>
diff --git a/tika-core/src/test/resources/org/apache/tika/config/emitters-config.xml b/tika-pipes/tika-pipes-core/src/test/resources/org/apache/tika/config/emitters-config.xml
similarity index 87%
rename from tika-core/src/test/resources/org/apache/tika/config/emitters-config.xml
rename to tika-pipes/tika-pipes-core/src/test/resources/org/apache/tika/config/emitters-config.xml
index 89e7826be..f30eda4bd 100644
--- a/tika-core/src/test/resources/org/apache/tika/config/emitters-config.xml
+++ b/tika-pipes/tika-pipes-core/src/test/resources/org/apache/tika/config/emitters-config.xml
@@ -17,10 +17,10 @@
 -->
 <properties>
   <emitters>
-    <emitter class="org.apache.tika.pipes.async.MockEmitter">
+    <emitter class="org.apache.tika.pipes.core.async.MockEmitter">
       <name>em1</name>
     </emitter>
-    <emitter class="org.apache.tika.pipes.async.MockEmitter">
+    <emitter class="org.apache.tika.pipes.core.async.MockEmitter">
       <name>em2</name>
     </emitter>
   </emitters>
diff --git a/tika-core/src/test/resources/org/apache/tika/config/emitters-duplicate-config.xml b/tika-pipes/tika-pipes-core/src/test/resources/org/apache/tika/config/emitters-duplicate-config.xml
similarity index 88%
rename from tika-core/src/test/resources/org/apache/tika/config/emitters-duplicate-config.xml
rename to tika-pipes/tika-pipes-core/src/test/resources/org/apache/tika/config/emitters-duplicate-config.xml
index 4a173acf0..5a5de60a3 100644
--- a/tika-core/src/test/resources/org/apache/tika/config/emitters-duplicate-config.xml
+++ b/tika-pipes/tika-pipes-core/src/test/resources/org/apache/tika/config/emitters-duplicate-config.xml
@@ -17,12 +17,12 @@
 -->
 <properties>
     <emitters>
-        <emitter class="org.apache.tika.pipes.emitter.MockEmitter">
+        <emitter class="org.apache.tika.pipes.core.emitter.MockEmitter">
             <params>
                 <name>em1</name>
             </params>
         </emitter>
-        <emitter class="org.apache.tika.pipes.emitter.MockEmitter">
+        <emitter class="org.apache.tika.pipes.core.emitter.MockEmitter">
             <params>
                 <name>em1</name>
             </params>
diff --git a/tika-core/src/test/resources/org/apache/tika/config/emitters-mock-throw-on-check.xml b/tika-pipes/tika-pipes-core/src/test/resources/org/apache/tika/config/emitters-mock-throw-on-check.xml
similarity index 93%
rename from tika-core/src/test/resources/org/apache/tika/config/emitters-mock-throw-on-check.xml
rename to tika-pipes/tika-pipes-core/src/test/resources/org/apache/tika/config/emitters-mock-throw-on-check.xml
index 6d16bffac..513184bc6 100644
--- a/tika-core/src/test/resources/org/apache/tika/config/emitters-mock-throw-on-check.xml
+++ b/tika-pipes/tika-pipes-core/src/test/resources/org/apache/tika/config/emitters-mock-throw-on-check.xml
@@ -17,7 +17,7 @@
 -->
 <properties>
   <emitters>
-    <emitter class="org.apache.tika.pipes.emitter.MockEmitter">
+    <emitter class="org.apache.tika.pipes.core.emitter.MockEmitter">
       <params>
         <name>mock</name>
         <throwOnCheck>true</throwOnCheck>
diff --git a/tika-core/src/test/resources/org/apache/tika/config/fetchers-config.xml b/tika-pipes/tika-pipes-core/src/test/resources/org/apache/tika/config/fetchers-config.xml
similarity index 86%
rename from tika-core/src/test/resources/org/apache/tika/config/fetchers-config.xml
rename to tika-pipes/tika-pipes-core/src/test/resources/org/apache/tika/config/fetchers-config.xml
index cc87ccee9..ec2032921 100644
--- a/tika-core/src/test/resources/org/apache/tika/config/fetchers-config.xml
+++ b/tika-pipes/tika-pipes-core/src/test/resources/org/apache/tika/config/fetchers-config.xml
@@ -17,11 +17,11 @@
 -->
 <properties>
   <fetchers>
-    <fetcher class="org.apache.tika.pipes.fetcher.fs.FileSystemFetcher">
+    <fetcher class="org.apache.tika.pipes.core.fetcher.fs.FileSystemFetcher">
       <name>fs1</name>
       <basePath>/my/base/path1</basePath>
     </fetcher>
-    <fetcher class="org.apache.tika.pipes.fetcher.fs.FileSystemFetcher">
+    <fetcher class="org.apache.tika.pipes.core.fetcher.fs.FileSystemFetcher">
       <name>fs2</name>
       <basePath>/my/base/path2</basePath>
     </fetcher>
diff --git a/tika-core/src/test/resources/org/apache/tika/config/fetchers-duplicate-config.xml b/tika-pipes/tika-pipes-core/src/test/resources/org/apache/tika/config/fetchers-duplicate-config.xml
similarity index 87%
rename from tika-core/src/test/resources/org/apache/tika/config/fetchers-duplicate-config.xml
rename to tika-pipes/tika-pipes-core/src/test/resources/org/apache/tika/config/fetchers-duplicate-config.xml
index 64d785f89..d1706a471 100644
--- a/tika-core/src/test/resources/org/apache/tika/config/fetchers-duplicate-config.xml
+++ b/tika-pipes/tika-pipes-core/src/test/resources/org/apache/tika/config/fetchers-duplicate-config.xml
@@ -17,13 +17,13 @@
 -->
 <properties>
   <fetchers>
-    <fetcher class="org.apache.tika.pipes.fetcher.fs.FileSystemFetcher">
+    <fetcher class="org.apache.tika.pipes.core.fetcher.fs.FileSystemFetcher">
       <params>
           <name>fs1</name>
           <basePath>/my/base/path1</basePath>
       </params>
     </fetcher>
-    <fetcher class="org.apache.tika.pipes.fetcher.fs.FileSystemFetcher">
+    <fetcher class="org.apache.tika.pipes.core.fetcher.fs.FileSystemFetcher">
       <params>
         <name>fs1</name>
           <basePath>/my/base/path2</basePath>
diff --git a/tika-core/src/test/resources/org/apache/tika/config/fetchers-mock-throw-on-check.xml b/tika-pipes/tika-pipes-core/src/test/resources/org/apache/tika/config/fetchers-mock-throw-on-check.xml
similarity index 93%
rename from tika-core/src/test/resources/org/apache/tika/config/fetchers-mock-throw-on-check.xml
rename to tika-pipes/tika-pipes-core/src/test/resources/org/apache/tika/config/fetchers-mock-throw-on-check.xml
index 740537907..3a65f25eb 100644
--- a/tika-core/src/test/resources/org/apache/tika/config/fetchers-mock-throw-on-check.xml
+++ b/tika-pipes/tika-pipes-core/src/test/resources/org/apache/tika/config/fetchers-mock-throw-on-check.xml
@@ -17,7 +17,7 @@
 -->
 <properties>
   <fetchers>
-    <fetcher class="org.apache.tika.pipes.fetcher.MockFetcher">
+    <fetcher class="org.apache.tika.pipes.core.fetcher.MockFetcher">
       <params>
         <name>mock</name>
         <throwOnCheck>true</throwOnCheck>
diff --git a/tika-core/src/test/resources/org/apache/tika/config/fetchers-nobasepath-config.xml b/tika-pipes/tika-pipes-core/src/test/resources/org/apache/tika/config/fetchers-nobasepath-config.xml
similarity index 86%
rename from tika-core/src/test/resources/org/apache/tika/config/fetchers-nobasepath-config.xml
rename to tika-pipes/tika-pipes-core/src/test/resources/org/apache/tika/config/fetchers-nobasepath-config.xml
index 74f5f9000..add8a6215 100644
--- a/tika-core/src/test/resources/org/apache/tika/config/fetchers-nobasepath-config.xml
+++ b/tika-pipes/tika-pipes-core/src/test/resources/org/apache/tika/config/fetchers-nobasepath-config.xml
@@ -17,11 +17,11 @@
 -->
 <properties>
   <fetchers>
-    <fetcher class="org.apache.tika.pipes.fetcher.fs.FileSystemFetcher">
+    <fetcher class="org.apache.tika.pipes.core.fetcher.fs.FileSystemFetcher">
       <name>fs1</name>
       <basePath>/my/base/path1</basePath>
     </fetcher>
-    <fetcher class="org.apache.tika.pipes.fetcher.fs.FileSystemFetcher">
+    <fetcher class="org.apache.tika.pipes.core.fetcher.fs.FileSystemFetcher">
       <name>fs2</name>
     </fetcher>
   </fetchers>
diff --git a/tika-core/src/test/resources/org/apache/tika/config/fetchers-noname-config.xml b/tika-pipes/tika-pipes-core/src/test/resources/org/apache/tika/config/fetchers-noname-config.xml
similarity index 87%
rename from tika-core/src/test/resources/org/apache/tika/config/fetchers-noname-config.xml
rename to tika-pipes/tika-pipes-core/src/test/resources/org/apache/tika/config/fetchers-noname-config.xml
index d07aacc2b..890a7e322 100644
--- a/tika-core/src/test/resources/org/apache/tika/config/fetchers-noname-config.xml
+++ b/tika-pipes/tika-pipes-core/src/test/resources/org/apache/tika/config/fetchers-noname-config.xml
@@ -17,13 +17,13 @@
 -->
 <properties>
   <fetchers>
-    <fetcher class="org.apache.tika.pipes.fetcher.fs.FileSystemFetcher">
+    <fetcher class="org.apache.tika.pipes.core.fetcher.fs.FileSystemFetcher">
       <params>
         <name>fs1</name>
         <basePath>/my/base/path1</basePath>
       </params>
     </fetcher>
-    <fetcher class="org.apache.tika.pipes.fetcher.fs.FileSystemFetcher">
+    <fetcher class="org.apache.tika.pipes.core.fetcher.fs.FileSystemFetcher">
       <params>
         <basePath>/my/base/path2</basePath>
       </params>
diff --git a/tika-core/src/test/resources/org/apache/tika/config/pipes-iterator-config.xml b/tika-pipes/tika-pipes-core/src/test/resources/org/apache/tika/config/pipes-iterator-config.xml
similarity index 91%
rename from tika-core/src/test/resources/org/apache/tika/config/pipes-iterator-config.xml
rename to tika-pipes/tika-pipes-core/src/test/resources/org/apache/tika/config/pipes-iterator-config.xml
index 902d7517e..1f215fc08 100644
--- a/tika-core/src/test/resources/org/apache/tika/config/pipes-iterator-config.xml
+++ b/tika-pipes/tika-pipes-core/src/test/resources/org/apache/tika/config/pipes-iterator-config.xml
@@ -16,7 +16,7 @@
   limitations under the License.
 -->
 <properties>
-  <pipesIterator class="org.apache.tika.pipes.pipesiterator.fs.FileSystemPipesIterator">
+  <pipesIterator class="org.apache.tika.pipes.core.pipesiterator.fs.FileSystemPipesIterator">
     <params>
       <fetcherName>fs1</fetcherName>
       <basePath>/my/base/path1</basePath>
diff --git a/tika-core/src/test/resources/org/apache/tika/config/pipes-iterator-multiple-config.xml b/tika-pipes/tika-pipes-core/src/test/resources/org/apache/tika/config/pipes-iterator-multiple-config.xml
similarity index 85%
rename from tika-core/src/test/resources/org/apache/tika/config/pipes-iterator-multiple-config.xml
rename to tika-pipes/tika-pipes-core/src/test/resources/org/apache/tika/config/pipes-iterator-multiple-config.xml
index eaab6138b..04c138c7f 100644
--- a/tika-core/src/test/resources/org/apache/tika/config/pipes-iterator-multiple-config.xml
+++ b/tika-pipes/tika-pipes-core/src/test/resources/org/apache/tika/config/pipes-iterator-multiple-config.xml
@@ -16,13 +16,13 @@
   limitations under the License.
 -->
 <properties>
-  <pipesIterator class="org.apache.tika.pipes.pipesiterator.fs.FileSystemPipesIterator">
+  <pipesIterator class="org.apache.tika.pipes.core.pipesiterator.fs.FileSystemPipesIterator">
     <params>
       <fetcherName>fs1</fetcherName>
       <basePath>/my/base/path1</basePath>
     </params>
   </pipesIterator>
-  <pipesIterator class="org.apache.tika.pipes.pipesiterator.fs.FileSystemPipesIterator">
+  <pipesIterator class="org.apache.tika.pipes.core.pipesiterator.fs.FileSystemPipesIterator">
     <params>
       <fetcherName>fs2</fetcherName>
       <basePath>/my/base/path2</basePath>
diff --git a/tika-core/src/test/resources/org/apache/tika/pipes/TIKA-3941.xml b/tika-pipes/tika-pipes-core/src/test/resources/org/apache/tika/pipes/core/TIKA-3941.xml
similarity index 86%
rename from tika-core/src/test/resources/org/apache/tika/pipes/TIKA-3941.xml
rename to tika-pipes/tika-pipes-core/src/test/resources/org/apache/tika/pipes/core/TIKA-3941.xml
index 9f37ad0fe..68657b807 100644
--- a/tika-core/src/test/resources/org/apache/tika/pipes/TIKA-3941.xml
+++ b/tika-pipes/tika-pipes-core/src/test/resources/org/apache/tika/pipes/core/TIKA-3941.xml
@@ -17,12 +17,12 @@
 -->
 <properties>
   <autoDetectParserConfig>
-    <digesterFactory class="org.apache.tika.pipes.async.MockDigesterFactory">
+    <digesterFactory class="org.apache.tika.pipes.core.async.MockDigesterFactory">
       <skipContainerDocument>false</skipContainerDocument>
     </digesterFactory>
   </autoDetectParserConfig>
   <fetchers>
-    <fetcher class="org.apache.tika.pipes.fetcher.fs.FileSystemFetcher">
+    <fetcher class="org.apache.tika.pipes.core.fetcher.fs.FileSystemFetcher">
       <name>fs</name>
       <basePath>BASE_PATH</basePath>
     </fetcher>
diff --git a/tika-core/src/test/resources/org/apache/tika/pipes/TIKA-4207-limit-bytes.xml b/tika-pipes/tika-pipes-core/src/test/resources/org/apache/tika/pipes/core/TIKA-4207-limit-bytes.xml
similarity index 88%
rename from tika-core/src/test/resources/org/apache/tika/pipes/TIKA-4207-limit-bytes.xml
rename to tika-pipes/tika-pipes-core/src/test/resources/org/apache/tika/pipes/core/TIKA-4207-limit-bytes.xml
index 5e46a09e9..f4bd5b5cc 100644
--- a/tika-core/src/test/resources/org/apache/tika/pipes/TIKA-4207-limit-bytes.xml
+++ b/tika-pipes/tika-pipes-core/src/test/resources/org/apache/tika/pipes/core/TIKA-4207-limit-bytes.xml
@@ -17,7 +17,7 @@
 -->
 <properties>
   <autoDetectParserConfig>
-    <digesterFactory class="org.apache.tika.pipes.async.MockDigesterFactory">
+    <digesterFactory class="org.apache.tika.pipes.core.async.MockDigesterFactory">
       <skipContainerDocument>false</skipContainerDocument>
     </digesterFactory>
     <embeddedDocumentExtractorFactory class="org.apache.tika.extractor.RUnpackExtractorFactory">
@@ -26,7 +26,7 @@
     </embeddedDocumentExtractorFactory>
   </autoDetectParserConfig>
   <fetchers>
-    <fetcher class="org.apache.tika.pipes.fetcher.fs.FileSystemFetcher">
+    <fetcher class="org.apache.tika.pipes.core.fetcher.fs.FileSystemFetcher">
       <name>fs</name>
       <basePath>BASE_PATH</basePath>
     </fetcher>
diff --git a/tika-core/src/test/resources/org/apache/tika/pipes/TIKA-4207.xml b/tika-pipes/tika-pipes-core/src/test/resources/org/apache/tika/pipes/core/TIKA-4207.xml
similarity index 86%
rename from tika-core/src/test/resources/org/apache/tika/pipes/TIKA-4207.xml
rename to tika-pipes/tika-pipes-core/src/test/resources/org/apache/tika/pipes/core/TIKA-4207.xml
index 9f37ad0fe..68657b807 100644
--- a/tika-core/src/test/resources/org/apache/tika/pipes/TIKA-4207.xml
+++ b/tika-pipes/tika-pipes-core/src/test/resources/org/apache/tika/pipes/core/TIKA-4207.xml
@@ -17,12 +17,12 @@
 -->
 <properties>
   <autoDetectParserConfig>
-    <digesterFactory class="org.apache.tika.pipes.async.MockDigesterFactory">
+    <digesterFactory class="org.apache.tika.pipes.core.async.MockDigesterFactory">
       <skipContainerDocument>false</skipContainerDocument>
     </digesterFactory>
   </autoDetectParserConfig>
   <fetchers>
-    <fetcher class="org.apache.tika.pipes.fetcher.fs.FileSystemFetcher">
+    <fetcher class="org.apache.tika.pipes.core.fetcher.fs.FileSystemFetcher">
       <name>fs</name>
       <basePath>BASE_PATH</basePath>
     </fetcher>
diff --git a/tika-core/src/test/resources/org/apache/tika/pipes/async/TIKA-3507.xml b/tika-pipes/tika-pipes-core/src/test/resources/org/apache/tika/pipes/core/async/TIKA-3507.xml
similarity index 92%
copy from tika-core/src/test/resources/org/apache/tika/pipes/async/TIKA-3507.xml
copy to tika-pipes/tika-pipes-core/src/test/resources/org/apache/tika/pipes/core/async/TIKA-3507.xml
index 2d48bc511..8b4810e71 100644
--- a/tika-core/src/test/resources/org/apache/tika/pipes/async/TIKA-3507.xml
+++ b/tika-pipes/tika-pipes-core/src/test/resources/org/apache/tika/pipes/core/async/TIKA-3507.xml
@@ -23,7 +23,7 @@
     <emitMaxEstimatedBytes>100000</emitMaxEstimatedBytes>
     <emitWithinMillis>60000</emitWithinMillis>
     <numEmitters>1</numEmitters>
-    <pipesReporter class="org.apache.tika.pipes.async.MockReporter">
+    <pipesReporter class="org.apache.tika.pipes.core.async.MockReporter">
       <endpoint>somethingOrOther</endpoint>
     </pipesReporter>
   </async>
diff --git a/tika-core/src/test/resources/org/apache/tika/pipes/async/TIKA-3865.xml b/tika-pipes/tika-pipes-core/src/test/resources/org/apache/tika/pipes/core/async/TIKA-3865.xml
similarity index 83%
rename from tika-core/src/test/resources/org/apache/tika/pipes/async/TIKA-3865.xml
rename to tika-pipes/tika-pipes-core/src/test/resources/org/apache/tika/pipes/core/async/TIKA-3865.xml
index 75eb15bef..13c55751c 100644
--- a/tika-core/src/test/resources/org/apache/tika/pipes/async/TIKA-3865.xml
+++ b/tika-pipes/tika-pipes-core/src/test/resources/org/apache/tika/pipes/core/async/TIKA-3865.xml
@@ -23,11 +23,11 @@
     <emitMaxEstimatedBytes>100000</emitMaxEstimatedBytes>
     <emitWithinMillis>60000</emitWithinMillis>
     <numEmitters>1</numEmitters>
-    <pipesReporter class="org.apache.tika.pipes.CompositePipesReporter">
-      <pipesReporter class="org.apache.tika.pipes.async.MockReporter">
+    <pipesReporter class="org.apache.tika.pipes.core.CompositePipesReporter">
+      <pipesReporter class="org.apache.tika.pipes.core.async.MockReporter">
         <endpoint>somethingOrOther1</endpoint>
       </pipesReporter>
-      <pipesReporter class="org.apache.tika.pipes.async.MockReporter">
+      <pipesReporter class="org.apache.tika.pipes.core.async.MockReporter">
         <endpoint>somethingOrOther2</endpoint>
       </pipesReporter>
     </pipesReporter>
diff --git a/tika-core/src/test/resources/org/apache/tika/pipes/tika-sample-config.xml b/tika-pipes/tika-pipes-core/src/test/resources/org/apache/tika/pipes/core/tika-sample-config.xml
similarity index 89%
rename from tika-core/src/test/resources/org/apache/tika/pipes/tika-sample-config.xml
rename to tika-pipes/tika-pipes-core/src/test/resources/org/apache/tika/pipes/core/tika-sample-config.xml
index c936852d9..c4b72cdc3 100644
--- a/tika-core/src/test/resources/org/apache/tika/pipes/tika-sample-config.xml
+++ b/tika-pipes/tika-pipes-core/src/test/resources/org/apache/tika/pipes/core/tika-sample-config.xml
@@ -28,12 +28,12 @@
     </params>
   </pipes>
   <autoDetectParserConfig>
-    <digesterFactory class="org.apache.tika.pipes.async.MockDigesterFactory">
+    <digesterFactory class="org.apache.tika.pipes.core.async.MockDigesterFactory">
       <skipContainerDocument>false</skipContainerDocument>
     </digesterFactory>
   </autoDetectParserConfig>
   <fetchers>
-    <fetcher class="org.apache.tika.pipes.fetcher.fs.FileSystemFetcher">
+    <fetcher class="org.apache.tika.pipes.core.fetcher.fs.FileSystemFetcher">
       <name>fs</name>
       <basePath>src/test/resources/test-documents</basePath>
     </fetcher>
diff --git a/tika-core/src/test/resources/org/apache/tika/pipes/async/TIKA-3507.xml b/tika-pipes/tika-pipes-core/src/test/resources/test-documents/basic_embedded.xml
similarity index 59%
rename from tika-core/src/test/resources/org/apache/tika/pipes/async/TIKA-3507.xml
rename to tika-pipes/tika-pipes-core/src/test/resources/test-documents/basic_embedded.xml
index 2d48bc511..7536a1603 100644
--- a/tika-core/src/test/resources/org/apache/tika/pipes/async/TIKA-3507.xml
+++ b/tika-pipes/tika-pipes-core/src/test/resources/test-documents/basic_embedded.xml
@@ -1,4 +1,5 @@
 <?xml version="1.0" encoding="UTF-8" ?>
+
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
   or more contributor license agreements.  See the NOTICE file
@@ -17,14 +18,18 @@
   specific language governing permissions and limitations
   under the License.
 -->
-<properties>
-  <async>
-    <maxForEmitBatchBytes>10000</maxForEmitBatchBytes>
-    <emitMaxEstimatedBytes>100000</emitMaxEstimatedBytes>
-    <emitWithinMillis>60000</emitWithinMillis>
-    <numEmitters>1</numEmitters>
-    <pipesReporter class="org.apache.tika.pipes.async.MockReporter">
-      <endpoint>somethingOrOther</endpoint>
-    </pipesReporter>
-  </async>
-</properties>
\ No newline at end of file
+
+<mock>
+
+    <metadata action="add" name="dc:creator">Nikolai Lobachevsky</metadata>
+    <write element="p">main_content</write>
+    <!-- auto detection wasn't working for some reason; add content-type as
+        is to trigger mock on the embedded -->
+    <embedded filename="embed1.xml" content-type="application/mock+xml">
+        &lt;mock&gt;
+            &lt;metadata action=&quot;add&quot; name=&quot;dc:creator&quot;&gt;embeddedAuthor&lt;/metadata&gt;
+            &lt;write element="p"&gt;some_embedded_content&lt;/write&gt;
+        &lt;/mock&gt;
+    </embedded>
+
+</mock>
\ No newline at end of file
diff --git a/tika-core/src/test/resources/test-documents/file-list.txt b/tika-pipes/tika-pipes-core/src/test/resources/test-documents/file-list.txt
similarity index 100%
rename from tika-core/src/test/resources/test-documents/file-list.txt
rename to tika-pipes/tika-pipes-core/src/test/resources/test-documents/file-list.txt
diff --git a/tika-core/src/test/resources/test-documents/mock/embedded.xml b/tika-pipes/tika-pipes-core/src/test/resources/test-documents/mock/embedded.xml
similarity index 100%
rename from tika-core/src/test/resources/test-documents/mock/embedded.xml
rename to tika-pipes/tika-pipes-core/src/test/resources/test-documents/mock/embedded.xml
diff --git a/tika-server/tika-server-standard/src/test/resources/config/tika-config-url-fetcher.xml b/tika-pipes/tika-pipes-core/src/test/resources/test-documents/mock_times.xml
similarity index 75%
copy from tika-server/tika-server-standard/src/test/resources/config/tika-config-url-fetcher.xml
copy to tika-pipes/tika-pipes-core/src/test/resources/test-documents/mock_times.xml
index 25f01b87d..a309655af 100644
--- a/tika-server/tika-server-standard/src/test/resources/config/tika-config-url-fetcher.xml
+++ b/tika-pipes/tika-pipes-core/src/test/resources/test-documents/mock_times.xml
@@ -1,4 +1,5 @@
 <?xml version="1.0" encoding="UTF-8" ?>
+
 <!--
   Licensed to the Apache Software Foundation (ASF) under one
   or more contributor license agreements.  See the NOTICE file
@@ -17,15 +18,9 @@
   specific language governing permissions and limitations
   under the License.
 -->
-<properties>
-  <parsers>
-    <parser class="org.apache.tika.parser.DefaultParser"/>
-  </parsers>
-  <fetchers>
-    <fetcher class="org.apache.tika.pipes.fetcher.url.UrlFetcher">
-      <params>
-        <name>url</name>
-      </params>
-    </fetcher>
-  </fetchers>
-</properties>
\ No newline at end of file
+
+<mock>
+
+    <metadata action="add" name="dc:creator">Nikolai Lobachevsky</metadata>
+    <write element="p" times="30"> hello </write>
+</mock>
\ No newline at end of file
diff --git a/tika-pipes/tika-pipes-core/src/test/resources/test-documents/testOverlappingText.pdf b/tika-pipes/tika-pipes-core/src/test/resources/test-documents/testOverlappingText.pdf
new file mode 100644
index 000000000..282a1abfb
Binary files /dev/null and b/tika-pipes/tika-pipes-core/src/test/resources/test-documents/testOverlappingText.pdf differ
diff --git a/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-az-blob/pom.xml b/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-az-blob/pom.xml
index b5b3b4665..915bcacfc 100644
--- a/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-az-blob/pom.xml
+++ b/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-az-blob/pom.xml
@@ -34,7 +34,7 @@
   <dependencies>
     <dependency>
       <groupId>${project.groupId}</groupId>
-      <artifactId>tika-core</artifactId>
+      <artifactId>tika-pipes-core</artifactId>
       <version>${project.version}</version>
       <scope>provided</scope>
     </dependency>
diff --git a/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-az-blob/src/main/java/org/apache/tika/pipes/pipesiterator/azblob/AZBlobPipesIterator.java b/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-az-blob/src/main/java/org/apache/tika/pipes/pipesiterator/azblob/AZBlobPipesIterator.java
index 0c5d6840d..d4cda5182 100644
--- a/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-az-blob/src/main/java/org/apache/tika/pipes/pipesiterator/azblob/AZBlobPipesIterator.java
+++ b/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-az-blob/src/main/java/org/apache/tika/pipes/pipesiterator/azblob/AZBlobPipesIterator.java
@@ -41,11 +41,11 @@ import org.apache.tika.config.Param;
 import org.apache.tika.exception.TikaConfigException;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.parser.ParseContext;
-import org.apache.tika.pipes.FetchEmitTuple;
-import org.apache.tika.pipes.HandlerConfig;
-import org.apache.tika.pipes.emitter.EmitKey;
-import org.apache.tika.pipes.fetcher.FetchKey;
-import org.apache.tika.pipes.pipesiterator.PipesIterator;
+import org.apache.tika.pipes.core.FetchEmitTuple;
+import org.apache.tika.pipes.core.HandlerConfig;
+import org.apache.tika.pipes.core.emitter.EmitKey;
+import org.apache.tika.pipes.core.fetcher.FetchKey;
+import org.apache.tika.pipes.core.pipesiterator.PipesIterator;
 import org.apache.tika.utils.StringUtils;
 
 public class AZBlobPipesIterator extends PipesIterator implements Initializable {
diff --git a/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-az-blob/src/test/java/org/apache/tika/pipes/pipesiterator/azblob/TestAZBlobPipesIterator.java b/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-az-blob/src/test/java/org/apache/tika/pipes/pipesiterator/azblob/TestAZBlobPipesIterator.java
index f090ac2cf..a393fee92 100644
--- a/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-az-blob/src/test/java/org/apache/tika/pipes/pipesiterator/azblob/TestAZBlobPipesIterator.java
+++ b/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-az-blob/src/test/java/org/apache/tika/pipes/pipesiterator/azblob/TestAZBlobPipesIterator.java
@@ -32,8 +32,8 @@ import java.util.concurrent.TimeUnit;
 import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 
-import org.apache.tika.pipes.FetchEmitTuple;
-import org.apache.tika.pipes.pipesiterator.PipesIterator;
+import org.apache.tika.pipes.core.FetchEmitTuple;
+import org.apache.tika.pipes.core.pipesiterator.PipesIterator;
 
 @Disabled("turn into an actual unit test")
 public class TestAZBlobPipesIterator {
diff --git a/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-csv/pom.xml b/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-csv/pom.xml
index cccfce1d8..e2dc8332d 100644
--- a/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-csv/pom.xml
+++ b/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-csv/pom.xml
@@ -34,7 +34,7 @@
   <dependencies>
     <dependency>
       <groupId>${project.groupId}</groupId>
-      <artifactId>tika-core</artifactId>
+      <artifactId>tika-pipes-core</artifactId>
       <version>${project.version}</version>
       <scope>provided</scope>
     </dependency>
diff --git a/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-csv/src/main/java/org/apache/tika/pipes/pipesiterator/csv/CSVPipesIterator.java b/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-csv/src/main/java/org/apache/tika/pipes/pipesiterator/csv/CSVPipesIterator.java
index e9c006570..9d064ee7c 100644
--- a/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-csv/src/main/java/org/apache/tika/pipes/pipesiterator/csv/CSVPipesIterator.java
+++ b/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-csv/src/main/java/org/apache/tika/pipes/pipesiterator/csv/CSVPipesIterator.java
@@ -41,11 +41,11 @@ import org.apache.tika.exception.TikaConfigException;
 import org.apache.tika.exception.TikaException;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.parser.ParseContext;
-import org.apache.tika.pipes.FetchEmitTuple;
-import org.apache.tika.pipes.HandlerConfig;
-import org.apache.tika.pipes.emitter.EmitKey;
-import org.apache.tika.pipes.fetcher.FetchKey;
-import org.apache.tika.pipes.pipesiterator.PipesIterator;
+import org.apache.tika.pipes.core.FetchEmitTuple;
+import org.apache.tika.pipes.core.HandlerConfig;
+import org.apache.tika.pipes.core.emitter.EmitKey;
+import org.apache.tika.pipes.core.fetcher.FetchKey;
+import org.apache.tika.pipes.core.pipesiterator.PipesIterator;
 import org.apache.tika.utils.StringUtils;
 
 /**
diff --git a/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-csv/src/test/java/TestCSVPipesIterator.java b/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-csv/src/test/java/TestCSVPipesIterator.java
index 772c399cc..dccc1f70c 100644
--- a/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-csv/src/test/java/TestCSVPipesIterator.java
+++ b/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-csv/src/test/java/TestCSVPipesIterator.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-import static org.apache.tika.pipes.pipesiterator.PipesIterator.COMPLETED_SEMAPHORE;
+import static org.apache.tika.pipes.core.pipesiterator.PipesIterator.COMPLETED_SEMAPHORE;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertThrows;
 
@@ -33,7 +33,7 @@ import java.util.concurrent.TimeUnit;
 
 import org.junit.jupiter.api.Test;
 
-import org.apache.tika.pipes.FetchEmitTuple;
+import org.apache.tika.pipes.core.FetchEmitTuple;
 import org.apache.tika.pipes.pipesiterator.csv.CSVPipesIterator;
 
 public class TestCSVPipesIterator {
diff --git a/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-gcs/pom.xml b/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-gcs/pom.xml
index 2f6581de1..99b41ef92 100644
--- a/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-gcs/pom.xml
+++ b/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-gcs/pom.xml
@@ -34,7 +34,7 @@
   <dependencies>
     <dependency>
       <groupId>${project.groupId}</groupId>
-      <artifactId>tika-core</artifactId>
+      <artifactId>tika-pipes-core</artifactId>
       <version>${project.version}</version>
       <scope>provided</scope>
     </dependency>
diff --git a/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-gcs/src/main/java/org/apache/tika/pipes/pipesiterator/gcs/GCSPipesIterator.java b/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-gcs/src/main/java/org/apache/tika/pipes/pipesiterator/gcs/GCSPipesIterator.java
index 248d2461e..6f97a25d5 100644
--- a/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-gcs/src/main/java/org/apache/tika/pipes/pipesiterator/gcs/GCSPipesIterator.java
+++ b/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-gcs/src/main/java/org/apache/tika/pipes/pipesiterator/gcs/GCSPipesIterator.java
@@ -36,11 +36,11 @@ import org.apache.tika.config.Param;
 import org.apache.tika.exception.TikaConfigException;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.parser.ParseContext;
-import org.apache.tika.pipes.FetchEmitTuple;
-import org.apache.tika.pipes.HandlerConfig;
-import org.apache.tika.pipes.emitter.EmitKey;
-import org.apache.tika.pipes.fetcher.FetchKey;
-import org.apache.tika.pipes.pipesiterator.PipesIterator;
+import org.apache.tika.pipes.core.FetchEmitTuple;
+import org.apache.tika.pipes.core.HandlerConfig;
+import org.apache.tika.pipes.core.emitter.EmitKey;
+import org.apache.tika.pipes.core.fetcher.FetchKey;
+import org.apache.tika.pipes.core.pipesiterator.PipesIterator;
 import org.apache.tika.utils.StringUtils;
 
 public class GCSPipesIterator extends PipesIterator implements Initializable {
diff --git a/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-gcs/src/test/java/org/apache/tika/pipes/pipesiterator/gcs/TestGCSPipesIterator.java b/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-gcs/src/test/java/org/apache/tika/pipes/pipesiterator/gcs/TestGCSPipesIterator.java
index c6f4b2773..e240d1d4f 100644
--- a/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-gcs/src/test/java/org/apache/tika/pipes/pipesiterator/gcs/TestGCSPipesIterator.java
+++ b/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-gcs/src/test/java/org/apache/tika/pipes/pipesiterator/gcs/TestGCSPipesIterator.java
@@ -32,8 +32,8 @@ import java.util.concurrent.TimeUnit;
 import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 
-import org.apache.tika.pipes.FetchEmitTuple;
-import org.apache.tika.pipes.pipesiterator.PipesIterator;
+import org.apache.tika.pipes.core.FetchEmitTuple;
+import org.apache.tika.pipes.core.pipesiterator.PipesIterator;
 
 @Disabled("turn into an actual unit test")
 public class TestGCSPipesIterator {
diff --git a/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-jdbc/pom.xml b/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-jdbc/pom.xml
index cdd4aa5ff..f46c85942 100644
--- a/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-jdbc/pom.xml
+++ b/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-jdbc/pom.xml
@@ -34,7 +34,7 @@
   <dependencies>
     <dependency>
       <groupId>${project.groupId}</groupId>
-      <artifactId>tika-core</artifactId>
+      <artifactId>tika-pipes-core</artifactId>
       <version>${project.version}</version>
       <scope>provided</scope>
     </dependency>
diff --git a/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-jdbc/src/main/java/org/apache/tika/pipes/pipesiterator/jdbc/JDBCPipesIterator.java b/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-jdbc/src/main/java/org/apache/tika/pipes/pipesiterator/jdbc/JDBCPipesIterator.java
index 2c178e147..c984caad7 100644
--- a/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-jdbc/src/main/java/org/apache/tika/pipes/pipesiterator/jdbc/JDBCPipesIterator.java
+++ b/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-jdbc/src/main/java/org/apache/tika/pipes/pipesiterator/jdbc/JDBCPipesIterator.java
@@ -40,11 +40,11 @@ import org.apache.tika.config.Param;
 import org.apache.tika.exception.TikaConfigException;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.parser.ParseContext;
-import org.apache.tika.pipes.FetchEmitTuple;
-import org.apache.tika.pipes.HandlerConfig;
-import org.apache.tika.pipes.emitter.EmitKey;
-import org.apache.tika.pipes.fetcher.FetchKey;
-import org.apache.tika.pipes.pipesiterator.PipesIterator;
+import org.apache.tika.pipes.core.FetchEmitTuple;
+import org.apache.tika.pipes.core.HandlerConfig;
+import org.apache.tika.pipes.core.emitter.EmitKey;
+import org.apache.tika.pipes.core.fetcher.FetchKey;
+import org.apache.tika.pipes.core.pipesiterator.PipesIterator;
 import org.apache.tika.utils.StringUtils;
 
 /**
diff --git a/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-jdbc/src/test/java/org/apache/tika/pipes/pipesiterator/jdbc/TestJDBCPipesIterator.java b/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-jdbc/src/test/java/org/apache/tika/pipes/pipesiterator/jdbc/TestJDBCPipesIterator.java
index cad3574ac..818e6f8ac 100644
--- a/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-jdbc/src/test/java/org/apache/tika/pipes/pipesiterator/jdbc/TestJDBCPipesIterator.java
+++ b/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-jdbc/src/test/java/org/apache/tika/pipes/pipesiterator/jdbc/TestJDBCPipesIterator.java
@@ -43,8 +43,8 @@ import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.io.TempDir;
 
-import org.apache.tika.pipes.FetchEmitTuple;
-import org.apache.tika.pipes.pipesiterator.PipesIterator;
+import org.apache.tika.pipes.core.FetchEmitTuple;
+import org.apache.tika.pipes.core.pipesiterator.PipesIterator;
 
 public class TestJDBCPipesIterator {
 
diff --git a/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-json/pom.xml b/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-json/pom.xml
index fb2a7ed96..de14c69a0 100644
--- a/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-json/pom.xml
+++ b/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-json/pom.xml
@@ -34,7 +34,7 @@
   <dependencies>
     <dependency>
       <groupId>${project.groupId}</groupId>
-      <artifactId>tika-core</artifactId>
+      <artifactId>tika-pipes-core</artifactId>
       <version>${project.version}</version>
       <scope>provided</scope>
     </dependency>
diff --git a/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-json/src/main/java/org/apache/tika/pipes/pipesiterator/json/JsonPipesIterator.java b/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-json/src/main/java/org/apache/tika/pipes/pipesiterator/json/JsonPipesIterator.java
index 6d3ceb6c2..c549579ab 100644
--- a/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-json/src/main/java/org/apache/tika/pipes/pipesiterator/json/JsonPipesIterator.java
+++ b/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-json/src/main/java/org/apache/tika/pipes/pipesiterator/json/JsonPipesIterator.java
@@ -30,9 +30,9 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import org.apache.tika.config.Initializable;
-import org.apache.tika.pipes.FetchEmitTuple;
-import org.apache.tika.pipes.pipesiterator.PipesIterator;
-import org.apache.tika.serialization.pipes.JsonFetchEmitTuple;
+import org.apache.tika.pipes.core.FetchEmitTuple;
+import org.apache.tika.pipes.core.pipesiterator.PipesIterator;
+import org.apache.tika.pipes.core.serialization.JsonFetchEmitTuple;
 
 /**
  * Iterates through a UTF-8 text file with one FetchEmitTuple
diff --git a/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-json/src/test/java/org/apache/tika/pipes/pipesiterator/json/TestJsonPipesIterator.java b/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-json/src/test/java/org/apache/tika/pipes/pipesiterator/json/TestJsonPipesIterator.java
index 70a34eff2..d08be1ded 100644
--- a/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-json/src/test/java/org/apache/tika/pipes/pipesiterator/json/TestJsonPipesIterator.java
+++ b/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-json/src/test/java/org/apache/tika/pipes/pipesiterator/json/TestJsonPipesIterator.java
@@ -23,7 +23,7 @@ import java.util.Iterator;
 import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 
-import org.apache.tika.pipes.FetchEmitTuple;
+import org.apache.tika.pipes.core.FetchEmitTuple;
 
 @Disabled("until we can write actual tests")
 public class TestJsonPipesIterator {
diff --git a/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-kafka/pom.xml b/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-kafka/pom.xml
index 226fc5779..ce34608b4 100644
--- a/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-kafka/pom.xml
+++ b/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-kafka/pom.xml
@@ -34,7 +34,7 @@
   <dependencies>
     <dependency>
       <groupId>${project.groupId}</groupId>
-      <artifactId>tika-core</artifactId>
+      <artifactId>tika-pipes-core</artifactId>
       <version>${project.version}</version>
       <scope>provided</scope>
     </dependency>
diff --git a/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-kafka/src/main/java/org/apache/tika/pipes/pipesiterator/kafka/KafkaPipesIterator.java b/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-kafka/src/main/java/org/apache/tika/pipes/pipesiterator/kafka/KafkaPipesIterator.java
index 9fbebcfda..e1b4160dd 100644
--- a/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-kafka/src/main/java/org/apache/tika/pipes/pipesiterator/kafka/KafkaPipesIterator.java
+++ b/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-kafka/src/main/java/org/apache/tika/pipes/pipesiterator/kafka/KafkaPipesIterator.java
@@ -38,11 +38,11 @@ import org.apache.tika.config.TikaConfig;
 import org.apache.tika.exception.TikaConfigException;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.parser.ParseContext;
-import org.apache.tika.pipes.FetchEmitTuple;
-import org.apache.tika.pipes.HandlerConfig;
-import org.apache.tika.pipes.emitter.EmitKey;
-import org.apache.tika.pipes.fetcher.FetchKey;
-import org.apache.tika.pipes.pipesiterator.PipesIterator;
+import org.apache.tika.pipes.core.FetchEmitTuple;
+import org.apache.tika.pipes.core.HandlerConfig;
+import org.apache.tika.pipes.core.emitter.EmitKey;
+import org.apache.tika.pipes.core.fetcher.FetchKey;
+import org.apache.tika.pipes.core.pipesiterator.PipesIterator;
 
 public class KafkaPipesIterator extends PipesIterator implements Initializable {
 
diff --git a/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-kafka/src/test/java/org/apache/tika/pipes/pipesiterator/kafka/TestKafkaPipesIterator.java b/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-kafka/src/test/java/org/apache/tika/pipes/pipesiterator/kafka/TestKafkaPipesIterator.java
index 4b83d9647..b9f8662a1 100644
--- a/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-kafka/src/test/java/org/apache/tika/pipes/pipesiterator/kafka/TestKafkaPipesIterator.java
+++ b/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-kafka/src/test/java/org/apache/tika/pipes/pipesiterator/kafka/TestKafkaPipesIterator.java
@@ -32,8 +32,8 @@ import java.util.concurrent.TimeUnit;
 import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 
-import org.apache.tika.pipes.FetchEmitTuple;
-import org.apache.tika.pipes.pipesiterator.PipesIterator;
+import org.apache.tika.pipes.core.FetchEmitTuple;
+import org.apache.tika.pipes.core.pipesiterator.PipesIterator;
 
 @Disabled("turn into an actual unit test")
 public class TestKafkaPipesIterator {
diff --git a/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-s3/pom.xml b/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-s3/pom.xml
index efe6fffb1..38fca8743 100644
--- a/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-s3/pom.xml
+++ b/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-s3/pom.xml
@@ -34,7 +34,7 @@
   <dependencies>
     <dependency>
       <groupId>${project.groupId}</groupId>
-      <artifactId>tika-core</artifactId>
+      <artifactId>tika-pipes-core</artifactId>
       <version>${project.version}</version>
       <scope>provided</scope>
     </dependency>
diff --git a/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-s3/src/main/java/org/apache/tika/pipes/pipesiterator/s3/S3PipesIterator.java b/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-s3/src/main/java/org/apache/tika/pipes/pipesiterator/s3/S3PipesIterator.java
index 38fc1889c..fc5f6378c 100644
--- a/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-s3/src/main/java/org/apache/tika/pipes/pipesiterator/s3/S3PipesIterator.java
+++ b/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-s3/src/main/java/org/apache/tika/pipes/pipesiterator/s3/S3PipesIterator.java
@@ -47,11 +47,11 @@ import org.apache.tika.exception.TikaConfigException;
 import org.apache.tika.io.FilenameUtils;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.parser.ParseContext;
-import org.apache.tika.pipes.FetchEmitTuple;
-import org.apache.tika.pipes.HandlerConfig;
-import org.apache.tika.pipes.emitter.EmitKey;
-import org.apache.tika.pipes.fetcher.FetchKey;
-import org.apache.tika.pipes.pipesiterator.PipesIterator;
+import org.apache.tika.pipes.core.FetchEmitTuple;
+import org.apache.tika.pipes.core.HandlerConfig;
+import org.apache.tika.pipes.core.emitter.EmitKey;
+import org.apache.tika.pipes.core.fetcher.FetchKey;
+import org.apache.tika.pipes.core.pipesiterator.PipesIterator;
 import org.apache.tika.utils.StringUtils;
 
 public class S3PipesIterator extends PipesIterator implements Initializable {
diff --git a/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-s3/src/test/java/org/apache/tika/pipes/pipesiterator/s3/TestS3PipesIterator.java b/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-s3/src/test/java/org/apache/tika/pipes/pipesiterator/s3/TestS3PipesIterator.java
index 704622e8e..82dbdcffe 100644
--- a/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-s3/src/test/java/org/apache/tika/pipes/pipesiterator/s3/TestS3PipesIterator.java
+++ b/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-s3/src/test/java/org/apache/tika/pipes/pipesiterator/s3/TestS3PipesIterator.java
@@ -32,8 +32,8 @@ import java.util.concurrent.TimeUnit;
 import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 
-import org.apache.tika.pipes.FetchEmitTuple;
-import org.apache.tika.pipes.pipesiterator.PipesIterator;
+import org.apache.tika.pipes.core.FetchEmitTuple;
+import org.apache.tika.pipes.core.pipesiterator.PipesIterator;
 
 @Disabled("turn into an actual unit test")
 public class TestS3PipesIterator {
diff --git a/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-solr/pom.xml b/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-solr/pom.xml
index 53b7786ad..16d56315b 100644
--- a/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-solr/pom.xml
+++ b/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-solr/pom.xml
@@ -34,7 +34,7 @@
   <dependencies>
     <dependency>
       <groupId>${project.groupId}</groupId>
-      <artifactId>tika-core</artifactId>
+      <artifactId>tika-pipes-core</artifactId>
       <version>${project.version}</version>
       <scope>provided</scope>
     </dependency>
diff --git a/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-solr/src/main/java/org/apache/tika/pipes/pipesiterator/solr/SolrPipesIterator.java b/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-solr/src/main/java/org/apache/tika/pipes/pipesiterator/solr/SolrPipesIterator.java
index 3681cdeb9..6cfa5ba05 100644
--- a/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-solr/src/main/java/org/apache/tika/pipes/pipesiterator/solr/SolrPipesIterator.java
+++ b/tika-pipes/tika-pipes-iterators/tika-pipes-iterator-solr/src/main/java/org/apache/tika/pipes/pipesiterator/solr/SolrPipesIterator.java
@@ -46,11 +46,11 @@ import org.apache.tika.config.InitializableProblemHandler;
 import org.apache.tika.exception.TikaConfigException;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.parser.ParseContext;
-import org.apache.tika.pipes.FetchEmitTuple;
-import org.apache.tika.pipes.HandlerConfig;
-import org.apache.tika.pipes.emitter.EmitKey;
-import org.apache.tika.pipes.fetcher.FetchKey;
-import org.apache.tika.pipes.pipesiterator.PipesIterator;
+import org.apache.tika.pipes.core.FetchEmitTuple;
+import org.apache.tika.pipes.core.HandlerConfig;
+import org.apache.tika.pipes.core.emitter.EmitKey;
+import org.apache.tika.pipes.core.fetcher.FetchKey;
+import org.apache.tika.pipes.core.pipesiterator.PipesIterator;
 import org.apache.tika.utils.StringUtils;
 
 /**
diff --git a/tika-pipes/tika-pipes-reporters/tika-pipes-reporter-fs-status/pom.xml b/tika-pipes/tika-pipes-reporters/tika-pipes-reporter-fs-status/pom.xml
index 268446b28..11e8f1faa 100644
--- a/tika-pipes/tika-pipes-reporters/tika-pipes-reporter-fs-status/pom.xml
+++ b/tika-pipes/tika-pipes-reporters/tika-pipes-reporter-fs-status/pom.xml
@@ -34,7 +34,12 @@
   <dependencies>
     <dependency>
       <groupId>${project.groupId}</groupId>
-      <artifactId>tika-core</artifactId>
+      <artifactId>tika-pipes-core</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>${project.groupId}</groupId>
+      <artifactId>tika-pipes-core</artifactId>
       <version>${project.version}</version>
       <scope>provided</scope>
     </dependency>
diff --git a/tika-pipes/tika-pipes-reporters/tika-pipes-reporter-fs-status/src/main/java/org/apache/tika/pipes/reporters/fs/FileSystemStatusReporter.java b/tika-pipes/tika-pipes-reporters/tika-pipes-reporter-fs-status/src/main/java/org/apache/tika/pipes/reporters/fs/FileSystemStatusReporter.java
index b48745a6c..64a30082e 100644
--- a/tika-pipes/tika-pipes-reporters/tika-pipes-reporter-fs-status/src/main/java/org/apache/tika/pipes/reporters/fs/FileSystemStatusReporter.java
+++ b/tika-pipes/tika-pipes-reporters/tika-pipes-reporter-fs-status/src/main/java/org/apache/tika/pipes/reporters/fs/FileSystemStatusReporter.java
@@ -39,11 +39,11 @@ import org.apache.tika.config.Initializable;
 import org.apache.tika.config.InitializableProblemHandler;
 import org.apache.tika.config.Param;
 import org.apache.tika.exception.TikaConfigException;
-import org.apache.tika.pipes.FetchEmitTuple;
-import org.apache.tika.pipes.PipesReporter;
-import org.apache.tika.pipes.PipesResult;
-import org.apache.tika.pipes.async.AsyncStatus;
-import org.apache.tika.pipes.pipesiterator.TotalCountResult;
+import org.apache.tika.pipes.core.FetchEmitTuple;
+import org.apache.tika.pipes.core.PipesReporter;
+import org.apache.tika.pipes.core.PipesResult;
+import org.apache.tika.pipes.core.async.AsyncStatus;
+import org.apache.tika.pipes.core.pipesiterator.TotalCountResult;
 import org.apache.tika.utils.ExceptionUtils;
 
 /**
diff --git a/tika-pipes/tika-pipes-reporters/tika-pipes-reporter-fs-status/src/test/java/org/apache/tika/pipes/reporters/fs/TestFileSystemStatusReporter.java b/tika-pipes/tika-pipes-reporters/tika-pipes-reporter-fs-status/src/test/java/org/apache/tika/pipes/reporters/fs/TestFileSystemStatusReporter.java
index 16296fa1c..0ca284dbe 100644
--- a/tika-pipes/tika-pipes-reporters/tika-pipes-reporter-fs-status/src/test/java/org/apache/tika/pipes/reporters/fs/TestFileSystemStatusReporter.java
+++ b/tika-pipes/tika-pipes-reporters/tika-pipes-reporter-fs-status/src/test/java/org/apache/tika/pipes/reporters/fs/TestFileSystemStatusReporter.java
@@ -40,11 +40,11 @@ import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.io.TempDir;
 
-import org.apache.tika.pipes.PipesReporter;
-import org.apache.tika.pipes.PipesResult;
-import org.apache.tika.pipes.async.AsyncStatus;
-import org.apache.tika.pipes.pipesiterator.PipesIterator;
-import org.apache.tika.pipes.pipesiterator.TotalCountResult;
+import org.apache.tika.pipes.core.PipesReporter;
+import org.apache.tika.pipes.core.PipesResult;
+import org.apache.tika.pipes.core.async.AsyncStatus;
+import org.apache.tika.pipes.core.pipesiterator.PipesIterator;
+import org.apache.tika.pipes.core.pipesiterator.TotalCountResult;
 
 public class TestFileSystemStatusReporter {
 
diff --git a/tika-pipes/tika-pipes-reporters/tika-pipes-reporter-jdbc/pom.xml b/tika-pipes/tika-pipes-reporters/tika-pipes-reporter-jdbc/pom.xml
index 76459918c..b58572c86 100644
--- a/tika-pipes/tika-pipes-reporters/tika-pipes-reporter-jdbc/pom.xml
+++ b/tika-pipes/tika-pipes-reporters/tika-pipes-reporter-jdbc/pom.xml
@@ -34,9 +34,8 @@
   <dependencies>
     <dependency>
       <groupId>${project.groupId}</groupId>
-      <artifactId>tika-core</artifactId>
+      <artifactId>tika-pipes-core</artifactId>
       <version>${project.version}</version>
-      <scope>provided</scope>
     </dependency>
     <dependency>
       <groupId>com.h2database</groupId>
diff --git a/tika-pipes/tika-pipes-reporters/tika-pipes-reporter-jdbc/src/main/java/org/apache/tika/pipes/reporters/jdbc/JDBCPipesReporter.java b/tika-pipes/tika-pipes-reporters/tika-pipes-reporter-jdbc/src/main/java/org/apache/tika/pipes/reporters/jdbc/JDBCPipesReporter.java
index e31c0dc5a..f2a5dfa9b 100644
--- a/tika-pipes/tika-pipes-reporters/tika-pipes-reporter-jdbc/src/main/java/org/apache/tika/pipes/reporters/jdbc/JDBCPipesReporter.java
+++ b/tika-pipes/tika-pipes-reporters/tika-pipes-reporter-jdbc/src/main/java/org/apache/tika/pipes/reporters/jdbc/JDBCPipesReporter.java
@@ -42,9 +42,9 @@ import org.apache.tika.config.Initializable;
 import org.apache.tika.config.InitializableProblemHandler;
 import org.apache.tika.config.Param;
 import org.apache.tika.exception.TikaConfigException;
-import org.apache.tika.pipes.FetchEmitTuple;
-import org.apache.tika.pipes.PipesReporterBase;
-import org.apache.tika.pipes.PipesResult;
+import org.apache.tika.pipes.core.FetchEmitTuple;
+import org.apache.tika.pipes.core.PipesReporterBase;
+import org.apache.tika.pipes.core.PipesResult;
 import org.apache.tika.utils.StringUtils;
 
 /**
diff --git a/tika-pipes/tika-pipes-reporters/tika-pipes-reporter-jdbc/src/test/java/org/apache/tika/pipes/reporters/jdbc/TestJDBCPipesReporter.java b/tika-pipes/tika-pipes-reporters/tika-pipes-reporter-jdbc/src/test/java/org/apache/tika/pipes/reporters/jdbc/TestJDBCPipesReporter.java
index 01d903c5e..0920b4ad5 100644
--- a/tika-pipes/tika-pipes-reporters/tika-pipes-reporter-jdbc/src/test/java/org/apache/tika/pipes/reporters/jdbc/TestJDBCPipesReporter.java
+++ b/tika-pipes/tika-pipes-reporters/tika-pipes-reporter-jdbc/src/test/java/org/apache/tika/pipes/reporters/jdbc/TestJDBCPipesReporter.java
@@ -16,8 +16,8 @@
  */
 package org.apache.tika.pipes.reporters.jdbc;
 
-import static org.apache.tika.pipes.PipesResult.STATUS.PARSE_SUCCESS;
-import static org.apache.tika.pipes.PipesResult.STATUS.PARSE_SUCCESS_WITH_EXCEPTION;
+import static org.apache.tika.pipes.core.PipesResult.STATUS.PARSE_SUCCESS;
+import static org.apache.tika.pipes.core.PipesResult.STATUS.PARSE_SUCCESS_WITH_EXCEPTION;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -48,13 +48,14 @@ import org.apache.commons.io.IOUtils;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.io.TempDir;
 
-import org.apache.tika.pipes.FetchEmitTuple;
-import org.apache.tika.pipes.PipesReporter;
-import org.apache.tika.pipes.PipesResult;
-import org.apache.tika.pipes.async.AsyncConfig;
-import org.apache.tika.pipes.emitter.EmitKey;
-import org.apache.tika.pipes.fetcher.FetchKey;
-import org.apache.tika.pipes.pipesiterator.TotalCountResult;
+import org.apache.tika.pipes.core.FetchEmitTuple;
+import org.apache.tika.pipes.core.PipesReporter;
+import org.apache.tika.pipes.core.PipesResult;
+import org.apache.tika.pipes.core.async.AsyncConfig;
+import org.apache.tika.pipes.core.emitter.EmitKey;
+import org.apache.tika.pipes.core.fetcher.FetchKey;
+import org.apache.tika.pipes.core.pipesiterator.TotalCountResult;
+
 
 public class TestJDBCPipesReporter {
 
diff --git a/tika-pipes/tika-pipes-reporters/tika-pipes-reporter-opensearch/pom.xml b/tika-pipes/tika-pipes-reporters/tika-pipes-reporter-opensearch/pom.xml
index 4e4cb24e6..eb95a03f2 100644
--- a/tika-pipes/tika-pipes-reporters/tika-pipes-reporter-opensearch/pom.xml
+++ b/tika-pipes/tika-pipes-reporters/tika-pipes-reporter-opensearch/pom.xml
@@ -34,7 +34,7 @@
   <dependencies>
     <dependency>
       <groupId>${project.groupId}</groupId>
-      <artifactId>tika-core</artifactId>
+      <artifactId>tika-pipes-core</artifactId>
       <version>${project.version}</version>
       <scope>provided</scope>
     </dependency>
diff --git a/tika-pipes/tika-pipes-reporters/tika-pipes-reporter-opensearch/src/main/java/org/apache/tika/pipes/reporters/opensearch/OpenSearchPipesReporter.java b/tika-pipes/tika-pipes-reporters/tika-pipes-reporter-opensearch/src/main/java/org/apache/tika/pipes/reporters/opensearch/OpenSearchPipesReporter.java
index 7dbe13621..f3e8eef2a 100644
--- a/tika-pipes/tika-pipes-reporters/tika-pipes-reporter-opensearch/src/main/java/org/apache/tika/pipes/reporters/opensearch/OpenSearchPipesReporter.java
+++ b/tika-pipes/tika-pipes-reporters/tika-pipes-reporter-opensearch/src/main/java/org/apache/tika/pipes/reporters/opensearch/OpenSearchPipesReporter.java
@@ -36,9 +36,9 @@ import org.apache.tika.config.Param;
 import org.apache.tika.exception.TikaConfigException;
 import org.apache.tika.metadata.ExternalProcess;
 import org.apache.tika.metadata.Metadata;
-import org.apache.tika.pipes.FetchEmitTuple;
-import org.apache.tika.pipes.PipesReporter;
-import org.apache.tika.pipes.PipesResult;
+import org.apache.tika.pipes.core.FetchEmitTuple;
+import org.apache.tika.pipes.core.PipesReporter;
+import org.apache.tika.pipes.core.PipesResult;
 import org.apache.tika.utils.StringUtils;
 
 /**
diff --git a/tika-server/tika-server-client/pom.xml b/tika-server/tika-server-client/pom.xml
index c823d3fd2..02ef73eca 100644
--- a/tika-server/tika-server-client/pom.xml
+++ b/tika-server/tika-server-client/pom.xml
@@ -29,7 +29,7 @@
   <dependencies>
     <dependency>
       <groupId>${project.groupId}</groupId>
-      <artifactId>tika-core</artifactId>
+      <artifactId>tika-pipes-core</artifactId>
       <version>${project.version}</version>
     </dependency>
     <dependency>
diff --git a/tika-server/tika-server-client/src/main/java/org/apache/tika/server/client/TikaClient.java b/tika-server/tika-server-client/src/main/java/org/apache/tika/server/client/TikaClient.java
index bb4cb365b..977b07477 100644
--- a/tika-server/tika-server-client/src/main/java/org/apache/tika/server/client/TikaClient.java
+++ b/tika-server/tika-server-client/src/main/java/org/apache/tika/server/client/TikaClient.java
@@ -25,8 +25,8 @@ import java.util.Random;
 import org.apache.tika.client.HttpClientFactory;
 import org.apache.tika.exception.TikaConfigException;
 import org.apache.tika.exception.TikaException;
-import org.apache.tika.pipes.FetchEmitTuple;
-import org.apache.tika.serialization.pipes.JsonFetchEmitTuple;
+import org.apache.tika.pipes.core.FetchEmitTuple;
+import org.apache.tika.pipes.core.serialization.JsonFetchEmitTuple;
 
 public class TikaClient {
 
diff --git a/tika-server/tika-server-client/src/main/java/org/apache/tika/server/client/TikaClientCLI.java b/tika-server/tika-server-client/src/main/java/org/apache/tika/server/client/TikaClientCLI.java
index 0abc57a9b..f1cd718f1 100644
--- a/tika-server/tika-server-client/src/main/java/org/apache/tika/server/client/TikaClientCLI.java
+++ b/tika-server/tika-server-client/src/main/java/org/apache/tika/server/client/TikaClientCLI.java
@@ -35,9 +35,9 @@ import org.slf4j.LoggerFactory;
 import org.xml.sax.SAXException;
 
 import org.apache.tika.exception.TikaException;
-import org.apache.tika.pipes.FetchEmitTuple;
-import org.apache.tika.pipes.pipesiterator.CallablePipesIterator;
-import org.apache.tika.pipes.pipesiterator.PipesIterator;
+import org.apache.tika.pipes.core.FetchEmitTuple;
+import org.apache.tika.pipes.core.pipesiterator.CallablePipesIterator;
+import org.apache.tika.pipes.core.pipesiterator.PipesIterator;
 
 public class TikaClientCLI {
 
diff --git a/tika-server/tika-server-client/src/test/resources/tika-config-simple-fs-emitter.xml b/tika-server/tika-server-client/src/test/resources/tika-config-simple-fs-emitter.xml
index f25a1cda2..b2e516362 100644
--- a/tika-server/tika-server-client/src/test/resources/tika-config-simple-fs-emitter.xml
+++ b/tika-server/tika-server-client/src/test/resources/tika-config-simple-fs-emitter.xml
@@ -54,7 +54,7 @@
     </metadataFilter>
   </metadataFilters>
   <emitters>
-    <emitter class="org.apache.tika.pipes.emitter.fs.FileSystemEmitter">
+    <emitter class="org.apache.tika.pipes.core.emitter.fs.FileSystemEmitter">
       <params>
         <name>fs</name>
         <basePath>UPDATE</basePath>
diff --git a/tika-server/tika-server-core/pom.xml b/tika-server/tika-server-core/pom.xml
index a182e0d17..69cfdb8e2 100644
--- a/tika-server/tika-server-core/pom.xml
+++ b/tika-server/tika-server-core/pom.xml
@@ -38,7 +38,7 @@
   <dependencies>
     <dependency>
       <groupId>org.apache.tika</groupId>
-      <artifactId>tika-core</artifactId>
+      <artifactId>tika-pipes-core</artifactId>
       <version>${project.version}</version>
     </dependency>
     <dependency>
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 e7f1d210e..66e4b69fc 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
@@ -32,9 +32,9 @@ import org.slf4j.LoggerFactory;
 import org.apache.tika.exception.TikaException;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.parser.ParseContext;
-import org.apache.tika.pipes.fetcher.Fetcher;
-import org.apache.tika.pipes.fetcher.FetcherManager;
-import org.apache.tika.pipes.fetcher.RangeFetcher;
+import org.apache.tika.pipes.core.fetcher.Fetcher;
+import org.apache.tika.pipes.core.fetcher.FetcherManager;
+import org.apache.tika.pipes.core.fetcher.RangeFetcher;
 import org.apache.tika.server.core.resource.TikaResource;
 
 /**
diff --git a/tika-server/tika-server-core/src/main/java/org/apache/tika/server/core/TikaServerProcess.java b/tika-server/tika-server-core/src/main/java/org/apache/tika/server/core/TikaServerProcess.java
index 6c7cc97f7..e1afe2491 100644
--- a/tika-server/tika-server-core/src/main/java/org/apache/tika/server/core/TikaServerProcess.java
+++ b/tika-server/tika-server-core/src/main/java/org/apache/tika/server/core/TikaServerProcess.java
@@ -64,8 +64,8 @@ import org.apache.tika.exception.TikaException;
 import org.apache.tika.parser.DigestingParser;
 import org.apache.tika.parser.digestutils.BouncyCastleDigester;
 import org.apache.tika.parser.digestutils.CommonsDigester;
-import org.apache.tika.pipes.emitter.EmitterManager;
-import org.apache.tika.pipes.fetcher.FetcherManager;
+import org.apache.tika.pipes.core.emitter.EmitterManager;
+import org.apache.tika.pipes.core.fetcher.FetcherManager;
 import org.apache.tika.server.core.resource.AsyncResource;
 import org.apache.tika.server.core.resource.DetectorResource;
 import org.apache.tika.server.core.resource.LanguageResource;
diff --git a/tika-server/tika-server-core/src/main/java/org/apache/tika/server/core/resource/AsyncRequest.java b/tika-server/tika-server-core/src/main/java/org/apache/tika/server/core/resource/AsyncRequest.java
index 5636e1d1f..425b97f63 100644
--- a/tika-server/tika-server-core/src/main/java/org/apache/tika/server/core/resource/AsyncRequest.java
+++ b/tika-server/tika-server-core/src/main/java/org/apache/tika/server/core/resource/AsyncRequest.java
@@ -18,7 +18,7 @@ package org.apache.tika.server.core.resource;
 
 import java.util.List;
 
-import org.apache.tika.pipes.FetchEmitTuple;
+import org.apache.tika.pipes.core.FetchEmitTuple;
 
 public class AsyncRequest {
     private final List<FetchEmitTuple> tuples;
diff --git a/tika-server/tika-server-core/src/main/java/org/apache/tika/server/core/resource/AsyncResource.java b/tika-server/tika-server-core/src/main/java/org/apache/tika/server/core/resource/AsyncResource.java
index 79107476e..aa2160fc5 100644
--- a/tika-server/tika-server-core/src/main/java/org/apache/tika/server/core/resource/AsyncResource.java
+++ b/tika-server/tika-server-core/src/main/java/org/apache/tika/server/core/resource/AsyncResource.java
@@ -43,14 +43,14 @@ import org.apache.tika.exception.TikaException;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.metadata.TikaCoreProperties;
 import org.apache.tika.parser.ParseContext;
-import org.apache.tika.pipes.FetchEmitTuple;
-import org.apache.tika.pipes.async.AsyncProcessor;
-import org.apache.tika.pipes.async.OfferLargerThanQueueSize;
-import org.apache.tika.pipes.emitter.EmitData;
-import org.apache.tika.pipes.emitter.EmitterManager;
-import org.apache.tika.pipes.extractor.EmbeddedDocumentBytesConfig;
-import org.apache.tika.pipes.fetcher.FetchKey;
-import org.apache.tika.serialization.pipes.JsonFetchEmitTupleList;
+import org.apache.tika.pipes.core.FetchEmitTuple;
+import org.apache.tika.pipes.core.async.AsyncProcessor;
+import org.apache.tika.pipes.core.async.OfferLargerThanQueueSize;
+import org.apache.tika.pipes.core.emitter.EmitData;
+import org.apache.tika.pipes.core.emitter.EmitterManager;
+import org.apache.tika.pipes.core.extractor.EmbeddedDocumentBytesConfig;
+import org.apache.tika.pipes.core.fetcher.FetchKey;
+import org.apache.tika.pipes.core.serialization.JsonFetchEmitTupleList;
 
 @Path("/async")
 public class AsyncResource {
diff --git a/tika-server/tika-server-core/src/main/java/org/apache/tika/server/core/resource/PipesResource.java b/tika-server/tika-server-core/src/main/java/org/apache/tika/server/core/resource/PipesResource.java
index ab4c38add..fd12bc81c 100644
--- a/tika-server/tika-server-core/src/main/java/org/apache/tika/server/core/resource/PipesResource.java
+++ b/tika-server/tika-server-core/src/main/java/org/apache/tika/server/core/resource/PipesResource.java
@@ -37,12 +37,12 @@ import org.slf4j.LoggerFactory;
 import org.apache.tika.exception.TikaConfigException;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.metadata.TikaCoreProperties;
-import org.apache.tika.pipes.FetchEmitTuple;
-import org.apache.tika.pipes.PipesConfig;
-import org.apache.tika.pipes.PipesException;
-import org.apache.tika.pipes.PipesParser;
-import org.apache.tika.pipes.PipesResult;
-import org.apache.tika.serialization.pipes.JsonFetchEmitTuple;
+import org.apache.tika.pipes.core.FetchEmitTuple;
+import org.apache.tika.pipes.core.PipesConfig;
+import org.apache.tika.pipes.core.PipesException;
+import org.apache.tika.pipes.core.PipesParser;
+import org.apache.tika.pipes.core.PipesResult;
+import org.apache.tika.pipes.core.serialization.JsonFetchEmitTuple;
 
 @Path("/pipes")
 public class PipesResource {
diff --git a/tika-server/tika-server-core/src/main/java/org/apache/tika/server/core/resource/RecursiveMetadataResource.java b/tika-server/tika-server-core/src/main/java/org/apache/tika/server/core/resource/RecursiveMetadataResource.java
index 8b26a672a..298620076 100644
--- a/tika-server/tika-server-core/src/main/java/org/apache/tika/server/core/resource/RecursiveMetadataResource.java
+++ b/tika-server/tika-server-core/src/main/java/org/apache/tika/server/core/resource/RecursiveMetadataResource.java
@@ -45,7 +45,7 @@ import org.apache.tika.metadata.listfilter.MetadataListFilter;
 import org.apache.tika.parser.ParseContext;
 import org.apache.tika.parser.Parser;
 import org.apache.tika.parser.RecursiveParserWrapper;
-import org.apache.tika.pipes.HandlerConfig;
+import org.apache.tika.pipes.core.HandlerConfig;
 import org.apache.tika.sax.BasicContentHandlerFactory;
 import org.apache.tika.sax.RecursiveParserWrapperHandler;
 import org.apache.tika.server.core.MetadataList;
diff --git a/tika-server/tika-server-core/src/main/java/org/apache/tika/server/core/resource/TikaResource.java b/tika-server/tika-server-core/src/main/java/org/apache/tika/server/core/resource/TikaResource.java
index 257a9e79e..7fc042a7d 100644
--- a/tika-server/tika-server-core/src/main/java/org/apache/tika/server/core/resource/TikaResource.java
+++ b/tika-server/tika-server-core/src/main/java/org/apache/tika/server/core/resource/TikaResource.java
@@ -74,7 +74,7 @@ import org.apache.tika.parser.AutoDetectParser;
 import org.apache.tika.parser.DigestingParser;
 import org.apache.tika.parser.ParseContext;
 import org.apache.tika.parser.Parser;
-import org.apache.tika.pipes.HandlerConfig;
+import org.apache.tika.pipes.core.HandlerConfig;
 import org.apache.tika.sax.BasicContentHandlerFactory;
 import org.apache.tika.sax.BodyContentHandler;
 import org.apache.tika.sax.ExpandedTitleContentHandler;
diff --git a/tika-server/tika-server-core/src/test/java/org/apache/tika/server/core/TikaPipesTest.java b/tika-server/tika-server-core/src/test/java/org/apache/tika/server/core/TikaPipesTest.java
index 4bb990098..078a38405 100644
--- a/tika-server/tika-server-core/src/test/java/org/apache/tika/server/core/TikaPipesTest.java
+++ b/tika-server/tika-server-core/src/test/java/org/apache/tika/server/core/TikaPipesTest.java
@@ -52,14 +52,14 @@ import org.apache.tika.exception.TikaConfigException;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.metadata.TikaCoreProperties;
 import org.apache.tika.parser.ParseContext;
-import org.apache.tika.pipes.FetchEmitTuple;
-import org.apache.tika.pipes.HandlerConfig;
-import org.apache.tika.pipes.emitter.EmitKey;
-import org.apache.tika.pipes.fetcher.FetchKey;
-import org.apache.tika.pipes.fetcher.FetcherManager;
+import org.apache.tika.pipes.core.FetchEmitTuple;
+import org.apache.tika.pipes.core.HandlerConfig;
+import org.apache.tika.pipes.core.emitter.EmitKey;
+import org.apache.tika.pipes.core.fetcher.FetchKey;
+import org.apache.tika.pipes.core.fetcher.FetcherManager;
+import org.apache.tika.pipes.core.serialization.JsonFetchEmitTuple;
 import org.apache.tika.sax.BasicContentHandlerFactory;
 import org.apache.tika.serialization.JsonMetadataList;
-import org.apache.tika.serialization.pipes.JsonFetchEmitTuple;
 import org.apache.tika.server.core.resource.PipesResource;
 import org.apache.tika.server.core.writer.JSONObjWriter;
 import org.apache.tika.utils.ProcessUtils;
@@ -102,9 +102,12 @@ public class TikaPipesTest extends CXFTestBase {
         TIKA_CONFIG_PATH = Files.createTempFile(TMP_DIR, "tika-pipes-", ".xml");
         TIKA_PIPES_LOG4j2_PATH = Files.createTempFile(TMP_DIR, "log4j2-", ".xml");
         Files.copy(TikaPipesTest.class.getResourceAsStream("/log4j2.xml"), TIKA_PIPES_LOG4j2_PATH, StandardCopyOption.REPLACE_EXISTING);
-        TIKA_CONFIG_XML = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<properties>" + "<fetchers>" + "<fetcher class=\"org.apache.tika.pipes.fetcher.fs.FileSystemFetcher\">" +
-                "<name>fsf</name>" + "<basePath>" + inputDir.toAbsolutePath() + "</basePath>" + "</fetcher>" + "</fetchers>" + "<emitters>" +
-                "<emitter class=\"org.apache.tika.pipes.emitter.fs.FileSystemEmitter\">" + "<name>fse</name>" + "<basePath>" + TMP_OUTPUT_DIR.toAbsolutePath() + "</basePath>" +
+        TIKA_CONFIG_XML = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<properties>" +
+                "<fetchers>" + "<fetcher class=\"org.apache.tika.pipes.core.fetcher.fs.FileSystemFetcher\">" +
+                "<name>fsf</name>" + "<basePath>" + inputDir.toAbsolutePath() + "</basePath>"
+                + "</fetcher>" + "</fetchers>" + "<emitters>" +
+                "<emitter class=\"org.apache.tika.pipes.core.emitter.fs.FileSystemEmitter\">" + "<name>fse</name>"
+                + "<basePath>" + TMP_OUTPUT_DIR.toAbsolutePath() + "</basePath>" +
                 "</emitter>" + "</emitters>" + "<pipes><tikaConfig>" + ProcessUtils.escapeCommandLine(TIKA_CONFIG_PATH
                 .toAbsolutePath()
                 .toString()) + "</tikaConfig><numClients>10</numClients>" + "<forkedJvmArgs>" + "<arg>-Xmx256m</arg>" + "<arg>-Dlog4j.configurationFile=file:" +
diff --git a/tika-server/tika-server-core/src/test/java/org/apache/tika/server/core/TikaResourceFetcherTest.java b/tika-server/tika-server-core/src/test/java/org/apache/tika/server/core/TikaResourceFetcherTest.java
index 47219afa4..db780c470 100644
--- a/tika-server/tika-server-core/src/test/java/org/apache/tika/server/core/TikaResourceFetcherTest.java
+++ b/tika-server/tika-server-core/src/test/java/org/apache/tika/server/core/TikaResourceFetcherTest.java
@@ -37,7 +37,7 @@ import org.junit.jupiter.api.Test;
 
 import org.apache.tika.exception.TikaConfigException;
 import org.apache.tika.io.TikaInputStream;
-import org.apache.tika.pipes.fetcher.FetcherManager;
+import org.apache.tika.pipes.core.fetcher.FetcherManager;
 import org.apache.tika.server.core.resource.TikaResource;
 import org.apache.tika.server.core.writer.JSONMessageBodyWriter;
 
diff --git a/tika-server/tika-server-core/src/test/java/org/apache/tika/server/core/TikaServerAsyncIntegrationTest.java b/tika-server/tika-server-core/src/test/java/org/apache/tika/server/core/TikaServerAsyncIntegrationTest.java
index 9ec97b3a5..fea5ec08a 100644
--- a/tika-server/tika-server-core/src/test/java/org/apache/tika/server/core/TikaServerAsyncIntegrationTest.java
+++ b/tika-server/tika-server-core/src/test/java/org/apache/tika/server/core/TikaServerAsyncIntegrationTest.java
@@ -46,11 +46,11 @@ import org.slf4j.LoggerFactory;
 
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.parser.ParseContext;
-import org.apache.tika.pipes.FetchEmitTuple;
-import org.apache.tika.pipes.HandlerConfig;
-import org.apache.tika.pipes.emitter.EmitKey;
-import org.apache.tika.pipes.fetcher.FetchKey;
-import org.apache.tika.serialization.pipes.JsonFetchEmitTupleList;
+import org.apache.tika.pipes.core.FetchEmitTuple;
+import org.apache.tika.pipes.core.HandlerConfig;
+import org.apache.tika.pipes.core.emitter.EmitKey;
+import org.apache.tika.pipes.core.fetcher.FetchKey;
+import org.apache.tika.pipes.core.serialization.JsonFetchEmitTupleList;
 import org.apache.tika.utils.ProcessUtils;
 
 @Disabled("useful for development...need to turn it into a real unit test")
@@ -98,7 +98,7 @@ public class TikaServerAsyncIntegrationTest extends IntegrationTestBase {
         TIKA_CONFIG_XML =
                 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<properties>" + "<fetchers>" + "<fetcher class=\"org.apache.tika.pipes.fetcher.fs.FileSystemFetcher\">" + "<name>" +
                         FETCHER_NAME + "</name>" + "<basePath>" + inputDir.toAbsolutePath() + "</basePath>" + "</fetcher>" + "</fetchers>" + "<emitters>" +
-                        "<emitter class=\"org.apache.tika.pipes.emitter.fs.FileSystemEmitter\">" + "<name>" + EMITTER_NAME + "</name>" + "<basePath>" +
+                        "<emitter class=\"org.apache.tika.pipes.core.emitter.fs.FileSystemEmitter\">" + "<name>" + EMITTER_NAME + "</name>" + "<basePath>" +
                         TMP_OUTPUT_DIR.toAbsolutePath() + "</basePath>" + "</emitter>" + "</emitters>" + "<server><endpoints><endpoint>async</endpoint></endpoints>" +
                         "<enableUnsecureFeatures>true</enableUnsecureFeatures></server>" + "<async><tikaConfig>" + ProcessUtils.escapeCommandLine(TIKA_CONFIG
                         .toAbsolutePath()
diff --git a/tika-server/tika-server-core/src/test/java/org/apache/tika/server/core/TikaServerPipesIntegrationTest.java b/tika-server/tika-server-core/src/test/java/org/apache/tika/server/core/TikaServerPipesIntegrationTest.java
index 00583ad06..9045865ad 100644
--- a/tika-server/tika-server-core/src/test/java/org/apache/tika/server/core/TikaServerPipesIntegrationTest.java
+++ b/tika-server/tika-server-core/src/test/java/org/apache/tika/server/core/TikaServerPipesIntegrationTest.java
@@ -44,11 +44,11 @@ import org.slf4j.LoggerFactory;
 
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.parser.ParseContext;
-import org.apache.tika.pipes.FetchEmitTuple;
-import org.apache.tika.pipes.HandlerConfig;
-import org.apache.tika.pipes.emitter.EmitKey;
-import org.apache.tika.pipes.fetcher.FetchKey;
-import org.apache.tika.serialization.pipes.JsonFetchEmitTuple;
+import org.apache.tika.pipes.core.FetchEmitTuple;
+import org.apache.tika.pipes.core.HandlerConfig;
+import org.apache.tika.pipes.core.emitter.EmitKey;
+import org.apache.tika.pipes.core.fetcher.FetchKey;
+import org.apache.tika.pipes.core.serialization.JsonFetchEmitTuple;
 import org.apache.tika.utils.ProcessUtils;
 
 public class TikaServerPipesIntegrationTest extends IntegrationTestBase {
@@ -76,10 +76,15 @@ public class TikaServerPipesIntegrationTest extends IntegrationTestBase {
         TIKA_CONFIG_TIMEOUT = TEMP_WORKING_DIR.resolve("tika-config-timeout.xml");
         //TODO -- clean this up so that port is sufficient and we don't need portString
         String xml1 =
-                "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<properties>" + "<fetchers>" + "<fetcher class=\"org.apache.tika.pipes.fetcher.fs.FileSystemFetcher\">" + "<name>" +
-                        FETCHER_NAME + "</name>" + "<basePath>" + inputDir.toAbsolutePath() + "</basePath>" + "</fetcher>" + "</fetchers>" + "<emitters>" +
-                        "<emitter class=\"org.apache.tika.pipes.emitter.fs.FileSystemEmitter\">" + "<name>" + EMITTER_NAME + "</name>" + "<basePath>" +
-                        TEMP_OUTPUT_DIR.toAbsolutePath() + "</basePath>" + "</emitter>" + "</emitters>" + "<server>" + "<enableUnsecureFeatures>true</enableUnsecureFeatures>" +
+                "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<properties>" + "<fetchers>" +
+                        "<fetcher class=\"org.apache.tika.pipes.core.fetcher.fs.FileSystemFetcher\">" +
+                        "<name>" +
+                        FETCHER_NAME + "</name>" + "<basePath>" + inputDir.toAbsolutePath() + "</basePath>" + "</fetcher>" +
+                        "</fetchers>" + "<emitters>" +
+                        "<emitter class=\"org.apache.tika.pipes.core.emitter.fs.FileSystemEmitter\">" + "<name>" + EMITTER_NAME +
+                        "</name>" + "<basePath>" +
+                        TEMP_OUTPUT_DIR.toAbsolutePath() + "</basePath>" + "</emitter>" + "</emitters>" + "<server>" +
+                        "<enableUnsecureFeatures>true</enableUnsecureFeatures>" +
                         "<port>9999</port>" + "<endpoints>" + "<endpoint>pipes</endpoint>" + "<endpoint>status</endpoint>" + "</endpoints>";
         String xml2 = "</server>" + "<pipes><tikaConfig>" + ProcessUtils.escapeCommandLine(TIKA_CONFIG
                 .toAbsolutePath()
diff --git a/tika-server/tika-server-core/src/test/resources/configs/tika-config-server-fetcher-template.xml b/tika-server/tika-server-core/src/test/resources/configs/tika-config-server-fetcher-template.xml
index 1f859c504..0204fd5c1 100644
--- a/tika-server/tika-server-core/src/test/resources/configs/tika-config-server-fetcher-template.xml
+++ b/tika-server/tika-server-core/src/test/resources/configs/tika-config-server-fetcher-template.xml
@@ -17,7 +17,7 @@
 -->
 <properties>
   <fetchers>
-    <fetcher class="org.apache.tika.pipes.fetcher.fs.FileSystemFetcher">
+    <fetcher class="org.apache.tika.pipes.core.fetcher.fs.FileSystemFetcher">
       <name>fsf</name>
       <basePath>{FETCHER_BASE_PATH}</basePath>
     </fetcher>
diff --git a/tika-server/tika-server-core/src/test/resources/configs/tika-config-server-fetchers-emitters.xml b/tika-server/tika-server-core/src/test/resources/configs/tika-config-server-fetchers-emitters.xml
index 4ed9ab03c..3ab738865 100644
--- a/tika-server/tika-server-core/src/test/resources/configs/tika-config-server-fetchers-emitters.xml
+++ b/tika-server/tika-server-core/src/test/resources/configs/tika-config-server-fetchers-emitters.xml
@@ -23,7 +23,7 @@
     </fetcher>
   </fetchers>
   <emitters>
-    <emitter class="org.apache.tika.pipes.emitter.fs.FileSystemEmitter">
+    <emitter class="org.apache.tika.pipes.core.emitter.fs.FileSystemEmitter">
       <name>fse</name>
       <basePath>/path/or/other/extracts</basePath>
     </emitter>
diff --git a/tika-server/tika-server-standard/src/test/java/org/apache/tika/server/standard/FetcherTest.java b/tika-server/tika-server-standard/src/test/java/org/apache/tika/server/standard/FetcherTest.java
index 0139e7104..dc48fdab3 100644
--- a/tika-server/tika-server-standard/src/test/java/org/apache/tika/server/standard/FetcherTest.java
+++ b/tika-server/tika-server-standard/src/test/java/org/apache/tika/server/standard/FetcherTest.java
@@ -37,7 +37,7 @@ import org.junit.jupiter.api.Test;
 import org.apache.tika.io.TikaInputStream;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.metadata.TikaCoreProperties;
-import org.apache.tika.pipes.fetcher.FetcherManager;
+import org.apache.tika.pipes.core.fetcher.FetcherManager;
 import org.apache.tika.serialization.JsonMetadataList;
 import org.apache.tika.server.core.CXFTestBase;
 import org.apache.tika.server.core.FetcherStreamFactory;
diff --git a/tika-server/tika-server-standard/src/test/java/org/apache/tika/server/standard/TikaPipesTest.java b/tika-server/tika-server-standard/src/test/java/org/apache/tika/server/standard/TikaPipesTest.java
index 36dc60a3c..d75fac108 100644
--- a/tika-server/tika-server-standard/src/test/java/org/apache/tika/server/standard/TikaPipesTest.java
+++ b/tika-server/tika-server-standard/src/test/java/org/apache/tika/server/standard/TikaPipesTest.java
@@ -53,15 +53,15 @@ import org.apache.tika.metadata.Metadata;
 import org.apache.tika.metadata.TikaCoreProperties;
 import org.apache.tika.parser.ParseContext;
 import org.apache.tika.parser.pdf.PDFParserConfig;
-import org.apache.tika.pipes.FetchEmitTuple;
-import org.apache.tika.pipes.HandlerConfig;
-import org.apache.tika.pipes.emitter.EmitKey;
-import org.apache.tika.pipes.extractor.EmbeddedDocumentBytesConfig;
-import org.apache.tika.pipes.fetcher.FetchKey;
-import org.apache.tika.pipes.fetcher.FetcherManager;
+import org.apache.tika.pipes.core.FetchEmitTuple;
+import org.apache.tika.pipes.core.HandlerConfig;
+import org.apache.tika.pipes.core.emitter.EmitKey;
+import org.apache.tika.pipes.core.extractor.EmbeddedDocumentBytesConfig;
+import org.apache.tika.pipes.core.fetcher.FetchKey;
+import org.apache.tika.pipes.core.fetcher.FetcherManager;
+import org.apache.tika.pipes.core.serialization.JsonFetchEmitTuple;
 import org.apache.tika.sax.BasicContentHandlerFactory;
 import org.apache.tika.serialization.JsonMetadataList;
-import org.apache.tika.serialization.pipes.JsonFetchEmitTuple;
 import org.apache.tika.server.core.CXFTestBase;
 import org.apache.tika.server.core.FetcherStreamFactory;
 import org.apache.tika.server.core.InputStreamFactory;
@@ -106,14 +106,20 @@ public class TikaPipesTest extends CXFTestBase {
         Files.copy(TikaPipesTest.class.getResourceAsStream("/log4j2.xml"), TIKA_PIPES_LOG4j2_PATH, StandardCopyOption.REPLACE_EXISTING);
 
         //TODO: templatify this config
-        TIKA_CONFIG_XML = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<properties>" + "<fetchers>" + "<fetcher class=\"org.apache.tika.pipes.fetcher.fs.FileSystemFetcher\">" +
-                "<params>" + "<name>fsf</name>" + "<basePath>" + inputDir.toAbsolutePath() + "</basePath>" + "</params>" + "</fetcher>" + "</fetchers>" + "<emitters>" +
-                "<emitter class=\"org.apache.tika.pipes.emitter.fs.FileSystemEmitter\">" + "<params>" + "<name>fse</name>" + "<basePath>" + TMP_OUTPUT_DIR.toAbsolutePath() +
-                "</basePath>" + "</params>" + "</emitter>" + "<emitter class=\"org.apache.tika.pipes.emitter.fs.FileSystemEmitter\">" + "<params>" + "<name>bytes</name>" +
-                "<basePath>" + TMP_BYTES_DIR.toAbsolutePath() + "</basePath>" + "</params>" + "</emitter>" + "</emitters>" + "<pipes><params><tikaConfig>" +
+        TIKA_CONFIG_XML = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<properties>" + "<fetchers>" +
+                "<fetcher class=\"org.apache.tika.pipes.core.fetcher.fs.FileSystemFetcher\">" +
+                "<params>" + "<name>fsf</name>" + "<basePath>" + inputDir.toAbsolutePath() + "</basePath>" +
+                "</params>" + "</fetcher>" + "</fetchers>" + "<emitters>" +
+                "<emitter class=\"org.apache.tika.pipes.core.emitter.fs.FileSystemEmitter\">" + "<params>" + "<name>fse</name>" +
+                "<basePath>" + TMP_OUTPUT_DIR.toAbsolutePath() +
+                "</basePath>" + "</params>" + "</emitter>" + "<emitter class=\"org.apache.tika.pipes.core.emitter.fs.FileSystemEmitter\">" +
+                "<params>" + "<name>bytes</name>" +
+                "<basePath>" + TMP_BYTES_DIR.toAbsolutePath() + "</basePath>" + "</params>" + "</emitter>" + "</emitters>" +
+                "<pipes><params><tikaConfig>" +
                 ProcessUtils.escapeCommandLine(TIKA_CONFIG_PATH
                         .toAbsolutePath()
-                        .toString()) + "</tikaConfig><numClients>10</numClients>" + "<forkedJvmArgs>" + "<arg>-Xmx256m</arg>" + "<arg>-Dlog4j.configurationFile=file:" +
+                        .toString()) + "</tikaConfig><numClients>10</numClients>" + "<forkedJvmArgs>" + "<arg>-Xmx256m</arg>" +
+                "<arg>-Dlog4j.configurationFile=file:" +
                 ProcessUtils.escapeCommandLine(TIKA_PIPES_LOG4j2_PATH
                         .toAbsolutePath()
                         .toString()) + "</arg>" + "</forkedJvmArgs>" + "</params></pipes>" + "</properties>";
@@ -161,7 +167,8 @@ public class TikaPipesTest extends CXFTestBase {
     @Test
     public void testBasic() throws Exception {
 
-        FetchEmitTuple t = new FetchEmitTuple("myId", new FetchKey("fsf", "test_recursive_embedded.docx"), new EmitKey("fse", ""));
+        FetchEmitTuple t = new FetchEmitTuple("myId", new FetchKey("fsf", "test_recursive_embedded.docx"),
+                new EmitKey("fse", ""));
         StringWriter writer = new StringWriter();
         JsonFetchEmitTuple.toJson(t, writer);
 
diff --git a/tika-server/tika-server-standard/src/test/resources/config/tika-config-url-fetcher.xml b/tika-server/tika-server-standard/src/test/resources/config/tika-config-url-fetcher.xml
index 25f01b87d..731f27122 100644
--- a/tika-server/tika-server-standard/src/test/resources/config/tika-config-url-fetcher.xml
+++ b/tika-server/tika-server-standard/src/test/resources/config/tika-config-url-fetcher.xml
@@ -22,7 +22,7 @@
     <parser class="org.apache.tika.parser.DefaultParser"/>
   </parsers>
   <fetchers>
-    <fetcher class="org.apache.tika.pipes.fetcher.url.UrlFetcher">
+    <fetcher class="org.apache.tika.pipes.core.fetcher.url.UrlFetcher">
       <params>
         <name>url</name>
       </params>