You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xtable.apache.org by jc...@apache.org on 2024/03/10 01:27:55 UTC

(incubator-xtable) branch main updated: Repackaging code under the apache namespace

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

jcamacho pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-xtable.git


The following commit(s) were added to refs/heads/main by this push:
     new 243e981d Repackaging code under the apache namespace
243e981d is described below

commit 243e981d9458d9fb731842ddaaa0b551bbfdff77
Author: Jesus Camacho Rodriguez <jc...@apache.org>
AuthorDate: Sat Mar 9 17:24:58 2024 -0800

    Repackaging code under the apache namespace
    
    Closes #374
---
 README.md                                          |  4 +-
 api/pom.xml                                        |  6 +-
 .../apache/xtable}/client/CatalogConfig.java       |  2 +-
 .../apache/xtable}/client/HudiSourceConfig.java    |  4 +-
 .../apache/xtable}/client/PerTableConfig.java      |  4 +-
 .../apache/xtable}/model/CommitsBacklog.java       |  2 +-
 .../xtable}/model/IncrementalTableChanges.java     |  2 +-
 .../xtable}/model/InstantsForIncrementalSync.java  |  2 +-
 .../apache/xtable}/model/OneSnapshot.java          |  6 +-
 .../apache/xtable}/model/OneTable.java             |  8 +-
 .../apache/xtable}/model/OneTableMetadata.java     |  2 +-
 .../apache/xtable}/model/TableChange.java          |  4 +-
 .../xtable}/model/exception/OneParseException.java |  2 +-
 .../xtable}/model/exception/OneTableErrorCode.java |  2 +-
 .../xtable}/model/exception/OneTableException.java |  2 +-
 .../apache/xtable}/model/schema/OneField.java      |  2 +-
 .../xtable}/model/schema/OnePartitionField.java    |  2 +-
 .../apache/xtable}/model/schema/OneSchema.java     |  2 +-
 .../apache/xtable}/model/schema/OneType.java       |  2 +-
 .../model/schema/PartitionTransformType.java       |  2 +-
 .../apache/xtable}/model/schema/SchemaCatalog.java |  2 +-
 .../apache/xtable}/model/schema/SchemaVersion.java |  2 +-
 .../apache/xtable}/model/stat/ColumnStat.java      |  4 +-
 .../apache/xtable}/model/stat/PartitionValue.java  |  4 +-
 .../apache/xtable}/model/stat/Range.java           | 10 +--
 .../xtable}/model/storage/DataFilesDiff.java       |  2 +-
 .../xtable}/model/storage/DataLayoutStrategy.java  |  2 +-
 .../apache/xtable}/model/storage/FileFormat.java   |  2 +-
 .../apache/xtable}/model/storage/OneDataFile.java  |  8 +-
 .../xtable}/model/storage/OneDataFilesDiff.java    |  2 +-
 .../apache/xtable}/model/storage/OneFileGroup.java |  4 +-
 .../apache/xtable}/model/storage/TableFormat.java  |  2 +-
 .../apache/xtable}/model/sync/SyncMode.java        |  2 +-
 .../apache/xtable}/model/sync/SyncResult.java      |  2 +-
 .../xtable}/model/validation/ValidationCheck.java  |  2 +-
 .../model/validation/ValidationChecker.java        |  6 +-
 .../xtable}/model/validation/ValidationResult.java |  2 +-
 .../xtable}/spi/extractor/ChangesExtractor.java    |  4 +-
 .../xtable}/spi/extractor/DataFileIterator.java    |  4 +-
 .../xtable}/spi/extractor/ExtractFromSource.java   |  9 +-
 .../spi/extractor/SchemaCatalogExtractor.java      |  4 +-
 .../xtable}/spi/extractor/SchemaExtractor.java     |  4 +-
 .../xtable}/spi/extractor/SnapshotExtractor.java   |  4 +-
 .../apache/xtable}/spi/extractor/SourceClient.java | 11 ++-
 .../extractor/SourcePartitionSpecExtractor.java    |  8 +-
 .../xtable}/spi/extractor/TableExtractor.java      |  4 +-
 .../apache/xtable}/spi/sync/TableFormatSync.java   | 16 ++--
 .../apache/xtable}/spi/sync/TargetClient.java      | 16 ++--
 .../xtable}/model/storage/TestDataFilesDiff.java   |  2 +-
 .../model/storage/TestOneDataFilesDiff.java        |  2 +-
 .../spi/extractor/TestExtractFromSource.java       | 18 ++--
 .../xtable}/spi/sync/TestTableFormatSync.java      | 32 ++++----
 core/pom.xml                                       | 12 +--
 .../apache/xtable}/avro/AvroSchemaConverter.java   | 33 ++++----
 .../apache/xtable}/client/OneTableClient.java      | 24 +++---
 .../apache/xtable}/client/PerTableConfigImpl.java  |  8 +-
 .../xtable}/client/SourceClientProvider.java       |  4 +-
 .../xtable}/client/TableFormatClientFactory.java   |  6 +-
 .../xtable}/collectors/CustomCollectors.java       |  2 +-
 .../xtable}/constants/OneTableConstants.java       |  2 +-
 .../xtable}/delta/DeltaActionsConverter.java       | 14 ++--
 .../apache/xtable}/delta/DeltaClient.java          | 22 ++---
 .../apache/xtable}/delta/DeltaClientUtils.java     |  2 +-
 .../xtable}/delta/DeltaDataFileExtractor.java      | 14 ++--
 .../delta/DeltaDataFileUpdatesExtractor.java       | 25 +++---
 .../delta/DeltaIncrementalChangesState.java        |  2 +-
 .../xtable}/delta/DeltaPartitionExtractor.java     | 24 +++---
 .../apache/xtable}/delta/DeltaSchemaExtractor.java | 37 +++++----
 .../apache/xtable}/delta/DeltaSourceClient.java    | 29 ++++---
 .../xtable}/delta/DeltaSourceClientProvider.java   |  6 +-
 .../apache/xtable}/delta/DeltaStatsExtractor.java  | 23 +++---
 .../apache/xtable}/delta/DeltaTableExtractor.java  | 12 +--
 .../apache/xtable}/delta/DeltaValueConverter.java  | 12 +--
 .../apache/xtable}/delta/ScalaUtils.java           |  2 +-
 .../xtable}/exception/ConfigurationException.java  |  6 +-
 .../xtable}/exception/NotSupportedException.java   |  6 +-
 .../apache/xtable}/exception/OneIOException.java   |  6 +-
 .../xtable}/exception/PartitionSpecException.java  |  6 +-
 .../PartitionValuesExtractorException.java         |  6 +-
 .../exception/SchemaExtractorException.java        |  6 +-
 .../exception/UnsupportedSchemaTypeException.java  |  6 +-
 .../xtable}/hudi/BaseFileUpdatesExtractor.java     | 18 ++--
 .../ConfigurationBasedPartitionSpecExtractor.java  | 10 +--
 .../apache/xtable}/hudi/HudiClient.java            | 39 +++++----
 .../apache/xtable}/hudi/HudiDataFileExtractor.java | 25 +++---
 .../apache/xtable}/hudi/HudiFileStats.java         |  4 +-
 .../xtable}/hudi/HudiFileStatsExtractor.java       | 24 +++---
 .../apache/xtable}/hudi/HudiInstantUtils.java      |  4 +-
 .../xtable}/hudi/HudiPartitionValuesExtractor.java | 12 +--
 .../apache/xtable}/hudi/HudiPathUtils.java         |  2 +-
 .../xtable}/hudi/HudiSchemaCatalogExtractor.java   | 12 +--
 .../apache/xtable}/hudi/HudiSchemaExtractor.java   | 10 +--
 .../xtable}/hudi/HudiSourceClientProvider.java     |  6 +-
 .../apache/xtable}/hudi/HudiSourceConfigImpl.java  |  8 +-
 .../hudi/HudiSourcePartitionSpecExtractor.java     |  4 +-
 .../apache/xtable}/hudi/HudiTableExtractor.java    | 24 +++---
 .../apache/xtable}/hudi/HudiTableManager.java      | 12 +--
 .../apache/xtable}/hudi/HudiTargetClient.java      | 40 ++++-----
 .../xtable}/iceberg/IcebergCatalogConfig.java      |  6 +-
 .../apache/xtable}/iceberg/IcebergClient.java      | 24 +++---
 .../iceberg/IcebergColumnStatsConverter.java       | 13 ++-
 .../xtable}/iceberg/IcebergDataFileExtractor.java  | 14 ++--
 .../iceberg/IcebergDataFileUpdatesSync.java        | 19 +++--
 .../iceberg/IcebergPartitionSpecExtractor.java     | 14 ++--
 .../xtable}/iceberg/IcebergPartitionSpecSync.java  |  2 +-
 .../iceberg/IcebergPartitionValueConverter.java    | 20 ++---
 .../iceberg/IcebergPartitionValueExtractor.java    |  6 +-
 .../xtable}/iceberg/IcebergSchemaExtractor.java    | 22 ++---
 .../apache/xtable}/iceberg/IcebergSchemaSync.java  |  4 +-
 .../xtable}/iceberg/IcebergSourceClient.java       | 34 ++++----
 .../iceberg/IcebergSourceClientProvider.java       |  6 +-
 .../xtable}/iceberg/IcebergTableManager.java       |  2 +-
 .../apache/xtable}/paths/PathUtils.java            |  2 +-
 .../apache/xtable}/reflection/ReflectionUtils.java |  4 +-
 .../apache/xtable}/schema/SchemaFieldFinder.java   |  6 +-
 .../apache/xtable}/schema/SchemaUtils.java         |  2 +-
 ...ent => org.apache.xtable.spi.sync.TargetClient} |  6 +-
 .../apache/xtable}/GenericTable.java               |  8 +-
 .../apache/xtable}/ITOneTableClient.java           | 34 ++++----
 .../apache/xtable}/TestAbstractHudiTable.java      |  4 +-
 .../apache/xtable}/TestIcebergTable.java           |  7 +-
 .../apache/xtable}/TestJavaHudiTable.java          |  2 +-
 .../apache/xtable}/TestSparkDeltaTable.java        |  9 +-
 .../apache/xtable}/TestSparkHudiTable.java         |  2 +-
 .../apache/xtable}/ValidationTestHelper.java       |  8 +-
 .../xtable}/avro/TestAvroSchemaConverter.java      | 10 +--
 .../apache/xtable}/client/TestOneTableClient.java  | 30 +++----
 .../apache/xtable}/client/TestPerTableConfig.java  |  8 +-
 .../client/TestTableFormatClientFactory.java       | 12 +--
 .../apache/xtable}/delta/ITDeltaSourceClient.java  | 96 ++++++++++++----------
 .../apache/xtable}/delta/TestDeltaHelper.java      |  8 +-
 .../xtable}/delta/TestDeltaPartitionExtractor.java | 16 ++--
 .../xtable}/delta/TestDeltaSchemaExtractor.java    |  8 +-
 .../xtable}/delta/TestDeltaStatsExtractor.java     | 16 ++--
 .../apache/xtable}/delta/TestDeltaSync.java        | 36 ++++----
 .../xtable}/delta/TestDeltaValueConverter.java     |  8 +-
 .../apache/xtable}/hudi/HudiTestUtil.java          |  4 +-
 .../apache/xtable}/hudi/ITHudiSourceClient.java    | 92 ++++++++++++---------
 .../apache/xtable}/hudi/ITHudiTargetClient.java    | 46 +++++------
 .../xtable}/hudi/TestBaseFileUpdatesExtractor.java | 40 ++++-----
 .../xtable}/hudi/TestHudiFileStatsExtractor.java   | 22 ++---
 .../apache/xtable}/hudi/TestHudiInstantUtils.java  |  2 +-
 .../hudi/TestHudiPartitionValuesExtractor.java     | 18 ++--
 .../xtable}/hudi/TestHudiSchemaExtractor.java      |  6 +-
 .../apache/xtable}/hudi/TestHudiTableManager.java  | 16 ++--
 .../apache/xtable}/hudi/TestHudiTargetClient.java  | 24 +++---
 .../xtable}/iceberg/ITIcebergSourceClient.java     | 28 +++----
 .../apache/xtable}/iceberg/IcebergTestUtils.java   |  2 +-
 .../apache/xtable}/iceberg/StubCatalog.java        |  2 +-
 .../iceberg/TestIcebergColumnStatsConverter.java   | 12 +--
 .../xtable}/iceberg/TestIcebergDataHelper.java     |  4 +-
 .../iceberg/TestIcebergPartitionSpecExtractor.java | 14 ++--
 .../iceberg/TestIcebergPartitionSpecSync.java      |  2 +-
 .../TestIcebergPartitionValueConverter.java        | 16 ++--
 .../iceberg/TestIcebergSchemaExtractor.java        |  8 +-
 .../xtable}/iceberg/TestIcebergSchemaSync.java     |  4 +-
 .../xtable}/iceberg/TestIcebergSourceClient.java   | 35 +++++---
 .../apache/xtable}/iceberg/TestIcebergSync.java    | 44 +++++-----
 .../xtable}/iceberg/TestIcebergTableManager.java   |  2 +-
 .../apache/xtable}/loadtest/LoadTest.java          | 18 ++--
 .../apache/xtable}/paths/TestPathUtils.java        |  2 +-
 .../apache/xtable}/testutil/ColumnStatMapUtil.java | 12 +--
 .../apache/xtable}/testutil/Issues.java            |  2 +-
 core/src/test/resources/log4j2.xml                 |  2 +-
 demo/notebook/demo.ipynb                           | 16 ++--
 demo/start_demo.sh                                 |  4 +-
 hudi-support/extensions/README.md                  |  6 +-
 hudi-support/extensions/pom.xml                    |  8 +-
 .../extensions/AddFieldIdsClientInitCallback.java  |  4 +-
 .../HoodieAvroWriteSupportWithFieldIds.java        |  8 +-
 .../xtable}/hudi/sync/OneTableSyncConfig.java      |  2 +-
 .../apache/xtable}/hudi/sync/OneTableSyncTool.java | 18 ++--
 .../TestAddFieldIdsClientInitCallback.java         |  4 +-
 .../xtable}/hudi/sync/TestOneTableSyncTool.java    |  2 +-
 hudi-support/pom.xml                               |  4 +-
 hudi-support/utils/pom.xml                         |  2 +-
 .../apache/xtable}/hudi/idtracking/IdTracker.java  |  6 +-
 .../xtable}/hudi/idtracking/models/IdMapping.java  |  2 +-
 .../xtable}/hudi/idtracking/models/IdTracking.java |  2 +-
 .../xtable}/hudi/idtracking/TestIdTracker.java     |  6 +-
 pom.xml                                            | 25 ++----
 utilities/pom.xml                                  | 14 ++--
 .../apache/xtable}/utilities/RunSync.java          | 24 +++---
 .../main/resources/onetable-client-defaults.yaml   | 10 +--
 .../apache/xtable}/utilities/TestRunSync.java      | 24 +++---
 website/docs/biglake-metastore.md                  |  2 +-
 website/docs/bigquery.md                           |  4 +-
 187 files changed, 1061 insertions(+), 1012 deletions(-)

diff --git a/README.md b/README.md
index f3c4afdb..71061d9a 100644
--- a/README.md
+++ b/README.md
@@ -77,9 +77,9 @@ datasets:
 # configuration: A map of configuration values specific to this client.
 tableFormatsClients:
     HUDI:
-      sourceClientProviderClass: io.onetable.hudi.HudiSourceClientProvider
+      sourceClientProviderClass: org.apache.xtable.hudi.HudiSourceClientProvider
     DELTA:
-      targetClientProviderClass: io.onetable.delta.DeltaClient
+      targetClientProviderClass: org.apache.xtable.delta.DeltaClient
       configuration:
         spark.master: local[2]
         spark.app.name: onetableclient
diff --git a/api/pom.xml b/api/pom.xml
index 09d35d20..53bdce11 100644
--- a/api/pom.xml
+++ b/api/pom.xml
@@ -3,12 +3,12 @@
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
-    <artifactId>onetable-api</artifactId>
+    <artifactId>xtable-api</artifactId>
     <name>api</name>
 
     <parent>
-        <artifactId>onetable</artifactId>
-        <groupId>io.onetable</groupId>
+        <groupId>org.apache.xtable</groupId>
+        <artifactId>xtable</artifactId>
         <version>0.1.0-SNAPSHOT</version>
     </parent>
 
diff --git a/api/src/main/java/io/onetable/client/CatalogConfig.java b/api/src/main/java/org/apache/xtable/client/CatalogConfig.java
similarity index 97%
rename from api/src/main/java/io/onetable/client/CatalogConfig.java
rename to api/src/main/java/org/apache/xtable/client/CatalogConfig.java
index 4fca6fc3..0bd49687 100644
--- a/api/src/main/java/io/onetable/client/CatalogConfig.java
+++ b/api/src/main/java/org/apache/xtable/client/CatalogConfig.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.client;
+package org.apache.xtable.client;
 
 import java.util.Map;
 
diff --git a/api/src/main/java/io/onetable/client/HudiSourceConfig.java b/api/src/main/java/org/apache/xtable/client/HudiSourceConfig.java
similarity index 90%
rename from api/src/main/java/io/onetable/client/HudiSourceConfig.java
rename to api/src/main/java/org/apache/xtable/client/HudiSourceConfig.java
index 78d08231..113fcb75 100644
--- a/api/src/main/java/io/onetable/client/HudiSourceConfig.java
+++ b/api/src/main/java/org/apache/xtable/client/HudiSourceConfig.java
@@ -16,9 +16,9 @@
  * limitations under the License.
  */
  
-package io.onetable.client;
+package org.apache.xtable.client;
 
-import io.onetable.spi.extractor.SourcePartitionSpecExtractor;
+import org.apache.xtable.spi.extractor.SourcePartitionSpecExtractor;
 
 public interface HudiSourceConfig {
   public String getPartitionSpecExtractorClass();
diff --git a/api/src/main/java/io/onetable/client/PerTableConfig.java b/api/src/main/java/org/apache/xtable/client/PerTableConfig.java
similarity index 93%
rename from api/src/main/java/io/onetable/client/PerTableConfig.java
rename to api/src/main/java/org/apache/xtable/client/PerTableConfig.java
index 53efd36b..f9179439 100644
--- a/api/src/main/java/io/onetable/client/PerTableConfig.java
+++ b/api/src/main/java/org/apache/xtable/client/PerTableConfig.java
@@ -16,11 +16,11 @@
  * limitations under the License.
  */
  
-package io.onetable.client;
+package org.apache.xtable.client;
 
 import java.util.List;
 
-import io.onetable.model.sync.SyncMode;
+import org.apache.xtable.model.sync.SyncMode;
 
 public interface PerTableConfig {
   int getTargetMetadataRetentionInHours();
diff --git a/api/src/main/java/io/onetable/model/CommitsBacklog.java b/api/src/main/java/org/apache/xtable/model/CommitsBacklog.java
similarity index 99%
rename from api/src/main/java/io/onetable/model/CommitsBacklog.java
rename to api/src/main/java/org/apache/xtable/model/CommitsBacklog.java
index 8ae53eed..9ecf5fb8 100644
--- a/api/src/main/java/io/onetable/model/CommitsBacklog.java
+++ b/api/src/main/java/org/apache/xtable/model/CommitsBacklog.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.model;
+package org.apache.xtable.model;
 
 import java.time.Instant;
 import java.util.Collections;
diff --git a/api/src/main/java/io/onetable/model/IncrementalTableChanges.java b/api/src/main/java/org/apache/xtable/model/IncrementalTableChanges.java
similarity index 97%
rename from api/src/main/java/io/onetable/model/IncrementalTableChanges.java
rename to api/src/main/java/org/apache/xtable/model/IncrementalTableChanges.java
index 68accd33..2d840b8b 100644
--- a/api/src/main/java/io/onetable/model/IncrementalTableChanges.java
+++ b/api/src/main/java/org/apache/xtable/model/IncrementalTableChanges.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.model;
+package org.apache.xtable.model;
 
 import java.time.Instant;
 import java.util.Collections;
diff --git a/api/src/main/java/io/onetable/model/InstantsForIncrementalSync.java b/api/src/main/java/org/apache/xtable/model/InstantsForIncrementalSync.java
similarity index 98%
rename from api/src/main/java/io/onetable/model/InstantsForIncrementalSync.java
rename to api/src/main/java/org/apache/xtable/model/InstantsForIncrementalSync.java
index 4ac24882..7c00bf21 100644
--- a/api/src/main/java/io/onetable/model/InstantsForIncrementalSync.java
+++ b/api/src/main/java/org/apache/xtable/model/InstantsForIncrementalSync.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.model;
+package org.apache.xtable.model;
 
 import java.time.Instant;
 import java.util.Collections;
diff --git a/api/src/main/java/io/onetable/model/OneSnapshot.java b/api/src/main/java/org/apache/xtable/model/OneSnapshot.java
similarity index 93%
rename from api/src/main/java/io/onetable/model/OneSnapshot.java
rename to api/src/main/java/org/apache/xtable/model/OneSnapshot.java
index cd0ba03a..7708ae60 100644
--- a/api/src/main/java/io/onetable/model/OneSnapshot.java
+++ b/api/src/main/java/org/apache/xtable/model/OneSnapshot.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.model;
+package org.apache.xtable.model;
 
 import java.time.Instant;
 import java.util.Collections;
@@ -25,8 +25,8 @@ import java.util.List;
 import lombok.Builder;
 import lombok.Value;
 
-import io.onetable.model.schema.SchemaCatalog;
-import io.onetable.model.storage.OneFileGroup;
+import org.apache.xtable.model.schema.SchemaCatalog;
+import org.apache.xtable.model.storage.OneFileGroup;
 
 /**
  * Snapshot represents the view of the table at a specific point in time. Snapshot captures all the
diff --git a/api/src/main/java/io/onetable/model/OneTable.java b/api/src/main/java/org/apache/xtable/model/OneTable.java
similarity index 88%
rename from api/src/main/java/io/onetable/model/OneTable.java
rename to api/src/main/java/org/apache/xtable/model/OneTable.java
index 6578e66a..207e1d9c 100644
--- a/api/src/main/java/io/onetable/model/OneTable.java
+++ b/api/src/main/java/org/apache/xtable/model/OneTable.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.model;
+package org.apache.xtable.model;
 
 import java.time.Instant;
 import java.util.List;
@@ -24,9 +24,9 @@ import java.util.List;
 import lombok.Builder;
 import lombok.Value;
 
-import io.onetable.model.schema.OnePartitionField;
-import io.onetable.model.schema.OneSchema;
-import io.onetable.model.storage.DataLayoutStrategy;
+import org.apache.xtable.model.schema.OnePartitionField;
+import org.apache.xtable.model.schema.OneSchema;
+import org.apache.xtable.model.storage.DataLayoutStrategy;
 
 /**
  * Represents a reference to the table in the format {@link #tableFormat}.
diff --git a/api/src/main/java/io/onetable/model/OneTableMetadata.java b/api/src/main/java/org/apache/xtable/model/OneTableMetadata.java
similarity index 99%
rename from api/src/main/java/io/onetable/model/OneTableMetadata.java
rename to api/src/main/java/org/apache/xtable/model/OneTableMetadata.java
index 95e24329..78aadba5 100644
--- a/api/src/main/java/io/onetable/model/OneTableMetadata.java
+++ b/api/src/main/java/org/apache/xtable/model/OneTableMetadata.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.model;
+package org.apache.xtable.model;
 
 import java.time.Instant;
 import java.util.Arrays;
diff --git a/api/src/main/java/io/onetable/model/TableChange.java b/api/src/main/java/org/apache/xtable/model/TableChange.java
similarity index 93%
rename from api/src/main/java/io/onetable/model/TableChange.java
rename to api/src/main/java/org/apache/xtable/model/TableChange.java
index 5c04393b..76627c9f 100644
--- a/api/src/main/java/io/onetable/model/TableChange.java
+++ b/api/src/main/java/org/apache/xtable/model/TableChange.java
@@ -16,12 +16,12 @@
  * limitations under the License.
  */
  
-package io.onetable.model;
+package org.apache.xtable.model;
 
 import lombok.Builder;
 import lombok.Value;
 
-import io.onetable.model.storage.OneDataFilesDiff;
+import org.apache.xtable.model.storage.OneDataFilesDiff;
 
 /**
  * Captures the changes in a single commit/instant from the source table.
diff --git a/api/src/main/java/io/onetable/model/exception/OneParseException.java b/api/src/main/java/org/apache/xtable/model/exception/OneParseException.java
similarity index 96%
rename from api/src/main/java/io/onetable/model/exception/OneParseException.java
rename to api/src/main/java/org/apache/xtable/model/exception/OneParseException.java
index 10f312c7..e615d01b 100644
--- a/api/src/main/java/io/onetable/model/exception/OneParseException.java
+++ b/api/src/main/java/org/apache/xtable/model/exception/OneParseException.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.model.exception;
+package org.apache.xtable.model.exception;
 
 public class OneParseException extends OneTableException {
   public OneParseException(String message, Throwable e) {
diff --git a/api/src/main/java/io/onetable/model/exception/OneTableErrorCode.java b/api/src/main/java/org/apache/xtable/model/exception/OneTableErrorCode.java
similarity index 96%
rename from api/src/main/java/io/onetable/model/exception/OneTableErrorCode.java
rename to api/src/main/java/org/apache/xtable/model/exception/OneTableErrorCode.java
index 5ee207f7..89342abb 100644
--- a/api/src/main/java/io/onetable/model/exception/OneTableErrorCode.java
+++ b/api/src/main/java/org/apache/xtable/model/exception/OneTableErrorCode.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.model.exception;
+package org.apache.xtable.model.exception;
 
 public enum OneTableErrorCode {
   INVALID_CONFIGURATION(10001),
diff --git a/api/src/main/java/io/onetable/model/exception/OneTableException.java b/api/src/main/java/org/apache/xtable/model/exception/OneTableException.java
similarity index 96%
rename from api/src/main/java/io/onetable/model/exception/OneTableException.java
rename to api/src/main/java/org/apache/xtable/model/exception/OneTableException.java
index 0c5453aa..7cdcef49 100644
--- a/api/src/main/java/io/onetable/model/exception/OneTableException.java
+++ b/api/src/main/java/org/apache/xtable/model/exception/OneTableException.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.model.exception;
+package org.apache.xtable.model.exception;
 
 import lombok.ToString;
 
diff --git a/api/src/main/java/io/onetable/model/schema/OneField.java b/api/src/main/java/org/apache/xtable/model/schema/OneField.java
similarity index 98%
rename from api/src/main/java/io/onetable/model/schema/OneField.java
rename to api/src/main/java/org/apache/xtable/model/schema/OneField.java
index ee525dbc..409e5ee6 100644
--- a/api/src/main/java/io/onetable/model/schema/OneField.java
+++ b/api/src/main/java/org/apache/xtable/model/schema/OneField.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.model.schema;
+package org.apache.xtable.model.schema;
 
 import lombok.Builder;
 import lombok.Getter;
diff --git a/api/src/main/java/io/onetable/model/schema/OnePartitionField.java b/api/src/main/java/org/apache/xtable/model/schema/OnePartitionField.java
similarity index 98%
rename from api/src/main/java/io/onetable/model/schema/OnePartitionField.java
rename to api/src/main/java/org/apache/xtable/model/schema/OnePartitionField.java
index d5af0470..d438b2c5 100644
--- a/api/src/main/java/io/onetable/model/schema/OnePartitionField.java
+++ b/api/src/main/java/org/apache/xtable/model/schema/OnePartitionField.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.model.schema;
+package org.apache.xtable.model.schema;
 
 import java.util.Collections;
 import java.util.List;
diff --git a/api/src/main/java/io/onetable/model/schema/OneSchema.java b/api/src/main/java/org/apache/xtable/model/schema/OneSchema.java
similarity index 98%
rename from api/src/main/java/io/onetable/model/schema/OneSchema.java
rename to api/src/main/java/org/apache/xtable/model/schema/OneSchema.java
index 431f593d..fb0b5117 100644
--- a/api/src/main/java/io/onetable/model/schema/OneSchema.java
+++ b/api/src/main/java/org/apache/xtable/model/schema/OneSchema.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.model.schema;
+package org.apache.xtable.model.schema;
 
 import java.util.ArrayDeque;
 import java.util.ArrayList;
diff --git a/api/src/main/java/io/onetable/model/schema/OneType.java b/api/src/main/java/org/apache/xtable/model/schema/OneType.java
similarity index 97%
rename from api/src/main/java/io/onetable/model/schema/OneType.java
rename to api/src/main/java/org/apache/xtable/model/schema/OneType.java
index dcc9988d..d6c89334 100644
--- a/api/src/main/java/io/onetable/model/schema/OneType.java
+++ b/api/src/main/java/org/apache/xtable/model/schema/OneType.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.model.schema;
+package org.apache.xtable.model.schema;
 
 import java.util.Collections;
 import java.util.HashSet;
diff --git a/api/src/main/java/io/onetable/model/schema/PartitionTransformType.java b/api/src/main/java/org/apache/xtable/model/schema/PartitionTransformType.java
similarity index 96%
rename from api/src/main/java/io/onetable/model/schema/PartitionTransformType.java
rename to api/src/main/java/org/apache/xtable/model/schema/PartitionTransformType.java
index b5e3c3be..76e65bff 100644
--- a/api/src/main/java/io/onetable/model/schema/PartitionTransformType.java
+++ b/api/src/main/java/org/apache/xtable/model/schema/PartitionTransformType.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.model.schema;
+package org.apache.xtable.model.schema;
 
 /**
  * The type of transformation to apply to a field in the schema to generate the partition value.
diff --git a/api/src/main/java/io/onetable/model/schema/SchemaCatalog.java b/api/src/main/java/org/apache/xtable/model/schema/SchemaCatalog.java
similarity index 96%
rename from api/src/main/java/io/onetable/model/schema/SchemaCatalog.java
rename to api/src/main/java/org/apache/xtable/model/schema/SchemaCatalog.java
index 3cbd710d..b9729580 100644
--- a/api/src/main/java/io/onetable/model/schema/SchemaCatalog.java
+++ b/api/src/main/java/org/apache/xtable/model/schema/SchemaCatalog.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.model.schema;
+package org.apache.xtable.model.schema;
 
 import java.util.Map;
 
diff --git a/api/src/main/java/io/onetable/model/schema/SchemaVersion.java b/api/src/main/java/org/apache/xtable/model/schema/SchemaVersion.java
similarity index 96%
rename from api/src/main/java/io/onetable/model/schema/SchemaVersion.java
rename to api/src/main/java/org/apache/xtable/model/schema/SchemaVersion.java
index 20f0a0cc..9e6130b6 100644
--- a/api/src/main/java/io/onetable/model/schema/SchemaVersion.java
+++ b/api/src/main/java/org/apache/xtable/model/schema/SchemaVersion.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.model.schema;
+package org.apache.xtable.model.schema;
 
 import lombok.EqualsAndHashCode;
 import lombok.Getter;
diff --git a/api/src/main/java/io/onetable/model/stat/ColumnStat.java b/api/src/main/java/org/apache/xtable/model/stat/ColumnStat.java
similarity index 92%
rename from api/src/main/java/io/onetable/model/stat/ColumnStat.java
rename to api/src/main/java/org/apache/xtable/model/stat/ColumnStat.java
index c7db014a..716b67a7 100644
--- a/api/src/main/java/io/onetable/model/stat/ColumnStat.java
+++ b/api/src/main/java/org/apache/xtable/model/stat/ColumnStat.java
@@ -16,12 +16,12 @@
  * limitations under the License.
  */
  
-package io.onetable.model.stat;
+package org.apache.xtable.model.stat;
 
 import lombok.Builder;
 import lombok.Value;
 
-import io.onetable.model.schema.OneField;
+import org.apache.xtable.model.schema.OneField;
 
 /**
  * Captures column level statistics for a field.
diff --git a/api/src/main/java/io/onetable/model/stat/PartitionValue.java b/api/src/main/java/org/apache/xtable/model/stat/PartitionValue.java
similarity index 91%
rename from api/src/main/java/io/onetable/model/stat/PartitionValue.java
rename to api/src/main/java/org/apache/xtable/model/stat/PartitionValue.java
index a164174b..9f35621f 100644
--- a/api/src/main/java/io/onetable/model/stat/PartitionValue.java
+++ b/api/src/main/java/org/apache/xtable/model/stat/PartitionValue.java
@@ -16,12 +16,12 @@
  * limitations under the License.
  */
  
-package io.onetable.model.stat;
+package org.apache.xtable.model.stat;
 
 import lombok.Builder;
 import lombok.Value;
 
-import io.onetable.model.schema.OnePartitionField;
+import org.apache.xtable.model.schema.OnePartitionField;
 
 /** Associates the partition value with the partition field. */
 @Value
diff --git a/api/src/main/java/io/onetable/model/stat/Range.java b/api/src/main/java/org/apache/xtable/model/stat/Range.java
similarity index 92%
rename from api/src/main/java/io/onetable/model/stat/Range.java
rename to api/src/main/java/org/apache/xtable/model/stat/Range.java
index e200b37d..dbba7db0 100644
--- a/api/src/main/java/io/onetable/model/stat/Range.java
+++ b/api/src/main/java/org/apache/xtable/model/stat/Range.java
@@ -16,16 +16,16 @@
  * limitations under the License.
  */
  
-package io.onetable.model.stat;
+package org.apache.xtable.model.stat;
 
 import java.util.Objects;
 
 import lombok.Value;
 
-import io.onetable.model.schema.OneSchema;
-import io.onetable.model.schema.OneType;
-import io.onetable.model.schema.PartitionTransformType;
-import io.onetable.model.storage.OneDataFile;
+import org.apache.xtable.model.schema.OneSchema;
+import org.apache.xtable.model.schema.OneType;
+import org.apache.xtable.model.schema.PartitionTransformType;
+import org.apache.xtable.model.storage.OneDataFile;
 
 /**
  * Represents a range of values in the specified data type. Can represent a scalar value when the
diff --git a/api/src/main/java/io/onetable/model/storage/DataFilesDiff.java b/api/src/main/java/org/apache/xtable/model/storage/DataFilesDiff.java
similarity index 99%
rename from api/src/main/java/io/onetable/model/storage/DataFilesDiff.java
rename to api/src/main/java/org/apache/xtable/model/storage/DataFilesDiff.java
index efcf45b2..4a42cc3a 100644
--- a/api/src/main/java/io/onetable/model/storage/DataFilesDiff.java
+++ b/api/src/main/java/org/apache/xtable/model/storage/DataFilesDiff.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.model.storage;
+package org.apache.xtable.model.storage;
 
 import java.util.*;
 import java.util.function.Function;
diff --git a/api/src/main/java/io/onetable/model/storage/DataLayoutStrategy.java b/api/src/main/java/org/apache/xtable/model/storage/DataLayoutStrategy.java
similarity index 96%
rename from api/src/main/java/io/onetable/model/storage/DataLayoutStrategy.java
rename to api/src/main/java/org/apache/xtable/model/storage/DataLayoutStrategy.java
index 143c966d..68de33cb 100644
--- a/api/src/main/java/io/onetable/model/storage/DataLayoutStrategy.java
+++ b/api/src/main/java/org/apache/xtable/model/storage/DataLayoutStrategy.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.model.storage;
+package org.apache.xtable.model.storage;
 
 import lombok.Getter;
 
diff --git a/api/src/main/java/io/onetable/model/storage/FileFormat.java b/api/src/main/java/org/apache/xtable/model/storage/FileFormat.java
similarity index 95%
rename from api/src/main/java/io/onetable/model/storage/FileFormat.java
rename to api/src/main/java/org/apache/xtable/model/storage/FileFormat.java
index 677cc21f..618a1ff5 100644
--- a/api/src/main/java/io/onetable/model/storage/FileFormat.java
+++ b/api/src/main/java/org/apache/xtable/model/storage/FileFormat.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.model.storage;
+package org.apache.xtable.model.storage;
 
 /**
  * Supported FileFormat list
diff --git a/api/src/main/java/io/onetable/model/storage/OneDataFile.java b/api/src/main/java/org/apache/xtable/model/storage/OneDataFile.java
similarity index 89%
rename from api/src/main/java/io/onetable/model/storage/OneDataFile.java
rename to api/src/main/java/org/apache/xtable/model/storage/OneDataFile.java
index 77c18dda..b89e066b 100644
--- a/api/src/main/java/io/onetable/model/storage/OneDataFile.java
+++ b/api/src/main/java/org/apache/xtable/model/storage/OneDataFile.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.model.storage;
+package org.apache.xtable.model.storage;
 
 import java.util.Collections;
 import java.util.List;
@@ -25,9 +25,9 @@ import lombok.Builder;
 import lombok.NonNull;
 import lombok.Value;
 
-import io.onetable.model.schema.SchemaVersion;
-import io.onetable.model.stat.ColumnStat;
-import io.onetable.model.stat.PartitionValue;
+import org.apache.xtable.model.schema.SchemaVersion;
+import org.apache.xtable.model.stat.ColumnStat;
+import org.apache.xtable.model.stat.PartitionValue;
 
 /**
  * Represents a data file in the table.
diff --git a/api/src/main/java/io/onetable/model/storage/OneDataFilesDiff.java b/api/src/main/java/org/apache/xtable/model/storage/OneDataFilesDiff.java
similarity index 98%
rename from api/src/main/java/io/onetable/model/storage/OneDataFilesDiff.java
rename to api/src/main/java/org/apache/xtable/model/storage/OneDataFilesDiff.java
index 394a6904..f01ba7f4 100644
--- a/api/src/main/java/io/onetable/model/storage/OneDataFilesDiff.java
+++ b/api/src/main/java/org/apache/xtable/model/storage/OneDataFilesDiff.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.model.storage;
+package org.apache.xtable.model.storage;
 
 import java.util.List;
 import java.util.Map;
diff --git a/api/src/main/java/io/onetable/model/storage/OneFileGroup.java b/api/src/main/java/org/apache/xtable/model/storage/OneFileGroup.java
similarity index 95%
rename from api/src/main/java/io/onetable/model/storage/OneFileGroup.java
rename to api/src/main/java/org/apache/xtable/model/storage/OneFileGroup.java
index 01d27302..219a97a9 100644
--- a/api/src/main/java/io/onetable/model/storage/OneFileGroup.java
+++ b/api/src/main/java/org/apache/xtable/model/storage/OneFileGroup.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.model.storage;
+package org.apache.xtable.model.storage;
 
 import java.util.List;
 import java.util.Map;
@@ -26,7 +26,7 @@ import java.util.stream.Stream;
 import lombok.Builder;
 import lombok.Value;
 
-import io.onetable.model.stat.PartitionValue;
+import org.apache.xtable.model.stat.PartitionValue;
 
 /** Represents a grouping of {@link OneDataFile} with the same partition values. */
 @Value
diff --git a/api/src/main/java/io/onetable/model/storage/TableFormat.java b/api/src/main/java/org/apache/xtable/model/storage/TableFormat.java
similarity index 96%
rename from api/src/main/java/io/onetable/model/storage/TableFormat.java
rename to api/src/main/java/org/apache/xtable/model/storage/TableFormat.java
index 91b58326..bea0b477 100644
--- a/api/src/main/java/io/onetable/model/storage/TableFormat.java
+++ b/api/src/main/java/org/apache/xtable/model/storage/TableFormat.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.model.storage;
+package org.apache.xtable.model.storage;
 
 /**
  * Default constants for supported Table Formats
diff --git a/api/src/main/java/io/onetable/model/sync/SyncMode.java b/api/src/main/java/org/apache/xtable/model/sync/SyncMode.java
similarity index 96%
rename from api/src/main/java/io/onetable/model/sync/SyncMode.java
rename to api/src/main/java/org/apache/xtable/model/sync/SyncMode.java
index 2033b951..417dbab0 100644
--- a/api/src/main/java/io/onetable/model/sync/SyncMode.java
+++ b/api/src/main/java/org/apache/xtable/model/sync/SyncMode.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.model.sync;
+package org.apache.xtable.model.sync;
 
 /**
  * Mode of a sync
diff --git a/api/src/main/java/io/onetable/model/sync/SyncResult.java b/api/src/main/java/org/apache/xtable/model/sync/SyncResult.java
similarity index 98%
rename from api/src/main/java/io/onetable/model/sync/SyncResult.java
rename to api/src/main/java/org/apache/xtable/model/sync/SyncResult.java
index 75c2f807..d158b38c 100644
--- a/api/src/main/java/io/onetable/model/sync/SyncResult.java
+++ b/api/src/main/java/org/apache/xtable/model/sync/SyncResult.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.model.sync;
+package org.apache.xtable.model.sync;
 
 import java.time.Duration;
 import java.time.Instant;
diff --git a/api/src/main/java/io/onetable/model/validation/ValidationCheck.java b/api/src/main/java/org/apache/xtable/model/validation/ValidationCheck.java
similarity index 95%
rename from api/src/main/java/io/onetable/model/validation/ValidationCheck.java
rename to api/src/main/java/org/apache/xtable/model/validation/ValidationCheck.java
index b0a77c2e..4a0a4cac 100644
--- a/api/src/main/java/io/onetable/model/validation/ValidationCheck.java
+++ b/api/src/main/java/org/apache/xtable/model/validation/ValidationCheck.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.model.validation;
+package org.apache.xtable.model.validation;
 
 /**
  * List of supported validation checks
diff --git a/api/src/main/java/io/onetable/model/validation/ValidationChecker.java b/api/src/main/java/org/apache/xtable/model/validation/ValidationChecker.java
similarity index 89%
rename from api/src/main/java/io/onetable/model/validation/ValidationChecker.java
rename to api/src/main/java/org/apache/xtable/model/validation/ValidationChecker.java
index bb59f89c..a92ea50b 100644
--- a/api/src/main/java/io/onetable/model/validation/ValidationChecker.java
+++ b/api/src/main/java/org/apache/xtable/model/validation/ValidationChecker.java
@@ -16,12 +16,12 @@
  * limitations under the License.
  */
  
-package io.onetable.model.validation;
+package org.apache.xtable.model.validation;
 
 import java.util.Map;
 
-import io.onetable.model.OneTable;
-import io.onetable.model.storage.TableFormat;
+import org.apache.xtable.model.OneTable;
+import org.apache.xtable.model.storage.TableFormat;
 
 /**
  * Interface to implement a validation checker. Runs the specified list of {@link ValidationCheck}
diff --git a/api/src/main/java/io/onetable/model/validation/ValidationResult.java b/api/src/main/java/org/apache/xtable/model/validation/ValidationResult.java
similarity index 96%
rename from api/src/main/java/io/onetable/model/validation/ValidationResult.java
rename to api/src/main/java/org/apache/xtable/model/validation/ValidationResult.java
index fa38f92f..f4ad9853 100644
--- a/api/src/main/java/io/onetable/model/validation/ValidationResult.java
+++ b/api/src/main/java/org/apache/xtable/model/validation/ValidationResult.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.model.validation;
+package org.apache.xtable.model.validation;
 
 import java.time.Instant;
 
diff --git a/api/src/main/java/io/onetable/spi/extractor/ChangesExtractor.java b/api/src/main/java/org/apache/xtable/spi/extractor/ChangesExtractor.java
similarity index 92%
rename from api/src/main/java/io/onetable/spi/extractor/ChangesExtractor.java
rename to api/src/main/java/org/apache/xtable/spi/extractor/ChangesExtractor.java
index f236b21b..a1c20b08 100644
--- a/api/src/main/java/io/onetable/spi/extractor/ChangesExtractor.java
+++ b/api/src/main/java/org/apache/xtable/spi/extractor/ChangesExtractor.java
@@ -16,9 +16,9 @@
  * limitations under the License.
  */
  
-package io.onetable.spi.extractor;
+package org.apache.xtable.spi.extractor;
 
-import io.onetable.model.IncrementalTableChanges;
+import org.apache.xtable.model.IncrementalTableChanges;
 
 /**
  * Use the source {@link CLIENT} to extract the canonical representation of delta changes since the
diff --git a/api/src/main/java/io/onetable/spi/extractor/DataFileIterator.java b/api/src/main/java/org/apache/xtable/spi/extractor/DataFileIterator.java
similarity index 91%
rename from api/src/main/java/io/onetable/spi/extractor/DataFileIterator.java
rename to api/src/main/java/org/apache/xtable/spi/extractor/DataFileIterator.java
index cd6c7438..767650e9 100644
--- a/api/src/main/java/io/onetable/spi/extractor/DataFileIterator.java
+++ b/api/src/main/java/org/apache/xtable/spi/extractor/DataFileIterator.java
@@ -16,11 +16,11 @@
  * limitations under the License.
  */
  
-package io.onetable.spi.extractor;
+package org.apache.xtable.spi.extractor;
 
 import java.util.Iterator;
 
-import io.onetable.model.storage.OneDataFile;
+import org.apache.xtable.model.storage.OneDataFile;
 
 /** DataFileIterator lets the consumer iterate over the files of a table. */
 public interface DataFileIterator extends Iterator<OneDataFile>, AutoCloseable {}
diff --git a/api/src/main/java/io/onetable/spi/extractor/ExtractFromSource.java b/api/src/main/java/org/apache/xtable/spi/extractor/ExtractFromSource.java
similarity index 86%
rename from api/src/main/java/io/onetable/spi/extractor/ExtractFromSource.java
rename to api/src/main/java/org/apache/xtable/spi/extractor/ExtractFromSource.java
index 17175a47..5619eb8d 100644
--- a/api/src/main/java/io/onetable/spi/extractor/ExtractFromSource.java
+++ b/api/src/main/java/org/apache/xtable/spi/extractor/ExtractFromSource.java
@@ -16,15 +16,18 @@
  * limitations under the License.
  */
  
-package io.onetable.spi.extractor;
+package org.apache.xtable.spi.extractor;
 
 import java.util.Iterator;
 
 import lombok.AllArgsConstructor;
 import lombok.Getter;
 
-import io.onetable.model.*;
-import io.onetable.model.CommitsBacklog;
+import org.apache.xtable.model.CommitsBacklog;
+import org.apache.xtable.model.IncrementalTableChanges;
+import org.apache.xtable.model.InstantsForIncrementalSync;
+import org.apache.xtable.model.OneSnapshot;
+import org.apache.xtable.model.TableChange;
 
 @AllArgsConstructor(staticName = "of")
 @Getter
diff --git a/api/src/main/java/io/onetable/spi/extractor/SchemaCatalogExtractor.java b/api/src/main/java/org/apache/xtable/spi/extractor/SchemaCatalogExtractor.java
similarity index 92%
rename from api/src/main/java/io/onetable/spi/extractor/SchemaCatalogExtractor.java
rename to api/src/main/java/org/apache/xtable/spi/extractor/SchemaCatalogExtractor.java
index b38ece73..12a078e5 100644
--- a/api/src/main/java/io/onetable/spi/extractor/SchemaCatalogExtractor.java
+++ b/api/src/main/java/org/apache/xtable/spi/extractor/SchemaCatalogExtractor.java
@@ -16,9 +16,9 @@
  * limitations under the License.
  */
  
-package io.onetable.spi.extractor;
+package org.apache.xtable.spi.extractor;
 
-import io.onetable.model.schema.SchemaCatalog;
+import org.apache.xtable.model.schema.SchemaCatalog;
 
 /**
  * Extracts and holds versioned schemas from {@link CLIENT}
diff --git a/api/src/main/java/io/onetable/spi/extractor/SchemaExtractor.java b/api/src/main/java/org/apache/xtable/spi/extractor/SchemaExtractor.java
similarity index 92%
rename from api/src/main/java/io/onetable/spi/extractor/SchemaExtractor.java
rename to api/src/main/java/org/apache/xtable/spi/extractor/SchemaExtractor.java
index c358d324..37088c06 100644
--- a/api/src/main/java/io/onetable/spi/extractor/SchemaExtractor.java
+++ b/api/src/main/java/org/apache/xtable/spi/extractor/SchemaExtractor.java
@@ -16,9 +16,9 @@
  * limitations under the License.
  */
  
-package io.onetable.spi.extractor;
+package org.apache.xtable.spi.extractor;
 
-import io.onetable.model.schema.OneSchema;
+import org.apache.xtable.model.schema.OneSchema;
 
 /**
  * Interface to implement to extract canonical schema from a table format
diff --git a/api/src/main/java/io/onetable/spi/extractor/SnapshotExtractor.java b/api/src/main/java/org/apache/xtable/spi/extractor/SnapshotExtractor.java
similarity index 92%
rename from api/src/main/java/io/onetable/spi/extractor/SnapshotExtractor.java
rename to api/src/main/java/org/apache/xtable/spi/extractor/SnapshotExtractor.java
index d4261159..07109f2c 100644
--- a/api/src/main/java/io/onetable/spi/extractor/SnapshotExtractor.java
+++ b/api/src/main/java/org/apache/xtable/spi/extractor/SnapshotExtractor.java
@@ -16,11 +16,11 @@
  * limitations under the License.
  */
  
-package io.onetable.spi.extractor;
+package org.apache.xtable.spi.extractor;
 
 import java.util.Optional;
 
-import io.onetable.model.OneSnapshot;
+import org.apache.xtable.model.OneSnapshot;
 
 /**
  * Use the table client to extract the canonical {@link OneSnapshot} model.
diff --git a/api/src/main/java/io/onetable/spi/extractor/SourceClient.java b/api/src/main/java/org/apache/xtable/spi/extractor/SourceClient.java
similarity index 91%
rename from api/src/main/java/io/onetable/spi/extractor/SourceClient.java
rename to api/src/main/java/org/apache/xtable/spi/extractor/SourceClient.java
index 355e1410..a96b78ef 100644
--- a/api/src/main/java/io/onetable/spi/extractor/SourceClient.java
+++ b/api/src/main/java/org/apache/xtable/spi/extractor/SourceClient.java
@@ -16,14 +16,17 @@
  * limitations under the License.
  */
  
-package io.onetable.spi.extractor;
+package org.apache.xtable.spi.extractor;
 
 import java.io.Closeable;
 import java.time.Instant;
 
-import io.onetable.model.*;
-import io.onetable.model.CommitsBacklog;
-import io.onetable.model.schema.SchemaCatalog;
+import org.apache.xtable.model.CommitsBacklog;
+import org.apache.xtable.model.InstantsForIncrementalSync;
+import org.apache.xtable.model.OneSnapshot;
+import org.apache.xtable.model.OneTable;
+import org.apache.xtable.model.TableChange;
+import org.apache.xtable.model.schema.SchemaCatalog;
 
 /**
  * A client that provides the major functionality for extracting the state at a given instant in a
diff --git a/api/src/main/java/io/onetable/spi/extractor/SourcePartitionSpecExtractor.java b/api/src/main/java/org/apache/xtable/spi/extractor/SourcePartitionSpecExtractor.java
similarity index 80%
rename from api/src/main/java/io/onetable/spi/extractor/SourcePartitionSpecExtractor.java
rename to api/src/main/java/org/apache/xtable/spi/extractor/SourcePartitionSpecExtractor.java
index b8008f9a..f7250694 100644
--- a/api/src/main/java/io/onetable/spi/extractor/SourcePartitionSpecExtractor.java
+++ b/api/src/main/java/org/apache/xtable/spi/extractor/SourcePartitionSpecExtractor.java
@@ -16,16 +16,16 @@
  * limitations under the License.
  */
  
-package io.onetable.spi.extractor;
+package org.apache.xtable.spi.extractor;
 
 import java.util.List;
 
-import io.onetable.model.schema.OnePartitionField;
-import io.onetable.model.schema.OneSchema;
+import org.apache.xtable.model.schema.OnePartitionField;
+import org.apache.xtable.model.schema.OneSchema;
 
 /**
  * Interface to implement to extract partition fields from given canonical schema. Refer @see
- * io.onetable.onetable.hudi.ConfigurationBasedPartitionSpecExtractor for an example implementation.
+ * org.apache.xtable.hudi.ConfigurationBasedPartitionSpecExtractor for an example implementation.
  */
 public interface SourcePartitionSpecExtractor {
   List<OnePartitionField> spec(OneSchema tableSchema);
diff --git a/api/src/main/java/io/onetable/spi/extractor/TableExtractor.java b/api/src/main/java/org/apache/xtable/spi/extractor/TableExtractor.java
similarity index 92%
rename from api/src/main/java/io/onetable/spi/extractor/TableExtractor.java
rename to api/src/main/java/org/apache/xtable/spi/extractor/TableExtractor.java
index c72a8a32..854d1358 100644
--- a/api/src/main/java/io/onetable/spi/extractor/TableExtractor.java
+++ b/api/src/main/java/org/apache/xtable/spi/extractor/TableExtractor.java
@@ -16,9 +16,9 @@
  * limitations under the License.
  */
  
-package io.onetable.spi.extractor;
+package org.apache.xtable.spi.extractor;
 
-import io.onetable.model.OneTable;
+import org.apache.xtable.model.OneTable;
 
 /**
  * Extracts {@link OneTable} from given {@link CLIENT}.
diff --git a/api/src/main/java/io/onetable/spi/sync/TableFormatSync.java b/api/src/main/java/org/apache/xtable/spi/sync/TableFormatSync.java
similarity index 94%
rename from api/src/main/java/io/onetable/spi/sync/TableFormatSync.java
rename to api/src/main/java/org/apache/xtable/spi/sync/TableFormatSync.java
index e2896102..f7bd3db9 100644
--- a/api/src/main/java/io/onetable/spi/sync/TableFormatSync.java
+++ b/api/src/main/java/org/apache/xtable/spi/sync/TableFormatSync.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.spi.sync;
+package org.apache.xtable.spi.sync;
 
 import java.time.Duration;
 import java.time.Instant;
@@ -33,13 +33,13 @@ import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
 import lombok.extern.log4j.Log4j2;
 
-import io.onetable.model.IncrementalTableChanges;
-import io.onetable.model.OneSnapshot;
-import io.onetable.model.OneTable;
-import io.onetable.model.OneTableMetadata;
-import io.onetable.model.TableChange;
-import io.onetable.model.sync.SyncMode;
-import io.onetable.model.sync.SyncResult;
+import org.apache.xtable.model.IncrementalTableChanges;
+import org.apache.xtable.model.OneSnapshot;
+import org.apache.xtable.model.OneTable;
+import org.apache.xtable.model.OneTableMetadata;
+import org.apache.xtable.model.TableChange;
+import org.apache.xtable.model.sync.SyncMode;
+import org.apache.xtable.model.sync.SyncResult;
 
 /** Provides the functionality to sync from the OneTable format to the target format. */
 @Log4j2
diff --git a/api/src/main/java/io/onetable/spi/sync/TargetClient.java b/api/src/main/java/org/apache/xtable/spi/sync/TargetClient.java
similarity index 87%
rename from api/src/main/java/io/onetable/spi/sync/TargetClient.java
rename to api/src/main/java/org/apache/xtable/spi/sync/TargetClient.java
index bd9b4962..ad647649 100644
--- a/api/src/main/java/io/onetable/spi/sync/TargetClient.java
+++ b/api/src/main/java/org/apache/xtable/spi/sync/TargetClient.java
@@ -16,20 +16,20 @@
  * limitations under the License.
  */
  
-package io.onetable.spi.sync;
+package org.apache.xtable.spi.sync;
 
 import java.util.List;
 import java.util.Optional;
 
 import org.apache.hadoop.conf.Configuration;
 
-import io.onetable.client.PerTableConfig;
-import io.onetable.model.OneTable;
-import io.onetable.model.OneTableMetadata;
-import io.onetable.model.schema.OnePartitionField;
-import io.onetable.model.schema.OneSchema;
-import io.onetable.model.storage.OneDataFilesDiff;
-import io.onetable.model.storage.OneFileGroup;
+import org.apache.xtable.client.PerTableConfig;
+import org.apache.xtable.model.OneTable;
+import org.apache.xtable.model.OneTableMetadata;
+import org.apache.xtable.model.schema.OnePartitionField;
+import org.apache.xtable.model.schema.OneSchema;
+import org.apache.xtable.model.storage.OneDataFilesDiff;
+import org.apache.xtable.model.storage.OneFileGroup;
 
 /** A client that provides the major functionality for syncing changes to a target system. */
 public interface TargetClient {
diff --git a/api/src/test/java/io/onetable/model/storage/TestDataFilesDiff.java b/api/src/test/java/org/apache/xtable/model/storage/TestDataFilesDiff.java
similarity index 99%
rename from api/src/test/java/io/onetable/model/storage/TestDataFilesDiff.java
rename to api/src/test/java/org/apache/xtable/model/storage/TestDataFilesDiff.java
index 83f8ae79..22e6ffeb 100644
--- a/api/src/test/java/io/onetable/model/storage/TestDataFilesDiff.java
+++ b/api/src/test/java/org/apache/xtable/model/storage/TestDataFilesDiff.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.model.storage;
+package org.apache.xtable.model.storage;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
diff --git a/api/src/test/java/io/onetable/model/storage/TestOneDataFilesDiff.java b/api/src/test/java/org/apache/xtable/model/storage/TestOneDataFilesDiff.java
similarity index 98%
rename from api/src/test/java/io/onetable/model/storage/TestOneDataFilesDiff.java
rename to api/src/test/java/org/apache/xtable/model/storage/TestOneDataFilesDiff.java
index fb729f8e..bfe38f0a 100644
--- a/api/src/test/java/io/onetable/model/storage/TestOneDataFilesDiff.java
+++ b/api/src/test/java/org/apache/xtable/model/storage/TestOneDataFilesDiff.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.model.storage;
+package org.apache.xtable.model.storage;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
diff --git a/api/src/test/java/io/onetable/spi/extractor/TestExtractFromSource.java b/api/src/test/java/org/apache/xtable/spi/extractor/TestExtractFromSource.java
similarity index 91%
rename from api/src/test/java/io/onetable/spi/extractor/TestExtractFromSource.java
rename to api/src/test/java/org/apache/xtable/spi/extractor/TestExtractFromSource.java
index 8d778a25..1f97b48a 100644
--- a/api/src/test/java/io/onetable/spi/extractor/TestExtractFromSource.java
+++ b/api/src/test/java/org/apache/xtable/spi/extractor/TestExtractFromSource.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.spi.extractor;
+package org.apache.xtable.spi.extractor;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.mockito.Mockito.mock;
@@ -35,12 +35,16 @@ import lombok.ToString;
 
 import org.junit.jupiter.api.Test;
 
-import io.onetable.model.*;
-import io.onetable.model.CommitsBacklog;
-import io.onetable.model.schema.SchemaCatalog;
-import io.onetable.model.storage.OneDataFile;
-import io.onetable.model.storage.OneDataFilesDiff;
-import io.onetable.model.storage.OneFileGroup;
+import org.apache.xtable.model.CommitsBacklog;
+import org.apache.xtable.model.IncrementalTableChanges;
+import org.apache.xtable.model.InstantsForIncrementalSync;
+import org.apache.xtable.model.OneSnapshot;
+import org.apache.xtable.model.OneTable;
+import org.apache.xtable.model.TableChange;
+import org.apache.xtable.model.schema.SchemaCatalog;
+import org.apache.xtable.model.storage.OneDataFile;
+import org.apache.xtable.model.storage.OneDataFilesDiff;
+import org.apache.xtable.model.storage.OneFileGroup;
 
 public class TestExtractFromSource {
   private final SourceClient<TestCommit> mockSourceClient = mock(SourceClient.class);
diff --git a/api/src/test/java/io/onetable/spi/sync/TestTableFormatSync.java b/api/src/test/java/org/apache/xtable/spi/sync/TestTableFormatSync.java
similarity index 95%
rename from api/src/test/java/io/onetable/spi/sync/TestTableFormatSync.java
rename to api/src/test/java/org/apache/xtable/spi/sync/TestTableFormatSync.java
index 87f1a9d9..e0e57cee 100644
--- a/api/src/test/java/io/onetable/spi/sync/TestTableFormatSync.java
+++ b/api/src/test/java/org/apache/xtable/spi/sync/TestTableFormatSync.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.spi.sync;
+package org.apache.xtable.spi.sync;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
@@ -39,21 +39,21 @@ import java.util.Map;
 
 import org.junit.jupiter.api.Test;
 
-import io.onetable.model.IncrementalTableChanges;
-import io.onetable.model.OneSnapshot;
-import io.onetable.model.OneTable;
-import io.onetable.model.OneTableMetadata;
-import io.onetable.model.TableChange;
-import io.onetable.model.schema.OneField;
-import io.onetable.model.schema.OnePartitionField;
-import io.onetable.model.schema.OneSchema;
-import io.onetable.model.schema.PartitionTransformType;
-import io.onetable.model.storage.OneDataFile;
-import io.onetable.model.storage.OneDataFilesDiff;
-import io.onetable.model.storage.OneFileGroup;
-import io.onetable.model.storage.TableFormat;
-import io.onetable.model.sync.SyncMode;
-import io.onetable.model.sync.SyncResult;
+import org.apache.xtable.model.IncrementalTableChanges;
+import org.apache.xtable.model.OneSnapshot;
+import org.apache.xtable.model.OneTable;
+import org.apache.xtable.model.OneTableMetadata;
+import org.apache.xtable.model.TableChange;
+import org.apache.xtable.model.schema.OneField;
+import org.apache.xtable.model.schema.OnePartitionField;
+import org.apache.xtable.model.schema.OneSchema;
+import org.apache.xtable.model.schema.PartitionTransformType;
+import org.apache.xtable.model.storage.OneDataFile;
+import org.apache.xtable.model.storage.OneDataFilesDiff;
+import org.apache.xtable.model.storage.OneFileGroup;
+import org.apache.xtable.model.storage.TableFormat;
+import org.apache.xtable.model.sync.SyncMode;
+import org.apache.xtable.model.sync.SyncResult;
 
 public class TestTableFormatSync {
   private final TargetClient mockTargetClient1 = mock(TargetClient.class);
diff --git a/core/pom.xml b/core/pom.xml
index 8402f9e4..e3355802 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -3,22 +3,22 @@
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
-    <artifactId>onetable-core</artifactId>
+    <artifactId>xtable-core</artifactId>
     <name>core</name>
 
     <parent>
-        <artifactId>onetable</artifactId>
-        <groupId>io.onetable</groupId>
+        <groupId>org.apache.xtable</groupId>
+        <artifactId>xtable</artifactId>
         <version>0.1.0-SNAPSHOT</version>
     </parent>
 
     <dependencies>
         <dependency>
-            <groupId>io.onetable</groupId>
-            <artifactId>onetable-api</artifactId>
+            <groupId>org.apache.xtable</groupId>
+            <artifactId>xtable-api</artifactId>
         </dependency>
         <dependency>
-            <groupId>io.onetable</groupId>
+            <groupId>org.apache.xtable</groupId>
             <artifactId>hudi-utils</artifactId>
         </dependency>
         <dependency>
diff --git a/core/src/main/java/io/onetable/avro/AvroSchemaConverter.java b/core/src/main/java/org/apache/xtable/avro/AvroSchemaConverter.java
similarity index 94%
rename from core/src/main/java/io/onetable/avro/AvroSchemaConverter.java
rename to core/src/main/java/org/apache/xtable/avro/AvroSchemaConverter.java
index 31319500..8058b7a0 100644
--- a/core/src/main/java/io/onetable/avro/AvroSchemaConverter.java
+++ b/core/src/main/java/org/apache/xtable/avro/AvroSchemaConverter.java
@@ -16,10 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.avro;
-
-import static io.onetable.collectors.CustomCollectors.toList;
-import static io.onetable.schema.SchemaUtils.getFullyQualifiedPath;
+package org.apache.xtable.avro;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -38,13 +35,15 @@ import org.apache.avro.LogicalType;
 import org.apache.avro.LogicalTypes;
 import org.apache.avro.Schema;
 
-import io.onetable.exception.SchemaExtractorException;
-import io.onetable.exception.UnsupportedSchemaTypeException;
-import io.onetable.hudi.idtracking.IdTracker;
-import io.onetable.hudi.idtracking.models.IdMapping;
-import io.onetable.model.schema.OneField;
-import io.onetable.model.schema.OneSchema;
-import io.onetable.model.schema.OneType;
+import org.apache.xtable.collectors.CustomCollectors;
+import org.apache.xtable.exception.SchemaExtractorException;
+import org.apache.xtable.exception.UnsupportedSchemaTypeException;
+import org.apache.xtable.hudi.idtracking.IdTracker;
+import org.apache.xtable.hudi.idtracking.models.IdMapping;
+import org.apache.xtable.model.schema.OneField;
+import org.apache.xtable.model.schema.OneSchema;
+import org.apache.xtable.model.schema.OneType;
+import org.apache.xtable.schema.SchemaUtils;
 
 /**
  * Class that converts Avro Schema {@link Schema} to Canonical Schema {@link OneSchema} and
@@ -176,7 +175,7 @@ public class AvroSchemaConverter {
           OneSchema subFieldSchema =
               toOneSchema(
                   avroField.schema(),
-                  getFullyQualifiedPath(parentPath, avroField.name()),
+                  SchemaUtils.getFullyQualifiedPath(parentPath, avroField.name()),
                   getChildIdMap(idMapping));
           Object defaultValue = getDefaultValue(avroField);
           subFields.add(
@@ -200,7 +199,8 @@ public class AvroSchemaConverter {
         OneSchema elementSchema =
             toOneSchema(
                 schema.getElementType(),
-                getFullyQualifiedPath(parentPath, OneField.Constants.ARRAY_ELEMENT_FIELD_NAME),
+                SchemaUtils.getFullyQualifiedPath(
+                    parentPath, OneField.Constants.ARRAY_ELEMENT_FIELD_NAME),
                 getChildIdMap(elementMapping));
         OneField elementField =
             OneField.builder()
@@ -222,7 +222,8 @@ public class AvroSchemaConverter {
         OneSchema valueSchema =
             toOneSchema(
                 schema.getValueType(),
-                getFullyQualifiedPath(parentPath, OneField.Constants.MAP_VALUE_FIELD_NAME),
+                SchemaUtils.getFullyQualifiedPath(
+                    parentPath, OneField.Constants.MAP_VALUE_FIELD_NAME),
                 getChildIdMap(valueMapping));
         OneField valueField =
             OneField.builder()
@@ -321,12 +322,12 @@ public class AvroSchemaConverter {
                             field.getName(),
                             fromOneSchema(
                                 field.getSchema(),
-                                getFullyQualifiedPath(currentPath, field.getName())),
+                                SchemaUtils.getFullyQualifiedPath(currentPath, field.getName())),
                             field.getSchema().getComment(),
                             OneField.Constants.NULL_DEFAULT_VALUE == field.getDefaultValue()
                                 ? Schema.Field.NULL_VALUE
                                 : field.getDefaultValue()))
-                .collect(toList(oneSchema.getFields().size()));
+                .collect(CustomCollectors.toList(oneSchema.getFields().size()));
         return finalizeSchema(
             Schema.createRecord(
                 oneSchema.getName(), oneSchema.getComment(), currentPath, false, fields),
diff --git a/core/src/main/java/io/onetable/client/OneTableClient.java b/core/src/main/java/org/apache/xtable/client/OneTableClient.java
similarity index 95%
rename from core/src/main/java/io/onetable/client/OneTableClient.java
rename to core/src/main/java/org/apache/xtable/client/OneTableClient.java
index 0881546f..fc62266f 100644
--- a/core/src/main/java/io/onetable/client/OneTableClient.java
+++ b/core/src/main/java/org/apache/xtable/client/OneTableClient.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.client;
+package org.apache.xtable.client;
 
 import java.io.IOException;
 import java.time.Instant;
@@ -38,17 +38,17 @@ import lombok.extern.log4j.Log4j2;
 
 import org.apache.hadoop.conf.Configuration;
 
-import io.onetable.exception.OneIOException;
-import io.onetable.model.IncrementalTableChanges;
-import io.onetable.model.InstantsForIncrementalSync;
-import io.onetable.model.OneSnapshot;
-import io.onetable.model.OneTableMetadata;
-import io.onetable.model.sync.SyncMode;
-import io.onetable.model.sync.SyncResult;
-import io.onetable.spi.extractor.ExtractFromSource;
-import io.onetable.spi.extractor.SourceClient;
-import io.onetable.spi.sync.TableFormatSync;
-import io.onetable.spi.sync.TargetClient;
+import org.apache.xtable.exception.OneIOException;
+import org.apache.xtable.model.IncrementalTableChanges;
+import org.apache.xtable.model.InstantsForIncrementalSync;
+import org.apache.xtable.model.OneSnapshot;
+import org.apache.xtable.model.OneTableMetadata;
+import org.apache.xtable.model.sync.SyncMode;
+import org.apache.xtable.model.sync.SyncResult;
+import org.apache.xtable.spi.extractor.ExtractFromSource;
+import org.apache.xtable.spi.extractor.SourceClient;
+import org.apache.xtable.spi.sync.TableFormatSync;
+import org.apache.xtable.spi.sync.TargetClient;
 
 /**
  * Responsible for completing the entire lifecycle of the sync process given {@link
diff --git a/core/src/main/java/io/onetable/client/PerTableConfigImpl.java b/core/src/main/java/org/apache/xtable/client/PerTableConfigImpl.java
similarity index 96%
rename from core/src/main/java/io/onetable/client/PerTableConfigImpl.java
rename to core/src/main/java/org/apache/xtable/client/PerTableConfigImpl.java
index a17aeae7..37bacd4d 100644
--- a/core/src/main/java/io/onetable/client/PerTableConfigImpl.java
+++ b/core/src/main/java/org/apache/xtable/client/PerTableConfigImpl.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.client;
+package org.apache.xtable.client;
 
 import java.util.List;
 
@@ -30,9 +30,9 @@ import org.apache.hadoop.fs.Path;
 
 import com.google.common.base.Preconditions;
 
-import io.onetable.hudi.HudiSourceConfigImpl;
-import io.onetable.iceberg.IcebergCatalogConfig;
-import io.onetable.model.sync.SyncMode;
+import org.apache.xtable.hudi.HudiSourceConfigImpl;
+import org.apache.xtable.iceberg.IcebergCatalogConfig;
+import org.apache.xtable.model.sync.SyncMode;
 
 /** Represents input configuration to the sync process. */
 @Value
diff --git a/core/src/main/java/io/onetable/client/SourceClientProvider.java b/core/src/main/java/org/apache/xtable/client/SourceClientProvider.java
similarity index 96%
rename from core/src/main/java/io/onetable/client/SourceClientProvider.java
rename to core/src/main/java/org/apache/xtable/client/SourceClientProvider.java
index 098ae145..9c4c91bb 100644
--- a/core/src/main/java/io/onetable/client/SourceClientProvider.java
+++ b/core/src/main/java/org/apache/xtable/client/SourceClientProvider.java
@@ -16,13 +16,13 @@
  * limitations under the License.
  */
  
-package io.onetable.client;
+package org.apache.xtable.client;
 
 import java.util.Map;
 
 import org.apache.hadoop.conf.Configuration;
 
-import io.onetable.spi.extractor.SourceClient;
+import org.apache.xtable.spi.extractor.SourceClient;
 
 /**
  * Provides the functionality to provide an instance of the {@link SourceClient} for a given table
diff --git a/core/src/main/java/io/onetable/client/TableFormatClientFactory.java b/core/src/main/java/org/apache/xtable/client/TableFormatClientFactory.java
similarity index 94%
rename from core/src/main/java/io/onetable/client/TableFormatClientFactory.java
rename to core/src/main/java/org/apache/xtable/client/TableFormatClientFactory.java
index 9d085d52..6b6a8796 100644
--- a/core/src/main/java/io/onetable/client/TableFormatClientFactory.java
+++ b/core/src/main/java/org/apache/xtable/client/TableFormatClientFactory.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.client;
+package org.apache.xtable.client;
 
 import java.util.ServiceLoader;
 
@@ -25,8 +25,8 @@ import lombok.NoArgsConstructor;
 
 import org.apache.hadoop.conf.Configuration;
 
-import io.onetable.exception.NotSupportedException;
-import io.onetable.spi.sync.TargetClient;
+import org.apache.xtable.exception.NotSupportedException;
+import org.apache.xtable.spi.sync.TargetClient;
 
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
 public class TableFormatClientFactory {
diff --git a/core/src/main/java/io/onetable/collectors/CustomCollectors.java b/core/src/main/java/org/apache/xtable/collectors/CustomCollectors.java
similarity index 96%
rename from core/src/main/java/io/onetable/collectors/CustomCollectors.java
rename to core/src/main/java/org/apache/xtable/collectors/CustomCollectors.java
index 00025ec0..e92036dd 100644
--- a/core/src/main/java/io/onetable/collectors/CustomCollectors.java
+++ b/core/src/main/java/org/apache/xtable/collectors/CustomCollectors.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.collectors;
+package org.apache.xtable.collectors;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/core/src/main/java/io/onetable/constants/OneTableConstants.java b/core/src/main/java/org/apache/xtable/constants/OneTableConstants.java
similarity index 97%
rename from core/src/main/java/io/onetable/constants/OneTableConstants.java
rename to core/src/main/java/org/apache/xtable/constants/OneTableConstants.java
index a795acc5..aeb43202 100644
--- a/core/src/main/java/io/onetable/constants/OneTableConstants.java
+++ b/core/src/main/java/org/apache/xtable/constants/OneTableConstants.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.constants;
+package org.apache.xtable.constants;
 
 import lombok.Builder;
 import lombok.Value;
diff --git a/core/src/main/java/io/onetable/delta/DeltaActionsConverter.java b/core/src/main/java/org/apache/xtable/delta/DeltaActionsConverter.java
similarity index 91%
rename from core/src/main/java/io/onetable/delta/DeltaActionsConverter.java
rename to core/src/main/java/org/apache/xtable/delta/DeltaActionsConverter.java
index 2e3ca686..6394d4c4 100644
--- a/core/src/main/java/io/onetable/delta/DeltaActionsConverter.java
+++ b/core/src/main/java/org/apache/xtable/delta/DeltaActionsConverter.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.delta;
+package org.apache.xtable.delta;
 
 import java.util.Collections;
 import java.util.List;
@@ -30,12 +30,12 @@ import org.apache.spark.sql.delta.Snapshot;
 import org.apache.spark.sql.delta.actions.AddFile;
 import org.apache.spark.sql.delta.actions.RemoveFile;
 
-import io.onetable.exception.NotSupportedException;
-import io.onetable.model.schema.OneField;
-import io.onetable.model.schema.OnePartitionField;
-import io.onetable.model.stat.ColumnStat;
-import io.onetable.model.storage.FileFormat;
-import io.onetable.model.storage.OneDataFile;
+import org.apache.xtable.exception.NotSupportedException;
+import org.apache.xtable.model.schema.OneField;
+import org.apache.xtable.model.schema.OnePartitionField;
+import org.apache.xtable.model.stat.ColumnStat;
+import org.apache.xtable.model.storage.FileFormat;
+import org.apache.xtable.model.storage.OneDataFile;
 
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
 public class DeltaActionsConverter {
diff --git a/core/src/main/java/io/onetable/delta/DeltaClient.java b/core/src/main/java/org/apache/xtable/delta/DeltaClient.java
similarity index 94%
rename from core/src/main/java/io/onetable/delta/DeltaClient.java
rename to core/src/main/java/org/apache/xtable/delta/DeltaClient.java
index e40f4bdd..f1c62561 100644
--- a/core/src/main/java/io/onetable/delta/DeltaClient.java
+++ b/core/src/main/java/org/apache/xtable/delta/DeltaClient.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.delta;
+package org.apache.xtable.delta;
 
 import java.time.Instant;
 import java.util.ArrayList;
@@ -54,16 +54,16 @@ import scala.collection.Seq;
 
 import com.google.common.annotations.VisibleForTesting;
 
-import io.onetable.client.PerTableConfig;
-import io.onetable.exception.NotSupportedException;
-import io.onetable.model.OneTable;
-import io.onetable.model.OneTableMetadata;
-import io.onetable.model.schema.OnePartitionField;
-import io.onetable.model.schema.OneSchema;
-import io.onetable.model.storage.OneDataFilesDiff;
-import io.onetable.model.storage.OneFileGroup;
-import io.onetable.model.storage.TableFormat;
-import io.onetable.spi.sync.TargetClient;
+import org.apache.xtable.client.PerTableConfig;
+import org.apache.xtable.exception.NotSupportedException;
+import org.apache.xtable.model.OneTable;
+import org.apache.xtable.model.OneTableMetadata;
+import org.apache.xtable.model.schema.OnePartitionField;
+import org.apache.xtable.model.schema.OneSchema;
+import org.apache.xtable.model.storage.OneDataFilesDiff;
+import org.apache.xtable.model.storage.OneFileGroup;
+import org.apache.xtable.model.storage.TableFormat;
+import org.apache.xtable.spi.sync.TargetClient;
 
 public class DeltaClient implements TargetClient {
   private static final String MIN_READER_VERSION = String.valueOf(1);
diff --git a/core/src/main/java/io/onetable/delta/DeltaClientUtils.java b/core/src/main/java/org/apache/xtable/delta/DeltaClientUtils.java
similarity index 98%
rename from core/src/main/java/io/onetable/delta/DeltaClientUtils.java
rename to core/src/main/java/org/apache/xtable/delta/DeltaClientUtils.java
index 6f1a997e..fb5817bb 100644
--- a/core/src/main/java/io/onetable/delta/DeltaClientUtils.java
+++ b/core/src/main/java/org/apache/xtable/delta/DeltaClientUtils.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.delta;
+package org.apache.xtable.delta;
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
diff --git a/core/src/main/java/io/onetable/delta/DeltaDataFileExtractor.java b/core/src/main/java/org/apache/xtable/delta/DeltaDataFileExtractor.java
similarity index 90%
rename from core/src/main/java/io/onetable/delta/DeltaDataFileExtractor.java
rename to core/src/main/java/org/apache/xtable/delta/DeltaDataFileExtractor.java
index 28f7da16..89e22fe0 100644
--- a/core/src/main/java/io/onetable/delta/DeltaDataFileExtractor.java
+++ b/core/src/main/java/org/apache/xtable/delta/DeltaDataFileExtractor.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.delta;
+package org.apache.xtable.delta;
 
 import java.util.Iterator;
 import java.util.List;
@@ -25,12 +25,12 @@ import lombok.Builder;
 
 import org.apache.spark.sql.delta.Snapshot;
 
-import io.onetable.model.schema.OneField;
-import io.onetable.model.schema.OnePartitionField;
-import io.onetable.model.schema.OneSchema;
-import io.onetable.model.storage.FileFormat;
-import io.onetable.model.storage.OneDataFile;
-import io.onetable.spi.extractor.DataFileIterator;
+import org.apache.xtable.model.schema.OneField;
+import org.apache.xtable.model.schema.OnePartitionField;
+import org.apache.xtable.model.schema.OneSchema;
+import org.apache.xtable.model.storage.FileFormat;
+import org.apache.xtable.model.storage.OneDataFile;
+import org.apache.xtable.spi.extractor.DataFileIterator;
 
 /** DeltaDataFileExtractor lets the consumer iterate over partitions. */
 @Builder
diff --git a/core/src/main/java/io/onetable/delta/DeltaDataFileUpdatesExtractor.java b/core/src/main/java/org/apache/xtable/delta/DeltaDataFileUpdatesExtractor.java
similarity index 86%
rename from core/src/main/java/io/onetable/delta/DeltaDataFileUpdatesExtractor.java
rename to core/src/main/java/org/apache/xtable/delta/DeltaDataFileUpdatesExtractor.java
index 60834480..5ad7dd29 100644
--- a/core/src/main/java/io/onetable/delta/DeltaDataFileUpdatesExtractor.java
+++ b/core/src/main/java/org/apache/xtable/delta/DeltaDataFileUpdatesExtractor.java
@@ -16,10 +16,9 @@
  * limitations under the License.
  */
  
-package io.onetable.delta;
+package org.apache.xtable.delta;
 
-import static io.onetable.collectors.CustomCollectors.toList;
-import static io.onetable.delta.ScalaUtils.convertJavaMapToScala;
+import static org.apache.xtable.delta.ScalaUtils.convertJavaMapToScala;
 
 import java.util.*;
 import java.util.stream.Collectors;
@@ -37,13 +36,14 @@ import scala.collection.Seq;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
 
-import io.onetable.model.schema.OneSchema;
-import io.onetable.model.stat.ColumnStat;
-import io.onetable.model.storage.DataFilesDiff;
-import io.onetable.model.storage.OneDataFile;
-import io.onetable.model.storage.OneDataFilesDiff;
-import io.onetable.model.storage.OneFileGroup;
-import io.onetable.paths.PathUtils;
+import org.apache.xtable.collectors.CustomCollectors;
+import org.apache.xtable.model.schema.OneSchema;
+import org.apache.xtable.model.stat.ColumnStat;
+import org.apache.xtable.model.storage.DataFilesDiff;
+import org.apache.xtable.model.storage.OneDataFile;
+import org.apache.xtable.model.storage.OneDataFilesDiff;
+import org.apache.xtable.model.storage.OneFileGroup;
+import org.apache.xtable.paths.PathUtils;
 
 @Builder
 public class DeltaDataFileUpdatesExtractor {
@@ -85,7 +85,7 @@ public class DeltaDataFileUpdatesExtractor {
         oneDataFilesDiff.getFilesRemoved().stream()
             .flatMap(dFile -> createAddFileAction(dFile, tableSchema, tableBasePath))
             .map(AddFile::remove)
-            .collect(toList(oneDataFilesDiff.getFilesRemoved().size()));
+            .collect(CustomCollectors.toList(oneDataFilesDiff.getFilesRemoved().size()));
     return applyDiff(oneDataFilesDiff.getFilesAdded(), removeActions, tableSchema, tableBasePath);
   }
 
@@ -99,7 +99,8 @@ public class DeltaDataFileUpdatesExtractor {
             .flatMap(dFile -> createAddFileAction(dFile, tableSchema, tableBasePath));
     int totalActions = filesAdded.size() + removeFileActions.size();
     List<Action> allActions =
-        Stream.concat(addActions, removeFileActions.stream()).collect(toList(totalActions));
+        Stream.concat(addActions, removeFileActions.stream())
+            .collect(CustomCollectors.toList(totalActions));
     return JavaConverters.asScalaBuffer(allActions).toSeq();
   }
 
diff --git a/core/src/main/java/io/onetable/delta/DeltaIncrementalChangesState.java b/core/src/main/java/org/apache/xtable/delta/DeltaIncrementalChangesState.java
similarity index 99%
rename from core/src/main/java/io/onetable/delta/DeltaIncrementalChangesState.java
rename to core/src/main/java/org/apache/xtable/delta/DeltaIncrementalChangesState.java
index 15f5272f..59e462bd 100644
--- a/core/src/main/java/io/onetable/delta/DeltaIncrementalChangesState.java
+++ b/core/src/main/java/org/apache/xtable/delta/DeltaIncrementalChangesState.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.delta;
+package org.apache.xtable.delta;
 
 import java.util.ArrayList;
 import java.util.HashMap;
diff --git a/core/src/main/java/io/onetable/delta/DeltaPartitionExtractor.java b/core/src/main/java/org/apache/xtable/delta/DeltaPartitionExtractor.java
similarity index 96%
rename from core/src/main/java/io/onetable/delta/DeltaPartitionExtractor.java
rename to core/src/main/java/org/apache/xtable/delta/DeltaPartitionExtractor.java
index 93b2bcad..b7ba5f23 100644
--- a/core/src/main/java/io/onetable/delta/DeltaPartitionExtractor.java
+++ b/core/src/main/java/org/apache/xtable/delta/DeltaPartitionExtractor.java
@@ -16,11 +16,11 @@
  * limitations under the License.
  */
  
-package io.onetable.delta;
+package org.apache.xtable.delta;
 
-import static io.onetable.collectors.CustomCollectors.toList;
-import static io.onetable.delta.DeltaValueConverter.convertFromDeltaPartitionValue;
-import static io.onetable.delta.DeltaValueConverter.convertToDeltaPartitionValue;
+import static org.apache.xtable.collectors.CustomCollectors.toList;
+import static org.apache.xtable.delta.DeltaValueConverter.convertFromDeltaPartitionValue;
+import static org.apache.xtable.delta.DeltaValueConverter.convertToDeltaPartitionValue;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -50,14 +50,14 @@ import scala.collection.JavaConverters;
 import com.google.common.collect.Iterators;
 import com.google.common.collect.PeekingIterator;
 
-import io.onetable.exception.PartitionSpecException;
-import io.onetable.model.schema.OnePartitionField;
-import io.onetable.model.schema.OneSchema;
-import io.onetable.model.schema.PartitionTransformType;
-import io.onetable.model.stat.PartitionValue;
-import io.onetable.model.stat.Range;
-import io.onetable.model.storage.OneDataFile;
-import io.onetable.schema.SchemaFieldFinder;
+import org.apache.xtable.exception.PartitionSpecException;
+import org.apache.xtable.model.schema.OnePartitionField;
+import org.apache.xtable.model.schema.OneSchema;
+import org.apache.xtable.model.schema.PartitionTransformType;
+import org.apache.xtable.model.stat.PartitionValue;
+import org.apache.xtable.model.stat.Range;
+import org.apache.xtable.model.storage.OneDataFile;
+import org.apache.xtable.schema.SchemaFieldFinder;
 
 /**
  * DeltaPartitionExtractor handles extracting partition columns, also creating generated columns in
diff --git a/core/src/main/java/io/onetable/delta/DeltaSchemaExtractor.java b/core/src/main/java/org/apache/xtable/delta/DeltaSchemaExtractor.java
similarity index 89%
rename from core/src/main/java/io/onetable/delta/DeltaSchemaExtractor.java
rename to core/src/main/java/org/apache/xtable/delta/DeltaSchemaExtractor.java
index 9f2b172c..898a33c0 100644
--- a/core/src/main/java/io/onetable/delta/DeltaSchemaExtractor.java
+++ b/core/src/main/java/org/apache/xtable/delta/DeltaSchemaExtractor.java
@@ -16,11 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.delta;
-
-import static io.onetable.collectors.CustomCollectors.toList;
-import static io.onetable.delta.DeltaPartitionExtractor.DELTA_GENERATION_EXPRESSION;
-import static io.onetable.schema.SchemaUtils.getFullyQualifiedPath;
+package org.apache.xtable.delta;
 
 import java.util.Arrays;
 import java.util.Collections;
@@ -40,11 +36,13 @@ import org.apache.spark.sql.types.Metadata;
 import org.apache.spark.sql.types.StructField;
 import org.apache.spark.sql.types.StructType;
 
-import io.onetable.exception.NotSupportedException;
-import io.onetable.exception.SchemaExtractorException;
-import io.onetable.model.schema.OneField;
-import io.onetable.model.schema.OneSchema;
-import io.onetable.model.schema.OneType;
+import org.apache.xtable.collectors.CustomCollectors;
+import org.apache.xtable.exception.NotSupportedException;
+import org.apache.xtable.exception.SchemaExtractorException;
+import org.apache.xtable.model.schema.OneField;
+import org.apache.xtable.model.schema.OneSchema;
+import org.apache.xtable.model.schema.OneType;
+import org.apache.xtable.schema.SchemaUtils;
 
 /**
  * Converts between Delta and OneTable schemas. Some items to be aware of:
@@ -189,7 +187,11 @@ public class DeltaSchemaExtractor {
         StructType structType = (StructType) dataType;
         fields =
             Arrays.stream(structType.fields())
-                .filter(field -> !field.metadata().contains(DELTA_GENERATION_EXPRESSION))
+                .filter(
+                    field ->
+                        !field
+                            .metadata()
+                            .contains(DeltaPartitionExtractor.DELTA_GENERATION_EXPRESSION))
                 .map(
                     field -> {
                       Integer fieldId =
@@ -201,7 +203,7 @@ public class DeltaSchemaExtractor {
                       OneSchema schema =
                           toOneSchema(
                               field.dataType(),
-                              getFullyQualifiedPath(parentPath, field.name()),
+                              SchemaUtils.getFullyQualifiedPath(parentPath, field.name()),
                               field.nullable(),
                               fieldComment);
                       return OneField.builder()
@@ -213,7 +215,7 @@ public class DeltaSchemaExtractor {
                               field.nullable() ? OneField.Constants.NULL_DEFAULT_VALUE : null)
                           .build();
                     })
-                .collect(toList(structType.fields().length));
+                .collect(CustomCollectors.toList(structType.fields().length));
         type = OneType.RECORD;
         break;
       case "decimal":
@@ -228,7 +230,8 @@ public class DeltaSchemaExtractor {
         OneSchema elementSchema =
             toOneSchema(
                 arrayType.elementType(),
-                getFullyQualifiedPath(parentPath, OneField.Constants.ARRAY_ELEMENT_FIELD_NAME),
+                SchemaUtils.getFullyQualifiedPath(
+                    parentPath, OneField.Constants.ARRAY_ELEMENT_FIELD_NAME),
                 arrayType.containsNull(),
                 null);
         OneField elementField =
@@ -245,7 +248,8 @@ public class DeltaSchemaExtractor {
         OneSchema keySchema =
             toOneSchema(
                 mapType.keyType(),
-                getFullyQualifiedPath(parentPath, OneField.Constants.MAP_VALUE_FIELD_NAME),
+                SchemaUtils.getFullyQualifiedPath(
+                    parentPath, OneField.Constants.MAP_VALUE_FIELD_NAME),
                 false,
                 null);
         OneField keyField =
@@ -257,7 +261,8 @@ public class DeltaSchemaExtractor {
         OneSchema valueSchema =
             toOneSchema(
                 mapType.valueType(),
-                getFullyQualifiedPath(parentPath, OneField.Constants.MAP_VALUE_FIELD_NAME),
+                SchemaUtils.getFullyQualifiedPath(
+                    parentPath, OneField.Constants.MAP_VALUE_FIELD_NAME),
                 mapType.valueContainsNull(),
                 null);
         OneField valueField =
diff --git a/core/src/main/java/io/onetable/delta/DeltaSourceClient.java b/core/src/main/java/org/apache/xtable/delta/DeltaSourceClient.java
similarity index 90%
rename from core/src/main/java/io/onetable/delta/DeltaSourceClient.java
rename to core/src/main/java/org/apache/xtable/delta/DeltaSourceClient.java
index 1b000a10..bb344be7 100644
--- a/core/src/main/java/io/onetable/delta/DeltaSourceClient.java
+++ b/core/src/main/java/org/apache/xtable/delta/DeltaSourceClient.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.delta;
+package org.apache.xtable.delta;
 
 import java.sql.Timestamp;
 import java.time.Instant;
@@ -44,18 +44,21 @@ import scala.Option;
 
 import io.delta.tables.DeltaTable;
 
-import io.onetable.exception.OneIOException;
-import io.onetable.model.*;
-import io.onetable.model.CommitsBacklog;
-import io.onetable.model.schema.OneSchema;
-import io.onetable.model.schema.SchemaCatalog;
-import io.onetable.model.schema.SchemaVersion;
-import io.onetable.model.storage.FileFormat;
-import io.onetable.model.storage.OneDataFile;
-import io.onetable.model.storage.OneDataFilesDiff;
-import io.onetable.model.storage.OneFileGroup;
-import io.onetable.spi.extractor.DataFileIterator;
-import io.onetable.spi.extractor.SourceClient;
+import org.apache.xtable.exception.OneIOException;
+import org.apache.xtable.model.CommitsBacklog;
+import org.apache.xtable.model.InstantsForIncrementalSync;
+import org.apache.xtable.model.OneSnapshot;
+import org.apache.xtable.model.OneTable;
+import org.apache.xtable.model.TableChange;
+import org.apache.xtable.model.schema.OneSchema;
+import org.apache.xtable.model.schema.SchemaCatalog;
+import org.apache.xtable.model.schema.SchemaVersion;
+import org.apache.xtable.model.storage.FileFormat;
+import org.apache.xtable.model.storage.OneDataFile;
+import org.apache.xtable.model.storage.OneDataFilesDiff;
+import org.apache.xtable.model.storage.OneFileGroup;
+import org.apache.xtable.spi.extractor.DataFileIterator;
+import org.apache.xtable.spi.extractor.SourceClient;
 
 @Log4j2
 @Builder
diff --git a/core/src/main/java/io/onetable/delta/DeltaSourceClientProvider.java b/core/src/main/java/org/apache/xtable/delta/DeltaSourceClientProvider.java
similarity index 92%
rename from core/src/main/java/io/onetable/delta/DeltaSourceClientProvider.java
rename to core/src/main/java/org/apache/xtable/delta/DeltaSourceClientProvider.java
index 78098d06..c885efba 100644
--- a/core/src/main/java/io/onetable/delta/DeltaSourceClientProvider.java
+++ b/core/src/main/java/org/apache/xtable/delta/DeltaSourceClientProvider.java
@@ -16,14 +16,14 @@
  * limitations under the License.
  */
  
-package io.onetable.delta;
+package org.apache.xtable.delta;
 
 import org.apache.spark.sql.SparkSession;
 
 import io.delta.tables.DeltaTable;
 
-import io.onetable.client.PerTableConfig;
-import io.onetable.client.SourceClientProvider;
+import org.apache.xtable.client.PerTableConfig;
+import org.apache.xtable.client.SourceClientProvider;
 
 /** A concrete implementation of {@link SourceClientProvider} for Delta Lake table format. */
 public class DeltaSourceClientProvider extends SourceClientProvider<Long> {
diff --git a/core/src/main/java/io/onetable/delta/DeltaStatsExtractor.java b/core/src/main/java/org/apache/xtable/delta/DeltaStatsExtractor.java
similarity index 93%
rename from core/src/main/java/io/onetable/delta/DeltaStatsExtractor.java
rename to core/src/main/java/org/apache/xtable/delta/DeltaStatsExtractor.java
index 9c41b94f..be2fba12 100644
--- a/core/src/main/java/io/onetable/delta/DeltaStatsExtractor.java
+++ b/core/src/main/java/org/apache/xtable/delta/DeltaStatsExtractor.java
@@ -16,10 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.delta;
-
-import static io.onetable.collectors.CustomCollectors.toList;
-import static io.onetable.delta.DeltaValueConverter.convertToDeltaColumnStatValue;
+package org.apache.xtable.delta;
 
 import java.io.IOException;
 import java.util.ArrayDeque;
@@ -44,12 +41,13 @@ import org.apache.spark.sql.delta.actions.AddFile;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 
-import io.onetable.exception.OneIOException;
-import io.onetable.model.schema.OneField;
-import io.onetable.model.schema.OneSchema;
-import io.onetable.model.schema.OneType;
-import io.onetable.model.stat.ColumnStat;
-import io.onetable.model.stat.Range;
+import org.apache.xtable.collectors.CustomCollectors;
+import org.apache.xtable.exception.OneIOException;
+import org.apache.xtable.model.schema.OneField;
+import org.apache.xtable.model.schema.OneSchema;
+import org.apache.xtable.model.schema.OneType;
+import org.apache.xtable.model.stat.ColumnStat;
+import org.apache.xtable.model.stat.Range;
 
 /**
  * DeltaStatsExtractor extracts column stats and also responsible for their serialization leveraging
@@ -131,7 +129,8 @@ public class DeltaStatsExtractor {
           insertValueAtPath(
               jsonObject,
               pathParts,
-              convertToDeltaColumnStatValue(valueExtractor.apply(columnStat), field.getSchema()));
+              DeltaValueConverter.convertToDeltaColumnStatValue(
+                  valueExtractor.apply(columnStat), field.getSchema()));
         });
     return jsonObject;
   }
@@ -200,7 +199,7 @@ public class DeltaStatsExtractor {
                     .range(range)
                     .build();
               })
-          .collect(toList(fields.size()));
+          .collect(CustomCollectors.toList(fields.size()));
     } catch (IOException ex) {
       throw new OneIOException("Unable to parse stats json", ex);
     }
diff --git a/core/src/main/java/io/onetable/delta/DeltaTableExtractor.java b/core/src/main/java/org/apache/xtable/delta/DeltaTableExtractor.java
similarity index 88%
rename from core/src/main/java/io/onetable/delta/DeltaTableExtractor.java
rename to core/src/main/java/org/apache/xtable/delta/DeltaTableExtractor.java
index bb07fca7..091f933d 100644
--- a/core/src/main/java/io/onetable/delta/DeltaTableExtractor.java
+++ b/core/src/main/java/org/apache/xtable/delta/DeltaTableExtractor.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.delta;
+package org.apache.xtable.delta;
 
 import java.time.Instant;
 import java.util.List;
@@ -28,11 +28,11 @@ import org.apache.spark.sql.delta.Snapshot;
 
 import scala.Option;
 
-import io.onetable.model.OneTable;
-import io.onetable.model.schema.OnePartitionField;
-import io.onetable.model.schema.OneSchema;
-import io.onetable.model.storage.DataLayoutStrategy;
-import io.onetable.model.storage.TableFormat;
+import org.apache.xtable.model.OneTable;
+import org.apache.xtable.model.schema.OnePartitionField;
+import org.apache.xtable.model.schema.OneSchema;
+import org.apache.xtable.model.storage.DataLayoutStrategy;
+import org.apache.xtable.model.storage.TableFormat;
 
 /** Extracts {@link OneTable} canonical representation of a table at a point in time for Delta. */
 @Builder
diff --git a/core/src/main/java/io/onetable/delta/DeltaValueConverter.java b/core/src/main/java/org/apache/xtable/delta/DeltaValueConverter.java
similarity index 96%
rename from core/src/main/java/io/onetable/delta/DeltaValueConverter.java
rename to core/src/main/java/org/apache/xtable/delta/DeltaValueConverter.java
index c3ac7c0e..09db128e 100644
--- a/core/src/main/java/io/onetable/delta/DeltaValueConverter.java
+++ b/core/src/main/java/org/apache/xtable/delta/DeltaValueConverter.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.delta;
+package org.apache.xtable.delta;
 
 import java.math.BigDecimal;
 import java.math.BigInteger;
@@ -32,11 +32,11 @@ import java.time.format.DateTimeParseException;
 import java.util.TimeZone;
 import java.util.concurrent.TimeUnit;
 
-import io.onetable.exception.NotSupportedException;
-import io.onetable.exception.OneIOException;
-import io.onetable.model.schema.OneSchema;
-import io.onetable.model.schema.OneType;
-import io.onetable.model.schema.PartitionTransformType;
+import org.apache.xtable.exception.NotSupportedException;
+import org.apache.xtable.exception.OneIOException;
+import org.apache.xtable.model.schema.OneSchema;
+import org.apache.xtable.model.schema.OneType;
+import org.apache.xtable.model.schema.PartitionTransformType;
 
 /**
  * DeltaValueConverter is specialized in (de)serializing column stats and partition values depending
diff --git a/core/src/main/java/io/onetable/delta/ScalaUtils.java b/core/src/main/java/org/apache/xtable/delta/ScalaUtils.java
similarity index 97%
rename from core/src/main/java/io/onetable/delta/ScalaUtils.java
rename to core/src/main/java/org/apache/xtable/delta/ScalaUtils.java
index 8280e5f7..ddee57ac 100644
--- a/core/src/main/java/io/onetable/delta/ScalaUtils.java
+++ b/core/src/main/java/org/apache/xtable/delta/ScalaUtils.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.delta;
+package org.apache.xtable.delta;
 
 import java.util.List;
 import java.util.Map;
diff --git a/core/src/main/java/io/onetable/exception/ConfigurationException.java b/core/src/main/java/org/apache/xtable/exception/ConfigurationException.java
similarity index 87%
rename from core/src/main/java/io/onetable/exception/ConfigurationException.java
rename to core/src/main/java/org/apache/xtable/exception/ConfigurationException.java
index c84bbf5d..88f81934 100644
--- a/core/src/main/java/io/onetable/exception/ConfigurationException.java
+++ b/core/src/main/java/org/apache/xtable/exception/ConfigurationException.java
@@ -16,10 +16,10 @@
  * limitations under the License.
  */
  
-package io.onetable.exception;
+package org.apache.xtable.exception;
 
-import io.onetable.model.exception.OneTableErrorCode;
-import io.onetable.model.exception.OneTableException;
+import org.apache.xtable.model.exception.OneTableErrorCode;
+import org.apache.xtable.model.exception.OneTableException;
 
 public class ConfigurationException extends OneTableException {
   public ConfigurationException(String message, Throwable e) {
diff --git a/core/src/main/java/io/onetable/exception/NotSupportedException.java b/core/src/main/java/org/apache/xtable/exception/NotSupportedException.java
similarity index 87%
rename from core/src/main/java/io/onetable/exception/NotSupportedException.java
rename to core/src/main/java/org/apache/xtable/exception/NotSupportedException.java
index 56ea2cdd..03743511 100644
--- a/core/src/main/java/io/onetable/exception/NotSupportedException.java
+++ b/core/src/main/java/org/apache/xtable/exception/NotSupportedException.java
@@ -16,10 +16,10 @@
  * limitations under the License.
  */
  
-package io.onetable.exception;
+package org.apache.xtable.exception;
 
-import io.onetable.model.exception.OneTableErrorCode;
-import io.onetable.model.exception.OneTableException;
+import org.apache.xtable.model.exception.OneTableErrorCode;
+import org.apache.xtable.model.exception.OneTableException;
 
 public class NotSupportedException extends OneTableException {
   public NotSupportedException(String message, Throwable e) {
diff --git a/core/src/main/java/io/onetable/exception/OneIOException.java b/core/src/main/java/org/apache/xtable/exception/OneIOException.java
similarity index 87%
rename from core/src/main/java/io/onetable/exception/OneIOException.java
rename to core/src/main/java/org/apache/xtable/exception/OneIOException.java
index 03edbf79..a6fbbb05 100644
--- a/core/src/main/java/io/onetable/exception/OneIOException.java
+++ b/core/src/main/java/org/apache/xtable/exception/OneIOException.java
@@ -16,10 +16,10 @@
  * limitations under the License.
  */
  
-package io.onetable.exception;
+package org.apache.xtable.exception;
 
-import io.onetable.model.exception.OneTableErrorCode;
-import io.onetable.model.exception.OneTableException;
+import org.apache.xtable.model.exception.OneTableErrorCode;
+import org.apache.xtable.model.exception.OneTableException;
 
 public class OneIOException extends OneTableException {
   public OneIOException(String message, Throwable e) {
diff --git a/core/src/main/java/io/onetable/exception/PartitionSpecException.java b/core/src/main/java/org/apache/xtable/exception/PartitionSpecException.java
similarity index 87%
rename from core/src/main/java/io/onetable/exception/PartitionSpecException.java
rename to core/src/main/java/org/apache/xtable/exception/PartitionSpecException.java
index e56f189f..7214bf89 100644
--- a/core/src/main/java/io/onetable/exception/PartitionSpecException.java
+++ b/core/src/main/java/org/apache/xtable/exception/PartitionSpecException.java
@@ -16,10 +16,10 @@
  * limitations under the License.
  */
  
-package io.onetable.exception;
+package org.apache.xtable.exception;
 
-import io.onetable.model.exception.OneTableErrorCode;
-import io.onetable.model.exception.OneTableException;
+import org.apache.xtable.model.exception.OneTableErrorCode;
+import org.apache.xtable.model.exception.OneTableException;
 
 public class PartitionSpecException extends OneTableException {
   public PartitionSpecException(String message) {
diff --git a/core/src/main/java/io/onetable/exception/PartitionValuesExtractorException.java b/core/src/main/java/org/apache/xtable/exception/PartitionValuesExtractorException.java
similarity index 88%
rename from core/src/main/java/io/onetable/exception/PartitionValuesExtractorException.java
rename to core/src/main/java/org/apache/xtable/exception/PartitionValuesExtractorException.java
index 0e2e29c9..90ba7e7c 100644
--- a/core/src/main/java/io/onetable/exception/PartitionValuesExtractorException.java
+++ b/core/src/main/java/org/apache/xtable/exception/PartitionValuesExtractorException.java
@@ -16,10 +16,10 @@
  * limitations under the License.
  */
  
-package io.onetable.exception;
+package org.apache.xtable.exception;
 
-import io.onetable.model.exception.OneTableErrorCode;
-import io.onetable.model.exception.OneTableException;
+import org.apache.xtable.model.exception.OneTableErrorCode;
+import org.apache.xtable.model.exception.OneTableException;
 
 public class PartitionValuesExtractorException extends OneTableException {
   public PartitionValuesExtractorException(String message) {
diff --git a/core/src/main/java/io/onetable/exception/SchemaExtractorException.java b/core/src/main/java/org/apache/xtable/exception/SchemaExtractorException.java
similarity index 88%
rename from core/src/main/java/io/onetable/exception/SchemaExtractorException.java
rename to core/src/main/java/org/apache/xtable/exception/SchemaExtractorException.java
index 5442967c..10552b2c 100644
--- a/core/src/main/java/io/onetable/exception/SchemaExtractorException.java
+++ b/core/src/main/java/org/apache/xtable/exception/SchemaExtractorException.java
@@ -16,10 +16,10 @@
  * limitations under the License.
  */
  
-package io.onetable.exception;
+package org.apache.xtable.exception;
 
-import io.onetable.model.exception.OneTableErrorCode;
-import io.onetable.model.exception.OneTableException;
+import org.apache.xtable.model.exception.OneTableErrorCode;
+import org.apache.xtable.model.exception.OneTableException;
 
 /** Exception to report for errors during Schema Extraction. */
 public class SchemaExtractorException extends OneTableException {
diff --git a/core/src/main/java/io/onetable/exception/UnsupportedSchemaTypeException.java b/core/src/main/java/org/apache/xtable/exception/UnsupportedSchemaTypeException.java
similarity index 88%
rename from core/src/main/java/io/onetable/exception/UnsupportedSchemaTypeException.java
rename to core/src/main/java/org/apache/xtable/exception/UnsupportedSchemaTypeException.java
index 0cbec403..a81961c8 100644
--- a/core/src/main/java/io/onetable/exception/UnsupportedSchemaTypeException.java
+++ b/core/src/main/java/org/apache/xtable/exception/UnsupportedSchemaTypeException.java
@@ -16,10 +16,10 @@
  * limitations under the License.
  */
  
-package io.onetable.exception;
+package org.apache.xtable.exception;
 
-import io.onetable.model.exception.OneTableErrorCode;
-import io.onetable.model.exception.OneTableException;
+import org.apache.xtable.model.exception.OneTableErrorCode;
+import org.apache.xtable.model.exception.OneTableException;
 
 public class UnsupportedSchemaTypeException extends OneTableException {
   public UnsupportedSchemaTypeException(String message) {
diff --git a/core/src/main/java/io/onetable/hudi/BaseFileUpdatesExtractor.java b/core/src/main/java/org/apache/xtable/hudi/BaseFileUpdatesExtractor.java
similarity index 95%
rename from core/src/main/java/io/onetable/hudi/BaseFileUpdatesExtractor.java
rename to core/src/main/java/org/apache/xtable/hudi/BaseFileUpdatesExtractor.java
index 43b22362..7d7f7558 100644
--- a/core/src/main/java/io/onetable/hudi/BaseFileUpdatesExtractor.java
+++ b/core/src/main/java/org/apache/xtable/hudi/BaseFileUpdatesExtractor.java
@@ -16,10 +16,9 @@
  * limitations under the License.
  */
  
-package io.onetable.hudi;
+package org.apache.xtable.hudi;
 
-import static io.onetable.collectors.CustomCollectors.toList;
-import static io.onetable.hudi.HudiSchemaExtractor.convertFromOneTablePath;
+import static org.apache.xtable.hudi.HudiSchemaExtractor.convertFromOneTablePath;
 
 import java.util.ArrayList;
 import java.util.Collections;
@@ -52,11 +51,12 @@ import org.apache.hudi.common.util.ExternalFilePathUtil;
 import org.apache.hudi.hadoop.CachingPath;
 import org.apache.hudi.metadata.HoodieMetadataFileSystemView;
 
-import io.onetable.model.schema.OneType;
-import io.onetable.model.stat.ColumnStat;
-import io.onetable.model.storage.OneDataFile;
-import io.onetable.model.storage.OneDataFilesDiff;
-import io.onetable.model.storage.OneFileGroup;
+import org.apache.xtable.collectors.CustomCollectors;
+import org.apache.xtable.model.schema.OneType;
+import org.apache.xtable.model.stat.ColumnStat;
+import org.apache.xtable.model.storage.OneDataFile;
+import org.apache.xtable.model.storage.OneDataFilesDiff;
+import org.apache.xtable.model.storage.OneFileGroup;
 
 @AllArgsConstructor(staticName = "of")
 public class BaseFileUpdatesExtractor {
@@ -179,7 +179,7 @@ public class BaseFileUpdatesExtractor {
     List<WriteStatus> writeStatuses =
         oneDataFilesDiff.getFilesAdded().stream()
             .map(file -> toWriteStatus(tableBasePath, commit, file, Optional.empty()))
-            .collect(toList(oneDataFilesDiff.getFilesAdded().size()));
+            .collect(CustomCollectors.toList(oneDataFilesDiff.getFilesAdded().size()));
     return ReplaceMetadata.of(partitionToReplacedFileIds, writeStatuses);
   }
 
diff --git a/core/src/main/java/io/onetable/hudi/ConfigurationBasedPartitionSpecExtractor.java b/core/src/main/java/org/apache/xtable/hudi/ConfigurationBasedPartitionSpecExtractor.java
similarity index 91%
rename from core/src/main/java/io/onetable/hudi/ConfigurationBasedPartitionSpecExtractor.java
rename to core/src/main/java/org/apache/xtable/hudi/ConfigurationBasedPartitionSpecExtractor.java
index 9cb679a0..e3bed5f2 100644
--- a/core/src/main/java/io/onetable/hudi/ConfigurationBasedPartitionSpecExtractor.java
+++ b/core/src/main/java/org/apache/xtable/hudi/ConfigurationBasedPartitionSpecExtractor.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.hudi;
+package org.apache.xtable.hudi;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -25,10 +25,10 @@ import java.util.Map;
 
 import lombok.AllArgsConstructor;
 
-import io.onetable.model.schema.OneField;
-import io.onetable.model.schema.OnePartitionField;
-import io.onetable.model.schema.OneSchema;
-import io.onetable.schema.SchemaFieldFinder;
+import org.apache.xtable.model.schema.OneField;
+import org.apache.xtable.model.schema.OnePartitionField;
+import org.apache.xtable.model.schema.OneSchema;
+import org.apache.xtable.schema.SchemaFieldFinder;
 
 /**
  * Parses the OnePartitionFields from a configured list of specs with the format path:type:format
diff --git a/core/src/main/java/io/onetable/hudi/HudiClient.java b/core/src/main/java/org/apache/xtable/hudi/HudiClient.java
similarity index 90%
rename from core/src/main/java/io/onetable/hudi/HudiClient.java
rename to core/src/main/java/org/apache/xtable/hudi/HudiClient.java
index a6acabfa..9723d100 100644
--- a/core/src/main/java/io/onetable/hudi/HudiClient.java
+++ b/core/src/main/java/org/apache/xtable/hudi/HudiClient.java
@@ -16,11 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.hudi;
-
-import static io.onetable.collectors.CustomCollectors.toList;
-import static io.onetable.hudi.HudiInstantUtils.convertInstantToCommit;
-import static io.onetable.hudi.HudiInstantUtils.parseFromInstantTime;
+package org.apache.xtable.hudi;
 
 import java.time.Instant;
 import java.util.ArrayList;
@@ -46,11 +42,15 @@ import org.apache.hudi.common.util.Option;
 import com.google.common.collect.Iterators;
 import com.google.common.collect.PeekingIterator;
 
-import io.onetable.exception.OneIOException;
-import io.onetable.model.*;
-import io.onetable.model.CommitsBacklog;
-import io.onetable.model.schema.SchemaCatalog;
-import io.onetable.spi.extractor.SourceClient;
+import org.apache.xtable.collectors.CustomCollectors;
+import org.apache.xtable.exception.OneIOException;
+import org.apache.xtable.model.CommitsBacklog;
+import org.apache.xtable.model.InstantsForIncrementalSync;
+import org.apache.xtable.model.OneSnapshot;
+import org.apache.xtable.model.OneTable;
+import org.apache.xtable.model.TableChange;
+import org.apache.xtable.model.schema.SchemaCatalog;
+import org.apache.xtable.spi.extractor.SourceClient;
 
 public class HudiClient implements SourceClient<HoodieInstant> {
 
@@ -104,8 +104,10 @@ public class HudiClient implements SourceClient<HoodieInstant> {
         .partitionedDataFiles(dataFileExtractor.getFilesCurrentState(table))
         .pendingCommits(
             pendingInstants.stream()
-                .map(hoodieInstant -> parseFromInstantTime(hoodieInstant.getTimestamp()))
-                .collect(toList(pendingInstants.size())))
+                .map(
+                    hoodieInstant ->
+                        HudiInstantUtils.parseFromInstantTime(hoodieInstant.getTimestamp()))
+                .collect(CustomCollectors.toList(pendingInstants.size())))
         .build();
   }
 
@@ -183,7 +185,9 @@ public class HudiClient implements SourceClient<HoodieInstant> {
     List<Instant> lastPendingHoodieInstantsStillPending =
         lastPendingHoodieInstants.stream()
             .filter(hoodieInstant -> hoodieInstant.isInflight() || hoodieInstant.isRequested())
-            .map(hoodieInstant -> parseFromInstantTime(hoodieInstant.getTimestamp()))
+            .map(
+                hoodieInstant ->
+                    HudiInstantUtils.parseFromInstantTime(hoodieInstant.getTimestamp()))
             .collect(Collectors.toList());
     return CommitsPair.builder()
         .completedCommits(lastPendingHoodieInstantsCompleted)
@@ -216,7 +220,9 @@ public class HudiClient implements SourceClient<HoodieInstant> {
                 hoodieInstant ->
                     hoodieInstant.compareTo(completedInstants.get(completedInstants.size() - 1))
                         <= 0)
-            .map(hoodieInstant -> parseFromInstantTime(hoodieInstant.getTimestamp()))
+            .map(
+                hoodieInstant ->
+                    HudiInstantUtils.parseFromInstantTime(hoodieInstant.getTimestamp()))
             .collect(Collectors.toList());
     return CommitsPair.builder()
         .completedCommits(completedInstants)
@@ -226,7 +232,7 @@ public class HudiClient implements SourceClient<HoodieInstant> {
 
   private HoodieInstant getCommitAtInstant(Instant instant) {
     return getCompletedCommits()
-        .findInstantsBeforeOrEquals(convertInstantToCommit(instant))
+        .findInstantsBeforeOrEquals(HudiInstantUtils.convertInstantToCommit(instant))
         .lastInstant()
         .orElse(null);
   }
@@ -242,7 +248,8 @@ public class HudiClient implements SourceClient<HoodieInstant> {
             .filter(instant -> !HoodieTimeline.SAVEPOINT_ACTION.equals(instant.getAction()))
             .collect(
                 Collectors.toMap(
-                    hoodieInstant -> parseFromInstantTime(hoodieInstant.getTimestamp()),
+                    hoodieInstant ->
+                        HudiInstantUtils.parseFromInstantTime(hoodieInstant.getTimestamp()),
                     hoodieInstant -> hoodieInstant));
     return instants.stream()
         .map(instantHoodieInstantMap::get)
diff --git a/core/src/main/java/io/onetable/hudi/HudiDataFileExtractor.java b/core/src/main/java/org/apache/xtable/hudi/HudiDataFileExtractor.java
similarity index 96%
rename from core/src/main/java/io/onetable/hudi/HudiDataFileExtractor.java
rename to core/src/main/java/org/apache/xtable/hudi/HudiDataFileExtractor.java
index b22e7430..ee8cbe63 100644
--- a/core/src/main/java/io/onetable/hudi/HudiDataFileExtractor.java
+++ b/core/src/main/java/org/apache/xtable/hudi/HudiDataFileExtractor.java
@@ -16,9 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.hudi;
-
-import static io.onetable.collectors.CustomCollectors.toList;
+package org.apache.xtable.hudi;
 
 import java.io.IOException;
 import java.net.URI;
@@ -60,15 +58,16 @@ import org.apache.hudi.common.table.view.SyncableFileSystemView;
 import org.apache.hudi.common.table.view.TableFileSystemView;
 import org.apache.hudi.metadata.HoodieTableMetadata;
 
-import io.onetable.exception.OneIOException;
-import io.onetable.model.OneTable;
-import io.onetable.model.schema.OnePartitionField;
-import io.onetable.model.schema.SchemaVersion;
-import io.onetable.model.stat.PartitionValue;
-import io.onetable.model.storage.FileFormat;
-import io.onetable.model.storage.OneDataFile;
-import io.onetable.model.storage.OneDataFilesDiff;
-import io.onetable.model.storage.OneFileGroup;
+import org.apache.xtable.collectors.CustomCollectors;
+import org.apache.xtable.exception.OneIOException;
+import org.apache.xtable.model.OneTable;
+import org.apache.xtable.model.schema.OnePartitionField;
+import org.apache.xtable.model.schema.SchemaVersion;
+import org.apache.xtable.model.stat.PartitionValue;
+import org.apache.xtable.model.storage.FileFormat;
+import org.apache.xtable.model.storage.OneDataFile;
+import org.apache.xtable.model.storage.OneDataFilesDiff;
+import org.apache.xtable.model.storage.OneFileGroup;
 
 /** Extracts all the files for Hudi table represented by {@link OneTable}. */
 public class HudiDataFileExtractor implements AutoCloseable {
@@ -274,7 +273,7 @@ public class HudiDataFileExtractor implements AutoCloseable {
         .filter(uri -> !FSUtils.isLogFile(new Path(uri).getName()))
         .map(HoodieBaseFile::new)
         .map(baseFile -> buildFileWithoutStats(partitionValues, baseFile))
-        .collect(toList(deletedPaths.size()));
+        .collect(CustomCollectors.toList(deletedPaths.size()));
   }
 
   private AddedAndRemovedFiles getUpdatesToPartition(
diff --git a/core/src/main/java/io/onetable/hudi/HudiFileStats.java b/core/src/main/java/org/apache/xtable/hudi/HudiFileStats.java
similarity index 92%
rename from core/src/main/java/io/onetable/hudi/HudiFileStats.java
rename to core/src/main/java/org/apache/xtable/hudi/HudiFileStats.java
index 694f1c4a..d1a71f40 100644
--- a/core/src/main/java/io/onetable/hudi/HudiFileStats.java
+++ b/core/src/main/java/org/apache/xtable/hudi/HudiFileStats.java
@@ -16,13 +16,13 @@
  * limitations under the License.
  */
  
-package io.onetable.hudi;
+package org.apache.xtable.hudi;
 
 import java.util.List;
 
 import lombok.Value;
 
-import io.onetable.model.stat.ColumnStat;
+import org.apache.xtable.model.stat.ColumnStat;
 
 @Value
 public class HudiFileStats {
diff --git a/core/src/main/java/io/onetable/hudi/HudiFileStatsExtractor.java b/core/src/main/java/org/apache/xtable/hudi/HudiFileStatsExtractor.java
similarity index 94%
rename from core/src/main/java/io/onetable/hudi/HudiFileStatsExtractor.java
rename to core/src/main/java/org/apache/xtable/hudi/HudiFileStatsExtractor.java
index 265b5770..cdb96d04 100644
--- a/core/src/main/java/io/onetable/hudi/HudiFileStatsExtractor.java
+++ b/core/src/main/java/org/apache/xtable/hudi/HudiFileStatsExtractor.java
@@ -16,9 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.hudi;
-
-import static io.onetable.collectors.CustomCollectors.toList;
+package org.apache.xtable.hudi;
 
 import java.math.BigDecimal;
 import java.math.BigInteger;
@@ -49,12 +47,13 @@ import org.apache.hudi.hadoop.CachingPath;
 import org.apache.hudi.metadata.HoodieTableMetadata;
 import org.apache.hudi.metadata.MetadataPartitionType;
 
-import io.onetable.model.schema.OneField;
-import io.onetable.model.schema.OneSchema;
-import io.onetable.model.schema.OneType;
-import io.onetable.model.stat.ColumnStat;
-import io.onetable.model.stat.Range;
-import io.onetable.model.storage.OneDataFile;
+import org.apache.xtable.collectors.CustomCollectors;
+import org.apache.xtable.model.schema.OneField;
+import org.apache.xtable.model.schema.OneSchema;
+import org.apache.xtable.model.schema.OneType;
+import org.apache.xtable.model.stat.ColumnStat;
+import org.apache.xtable.model.stat.Range;
+import org.apache.xtable.model.storage.OneDataFile;
 
 /** Responsible for Column stats extraction for Hudi. */
 @AllArgsConstructor
@@ -149,7 +148,8 @@ public class HudiFileStatsExtractor {
             .collect(
                 Collectors.groupingBy(
                     Map.Entry::getKey,
-                    Collectors.mapping(Map.Entry::getValue, toList(nameFieldMap.size()))));
+                    Collectors.mapping(
+                        Map.Entry::getValue, CustomCollectors.toList(nameFieldMap.size()))));
     return filePathsToDataFile.entrySet().stream()
         .map(
             pathToDataFile -> {
@@ -160,7 +160,7 @@ public class HudiFileStatsExtractor {
               List<ColumnStat> columnStats =
                   fileStats.stream()
                       .map(pair -> getColumnStatFromHudiStat(pair.getLeft(), pair.getRight()))
-                      .collect(toList(fileStats.size()));
+                      .collect(CustomCollectors.toList(fileStats.size()));
               long recordCount = getMaxFromColumnStats(columnStats).orElse(0L);
               return file.toBuilder().columnStats(columnStats).recordCount(recordCount).build();
             });
@@ -184,7 +184,7 @@ public class HudiFileStatsExtractor {
             .map(
                 colRange ->
                     getColumnStatFromColRange(nameFieldMap.get(colRange.getColumnName()), colRange))
-            .collect(toList(columnRanges.size()));
+            .collect(CustomCollectors.toList(columnRanges.size()));
     Long rowCount = getMaxFromColumnStats(columnStats).orElse(null);
     if (rowCount == null) {
       rowCount = UTILS.getRowCount(metaClient.getHadoopConf(), filePath);
diff --git a/core/src/main/java/io/onetable/hudi/HudiInstantUtils.java b/core/src/main/java/org/apache/xtable/hudi/HudiInstantUtils.java
similarity index 97%
rename from core/src/main/java/io/onetable/hudi/HudiInstantUtils.java
rename to core/src/main/java/org/apache/xtable/hudi/HudiInstantUtils.java
index b2ac9661..2a56c242 100644
--- a/core/src/main/java/io/onetable/hudi/HudiInstantUtils.java
+++ b/core/src/main/java/org/apache/xtable/hudi/HudiInstantUtils.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.hudi;
+package org.apache.xtable.hudi;
 
 import static org.apache.hudi.common.table.timeline.HoodieInstantTimeGenerator.MILLIS_INSTANT_TIMESTAMP_FORMAT_LENGTH;
 import static org.apache.hudi.common.table.timeline.HoodieInstantTimeGenerator.SECS_INSTANT_ID_LENGTH;
@@ -32,7 +32,7 @@ import java.time.temporal.ChronoField;
 
 import org.apache.hudi.common.table.timeline.HoodieInstantTimeGenerator;
 
-import io.onetable.model.exception.OneParseException;
+import org.apache.xtable.model.exception.OneParseException;
 
 class HudiInstantUtils {
   private static final ZoneId ZONE_ID = ZoneId.of("UTC");
diff --git a/core/src/main/java/io/onetable/hudi/HudiPartitionValuesExtractor.java b/core/src/main/java/org/apache/xtable/hudi/HudiPartitionValuesExtractor.java
similarity index 95%
rename from core/src/main/java/io/onetable/hudi/HudiPartitionValuesExtractor.java
rename to core/src/main/java/org/apache/xtable/hudi/HudiPartitionValuesExtractor.java
index 1d2c6768..e0a1fdc8 100644
--- a/core/src/main/java/io/onetable/hudi/HudiPartitionValuesExtractor.java
+++ b/core/src/main/java/org/apache/xtable/hudi/HudiPartitionValuesExtractor.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.hudi;
+package org.apache.xtable.hudi;
 
 import java.math.BigDecimal;
 import java.nio.charset.StandardCharsets;
@@ -32,11 +32,11 @@ import lombok.AllArgsConstructor;
 import lombok.NonNull;
 import lombok.Value;
 
-import io.onetable.exception.PartitionValuesExtractorException;
-import io.onetable.model.schema.OnePartitionField;
-import io.onetable.model.schema.OneType;
-import io.onetable.model.stat.PartitionValue;
-import io.onetable.model.stat.Range;
+import org.apache.xtable.exception.PartitionValuesExtractorException;
+import org.apache.xtable.model.schema.OnePartitionField;
+import org.apache.xtable.model.schema.OneType;
+import org.apache.xtable.model.stat.PartitionValue;
+import org.apache.xtable.model.stat.Range;
 
 /** Extracts Partition Values for Hudi from Partition Path. */
 @AllArgsConstructor
diff --git a/core/src/main/java/io/onetable/hudi/HudiPathUtils.java b/core/src/main/java/org/apache/xtable/hudi/HudiPathUtils.java
similarity index 97%
rename from core/src/main/java/io/onetable/hudi/HudiPathUtils.java
rename to core/src/main/java/org/apache/xtable/hudi/HudiPathUtils.java
index 1100abd7..545f3215 100644
--- a/core/src/main/java/io/onetable/hudi/HudiPathUtils.java
+++ b/core/src/main/java/org/apache/xtable/hudi/HudiPathUtils.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.hudi;
+package org.apache.xtable.hudi;
 
 import org.apache.hadoop.fs.Path;
 
diff --git a/core/src/main/java/io/onetable/hudi/HudiSchemaCatalogExtractor.java b/core/src/main/java/org/apache/xtable/hudi/HudiSchemaCatalogExtractor.java
similarity index 85%
rename from core/src/main/java/io/onetable/hudi/HudiSchemaCatalogExtractor.java
rename to core/src/main/java/org/apache/xtable/hudi/HudiSchemaCatalogExtractor.java
index 2d60eabf..b2c2bb47 100644
--- a/core/src/main/java/io/onetable/hudi/HudiSchemaCatalogExtractor.java
+++ b/core/src/main/java/org/apache/xtable/hudi/HudiSchemaCatalogExtractor.java
@@ -16,18 +16,18 @@
  * limitations under the License.
  */
  
-package io.onetable.hudi;
+package org.apache.xtable.hudi;
 
 import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.hudi.common.table.HoodieTableMetaClient;
 
-import io.onetable.model.OneTable;
-import io.onetable.model.schema.OneSchema;
-import io.onetable.model.schema.SchemaCatalog;
-import io.onetable.model.schema.SchemaVersion;
-import io.onetable.spi.extractor.SchemaCatalogExtractor;
+import org.apache.xtable.model.OneTable;
+import org.apache.xtable.model.schema.OneSchema;
+import org.apache.xtable.model.schema.SchemaCatalog;
+import org.apache.xtable.model.schema.SchemaVersion;
+import org.apache.xtable.spi.extractor.SchemaCatalogExtractor;
 
 /** Implementation of {@link SchemaCatalogExtractor} for Hudi. */
 public class HudiSchemaCatalogExtractor implements SchemaCatalogExtractor<HoodieTableMetaClient> {
diff --git a/core/src/main/java/io/onetable/hudi/HudiSchemaExtractor.java b/core/src/main/java/org/apache/xtable/hudi/HudiSchemaExtractor.java
similarity index 90%
rename from core/src/main/java/io/onetable/hudi/HudiSchemaExtractor.java
rename to core/src/main/java/org/apache/xtable/hudi/HudiSchemaExtractor.java
index 1175144d..980a8271 100644
--- a/core/src/main/java/io/onetable/hudi/HudiSchemaExtractor.java
+++ b/core/src/main/java/org/apache/xtable/hudi/HudiSchemaExtractor.java
@@ -16,16 +16,16 @@
  * limitations under the License.
  */
  
-package io.onetable.hudi;
+package org.apache.xtable.hudi;
 
 import org.apache.avro.Schema;
 
 import com.google.common.annotations.VisibleForTesting;
 
-import io.onetable.avro.AvroSchemaConverter;
-import io.onetable.model.schema.OneField;
-import io.onetable.model.schema.OneSchema;
-import io.onetable.spi.extractor.SchemaExtractor;
+import org.apache.xtable.avro.AvroSchemaConverter;
+import org.apache.xtable.model.schema.OneField;
+import org.apache.xtable.model.schema.OneSchema;
+import org.apache.xtable.spi.extractor.SchemaExtractor;
 
 /**
  * Extracts the canonical {@link OneSchema} from {@link Schema} represented in Hudi. This uses logic
diff --git a/core/src/main/java/io/onetable/hudi/HudiSourceClientProvider.java b/core/src/main/java/org/apache/xtable/hudi/HudiSourceClientProvider.java
similarity index 93%
rename from core/src/main/java/io/onetable/hudi/HudiSourceClientProvider.java
rename to core/src/main/java/org/apache/xtable/hudi/HudiSourceClientProvider.java
index 5bd20ebe..2c49f60e 100644
--- a/core/src/main/java/io/onetable/hudi/HudiSourceClientProvider.java
+++ b/core/src/main/java/org/apache/xtable/hudi/HudiSourceClientProvider.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.hudi;
+package org.apache.xtable.hudi;
 
 import lombok.extern.log4j.Log4j2;
 
@@ -24,8 +24,8 @@ import org.apache.hudi.common.model.HoodieTableType;
 import org.apache.hudi.common.table.HoodieTableMetaClient;
 import org.apache.hudi.common.table.timeline.HoodieInstant;
 
-import io.onetable.client.PerTableConfig;
-import io.onetable.client.SourceClientProvider;
+import org.apache.xtable.client.PerTableConfig;
+import org.apache.xtable.client.SourceClientProvider;
 
 /** A concrete implementation of {@link SourceClientProvider} for Hudi table format. */
 @Log4j2
diff --git a/core/src/main/java/io/onetable/hudi/HudiSourceConfigImpl.java b/core/src/main/java/org/apache/xtable/hudi/HudiSourceConfigImpl.java
similarity index 93%
rename from core/src/main/java/io/onetable/hudi/HudiSourceConfigImpl.java
rename to core/src/main/java/org/apache/xtable/hudi/HudiSourceConfigImpl.java
index ee5b802b..e5fcf820 100644
--- a/core/src/main/java/io/onetable/hudi/HudiSourceConfigImpl.java
+++ b/core/src/main/java/org/apache/xtable/hudi/HudiSourceConfigImpl.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.hudi;
+package org.apache.xtable.hudi;
 
 import java.util.ArrayList;
 import java.util.Collections;
@@ -28,9 +28,9 @@ import lombok.Value;
 
 import com.google.common.base.Preconditions;
 
-import io.onetable.client.HudiSourceConfig;
-import io.onetable.model.schema.PartitionTransformType;
-import io.onetable.reflection.ReflectionUtils;
+import org.apache.xtable.client.HudiSourceConfig;
+import org.apache.xtable.model.schema.PartitionTransformType;
+import org.apache.xtable.reflection.ReflectionUtils;
 
 /** Configuration of Hudi source format for the sync process. */
 @Value
diff --git a/core/src/main/java/io/onetable/hudi/HudiSourcePartitionSpecExtractor.java b/core/src/main/java/org/apache/xtable/hudi/HudiSourcePartitionSpecExtractor.java
similarity index 91%
rename from core/src/main/java/io/onetable/hudi/HudiSourcePartitionSpecExtractor.java
rename to core/src/main/java/org/apache/xtable/hudi/HudiSourcePartitionSpecExtractor.java
index c526e804..c69a8b8d 100644
--- a/core/src/main/java/io/onetable/hudi/HudiSourcePartitionSpecExtractor.java
+++ b/core/src/main/java/org/apache/xtable/hudi/HudiSourcePartitionSpecExtractor.java
@@ -16,11 +16,11 @@
  * limitations under the License.
  */
  
-package io.onetable.hudi;
+package org.apache.xtable.hudi;
 
 import java.util.Map;
 
-import io.onetable.spi.extractor.SourcePartitionSpecExtractor;
+import org.apache.xtable.spi.extractor.SourcePartitionSpecExtractor;
 
 /**
  * Partition spec extractor interface specifically designed for Hudi to parse partition values
diff --git a/core/src/main/java/io/onetable/hudi/HudiTableExtractor.java b/core/src/main/java/org/apache/xtable/hudi/HudiTableExtractor.java
similarity index 85%
rename from core/src/main/java/io/onetable/hudi/HudiTableExtractor.java
rename to core/src/main/java/org/apache/xtable/hudi/HudiTableExtractor.java
index aefc7f91..aa89da93 100644
--- a/core/src/main/java/io/onetable/hudi/HudiTableExtractor.java
+++ b/core/src/main/java/org/apache/xtable/hudi/HudiTableExtractor.java
@@ -16,9 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.hudi;
-
-import static io.onetable.hudi.HudiInstantUtils.parseFromInstantTime;
+package org.apache.xtable.hudi;
 
 import java.util.Arrays;
 import java.util.Collections;
@@ -34,15 +32,15 @@ import org.apache.hudi.common.table.TableSchemaResolver;
 import org.apache.hudi.common.table.timeline.HoodieInstant;
 import org.apache.hudi.common.util.Option;
 
-import io.onetable.exception.SchemaExtractorException;
-import io.onetable.model.OneTable;
-import io.onetable.model.schema.OneField;
-import io.onetable.model.schema.OnePartitionField;
-import io.onetable.model.schema.OneSchema;
-import io.onetable.model.storage.DataLayoutStrategy;
-import io.onetable.model.storage.TableFormat;
-import io.onetable.schema.SchemaFieldFinder;
-import io.onetable.spi.extractor.SourcePartitionSpecExtractor;
+import org.apache.xtable.exception.SchemaExtractorException;
+import org.apache.xtable.model.OneTable;
+import org.apache.xtable.model.schema.OneField;
+import org.apache.xtable.model.schema.OnePartitionField;
+import org.apache.xtable.model.schema.OneSchema;
+import org.apache.xtable.model.storage.DataLayoutStrategy;
+import org.apache.xtable.model.storage.TableFormat;
+import org.apache.xtable.schema.SchemaFieldFinder;
+import org.apache.xtable.spi.extractor.SourcePartitionSpecExtractor;
 
 /** Extracts {@link OneTable} a canonical representation of table at a point in time for Hudi. */
 @Singleton
@@ -86,7 +84,7 @@ public class HudiTableExtractor {
         .layoutStrategy(dataLayoutStrategy)
         .partitioningFields(partitionFields)
         .readSchema(canonicalSchema)
-        .latestCommitTime(parseFromInstantTime(commit.getTimestamp()))
+        .latestCommitTime(HudiInstantUtils.parseFromInstantTime(commit.getTimestamp()))
         .build();
   }
 
diff --git a/core/src/main/java/io/onetable/hudi/HudiTableManager.java b/core/src/main/java/org/apache/xtable/hudi/HudiTableManager.java
similarity index 95%
rename from core/src/main/java/io/onetable/hudi/HudiTableManager.java
rename to core/src/main/java/org/apache/xtable/hudi/HudiTableManager.java
index c388ca75..b78498ce 100644
--- a/core/src/main/java/io/onetable/hudi/HudiTableManager.java
+++ b/core/src/main/java/org/apache/xtable/hudi/HudiTableManager.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.hudi;
+package org.apache.xtable.hudi;
 
 import java.io.IOException;
 import java.util.List;
@@ -35,11 +35,11 @@ import org.apache.hudi.common.table.HoodieTableMetaClient;
 import org.apache.hudi.common.util.VisibleForTesting;
 import org.apache.hudi.exception.TableNotFoundException;
 
-import io.onetable.exception.OneIOException;
-import io.onetable.model.OneTable;
-import io.onetable.model.schema.OneField;
-import io.onetable.model.schema.OnePartitionField;
-import io.onetable.model.storage.DataLayoutStrategy;
+import org.apache.xtable.exception.OneIOException;
+import org.apache.xtable.model.OneTable;
+import org.apache.xtable.model.schema.OneField;
+import org.apache.xtable.model.schema.OnePartitionField;
+import org.apache.xtable.model.storage.DataLayoutStrategy;
 
 /** A class used to initialize new Hudi tables and load the metadata of existing tables. */
 @Log4j2
diff --git a/core/src/main/java/io/onetable/hudi/HudiTargetClient.java b/core/src/main/java/org/apache/xtable/hudi/HudiTargetClient.java
similarity index 95%
rename from core/src/main/java/io/onetable/hudi/HudiTargetClient.java
rename to core/src/main/java/org/apache/xtable/hudi/HudiTargetClient.java
index 3c34b91a..b7eb4c11 100644
--- a/core/src/main/java/io/onetable/hudi/HudiTargetClient.java
+++ b/core/src/main/java/org/apache/xtable/hudi/HudiTargetClient.java
@@ -16,10 +16,8 @@
  * limitations under the License.
  */
  
-package io.onetable.hudi;
+package org.apache.xtable.hudi;
 
-import static io.onetable.hudi.HudiInstantUtils.convertInstantToCommit;
-import static io.onetable.hudi.HudiInstantUtils.parseFromInstantTime;
 import static org.apache.hudi.index.HoodieIndex.IndexType.INMEMORY;
 
 import java.io.IOException;
@@ -80,19 +78,19 @@ import org.apache.hudi.table.action.clean.CleanPlanner;
 
 import com.google.common.annotations.VisibleForTesting;
 
-import io.onetable.avro.AvroSchemaConverter;
-import io.onetable.client.PerTableConfig;
-import io.onetable.exception.NotSupportedException;
-import io.onetable.exception.OneIOException;
-import io.onetable.model.OneTable;
-import io.onetable.model.OneTableMetadata;
-import io.onetable.model.schema.OneField;
-import io.onetable.model.schema.OnePartitionField;
-import io.onetable.model.schema.OneSchema;
-import io.onetable.model.storage.OneDataFilesDiff;
-import io.onetable.model.storage.OneFileGroup;
-import io.onetable.model.storage.TableFormat;
-import io.onetable.spi.sync.TargetClient;
+import org.apache.xtable.avro.AvroSchemaConverter;
+import org.apache.xtable.client.PerTableConfig;
+import org.apache.xtable.exception.NotSupportedException;
+import org.apache.xtable.exception.OneIOException;
+import org.apache.xtable.model.OneTable;
+import org.apache.xtable.model.OneTableMetadata;
+import org.apache.xtable.model.schema.OneField;
+import org.apache.xtable.model.schema.OnePartitionField;
+import org.apache.xtable.model.schema.OneSchema;
+import org.apache.xtable.model.storage.OneDataFilesDiff;
+import org.apache.xtable.model.storage.OneFileGroup;
+import org.apache.xtable.model.storage.TableFormat;
+import org.apache.xtable.spi.sync.TargetClient;
 
 @Log4j2
 public class HudiTargetClient implements TargetClient {
@@ -267,7 +265,7 @@ public class HudiTargetClient implements TargetClient {
       // make sure meta client has up-to-date view of the timeline
       getMetaClient().reloadActiveTimeline();
     }
-    String instant = convertInstantToCommit(table.getLatestCommitTime());
+    String instant = HudiInstantUtils.convertInstantToCommit(table.getLatestCommitTime());
     this.commitState =
         commitStateCreator.create(
             getMetaClient(), instant, timelineRetentionInHours, maxNumDeltaCommitsBeforeCompaction);
@@ -401,8 +399,9 @@ public class HudiTargetClient implements TargetClient {
 
     private int getNumInstantsToRetain() {
       String commitCutoff =
-          convertInstantToCommit(
-              parseFromInstantTime(instantTime).minus(timelineRetentionInHours, ChronoUnit.HOURS));
+          HudiInstantUtils.convertInstantToCommit(
+              HudiInstantUtils.parseFromInstantTime(instantTime)
+                  .minus(timelineRetentionInHours, ChronoUnit.HOURS));
       // count number of completed commits after the cutoff
       return metaClient
           .getActiveTimeline()
@@ -470,7 +469,8 @@ public class HudiTargetClient implements TargetClient {
       }
       // create a clean instant write after this latest commit
       String cleanTime =
-          convertInstantToCommit(parseFromInstantTime(instantTime).plus(1, ChronoUnit.SECONDS));
+          HudiInstantUtils.convertInstantToCommit(
+              HudiInstantUtils.parseFromInstantTime(instantTime).plus(1, ChronoUnit.SECONDS));
       // create a metadata table writer in order to mark files as deleted in the table
       // the deleted entries are cleaned up in the metadata table during compaction to control the
       // growth of the table
diff --git a/core/src/main/java/io/onetable/iceberg/IcebergCatalogConfig.java b/core/src/main/java/org/apache/xtable/iceberg/IcebergCatalogConfig.java
similarity index 88%
rename from core/src/main/java/io/onetable/iceberg/IcebergCatalogConfig.java
rename to core/src/main/java/org/apache/xtable/iceberg/IcebergCatalogConfig.java
index 76beaa49..317ddc0e 100644
--- a/core/src/main/java/io/onetable/iceberg/IcebergCatalogConfig.java
+++ b/core/src/main/java/org/apache/xtable/iceberg/IcebergCatalogConfig.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.iceberg;
+package org.apache.xtable.iceberg;
 
 import java.util.Collections;
 import java.util.Map;
@@ -25,9 +25,11 @@ import lombok.Builder;
 import lombok.NonNull;
 import lombok.Value;
 
+import org.apache.xtable.client.CatalogConfig;
+
 @Value
 @Builder
-public class IcebergCatalogConfig implements io.onetable.client.CatalogConfig {
+public class IcebergCatalogConfig implements CatalogConfig {
   @NonNull String catalogImpl;
   @NonNull String catalogName;
   @NonNull @Builder.Default Map<String, String> catalogOptions = Collections.emptyMap();
diff --git a/core/src/main/java/io/onetable/iceberg/IcebergClient.java b/core/src/main/java/org/apache/xtable/iceberg/IcebergClient.java
similarity index 93%
rename from core/src/main/java/io/onetable/iceberg/IcebergClient.java
rename to core/src/main/java/org/apache/xtable/iceberg/IcebergClient.java
index 36f48a07..9c72c09e 100644
--- a/core/src/main/java/io/onetable/iceberg/IcebergClient.java
+++ b/core/src/main/java/org/apache/xtable/iceberg/IcebergClient.java
@@ -16,10 +16,10 @@
  * limitations under the License.
  */
  
-package io.onetable.iceberg;
+package org.apache.xtable.iceberg;
 
-import static io.onetable.model.OneTableMetadata.INFLIGHT_COMMITS_TO_CONSIDER_FOR_NEXT_SYNC_PROP;
-import static io.onetable.model.OneTableMetadata.ONETABLE_LAST_INSTANT_SYNCED_PROP;
+import static org.apache.xtable.model.OneTableMetadata.INFLIGHT_COMMITS_TO_CONSIDER_FOR_NEXT_SYNC_PROP;
+import static org.apache.xtable.model.OneTableMetadata.ONETABLE_LAST_INSTANT_SYNCED_PROP;
 
 import java.time.Instant;
 import java.time.temporal.ChronoUnit;
@@ -43,15 +43,15 @@ import org.apache.iceberg.catalog.Namespace;
 import org.apache.iceberg.catalog.TableIdentifier;
 import org.apache.iceberg.exceptions.NotFoundException;
 
-import io.onetable.client.PerTableConfig;
-import io.onetable.model.OneTable;
-import io.onetable.model.OneTableMetadata;
-import io.onetable.model.schema.OnePartitionField;
-import io.onetable.model.schema.OneSchema;
-import io.onetable.model.storage.OneDataFilesDiff;
-import io.onetable.model.storage.OneFileGroup;
-import io.onetable.model.storage.TableFormat;
-import io.onetable.spi.sync.TargetClient;
+import org.apache.xtable.client.PerTableConfig;
+import org.apache.xtable.model.OneTable;
+import org.apache.xtable.model.OneTableMetadata;
+import org.apache.xtable.model.schema.OnePartitionField;
+import org.apache.xtable.model.schema.OneSchema;
+import org.apache.xtable.model.storage.OneDataFilesDiff;
+import org.apache.xtable.model.storage.OneFileGroup;
+import org.apache.xtable.model.storage.TableFormat;
+import org.apache.xtable.spi.sync.TargetClient;
 
 @Log4j2
 public class IcebergClient implements TargetClient {
diff --git a/core/src/main/java/io/onetable/iceberg/IcebergColumnStatsConverter.java b/core/src/main/java/org/apache/xtable/iceberg/IcebergColumnStatsConverter.java
similarity index 94%
rename from core/src/main/java/io/onetable/iceberg/IcebergColumnStatsConverter.java
rename to core/src/main/java/org/apache/xtable/iceberg/IcebergColumnStatsConverter.java
index 25a5e47c..13489cc8 100644
--- a/core/src/main/java/io/onetable/iceberg/IcebergColumnStatsConverter.java
+++ b/core/src/main/java/org/apache/xtable/iceberg/IcebergColumnStatsConverter.java
@@ -16,9 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.iceberg;
-
-import static io.onetable.collectors.CustomCollectors.toList;
+package org.apache.xtable.iceberg;
 
 import java.nio.ByteBuffer;
 import java.util.Collections;
@@ -36,9 +34,10 @@ import org.apache.iceberg.types.Conversions;
 import org.apache.iceberg.types.Type;
 import org.apache.iceberg.types.Types;
 
-import io.onetable.model.schema.OneField;
-import io.onetable.model.stat.ColumnStat;
-import io.onetable.model.stat.Range;
+import org.apache.xtable.collectors.CustomCollectors;
+import org.apache.xtable.model.schema.OneField;
+import org.apache.xtable.model.stat.ColumnStat;
+import org.apache.xtable.model.stat.Range;
 
 /** Column stats extractor for iceberg table format. */
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
@@ -117,7 +116,7 @@ public class IcebergColumnStatsConverter {
                   .range(range)
                   .build();
             })
-        .collect(toList(fields.size()));
+        .collect(CustomCollectors.toList(fields.size()));
   }
 
   private Object convertFromIcebergValue(Type fieldType, ByteBuffer value) {
diff --git a/core/src/main/java/io/onetable/iceberg/IcebergDataFileExtractor.java b/core/src/main/java/org/apache/xtable/iceberg/IcebergDataFileExtractor.java
similarity index 90%
rename from core/src/main/java/io/onetable/iceberg/IcebergDataFileExtractor.java
rename to core/src/main/java/org/apache/xtable/iceberg/IcebergDataFileExtractor.java
index 21c28b95..f68da230 100644
--- a/core/src/main/java/io/onetable/iceberg/IcebergDataFileExtractor.java
+++ b/core/src/main/java/org/apache/xtable/iceberg/IcebergDataFileExtractor.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.iceberg;
+package org.apache.xtable.iceberg;
 
 import java.util.Collections;
 import java.util.List;
@@ -25,12 +25,12 @@ import lombok.Builder;
 
 import org.apache.iceberg.DataFile;
 
-import io.onetable.exception.NotSupportedException;
-import io.onetable.model.schema.OneSchema;
-import io.onetable.model.stat.ColumnStat;
-import io.onetable.model.stat.PartitionValue;
-import io.onetable.model.storage.FileFormat;
-import io.onetable.model.storage.OneDataFile;
+import org.apache.xtable.exception.NotSupportedException;
+import org.apache.xtable.model.schema.OneSchema;
+import org.apache.xtable.model.stat.ColumnStat;
+import org.apache.xtable.model.stat.PartitionValue;
+import org.apache.xtable.model.storage.FileFormat;
+import org.apache.xtable.model.storage.OneDataFile;
 
 /** Extractor of data files for Iceberg */
 @Builder
diff --git a/core/src/main/java/io/onetable/iceberg/IcebergDataFileUpdatesSync.java b/core/src/main/java/org/apache/xtable/iceberg/IcebergDataFileUpdatesSync.java
similarity index 88%
rename from core/src/main/java/io/onetable/iceberg/IcebergDataFileUpdatesSync.java
rename to core/src/main/java/org/apache/xtable/iceberg/IcebergDataFileUpdatesSync.java
index e7cfb408..f0cff732 100644
--- a/core/src/main/java/io/onetable/iceberg/IcebergDataFileUpdatesSync.java
+++ b/core/src/main/java/org/apache/xtable/iceberg/IcebergDataFileUpdatesSync.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.iceberg;
+package org.apache.xtable.iceberg;
 
 import java.util.*;
 import java.util.stream.Collectors;
@@ -27,13 +27,13 @@ import lombok.AllArgsConstructor;
 import org.apache.iceberg.*;
 import org.apache.iceberg.io.CloseableIterable;
 
-import io.onetable.exception.NotSupportedException;
-import io.onetable.exception.OneIOException;
-import io.onetable.model.OneTable;
-import io.onetable.model.storage.DataFilesDiff;
-import io.onetable.model.storage.OneDataFile;
-import io.onetable.model.storage.OneDataFilesDiff;
-import io.onetable.model.storage.OneFileGroup;
+import org.apache.xtable.exception.NotSupportedException;
+import org.apache.xtable.exception.OneIOException;
+import org.apache.xtable.model.OneTable;
+import org.apache.xtable.model.storage.DataFilesDiff;
+import org.apache.xtable.model.storage.OneDataFile;
+import org.apache.xtable.model.storage.OneDataFilesDiff;
+import org.apache.xtable.model.storage.OneFileGroup;
 
 @AllArgsConstructor(staticName = "of")
 public class IcebergDataFileUpdatesSync {
@@ -105,7 +105,8 @@ public class IcebergDataFileUpdatesSync {
     return builder.build();
   }
 
-  private static FileFormat convertFileFormat(io.onetable.model.storage.FileFormat fileFormat) {
+  private static FileFormat convertFileFormat(
+      org.apache.xtable.model.storage.FileFormat fileFormat) {
     switch (fileFormat) {
       case APACHE_PARQUET:
         return FileFormat.PARQUET;
diff --git a/core/src/main/java/io/onetable/iceberg/IcebergPartitionSpecExtractor.java b/core/src/main/java/org/apache/xtable/iceberg/IcebergPartitionSpecExtractor.java
similarity index 92%
rename from core/src/main/java/io/onetable/iceberg/IcebergPartitionSpecExtractor.java
rename to core/src/main/java/org/apache/xtable/iceberg/IcebergPartitionSpecExtractor.java
index d6a98dad..b98ef84d 100644
--- a/core/src/main/java/io/onetable/iceberg/IcebergPartitionSpecExtractor.java
+++ b/core/src/main/java/org/apache/xtable/iceberg/IcebergPartitionSpecExtractor.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.iceberg;
+package org.apache.xtable.iceberg;
 
 import java.util.ArrayList;
 import java.util.Collections;
@@ -31,12 +31,12 @@ import org.apache.iceberg.Schema;
 import org.apache.iceberg.transforms.Transform;
 import org.apache.iceberg.types.Types;
 
-import io.onetable.exception.NotSupportedException;
-import io.onetable.model.schema.OneField;
-import io.onetable.model.schema.OnePartitionField;
-import io.onetable.model.schema.OneSchema;
-import io.onetable.model.schema.PartitionTransformType;
-import io.onetable.schema.SchemaFieldFinder;
+import org.apache.xtable.exception.NotSupportedException;
+import org.apache.xtable.model.schema.OneField;
+import org.apache.xtable.model.schema.OnePartitionField;
+import org.apache.xtable.model.schema.OneSchema;
+import org.apache.xtable.model.schema.PartitionTransformType;
+import org.apache.xtable.schema.SchemaFieldFinder;
 
 /** Partition spec builder and extractor for Iceberg. */
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
diff --git a/core/src/main/java/io/onetable/iceberg/IcebergPartitionSpecSync.java b/core/src/main/java/org/apache/xtable/iceberg/IcebergPartitionSpecSync.java
similarity index 98%
rename from core/src/main/java/io/onetable/iceberg/IcebergPartitionSpecSync.java
rename to core/src/main/java/org/apache/xtable/iceberg/IcebergPartitionSpecSync.java
index bfb47ccf..88a406dc 100644
--- a/core/src/main/java/io/onetable/iceberg/IcebergPartitionSpecSync.java
+++ b/core/src/main/java/org/apache/xtable/iceberg/IcebergPartitionSpecSync.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.iceberg;
+package org.apache.xtable.iceberg;
 
 import java.util.List;
 import java.util.Set;
diff --git a/core/src/main/java/io/onetable/iceberg/IcebergPartitionValueConverter.java b/core/src/main/java/org/apache/xtable/iceberg/IcebergPartitionValueConverter.java
similarity index 94%
rename from core/src/main/java/io/onetable/iceberg/IcebergPartitionValueConverter.java
rename to core/src/main/java/org/apache/xtable/iceberg/IcebergPartitionValueConverter.java
index 17d22860..7c7a230f 100644
--- a/core/src/main/java/io/onetable/iceberg/IcebergPartitionValueConverter.java
+++ b/core/src/main/java/org/apache/xtable/iceberg/IcebergPartitionValueConverter.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.iceberg;
+package org.apache.xtable.iceberg;
 
 import java.time.Instant;
 import java.time.OffsetDateTime;
@@ -42,15 +42,15 @@ import org.apache.iceberg.StructLike;
 import org.apache.iceberg.transforms.Transforms;
 import org.apache.iceberg.types.Types;
 
-import io.onetable.avro.AvroSchemaConverter;
-import io.onetable.exception.NotSupportedException;
-import io.onetable.model.OneTable;
-import io.onetable.model.schema.OneField;
-import io.onetable.model.schema.OnePartitionField;
-import io.onetable.model.schema.PartitionTransformType;
-import io.onetable.model.stat.PartitionValue;
-import io.onetable.model.stat.Range;
-import io.onetable.schema.SchemaFieldFinder;
+import org.apache.xtable.avro.AvroSchemaConverter;
+import org.apache.xtable.exception.NotSupportedException;
+import org.apache.xtable.model.OneTable;
+import org.apache.xtable.model.schema.OneField;
+import org.apache.xtable.model.schema.OnePartitionField;
+import org.apache.xtable.model.schema.PartitionTransformType;
+import org.apache.xtable.model.stat.PartitionValue;
+import org.apache.xtable.model.stat.Range;
+import org.apache.xtable.schema.SchemaFieldFinder;
 
 /** Partition value extractor for Iceberg. */
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
diff --git a/core/src/main/java/io/onetable/iceberg/IcebergPartitionValueExtractor.java b/core/src/main/java/org/apache/xtable/iceberg/IcebergPartitionValueExtractor.java
similarity index 95%
rename from core/src/main/java/io/onetable/iceberg/IcebergPartitionValueExtractor.java
rename to core/src/main/java/org/apache/xtable/iceberg/IcebergPartitionValueExtractor.java
index 7531f048..46212005 100644
--- a/core/src/main/java/io/onetable/iceberg/IcebergPartitionValueExtractor.java
+++ b/core/src/main/java/org/apache/xtable/iceberg/IcebergPartitionValueExtractor.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.iceberg;
+package org.apache.xtable.iceberg;
 
 import java.time.Instant;
 import java.time.OffsetDateTime;
@@ -30,8 +30,8 @@ import lombok.NoArgsConstructor;
 
 import org.apache.iceberg.StructLike;
 
-import io.onetable.model.schema.OnePartitionField;
-import io.onetable.model.stat.Range;
+import org.apache.xtable.model.schema.OnePartitionField;
+import org.apache.xtable.model.stat.Range;
 
 /** Partition value extractor for Iceberg. */
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
diff --git a/core/src/main/java/io/onetable/iceberg/IcebergSchemaExtractor.java b/core/src/main/java/org/apache/xtable/iceberg/IcebergSchemaExtractor.java
similarity index 95%
rename from core/src/main/java/io/onetable/iceberg/IcebergSchemaExtractor.java
rename to core/src/main/java/org/apache/xtable/iceberg/IcebergSchemaExtractor.java
index 8551df71..7d9b4861 100644
--- a/core/src/main/java/io/onetable/iceberg/IcebergSchemaExtractor.java
+++ b/core/src/main/java/org/apache/xtable/iceberg/IcebergSchemaExtractor.java
@@ -16,10 +16,9 @@
  * limitations under the License.
  */
  
-package io.onetable.iceberg;
+package org.apache.xtable.iceberg;
 
-import static io.onetable.collectors.CustomCollectors.toList;
-import static io.onetable.schema.SchemaUtils.getFullyQualifiedPath;
+import static org.apache.xtable.schema.SchemaUtils.getFullyQualifiedPath;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -40,11 +39,12 @@ import org.apache.iceberg.Schema;
 import org.apache.iceberg.types.Type;
 import org.apache.iceberg.types.Types;
 
-import io.onetable.exception.NotSupportedException;
-import io.onetable.exception.SchemaExtractorException;
-import io.onetable.model.schema.OneField;
-import io.onetable.model.schema.OneSchema;
-import io.onetable.model.schema.OneType;
+import org.apache.xtable.collectors.CustomCollectors;
+import org.apache.xtable.exception.NotSupportedException;
+import org.apache.xtable.exception.SchemaExtractorException;
+import org.apache.xtable.model.schema.OneField;
+import org.apache.xtable.model.schema.OneSchema;
+import org.apache.xtable.model.schema.OneType;
 
 /**
  * Schema extractor for Iceberg which converts canonical representation of the schema{@link
@@ -91,7 +91,7 @@ public class IcebergSchemaExtractor {
           recordKeyFields.stream()
               .map(OneField::getPath)
               .filter(path -> partialSchema.findField(convertFromOneTablePath(path)) == null)
-              .collect(toList(recordKeyFields.size()));
+              .collect(CustomCollectors.toList(recordKeyFields.size()));
       log.error("Missing field IDs for record key field paths: " + missingFieldPaths);
       throw new SchemaExtractorException(
           String.format("Mismatches in converting record key fields: %s", missingFieldPaths));
@@ -131,7 +131,7 @@ public class IcebergSchemaExtractor {
                       iceField.isOptional() ? OneField.Constants.NULL_DEFAULT_VALUE : null)
                   .build();
             })
-        .collect(toList(iceFields.size()));
+        .collect(CustomCollectors.toList(iceFields.size()));
   }
 
   static String convertFromOneTablePath(String path) {
@@ -149,7 +149,7 @@ public class IcebergSchemaExtractor {
                     field.getFieldId() == null
                         ? fieldIdTracker.incrementAndGet()
                         : field.getFieldId())
-            .collect(toList(schema.getFields().size()));
+            .collect(CustomCollectors.toList(schema.getFields().size()));
     List<Types.NestedField> nestedFields = new ArrayList<>(schema.getFields().size());
     for (int i = 0; i < schema.getFields().size(); i++) {
       OneField field = schema.getFields().get(i);
diff --git a/core/src/main/java/io/onetable/iceberg/IcebergSchemaSync.java b/core/src/main/java/org/apache/xtable/iceberg/IcebergSchemaSync.java
similarity index 98%
rename from core/src/main/java/io/onetable/iceberg/IcebergSchemaSync.java
rename to core/src/main/java/org/apache/xtable/iceberg/IcebergSchemaSync.java
index 817f8be5..713f7498 100644
--- a/core/src/main/java/io/onetable/iceberg/IcebergSchemaSync.java
+++ b/core/src/main/java/org/apache/xtable/iceberg/IcebergSchemaSync.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.iceberg;
+package org.apache.xtable.iceberg;
 
 import java.util.HashMap;
 import java.util.HashSet;
@@ -32,7 +32,7 @@ import org.apache.iceberg.Transaction;
 import org.apache.iceberg.UpdateSchema;
 import org.apache.iceberg.types.Types;
 
-import io.onetable.exception.NotSupportedException;
+import org.apache.xtable.exception.NotSupportedException;
 
 /** Syncs schema updates for Iceberg. */
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
diff --git a/core/src/main/java/io/onetable/iceberg/IcebergSourceClient.java b/core/src/main/java/org/apache/xtable/iceberg/IcebergSourceClient.java
similarity index 91%
rename from core/src/main/java/io/onetable/iceberg/IcebergSourceClient.java
rename to core/src/main/java/org/apache/xtable/iceberg/IcebergSourceClient.java
index 1ad53c1f..a7e49584 100644
--- a/core/src/main/java/io/onetable/iceberg/IcebergSourceClient.java
+++ b/core/src/main/java/org/apache/xtable/iceberg/IcebergSourceClient.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.iceberg;
+package org.apache.xtable.iceberg;
 
 import java.io.IOException;
 import java.time.Instant;
@@ -36,20 +36,24 @@ import org.apache.iceberg.hadoop.HadoopFileIO;
 import org.apache.iceberg.io.CloseableIterable;
 import org.apache.iceberg.io.FileIO;
 
-import io.onetable.client.PerTableConfig;
-import io.onetable.exception.OneIOException;
-import io.onetable.model.*;
-import io.onetable.model.schema.OnePartitionField;
-import io.onetable.model.schema.OneSchema;
-import io.onetable.model.schema.SchemaCatalog;
-import io.onetable.model.schema.SchemaVersion;
-import io.onetable.model.stat.PartitionValue;
-import io.onetable.model.storage.DataLayoutStrategy;
-import io.onetable.model.storage.OneDataFile;
-import io.onetable.model.storage.OneDataFilesDiff;
-import io.onetable.model.storage.OneFileGroup;
-import io.onetable.model.storage.TableFormat;
-import io.onetable.spi.extractor.SourceClient;
+import org.apache.xtable.client.PerTableConfig;
+import org.apache.xtable.exception.OneIOException;
+import org.apache.xtable.model.CommitsBacklog;
+import org.apache.xtable.model.InstantsForIncrementalSync;
+import org.apache.xtable.model.OneSnapshot;
+import org.apache.xtable.model.OneTable;
+import org.apache.xtable.model.TableChange;
+import org.apache.xtable.model.schema.OnePartitionField;
+import org.apache.xtable.model.schema.OneSchema;
+import org.apache.xtable.model.schema.SchemaCatalog;
+import org.apache.xtable.model.schema.SchemaVersion;
+import org.apache.xtable.model.stat.PartitionValue;
+import org.apache.xtable.model.storage.DataLayoutStrategy;
+import org.apache.xtable.model.storage.OneDataFile;
+import org.apache.xtable.model.storage.OneDataFilesDiff;
+import org.apache.xtable.model.storage.OneFileGroup;
+import org.apache.xtable.model.storage.TableFormat;
+import org.apache.xtable.spi.extractor.SourceClient;
 
 @Log4j2
 @Builder
diff --git a/core/src/main/java/io/onetable/iceberg/IcebergSourceClientProvider.java b/core/src/main/java/org/apache/xtable/iceberg/IcebergSourceClientProvider.java
similarity index 90%
rename from core/src/main/java/io/onetable/iceberg/IcebergSourceClientProvider.java
rename to core/src/main/java/org/apache/xtable/iceberg/IcebergSourceClientProvider.java
index ac67f218..d3abf238 100644
--- a/core/src/main/java/io/onetable/iceberg/IcebergSourceClientProvider.java
+++ b/core/src/main/java/org/apache/xtable/iceberg/IcebergSourceClientProvider.java
@@ -16,12 +16,12 @@
  * limitations under the License.
  */
  
-package io.onetable.iceberg;
+package org.apache.xtable.iceberg;
 
 import org.apache.iceberg.Snapshot;
 
-import io.onetable.client.PerTableConfig;
-import io.onetable.client.SourceClientProvider;
+import org.apache.xtable.client.PerTableConfig;
+import org.apache.xtable.client.SourceClientProvider;
 
 /** A concrete implementation of {@link SourceClientProvider} for Hudi table format. */
 public class IcebergSourceClientProvider extends SourceClientProvider<Snapshot> {
diff --git a/core/src/main/java/io/onetable/iceberg/IcebergTableManager.java b/core/src/main/java/org/apache/xtable/iceberg/IcebergTableManager.java
similarity index 99%
rename from core/src/main/java/io/onetable/iceberg/IcebergTableManager.java
rename to core/src/main/java/org/apache/xtable/iceberg/IcebergTableManager.java
index 81597da8..431184ce 100644
--- a/core/src/main/java/io/onetable/iceberg/IcebergTableManager.java
+++ b/core/src/main/java/org/apache/xtable/iceberg/IcebergTableManager.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.iceberg;
+package org.apache.xtable.iceberg;
 
 import java.util.Collections;
 import java.util.Map;
diff --git a/core/src/main/java/io/onetable/paths/PathUtils.java b/core/src/main/java/org/apache/xtable/paths/PathUtils.java
similarity index 98%
rename from core/src/main/java/io/onetable/paths/PathUtils.java
rename to core/src/main/java/org/apache/xtable/paths/PathUtils.java
index 1e441c7e..9df0b2ee 100644
--- a/core/src/main/java/io/onetable/paths/PathUtils.java
+++ b/core/src/main/java/org/apache/xtable/paths/PathUtils.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.paths;
+package org.apache.xtable.paths;
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
diff --git a/core/src/main/java/io/onetable/reflection/ReflectionUtils.java b/core/src/main/java/org/apache/xtable/reflection/ReflectionUtils.java
similarity index 95%
rename from core/src/main/java/io/onetable/reflection/ReflectionUtils.java
rename to core/src/main/java/org/apache/xtable/reflection/ReflectionUtils.java
index eb27ec16..4790d0d6 100644
--- a/core/src/main/java/io/onetable/reflection/ReflectionUtils.java
+++ b/core/src/main/java/org/apache/xtable/reflection/ReflectionUtils.java
@@ -16,12 +16,12 @@
  * limitations under the License.
  */
  
-package io.onetable.reflection;
+package org.apache.xtable.reflection;
 
 import java.lang.reflect.InvocationTargetException;
 import java.util.Arrays;
 
-import io.onetable.exception.ConfigurationException;
+import org.apache.xtable.exception.ConfigurationException;
 
 /** Creates a instance of class from the class name and provided constructor arguments. */
 public class ReflectionUtils {
diff --git a/core/src/main/java/io/onetable/schema/SchemaFieldFinder.java b/core/src/main/java/org/apache/xtable/schema/SchemaFieldFinder.java
similarity index 94%
rename from core/src/main/java/io/onetable/schema/SchemaFieldFinder.java
rename to core/src/main/java/org/apache/xtable/schema/SchemaFieldFinder.java
index 87ea26cb..16001bdb 100644
--- a/core/src/main/java/io/onetable/schema/SchemaFieldFinder.java
+++ b/core/src/main/java/org/apache/xtable/schema/SchemaFieldFinder.java
@@ -16,13 +16,13 @@
  * limitations under the License.
  */
  
-package io.onetable.schema;
+package org.apache.xtable.schema;
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
 
-import io.onetable.model.schema.OneField;
-import io.onetable.model.schema.OneSchema;
+import org.apache.xtable.model.schema.OneField;
+import org.apache.xtable.model.schema.OneSchema;
 
 /**
  * SchemaFieldFinder finds the {@link OneField} in the given {@link OneSchema} identified by the
diff --git a/core/src/main/java/io/onetable/schema/SchemaUtils.java b/core/src/main/java/org/apache/xtable/schema/SchemaUtils.java
similarity index 97%
rename from core/src/main/java/io/onetable/schema/SchemaUtils.java
rename to core/src/main/java/org/apache/xtable/schema/SchemaUtils.java
index adb569ca..63e1d100 100644
--- a/core/src/main/java/io/onetable/schema/SchemaUtils.java
+++ b/core/src/main/java/org/apache/xtable/schema/SchemaUtils.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.schema;
+package org.apache.xtable.schema;
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
diff --git a/core/src/main/resources/META-INF/services/io.onetable.spi.sync.TargetClient b/core/src/main/resources/META-INF/services/org.apache.xtable.spi.sync.TargetClient
similarity index 88%
rename from core/src/main/resources/META-INF/services/io.onetable.spi.sync.TargetClient
rename to core/src/main/resources/META-INF/services/org.apache.xtable.spi.sync.TargetClient
index c031e175..07eda44e 100644
--- a/core/src/main/resources/META-INF/services/io.onetable.spi.sync.TargetClient
+++ b/core/src/main/resources/META-INF/services/org.apache.xtable.spi.sync.TargetClient
@@ -16,6 +16,6 @@
 # limitations under the License.
 ##########################################################################
 
-io.onetable.hudi.HudiTargetClient
-io.onetable.delta.DeltaClient
-io.onetable.iceberg.IcebergClient
+org.apache.xtable.hudi.HudiTargetClient
+org.apache.xtable.delta.DeltaClient
+org.apache.xtable.iceberg.IcebergClient
diff --git a/core/src/test/java/io/onetable/GenericTable.java b/core/src/test/java/org/apache/xtable/GenericTable.java
similarity index 95%
rename from core/src/test/java/io/onetable/GenericTable.java
rename to core/src/test/java/org/apache/xtable/GenericTable.java
index 373e8f2c..c6b75c31 100644
--- a/core/src/test/java/io/onetable/GenericTable.java
+++ b/core/src/test/java/org/apache/xtable/GenericTable.java
@@ -16,11 +16,11 @@
  * limitations under the License.
  */
  
-package io.onetable;
+package org.apache.xtable;
 
-import static io.onetable.model.storage.TableFormat.DELTA;
-import static io.onetable.model.storage.TableFormat.HUDI;
-import static io.onetable.model.storage.TableFormat.ICEBERG;
+import static org.apache.xtable.model.storage.TableFormat.DELTA;
+import static org.apache.xtable.model.storage.TableFormat.HUDI;
+import static org.apache.xtable.model.storage.TableFormat.ICEBERG;
 
 import java.nio.file.Path;
 import java.util.Arrays;
diff --git a/core/src/test/java/io/onetable/ITOneTableClient.java b/core/src/test/java/org/apache/xtable/ITOneTableClient.java
similarity index 97%
rename from core/src/test/java/io/onetable/ITOneTableClient.java
rename to core/src/test/java/org/apache/xtable/ITOneTableClient.java
index 56e87c9c..6f59e676 100644
--- a/core/src/test/java/io/onetable/ITOneTableClient.java
+++ b/core/src/test/java/org/apache/xtable/ITOneTableClient.java
@@ -16,13 +16,13 @@
  * limitations under the License.
  */
  
-package io.onetable;
+package org.apache.xtable;
 
-import static io.onetable.GenericTable.getTableName;
-import static io.onetable.hudi.HudiTestUtil.PartitionConfig;
-import static io.onetable.model.storage.TableFormat.DELTA;
-import static io.onetable.model.storage.TableFormat.HUDI;
-import static io.onetable.model.storage.TableFormat.ICEBERG;
+import static org.apache.xtable.GenericTable.getTableName;
+import static org.apache.xtable.hudi.HudiTestUtil.PartitionConfig;
+import static org.apache.xtable.model.storage.TableFormat.DELTA;
+import static org.apache.xtable.model.storage.TableFormat.HUDI;
+import static org.apache.xtable.model.storage.TableFormat.ICEBERG;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 
@@ -81,17 +81,17 @@ import org.apache.spark.sql.delta.DeltaLog;
 
 import com.google.common.collect.ImmutableList;
 
-import io.onetable.client.OneTableClient;
-import io.onetable.client.PerTableConfig;
-import io.onetable.client.PerTableConfigImpl;
-import io.onetable.client.SourceClientProvider;
-import io.onetable.delta.DeltaSourceClientProvider;
-import io.onetable.hudi.HudiSourceClientProvider;
-import io.onetable.hudi.HudiSourceConfigImpl;
-import io.onetable.hudi.HudiTestUtil;
-import io.onetable.iceberg.IcebergSourceClientProvider;
-import io.onetable.model.storage.TableFormat;
-import io.onetable.model.sync.SyncMode;
+import org.apache.xtable.client.OneTableClient;
+import org.apache.xtable.client.PerTableConfig;
+import org.apache.xtable.client.PerTableConfigImpl;
+import org.apache.xtable.client.SourceClientProvider;
+import org.apache.xtable.delta.DeltaSourceClientProvider;
+import org.apache.xtable.hudi.HudiSourceClientProvider;
+import org.apache.xtable.hudi.HudiSourceConfigImpl;
+import org.apache.xtable.hudi.HudiTestUtil;
+import org.apache.xtable.iceberg.IcebergSourceClientProvider;
+import org.apache.xtable.model.storage.TableFormat;
+import org.apache.xtable.model.sync.SyncMode;
 
 public class ITOneTableClient {
   @TempDir public static Path tempDir;
diff --git a/core/src/test/java/io/onetable/TestAbstractHudiTable.java b/core/src/test/java/org/apache/xtable/TestAbstractHudiTable.java
similarity index 99%
rename from core/src/test/java/io/onetable/TestAbstractHudiTable.java
rename to core/src/test/java/org/apache/xtable/TestAbstractHudiTable.java
index b3dfb109..3e9a133a 100644
--- a/core/src/test/java/io/onetable/TestAbstractHudiTable.java
+++ b/core/src/test/java/org/apache/xtable/TestAbstractHudiTable.java
@@ -16,10 +16,10 @@
  * limitations under the License.
  */
  
-package io.onetable;
+package org.apache.xtable;
 
-import static io.onetable.hudi.HudiTestUtil.getHoodieWriteConfig;
 import static org.apache.hudi.keygen.constant.KeyGeneratorOptions.PARTITIONPATH_FIELD_NAME;
+import static org.apache.xtable.hudi.HudiTestUtil.getHoodieWriteConfig;
 import static org.junit.jupiter.api.Assertions.assertAll;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertTrue;
diff --git a/core/src/test/java/io/onetable/TestIcebergTable.java b/core/src/test/java/org/apache/xtable/TestIcebergTable.java
similarity index 98%
rename from core/src/test/java/io/onetable/TestIcebergTable.java
rename to core/src/test/java/org/apache/xtable/TestIcebergTable.java
index ada0880d..bb63667a 100644
--- a/core/src/test/java/io/onetable/TestIcebergTable.java
+++ b/core/src/test/java/org/apache/xtable/TestIcebergTable.java
@@ -16,9 +16,8 @@
  * limitations under the License.
  */
  
-package io.onetable;
+package org.apache.xtable;
 
-import static io.onetable.iceberg.TestIcebergDataHelper.createIcebergDataHelper;
 import static org.apache.iceberg.SnapshotSummary.TOTAL_RECORDS_PROP;
 import static org.junit.jupiter.api.Assertions.*;
 
@@ -66,7 +65,7 @@ import org.apache.iceberg.types.Types;
 
 import com.google.common.base.Preconditions;
 
-import io.onetable.iceberg.TestIcebergDataHelper;
+import org.apache.xtable.iceberg.TestIcebergDataHelper;
 
 @Getter
 public class TestIcebergTable implements GenericTable<Record, String> {
@@ -113,7 +112,7 @@ public class TestIcebergTable implements GenericTable<Record, String> {
     this.tableName = tableName;
     this.basePath = tempDir.toUri().toString();
     this.icebergDataHelper =
-        createIcebergDataHelper(
+        TestIcebergDataHelper.createIcebergDataHelper(
             recordKeyField, filterNullFields(partitionFields), includeAdditionalColumns);
     this.schema = icebergDataHelper.getTableSchema();
 
diff --git a/core/src/test/java/io/onetable/TestJavaHudiTable.java b/core/src/test/java/org/apache/xtable/TestJavaHudiTable.java
similarity index 99%
rename from core/src/test/java/io/onetable/TestJavaHudiTable.java
rename to core/src/test/java/org/apache/xtable/TestJavaHudiTable.java
index 01307870..ce3b25bd 100644
--- a/core/src/test/java/io/onetable/TestJavaHudiTable.java
+++ b/core/src/test/java/org/apache/xtable/TestJavaHudiTable.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable;
+package org.apache.xtable;
 
 import java.io.IOException;
 import java.io.UncheckedIOException;
diff --git a/core/src/test/java/io/onetable/TestSparkDeltaTable.java b/core/src/test/java/org/apache/xtable/TestSparkDeltaTable.java
similarity index 97%
rename from core/src/test/java/io/onetable/TestSparkDeltaTable.java
rename to core/src/test/java/org/apache/xtable/TestSparkDeltaTable.java
index 89bc9f2d..a458070b 100644
--- a/core/src/test/java/io/onetable/TestSparkDeltaTable.java
+++ b/core/src/test/java/org/apache/xtable/TestSparkDeltaTable.java
@@ -16,9 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable;
-
-import static io.onetable.delta.TestDeltaHelper.createTestDataHelper;
+package org.apache.xtable;
 
 import java.io.Closeable;
 import java.io.IOException;
@@ -46,7 +44,7 @@ import com.google.common.base.Preconditions;
 
 import io.delta.tables.DeltaTable;
 
-import io.onetable.delta.TestDeltaHelper;
+import org.apache.xtable.delta.TestDeltaHelper;
 
 @Getter
 public class TestSparkDeltaTable implements GenericTable<Row, Object>, Closeable {
@@ -83,7 +81,8 @@ public class TestSparkDeltaTable implements GenericTable<Row, Object>, Closeable
       this.sparkSession = sparkSession;
       this.partitionField = partitionField;
       this.includeAdditionalColumns = includeAdditionalColumns;
-      this.testDeltaHelper = createTestDataHelper(partitionField, includeAdditionalColumns);
+      this.testDeltaHelper =
+          TestDeltaHelper.createTestDataHelper(partitionField, includeAdditionalColumns);
       testDeltaHelper.createTable(sparkSession, tableName, basePath);
       this.deltaLog = DeltaLog.forTable(sparkSession, basePath);
       this.deltaTable = DeltaTable.forPath(sparkSession, basePath);
diff --git a/core/src/test/java/io/onetable/TestSparkHudiTable.java b/core/src/test/java/org/apache/xtable/TestSparkHudiTable.java
similarity index 99%
rename from core/src/test/java/io/onetable/TestSparkHudiTable.java
rename to core/src/test/java/org/apache/xtable/TestSparkHudiTable.java
index 205d54c6..79316f5d 100644
--- a/core/src/test/java/io/onetable/TestSparkHudiTable.java
+++ b/core/src/test/java/org/apache/xtable/TestSparkHudiTable.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable;
+package org.apache.xtable;
 
 import java.nio.file.Path;
 import java.time.Instant;
diff --git a/core/src/test/java/io/onetable/ValidationTestHelper.java b/core/src/test/java/org/apache/xtable/ValidationTestHelper.java
similarity index 96%
rename from core/src/test/java/io/onetable/ValidationTestHelper.java
rename to core/src/test/java/org/apache/xtable/ValidationTestHelper.java
index 1861ba4d..49b50b39 100644
--- a/core/src/test/java/io/onetable/ValidationTestHelper.java
+++ b/core/src/test/java/org/apache/xtable/ValidationTestHelper.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable;
+package org.apache.xtable;
 
 import static org.junit.jupiter.api.Assertions.*;
 
@@ -27,9 +27,9 @@ import java.util.Set;
 import java.util.stream.Collectors;
 import java.util.stream.IntStream;
 
-import io.onetable.model.OneSnapshot;
-import io.onetable.model.TableChange;
-import io.onetable.model.storage.OneDataFile;
+import org.apache.xtable.model.OneSnapshot;
+import org.apache.xtable.model.TableChange;
+import org.apache.xtable.model.storage.OneDataFile;
 
 public class ValidationTestHelper {
 
diff --git a/core/src/test/java/io/onetable/avro/TestAvroSchemaConverter.java b/core/src/test/java/org/apache/xtable/avro/TestAvroSchemaConverter.java
similarity index 99%
rename from core/src/test/java/io/onetable/avro/TestAvroSchemaConverter.java
rename to core/src/test/java/org/apache/xtable/avro/TestAvroSchemaConverter.java
index beadb176..761622b8 100644
--- a/core/src/test/java/io/onetable/avro/TestAvroSchemaConverter.java
+++ b/core/src/test/java/org/apache/xtable/avro/TestAvroSchemaConverter.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.avro;
+package org.apache.xtable.avro;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
@@ -30,10 +30,10 @@ import org.junit.jupiter.api.Test;
 
 import org.apache.hudi.common.util.Option;
 
-import io.onetable.hudi.idtracking.IdTracker;
-import io.onetable.model.schema.OneField;
-import io.onetable.model.schema.OneSchema;
-import io.onetable.model.schema.OneType;
+import org.apache.xtable.hudi.idtracking.IdTracker;
+import org.apache.xtable.model.schema.OneField;
+import org.apache.xtable.model.schema.OneSchema;
+import org.apache.xtable.model.schema.OneType;
 
 public class TestAvroSchemaConverter {
   @Test
diff --git a/core/src/test/java/io/onetable/client/TestOneTableClient.java b/core/src/test/java/org/apache/xtable/client/TestOneTableClient.java
similarity index 96%
rename from core/src/test/java/io/onetable/client/TestOneTableClient.java
rename to core/src/test/java/org/apache/xtable/client/TestOneTableClient.java
index fc349d3b..35fc218d 100644
--- a/core/src/test/java/io/onetable/client/TestOneTableClient.java
+++ b/core/src/test/java/org/apache/xtable/client/TestOneTableClient.java
@@ -16,9 +16,9 @@
  * limitations under the License.
  */
  
-package io.onetable.client;
+package org.apache.xtable.client;
 
-import static io.onetable.GenericTable.getTableName;
+import static org.apache.xtable.GenericTable.getTableName;
 import static org.junit.jupiter.api.Assertions.*;
 import static org.mockito.ArgumentMatchers.argThat;
 import static org.mockito.ArgumentMatchers.eq;
@@ -43,19 +43,19 @@ import org.apache.hadoop.conf.Configuration;
 import org.junit.jupiter.api.Test;
 import org.mockito.ArgumentMatcher;
 
-import io.onetable.model.CommitsBacklog;
-import io.onetable.model.IncrementalTableChanges;
-import io.onetable.model.InstantsForIncrementalSync;
-import io.onetable.model.OneSnapshot;
-import io.onetable.model.OneTable;
-import io.onetable.model.OneTableMetadata;
-import io.onetable.model.TableChange;
-import io.onetable.model.storage.TableFormat;
-import io.onetable.model.sync.SyncMode;
-import io.onetable.model.sync.SyncResult;
-import io.onetable.spi.extractor.SourceClient;
-import io.onetable.spi.sync.TableFormatSync;
-import io.onetable.spi.sync.TargetClient;
+import org.apache.xtable.model.CommitsBacklog;
+import org.apache.xtable.model.IncrementalTableChanges;
+import org.apache.xtable.model.InstantsForIncrementalSync;
+import org.apache.xtable.model.OneSnapshot;
+import org.apache.xtable.model.OneTable;
+import org.apache.xtable.model.OneTableMetadata;
+import org.apache.xtable.model.TableChange;
+import org.apache.xtable.model.storage.TableFormat;
+import org.apache.xtable.model.sync.SyncMode;
+import org.apache.xtable.model.sync.SyncResult;
+import org.apache.xtable.spi.extractor.SourceClient;
+import org.apache.xtable.spi.sync.TableFormatSync;
+import org.apache.xtable.spi.sync.TargetClient;
 
 public class TestOneTableClient {
 
diff --git a/core/src/test/java/io/onetable/client/TestPerTableConfig.java b/core/src/test/java/org/apache/xtable/client/TestPerTableConfig.java
similarity index 95%
rename from core/src/test/java/io/onetable/client/TestPerTableConfig.java
rename to core/src/test/java/org/apache/xtable/client/TestPerTableConfig.java
index 2bcd8d37..1687cd1c 100644
--- a/core/src/test/java/io/onetable/client/TestPerTableConfig.java
+++ b/core/src/test/java/org/apache/xtable/client/TestPerTableConfig.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.client;
+package org.apache.xtable.client;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNull;
@@ -26,9 +26,9 @@ import java.util.Collections;
 
 import org.junit.jupiter.api.Test;
 
-import io.onetable.hudi.HudiSourceConfigImpl;
-import io.onetable.model.storage.TableFormat;
-import io.onetable.model.sync.SyncMode;
+import org.apache.xtable.hudi.HudiSourceConfigImpl;
+import org.apache.xtable.model.storage.TableFormat;
+import org.apache.xtable.model.sync.SyncMode;
 
 class TestPerTableConfig {
 
diff --git a/core/src/test/java/io/onetable/client/TestTableFormatClientFactory.java b/core/src/test/java/org/apache/xtable/client/TestTableFormatClientFactory.java
similarity index 92%
rename from core/src/test/java/io/onetable/client/TestTableFormatClientFactory.java
rename to core/src/test/java/org/apache/xtable/client/TestTableFormatClientFactory.java
index 5cffe450..9a7e4175 100644
--- a/core/src/test/java/io/onetable/client/TestTableFormatClientFactory.java
+++ b/core/src/test/java/org/apache/xtable/client/TestTableFormatClientFactory.java
@@ -16,9 +16,9 @@
  * limitations under the License.
  */
  
-package io.onetable.client;
+package org.apache.xtable.client;
 
-import static io.onetable.GenericTable.getTableName;
+import static org.apache.xtable.GenericTable.getTableName;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertThrows;
@@ -30,10 +30,10 @@ import java.util.List;
 import org.apache.hadoop.conf.Configuration;
 import org.junit.jupiter.api.Test;
 
-import io.onetable.exception.NotSupportedException;
-import io.onetable.model.storage.TableFormat;
-import io.onetable.model.sync.SyncMode;
-import io.onetable.spi.sync.TargetClient;
+import org.apache.xtable.exception.NotSupportedException;
+import org.apache.xtable.model.storage.TableFormat;
+import org.apache.xtable.model.sync.SyncMode;
+import org.apache.xtable.spi.sync.TargetClient;
 
 public class TestTableFormatClientFactory {
 
diff --git a/core/src/test/java/io/onetable/delta/ITDeltaSourceClient.java b/core/src/test/java/org/apache/xtable/delta/ITDeltaSourceClient.java
similarity index 91%
rename from core/src/test/java/io/onetable/delta/ITDeltaSourceClient.java
rename to core/src/test/java/org/apache/xtable/delta/ITDeltaSourceClient.java
index 4dca16f6..38ce5e31 100644
--- a/core/src/test/java/io/onetable/delta/ITDeltaSourceClient.java
+++ b/core/src/test/java/org/apache/xtable/delta/ITDeltaSourceClient.java
@@ -16,12 +16,8 @@
  * limitations under the License.
  */
  
-package io.onetable.delta;
+package org.apache.xtable.delta;
 
-import static io.onetable.GenericTable.getTableName;
-import static io.onetable.ValidationTestHelper.getAllFilePaths;
-import static io.onetable.ValidationTestHelper.validateOneSnapshot;
-import static io.onetable.ValidationTestHelper.validateTableChanges;
 import static org.junit.jupiter.api.Assertions.*;
 
 import java.net.URI;
@@ -54,26 +50,31 @@ import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.Arguments;
 import org.junit.jupiter.params.provider.MethodSource;
 
-import io.onetable.TestSparkDeltaTable;
-import io.onetable.client.PerTableConfig;
-import io.onetable.client.PerTableConfigImpl;
-import io.onetable.model.*;
-import io.onetable.model.CommitsBacklog;
-import io.onetable.model.schema.OneField;
-import io.onetable.model.schema.OnePartitionField;
-import io.onetable.model.schema.OneSchema;
-import io.onetable.model.schema.OneType;
-import io.onetable.model.schema.PartitionTransformType;
-import io.onetable.model.schema.SchemaCatalog;
-import io.onetable.model.schema.SchemaVersion;
-import io.onetable.model.stat.ColumnStat;
-import io.onetable.model.stat.PartitionValue;
-import io.onetable.model.stat.Range;
-import io.onetable.model.storage.DataLayoutStrategy;
-import io.onetable.model.storage.FileFormat;
-import io.onetable.model.storage.OneDataFile;
-import io.onetable.model.storage.OneFileGroup;
-import io.onetable.model.storage.TableFormat;
+import org.apache.xtable.GenericTable;
+import org.apache.xtable.TestSparkDeltaTable;
+import org.apache.xtable.ValidationTestHelper;
+import org.apache.xtable.client.PerTableConfig;
+import org.apache.xtable.client.PerTableConfigImpl;
+import org.apache.xtable.model.CommitsBacklog;
+import org.apache.xtable.model.InstantsForIncrementalSync;
+import org.apache.xtable.model.OneSnapshot;
+import org.apache.xtable.model.OneTable;
+import org.apache.xtable.model.TableChange;
+import org.apache.xtable.model.schema.OneField;
+import org.apache.xtable.model.schema.OnePartitionField;
+import org.apache.xtable.model.schema.OneSchema;
+import org.apache.xtable.model.schema.OneType;
+import org.apache.xtable.model.schema.PartitionTransformType;
+import org.apache.xtable.model.schema.SchemaCatalog;
+import org.apache.xtable.model.schema.SchemaVersion;
+import org.apache.xtable.model.stat.ColumnStat;
+import org.apache.xtable.model.stat.PartitionValue;
+import org.apache.xtable.model.stat.Range;
+import org.apache.xtable.model.storage.DataLayoutStrategy;
+import org.apache.xtable.model.storage.FileFormat;
+import org.apache.xtable.model.storage.OneDataFile;
+import org.apache.xtable.model.storage.OneFileGroup;
+import org.apache.xtable.model.storage.TableFormat;
 
 public class ITDeltaSourceClient {
 
@@ -151,7 +152,7 @@ public class ITDeltaSourceClient {
   @Test
   void getCurrentSnapshotNonPartitionedTest() throws URISyntaxException {
     // Table name
-    final String tableName = getTableName();
+    final String tableName = GenericTable.getTableName();
     final Path basePath = tempDir.resolve(tableName);
     // Create table with a single row using Spark
     sparkSession.sql(
@@ -208,7 +209,7 @@ public class ITDeltaSourceClient {
   @Test
   void getCurrentSnapshotPartitionedTest() throws URISyntaxException {
     // Table name
-    final String tableName = getTableName();
+    final String tableName = GenericTable.getTableName();
     final Path basePath = tempDir.resolve(tableName);
     // Create table with a single row using Spark
     sparkSession.sql(
@@ -292,7 +293,7 @@ public class ITDeltaSourceClient {
   @Test
   void getCurrentSnapshotGenColPartitionedTest() {
     // Table name
-    final String tableName = getTableName();
+    final String tableName = GenericTable.getTableName();
     final Path basePath = tempDir.resolve(tableName);
     // Create table with a single row using Spark
     sparkSession.sql(
@@ -322,7 +323,7 @@ public class ITDeltaSourceClient {
   @ParameterizedTest
   @MethodSource("testWithPartitionToggle")
   public void testInsertsUpsertsAndDeletes(boolean isPartitioned) {
-    String tableName = getTableName();
+    String tableName = GenericTable.getTableName();
     TestSparkDeltaTable testSparkDeltaTable =
         new TestSparkDeltaTable(
             tableName, tempDir, sparkSession, isPartitioned ? "yearOfBirth" : null, false);
@@ -359,7 +360,8 @@ public class ITDeltaSourceClient {
     if (isPartitioned) {
       validateDeltaPartitioning(oneSnapshot);
     }
-    validateOneSnapshot(oneSnapshot, allActiveFiles.get(allActiveFiles.size() - 1));
+    ValidationTestHelper.validateOneSnapshot(
+        oneSnapshot, allActiveFiles.get(allActiveFiles.size() - 1));
     // Get changes in incremental format.
     InstantsForIncrementalSync instantsForIncrementalSync =
         InstantsForIncrementalSync.builder()
@@ -371,13 +373,13 @@ public class ITDeltaSourceClient {
       TableChange tableChange = deltaSourceClient.getTableChangeForCommit(version);
       allTableChanges.add(tableChange);
     }
-    validateTableChanges(allActiveFiles, allTableChanges);
+    ValidationTestHelper.validateTableChanges(allActiveFiles, allTableChanges);
   }
 
   @Test
   public void testsShowingVacuumHasNoEffectOnIncrementalSync() {
     boolean isPartitioned = true;
-    String tableName = getTableName();
+    String tableName = GenericTable.getTableName();
     TestSparkDeltaTable testSparkDeltaTable =
         new TestSparkDeltaTable(
             tableName, tempDir, sparkSession, isPartitioned ? "yearOfBirth" : null, false);
@@ -392,7 +394,7 @@ public class ITDeltaSourceClient {
             .build();
     DeltaSourceClient deltaSourceClient = clientProvider.getSourceClientInstance(tableConfig);
     OneSnapshot snapshotAfterCommit1 = deltaSourceClient.getCurrentSnapshot();
-    List<String> allActivePaths = getAllFilePaths(snapshotAfterCommit1);
+    List<String> allActivePaths = ValidationTestHelper.getAllFilePaths(snapshotAfterCommit1);
     assertEquals(1, allActivePaths.size());
     String activePathAfterCommit1 = allActivePaths.get(0);
 
@@ -427,7 +429,7 @@ public class ITDeltaSourceClient {
   @ParameterizedTest
   @MethodSource("testWithPartitionToggle")
   public void testVacuum(boolean isPartitioned) {
-    String tableName = getTableName();
+    String tableName = GenericTable.getTableName();
     TestSparkDeltaTable testSparkDeltaTable =
         new TestSparkDeltaTable(
             tableName, tempDir, sparkSession, isPartitioned ? "yearOfBirth" : null, false);
@@ -463,7 +465,8 @@ public class ITDeltaSourceClient {
     if (isPartitioned) {
       validateDeltaPartitioning(oneSnapshot);
     }
-    validateOneSnapshot(oneSnapshot, allActiveFiles.get(allActiveFiles.size() - 1));
+    ValidationTestHelper.validateOneSnapshot(
+        oneSnapshot, allActiveFiles.get(allActiveFiles.size() - 1));
     // Get changes in incremental format.
     InstantsForIncrementalSync instantsForIncrementalSync =
         InstantsForIncrementalSync.builder()
@@ -475,13 +478,13 @@ public class ITDeltaSourceClient {
       TableChange tableChange = deltaSourceClient.getTableChangeForCommit(version);
       allTableChanges.add(tableChange);
     }
-    validateTableChanges(allActiveFiles, allTableChanges);
+    ValidationTestHelper.validateTableChanges(allActiveFiles, allTableChanges);
   }
 
   @ParameterizedTest
   @MethodSource("testWithPartitionToggle")
   public void testAddColumns(boolean isPartitioned) {
-    String tableName = getTableName();
+    String tableName = GenericTable.getTableName();
     TestSparkDeltaTable testSparkDeltaTable =
         new TestSparkDeltaTable(
             tableName, tempDir, sparkSession, isPartitioned ? "yearOfBirth" : null, true);
@@ -509,7 +512,8 @@ public class ITDeltaSourceClient {
     if (isPartitioned) {
       validateDeltaPartitioning(oneSnapshot);
     }
-    validateOneSnapshot(oneSnapshot, allActiveFiles.get(allActiveFiles.size() - 1));
+    ValidationTestHelper.validateOneSnapshot(
+        oneSnapshot, allActiveFiles.get(allActiveFiles.size() - 1));
     // Get changes in incremental format.
     InstantsForIncrementalSync instantsForIncrementalSync =
         InstantsForIncrementalSync.builder()
@@ -521,12 +525,12 @@ public class ITDeltaSourceClient {
       TableChange tableChange = deltaSourceClient.getTableChangeForCommit(version);
       allTableChanges.add(tableChange);
     }
-    validateTableChanges(allActiveFiles, allTableChanges);
+    ValidationTestHelper.validateTableChanges(allActiveFiles, allTableChanges);
   }
 
   @Test
   public void testDropPartition() {
-    String tableName = getTableName();
+    String tableName = GenericTable.getTableName();
     TestSparkDeltaTable testSparkDeltaTable =
         new TestSparkDeltaTable(tableName, tempDir, sparkSession, "yearOfBirth", false);
     List<List<String>> allActiveFiles = new ArrayList<>();
@@ -564,7 +568,8 @@ public class ITDeltaSourceClient {
     OneSnapshot oneSnapshot = deltaSourceClient.getCurrentSnapshot();
 
     validateDeltaPartitioning(oneSnapshot);
-    validateOneSnapshot(oneSnapshot, allActiveFiles.get(allActiveFiles.size() - 1));
+    ValidationTestHelper.validateOneSnapshot(
+        oneSnapshot, allActiveFiles.get(allActiveFiles.size() - 1));
     // Get changes in incremental format.
     InstantsForIncrementalSync instantsForIncrementalSync =
         InstantsForIncrementalSync.builder()
@@ -576,13 +581,13 @@ public class ITDeltaSourceClient {
       TableChange tableChange = deltaSourceClient.getTableChangeForCommit(version);
       allTableChanges.add(tableChange);
     }
-    validateTableChanges(allActiveFiles, allTableChanges);
+    ValidationTestHelper.validateTableChanges(allActiveFiles, allTableChanges);
   }
 
   @ParameterizedTest
   @MethodSource("testWithPartitionToggle")
   public void testOptimizeAndClustering(boolean isPartitioned) {
-    String tableName = getTableName();
+    String tableName = GenericTable.getTableName();
     TestSparkDeltaTable testSparkDeltaTable =
         new TestSparkDeltaTable(
             tableName, tempDir, sparkSession, isPartitioned ? "yearOfBirth" : null, false);
@@ -622,7 +627,8 @@ public class ITDeltaSourceClient {
     if (isPartitioned) {
       validateDeltaPartitioning(oneSnapshot);
     }
-    validateOneSnapshot(oneSnapshot, allActiveFiles.get(allActiveFiles.size() - 1));
+    ValidationTestHelper.validateOneSnapshot(
+        oneSnapshot, allActiveFiles.get(allActiveFiles.size() - 1));
     // Get changes in incremental format.
     InstantsForIncrementalSync instantsForIncrementalSync =
         InstantsForIncrementalSync.builder()
@@ -634,7 +640,7 @@ public class ITDeltaSourceClient {
       TableChange tableChange = deltaSourceClient.getTableChangeForCommit(version);
       allTableChanges.add(tableChange);
     }
-    validateTableChanges(allActiveFiles, allTableChanges);
+    ValidationTestHelper.validateTableChanges(allActiveFiles, allTableChanges);
   }
 
   private void validateDeltaPartitioning(OneSnapshot oneSnapshot) {
diff --git a/core/src/test/java/io/onetable/delta/TestDeltaHelper.java b/core/src/test/java/org/apache/xtable/delta/TestDeltaHelper.java
similarity index 98%
rename from core/src/test/java/io/onetable/delta/TestDeltaHelper.java
rename to core/src/test/java/org/apache/xtable/delta/TestDeltaHelper.java
index a1d1ad16..a677f57e 100644
--- a/core/src/test/java/io/onetable/delta/TestDeltaHelper.java
+++ b/core/src/test/java/org/apache/xtable/delta/TestDeltaHelper.java
@@ -16,9 +16,8 @@
  * limitations under the License.
  */
  
-package io.onetable.delta;
+package org.apache.xtable.delta;
 
-import static io.onetable.GenericTable.LEVEL_VALUES;
 import static org.apache.spark.sql.types.DataTypes.BinaryType;
 import static org.apache.spark.sql.types.DataTypes.BooleanType;
 import static org.apache.spark.sql.types.DataTypes.DateType;
@@ -65,6 +64,8 @@ import org.apache.spark.sql.types.StructType;
 import io.delta.tables.DeltaTable;
 import io.delta.tables.DeltaTableBuilder;
 
+import org.apache.xtable.GenericTable;
+
 @Builder
 @Getter
 @AllArgsConstructor(access = AccessLevel.PRIVATE)
@@ -164,7 +165,8 @@ public class TestDeltaHelper {
 
   public Row generateRandomRow() {
     int year = 2013 + RANDOM.nextInt(11);
-    String levelValue = LEVEL_VALUES.get(RANDOM.nextInt(LEVEL_VALUES.size()));
+    String levelValue =
+        GenericTable.LEVEL_VALUES.get(RANDOM.nextInt(GenericTable.LEVEL_VALUES.size()));
     return generateRandomRowForGivenYearAndLevel(year, levelValue);
   }
 
diff --git a/core/src/test/java/io/onetable/delta/TestDeltaPartitionExtractor.java b/core/src/test/java/org/apache/xtable/delta/TestDeltaPartitionExtractor.java
similarity index 98%
rename from core/src/test/java/io/onetable/delta/TestDeltaPartitionExtractor.java
rename to core/src/test/java/org/apache/xtable/delta/TestDeltaPartitionExtractor.java
index 8e9da45e..bc4b9928 100644
--- a/core/src/test/java/io/onetable/delta/TestDeltaPartitionExtractor.java
+++ b/core/src/test/java/org/apache/xtable/delta/TestDeltaPartitionExtractor.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.delta;
+package org.apache.xtable.delta;
 
 import static org.junit.jupiter.api.Assertions.*;
 
@@ -34,13 +34,13 @@ import org.junit.jupiter.api.Test;
 
 import scala.collection.JavaConverters;
 
-import io.onetable.model.schema.OneField;
-import io.onetable.model.schema.OnePartitionField;
-import io.onetable.model.schema.OneSchema;
-import io.onetable.model.schema.OneType;
-import io.onetable.model.schema.PartitionTransformType;
-import io.onetable.model.stat.PartitionValue;
-import io.onetable.model.stat.Range;
+import org.apache.xtable.model.schema.OneField;
+import org.apache.xtable.model.schema.OnePartitionField;
+import org.apache.xtable.model.schema.OneSchema;
+import org.apache.xtable.model.schema.OneType;
+import org.apache.xtable.model.schema.PartitionTransformType;
+import org.apache.xtable.model.stat.PartitionValue;
+import org.apache.xtable.model.stat.Range;
 
 /** Validates the partition extraction logic from Delta tables. */
 public class TestDeltaPartitionExtractor {
diff --git a/core/src/test/java/io/onetable/delta/TestDeltaSchemaExtractor.java b/core/src/test/java/org/apache/xtable/delta/TestDeltaSchemaExtractor.java
similarity index 99%
rename from core/src/test/java/io/onetable/delta/TestDeltaSchemaExtractor.java
rename to core/src/test/java/org/apache/xtable/delta/TestDeltaSchemaExtractor.java
index 39957452..03809894 100644
--- a/core/src/test/java/io/onetable/delta/TestDeltaSchemaExtractor.java
+++ b/core/src/test/java/org/apache/xtable/delta/TestDeltaSchemaExtractor.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.delta;
+package org.apache.xtable.delta;
 
 import java.util.Arrays;
 import java.util.Collections;
@@ -29,9 +29,9 @@ import org.apache.spark.sql.types.StructType;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
-import io.onetable.model.schema.OneField;
-import io.onetable.model.schema.OneSchema;
-import io.onetable.model.schema.OneType;
+import org.apache.xtable.model.schema.OneField;
+import org.apache.xtable.model.schema.OneSchema;
+import org.apache.xtable.model.schema.OneType;
 
 public class TestDeltaSchemaExtractor {
 
diff --git a/core/src/test/java/io/onetable/delta/TestDeltaStatsExtractor.java b/core/src/test/java/org/apache/xtable/delta/TestDeltaStatsExtractor.java
similarity index 96%
rename from core/src/test/java/io/onetable/delta/TestDeltaStatsExtractor.java
rename to core/src/test/java/org/apache/xtable/delta/TestDeltaStatsExtractor.java
index d084a5b4..3c38620a 100644
--- a/core/src/test/java/io/onetable/delta/TestDeltaStatsExtractor.java
+++ b/core/src/test/java/org/apache/xtable/delta/TestDeltaStatsExtractor.java
@@ -16,9 +16,9 @@
  * limitations under the License.
  */
  
-package io.onetable.delta;
+package org.apache.xtable.delta;
 
-import static io.onetable.testutil.ColumnStatMapUtil.getColumnStats;
+import static org.apache.xtable.testutil.ColumnStatMapUtil.getColumnStats;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
 import java.io.IOException;
@@ -36,12 +36,12 @@ import org.apache.spark.sql.delta.actions.AddFile;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 
-import io.onetable.model.schema.OneField;
-import io.onetable.model.schema.OneSchema;
-import io.onetable.model.schema.OneType;
-import io.onetable.model.stat.ColumnStat;
-import io.onetable.model.stat.Range;
-import io.onetable.testutil.ColumnStatMapUtil;
+import org.apache.xtable.model.schema.OneField;
+import org.apache.xtable.model.schema.OneSchema;
+import org.apache.xtable.model.schema.OneType;
+import org.apache.xtable.model.stat.ColumnStat;
+import org.apache.xtable.model.stat.Range;
+import org.apache.xtable.testutil.ColumnStatMapUtil;
 
 public class TestDeltaStatsExtractor {
 
diff --git a/core/src/test/java/io/onetable/delta/TestDeltaSync.java b/core/src/test/java/org/apache/xtable/delta/TestDeltaSync.java
similarity index 95%
rename from core/src/test/java/io/onetable/delta/TestDeltaSync.java
rename to core/src/test/java/org/apache/xtable/delta/TestDeltaSync.java
index bcb90eaf..807e6d2d 100644
--- a/core/src/test/java/io/onetable/delta/TestDeltaSync.java
+++ b/core/src/test/java/org/apache/xtable/delta/TestDeltaSync.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.delta;
+package org.apache.xtable.delta;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
@@ -76,23 +76,23 @@ import io.delta.standalone.expressions.Literal;
 import io.delta.standalone.types.IntegerType;
 import io.delta.standalone.types.StringType;
 
-import io.onetable.client.PerTableConfigImpl;
-import io.onetable.model.OneSnapshot;
-import io.onetable.model.OneTable;
-import io.onetable.model.schema.OneField;
-import io.onetable.model.schema.OnePartitionField;
-import io.onetable.model.schema.OneSchema;
-import io.onetable.model.schema.OneType;
-import io.onetable.model.schema.PartitionTransformType;
-import io.onetable.model.stat.PartitionValue;
-import io.onetable.model.stat.Range;
-import io.onetable.model.storage.DataLayoutStrategy;
-import io.onetable.model.storage.FileFormat;
-import io.onetable.model.storage.OneDataFile;
-import io.onetable.model.storage.OneFileGroup;
-import io.onetable.model.storage.TableFormat;
-import io.onetable.schema.SchemaFieldFinder;
-import io.onetable.spi.sync.TableFormatSync;
+import org.apache.xtable.client.PerTableConfigImpl;
+import org.apache.xtable.model.OneSnapshot;
+import org.apache.xtable.model.OneTable;
+import org.apache.xtable.model.schema.OneField;
+import org.apache.xtable.model.schema.OnePartitionField;
+import org.apache.xtable.model.schema.OneSchema;
+import org.apache.xtable.model.schema.OneType;
+import org.apache.xtable.model.schema.PartitionTransformType;
+import org.apache.xtable.model.stat.PartitionValue;
+import org.apache.xtable.model.stat.Range;
+import org.apache.xtable.model.storage.DataLayoutStrategy;
+import org.apache.xtable.model.storage.FileFormat;
+import org.apache.xtable.model.storage.OneDataFile;
+import org.apache.xtable.model.storage.OneFileGroup;
+import org.apache.xtable.model.storage.TableFormat;
+import org.apache.xtable.schema.SchemaFieldFinder;
+import org.apache.xtable.spi.sync.TableFormatSync;
 
 /**
  * Validates that the delta log is properly created/updated. Also validates that our assumptions
diff --git a/core/src/test/java/io/onetable/delta/TestDeltaValueConverter.java b/core/src/test/java/org/apache/xtable/delta/TestDeltaValueConverter.java
similarity index 97%
rename from core/src/test/java/io/onetable/delta/TestDeltaValueConverter.java
rename to core/src/test/java/org/apache/xtable/delta/TestDeltaValueConverter.java
index 37a9d598..e8e96f8f 100644
--- a/core/src/test/java/io/onetable/delta/TestDeltaValueConverter.java
+++ b/core/src/test/java/org/apache/xtable/delta/TestDeltaValueConverter.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.delta;
+package org.apache.xtable.delta;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertThrows;
@@ -33,9 +33,9 @@ import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.Arguments;
 import org.junit.jupiter.params.provider.MethodSource;
 
-import io.onetable.model.schema.OneSchema;
-import io.onetable.model.schema.OneType;
-import io.onetable.model.schema.PartitionTransformType;
+import org.apache.xtable.model.schema.OneSchema;
+import org.apache.xtable.model.schema.OneType;
+import org.apache.xtable.model.schema.PartitionTransformType;
 
 public class TestDeltaValueConverter {
 
diff --git a/core/src/test/java/io/onetable/hudi/HudiTestUtil.java b/core/src/test/java/org/apache/xtable/hudi/HudiTestUtil.java
similarity index 98%
rename from core/src/test/java/io/onetable/hudi/HudiTestUtil.java
rename to core/src/test/java/org/apache/xtable/hudi/HudiTestUtil.java
index 8bfa8bf4..617f7ce3 100644
--- a/core/src/test/java/io/onetable/hudi/HudiTestUtil.java
+++ b/core/src/test/java/org/apache/xtable/hudi/HudiTestUtil.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.hudi;
+package org.apache.xtable.hudi;
 
 import static org.apache.hudi.index.HoodieIndex.IndexType.INMEMORY;
 
@@ -48,7 +48,7 @@ import org.apache.hudi.config.HoodieArchivalConfig;
 import org.apache.hudi.config.HoodieIndexConfig;
 import org.apache.hudi.config.HoodieWriteConfig;
 
-import io.onetable.model.schema.SchemaVersion;
+import org.apache.xtable.model.schema.SchemaVersion;
 
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
 public class HudiTestUtil {
diff --git a/core/src/test/java/io/onetable/hudi/ITHudiSourceClient.java b/core/src/test/java/org/apache/xtable/hudi/ITHudiSourceClient.java
similarity index 89%
rename from core/src/test/java/io/onetable/hudi/ITHudiSourceClient.java
rename to core/src/test/java/org/apache/xtable/hudi/ITHudiSourceClient.java
index aabb76b4..8a2ddef4 100644
--- a/core/src/test/java/io/onetable/hudi/ITHudiSourceClient.java
+++ b/core/src/test/java/org/apache/xtable/hudi/ITHudiSourceClient.java
@@ -16,13 +16,8 @@
  * limitations under the License.
  */
  
-package io.onetable.hudi;
+package org.apache.xtable.hudi;
 
-import static io.onetable.GenericTable.getTableName;
-import static io.onetable.ValidationTestHelper.validateOneSnapshot;
-import static io.onetable.ValidationTestHelper.validateTableChange;
-import static io.onetable.ValidationTestHelper.validateTableChanges;
-import static io.onetable.hudi.HudiTestUtil.PartitionConfig;
 import static java.util.stream.Collectors.groupingBy;
 import static org.junit.jupiter.api.Assertions.*;
 
@@ -63,12 +58,14 @@ import org.apache.hudi.common.model.HoodieTableType;
 import org.apache.hudi.common.table.HoodieTableMetaClient;
 import org.apache.hudi.common.table.timeline.HoodieInstant;
 
-import io.onetable.TestJavaHudiTable;
-import io.onetable.TestSparkHudiTable;
-import io.onetable.model.CommitsBacklog;
-import io.onetable.model.InstantsForIncrementalSync;
-import io.onetable.model.OneSnapshot;
-import io.onetable.model.TableChange;
+import org.apache.xtable.GenericTable;
+import org.apache.xtable.TestJavaHudiTable;
+import org.apache.xtable.TestSparkHudiTable;
+import org.apache.xtable.ValidationTestHelper;
+import org.apache.xtable.model.CommitsBacklog;
+import org.apache.xtable.model.InstantsForIncrementalSync;
+import org.apache.xtable.model.OneSnapshot;
+import org.apache.xtable.model.TableChange;
 
 /**
  * A suite of functional tests that the extraction from Hudi to Intermediate representation works.
@@ -103,8 +100,9 @@ public class ITHudiSourceClient {
 
   @ParameterizedTest
   @MethodSource("testsForAllTableTypesAndPartitions")
-  public void insertAndUpsertData(HoodieTableType tableType, PartitionConfig partitionConfig) {
-    String tableName = getTableName();
+  public void insertAndUpsertData(
+      HoodieTableType tableType, HudiTestUtil.PartitionConfig partitionConfig) {
+    String tableName = GenericTable.getTableName();
     try (TestJavaHudiTable table =
         TestJavaHudiTable.forStandardSchema(
             tableName, tempDir, partitionConfig.getHudiConfig(), tableType)) {
@@ -140,7 +138,8 @@ public class ITHudiSourceClient {
               CONFIGURATION, table.getBasePath(), partitionConfig.getOneTableConfig());
       // Get the current snapshot
       OneSnapshot oneSnapshot = hudiClient.getCurrentSnapshot();
-      validateOneSnapshot(oneSnapshot, allBaseFilePaths.get(allBaseFilePaths.size() - 1));
+      ValidationTestHelper.validateOneSnapshot(
+          oneSnapshot, allBaseFilePaths.get(allBaseFilePaths.size() - 1));
       // Get second change in Incremental format.
       InstantsForIncrementalSync instantsForIncrementalSync =
           InstantsForIncrementalSync.builder()
@@ -152,14 +151,14 @@ public class ITHudiSourceClient {
         TableChange tableChange = hudiClient.getTableChangeForCommit(instant);
         allTableChanges.add(tableChange);
       }
-      validateTableChanges(allBaseFilePaths, allTableChanges);
+      ValidationTestHelper.validateTableChanges(allBaseFilePaths, allTableChanges);
     }
   }
 
   @Test
   public void testOnlyUpsertsAfterInserts() {
     HoodieTableType tableType = HoodieTableType.MERGE_ON_READ;
-    PartitionConfig partitionConfig = PartitionConfig.of(null, null);
+    HudiTestUtil.PartitionConfig partitionConfig = HudiTestUtil.PartitionConfig.of(null, null);
     String tableName = "test_table_" + UUID.randomUUID();
     try (TestJavaHudiTable table =
         TestJavaHudiTable.forStandardSchema(
@@ -187,7 +186,8 @@ public class ITHudiSourceClient {
               CONFIGURATION, table.getBasePath(), partitionConfig.getOneTableConfig());
       // Get the current snapshot
       OneSnapshot oneSnapshot = hudiClient.getCurrentSnapshot();
-      validateOneSnapshot(oneSnapshot, allBaseFilePaths.get(allBaseFilePaths.size() - 1));
+      ValidationTestHelper.validateOneSnapshot(
+          oneSnapshot, allBaseFilePaths.get(allBaseFilePaths.size() - 1));
       // Get second change in Incremental format.
       InstantsForIncrementalSync instantsForIncrementalSync =
           InstantsForIncrementalSync.builder()
@@ -199,15 +199,15 @@ public class ITHudiSourceClient {
         TableChange tableChange = hudiClient.getTableChangeForCommit(instant);
         allTableChanges.add(tableChange);
       }
-      validateTableChanges(allBaseFilePaths, allTableChanges);
+      ValidationTestHelper.validateTableChanges(allBaseFilePaths, allTableChanges);
     }
   }
 
   @Test
   public void testForIncrementalSyncSafetyCheck() {
     HoodieTableType tableType = HoodieTableType.COPY_ON_WRITE;
-    PartitionConfig partitionConfig = PartitionConfig.of(null, null);
-    String tableName = getTableName();
+    HudiTestUtil.PartitionConfig partitionConfig = HudiTestUtil.PartitionConfig.of(null, null);
+    String tableName = GenericTable.getTableName();
     try (TestJavaHudiTable table =
         TestJavaHudiTable.forStandardSchema(
             tableName, tempDir, partitionConfig.getHudiConfig(), tableType)) {
@@ -274,7 +274,8 @@ public class ITHudiSourceClient {
           getHudiSourceClient(CONFIGURATION, table.getBasePath(), "level:VALUE");
       // Get the current snapshot
       OneSnapshot oneSnapshot = hudiClient.getCurrentSnapshot();
-      validateOneSnapshot(oneSnapshot, allBaseFilePaths.get(allBaseFilePaths.size() - 1));
+      ValidationTestHelper.validateOneSnapshot(
+          oneSnapshot, allBaseFilePaths.get(allBaseFilePaths.size() - 1));
       // Get changes in Incremental format.
       InstantsForIncrementalSync instantsForIncrementalSync =
           InstantsForIncrementalSync.builder()
@@ -286,7 +287,7 @@ public class ITHudiSourceClient {
         TableChange tableChange = hudiClient.getTableChangeForCommit(instant);
         allTableChanges.add(tableChange);
       }
-      validateTableChanges(allBaseFilePaths, allTableChanges);
+      ValidationTestHelper.validateTableChanges(allBaseFilePaths, allTableChanges);
     }
   }
 
@@ -325,7 +326,8 @@ public class ITHudiSourceClient {
           getHudiSourceClient(CONFIGURATION, table.getBasePath(), "level:VALUE");
       // Get the current snapshot
       OneSnapshot oneSnapshot = hudiClient.getCurrentSnapshot();
-      validateOneSnapshot(oneSnapshot, allBaseFilePaths.get(allBaseFilePaths.size() - 1));
+      ValidationTestHelper.validateOneSnapshot(
+          oneSnapshot, allBaseFilePaths.get(allBaseFilePaths.size() - 1));
       // Get changes in Incremental format.
       InstantsForIncrementalSync instantsForIncrementalSync =
           InstantsForIncrementalSync.builder()
@@ -337,13 +339,14 @@ public class ITHudiSourceClient {
         TableChange tableChange = hudiClient.getTableChangeForCommit(instant);
         allTableChanges.add(tableChange);
       }
-      validateTableChanges(allBaseFilePaths, allTableChanges);
+      ValidationTestHelper.validateTableChanges(allBaseFilePaths, allTableChanges);
     }
   }
 
   @ParameterizedTest
   @MethodSource("testsForAllTableTypesAndPartitions")
-  public void testsForClustering(HoodieTableType tableType, PartitionConfig partitionConfig) {
+  public void testsForClustering(
+      HoodieTableType tableType, HudiTestUtil.PartitionConfig partitionConfig) {
     String tableName = "test_table_" + UUID.randomUUID();
     try (TestJavaHudiTable table =
         TestJavaHudiTable.forStandardSchema(
@@ -390,7 +393,8 @@ public class ITHudiSourceClient {
               CONFIGURATION, table.getBasePath(), partitionConfig.getOneTableConfig());
       // Get the current snapshot
       OneSnapshot oneSnapshot = hudiClient.getCurrentSnapshot();
-      validateOneSnapshot(oneSnapshot, allBaseFilePaths.get(allBaseFilePaths.size() - 1));
+      ValidationTestHelper.validateOneSnapshot(
+          oneSnapshot, allBaseFilePaths.get(allBaseFilePaths.size() - 1));
       // Get changes in Incremental format.
       InstantsForIncrementalSync instantsForIncrementalSync =
           InstantsForIncrementalSync.builder()
@@ -402,13 +406,14 @@ public class ITHudiSourceClient {
         TableChange tableChange = hudiClient.getTableChangeForCommit(instant);
         allTableChanges.add(tableChange);
       }
-      validateTableChanges(allBaseFilePaths, allTableChanges);
+      ValidationTestHelper.validateTableChanges(allBaseFilePaths, allTableChanges);
     }
   }
 
   @ParameterizedTest
   @MethodSource("testsForAllTableTypesAndPartitions")
-  public void testsForSavepointRestore(HoodieTableType tableType, PartitionConfig partitionConfig) {
+  public void testsForSavepointRestore(
+      HoodieTableType tableType, HudiTestUtil.PartitionConfig partitionConfig) {
     String tableName = "test_table_" + UUID.randomUUID();
     try (TestJavaHudiTable table =
         TestJavaHudiTable.forStandardSchema(
@@ -443,7 +448,8 @@ public class ITHudiSourceClient {
               CONFIGURATION, table.getBasePath(), partitionConfig.getOneTableConfig());
       // Get the current snapshot
       OneSnapshot oneSnapshot = hudiClient.getCurrentSnapshot();
-      validateOneSnapshot(oneSnapshot, allBaseFilePaths.get(allBaseFilePaths.size() - 1));
+      ValidationTestHelper.validateOneSnapshot(
+          oneSnapshot, allBaseFilePaths.get(allBaseFilePaths.size() - 1));
       // Get changes in Incremental format.
       InstantsForIncrementalSync instantsForIncrementalSync =
           InstantsForIncrementalSync.builder()
@@ -461,10 +467,10 @@ public class ITHudiSourceClient {
               i -> {
                 if (i == 1) {
                   // Savepoint: no change
-                  validateTableChange(
+                  ValidationTestHelper.validateTableChange(
                       allBaseFilePaths.get(i), allBaseFilePaths.get(i), allTableChanges.get(i));
                 } else {
-                  validateTableChange(
+                  ValidationTestHelper.validateTableChange(
                       allBaseFilePaths.get(i), allBaseFilePaths.get(i + 1), allTableChanges.get(i));
                 }
               });
@@ -473,7 +479,8 @@ public class ITHudiSourceClient {
 
   @ParameterizedTest
   @MethodSource("testsForAllTableTypesAndPartitions")
-  public void testsForRollbacks(HoodieTableType tableType, PartitionConfig partitionConfig) {
+  public void testsForRollbacks(
+      HoodieTableType tableType, HudiTestUtil.PartitionConfig partitionConfig) {
     String tableName = "test_table_" + UUID.randomUUID();
     try (TestJavaHudiTable table =
         TestJavaHudiTable.forStandardSchema(
@@ -507,7 +514,7 @@ public class ITHudiSourceClient {
               CONFIGURATION, table.getBasePath(), partitionConfig.getOneTableConfig());
       // Get the current snapshot
       OneSnapshot oneSnapshot = hudiClient.getCurrentSnapshot();
-      validateOneSnapshot(oneSnapshot, baseFilesAfterCommit4);
+      ValidationTestHelper.validateOneSnapshot(oneSnapshot, baseFilesAfterCommit4);
       // Get changes in Incremental format.
       InstantsForIncrementalSync instantsForIncrementalSync =
           InstantsForIncrementalSync.builder()
@@ -518,11 +525,14 @@ public class ITHudiSourceClient {
       for (HoodieInstant instant : instantCommitsBacklog.getCommitsToProcess()) {
         TableChange tableChange = hudiClient.getTableChangeForCommit(instant);
         if (commitInstant2.equals(instant.getTimestamp())) {
-          validateTableChange(baseFilesAfterCommit1, baseFilesAfterCommit2, tableChange);
+          ValidationTestHelper.validateTableChange(
+              baseFilesAfterCommit1, baseFilesAfterCommit2, tableChange);
         } else if ("rollback".equals(instant.getAction())) {
-          validateTableChange(baseFilesAfterCommit3, baseFilesAfterRollback, tableChange);
+          ValidationTestHelper.validateTableChange(
+              baseFilesAfterCommit3, baseFilesAfterRollback, tableChange);
         } else if (commitInstant4.equals(instant.getTimestamp())) {
-          validateTableChange(baseFilesAfterRollback, baseFilesAfterCommit4, tableChange);
+          ValidationTestHelper.validateTableChange(
+              baseFilesAfterRollback, baseFilesAfterCommit4, tableChange);
         } else {
           fail("Please add proper asserts here");
         }
@@ -536,9 +546,11 @@ public class ITHudiSourceClient {
   }
 
   private static Stream<Arguments> testsForAllTableTypesAndPartitions() {
-    PartitionConfig unPartitionedConfig = PartitionConfig.of(null, null);
-    PartitionConfig partitionedConfig = PartitionConfig.of("level:SIMPLE", "level:VALUE");
-    List<PartitionConfig> partitionConfigs = Arrays.asList(unPartitionedConfig, partitionedConfig);
+    HudiTestUtil.PartitionConfig unPartitionedConfig = HudiTestUtil.PartitionConfig.of(null, null);
+    HudiTestUtil.PartitionConfig partitionedConfig =
+        HudiTestUtil.PartitionConfig.of("level:SIMPLE", "level:VALUE");
+    List<HudiTestUtil.PartitionConfig> partitionConfigs =
+        Arrays.asList(unPartitionedConfig, partitionedConfig);
     List<HoodieTableType> tableTypes =
         Arrays.asList(HoodieTableType.COPY_ON_WRITE, HoodieTableType.MERGE_ON_READ);
 
diff --git a/core/src/test/java/io/onetable/hudi/ITHudiTargetClient.java b/core/src/test/java/org/apache/xtable/hudi/ITHudiTargetClient.java
similarity index 95%
rename from core/src/test/java/io/onetable/hudi/ITHudiTargetClient.java
rename to core/src/test/java/org/apache/xtable/hudi/ITHudiTargetClient.java
index e3706768..0cf012a2 100644
--- a/core/src/test/java/io/onetable/hudi/ITHudiTargetClient.java
+++ b/core/src/test/java/org/apache/xtable/hudi/ITHudiTargetClient.java
@@ -16,12 +16,12 @@
  * limitations under the License.
  */
  
-package io.onetable.hudi;
+package org.apache.xtable.hudi;
 
-import static io.onetable.hudi.HudiTestUtil.SCHEMA_VERSION;
-import static io.onetable.hudi.HudiTestUtil.createWriteStatus;
-import static io.onetable.hudi.HudiTestUtil.getHoodieWriteConfig;
-import static io.onetable.hudi.HudiTestUtil.initTableAndGetMetaClient;
+import static org.apache.xtable.hudi.HudiTestUtil.SCHEMA_VERSION;
+import static org.apache.xtable.hudi.HudiTestUtil.createWriteStatus;
+import static org.apache.xtable.hudi.HudiTestUtil.getHoodieWriteConfig;
+import static org.apache.xtable.hudi.HudiTestUtil.initTableAndGetMetaClient;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
 import java.nio.file.Path;
@@ -70,24 +70,24 @@ import org.apache.hudi.config.HoodieWriteConfig;
 import org.apache.hudi.metadata.HoodieBackedTableMetadata;
 import org.apache.hudi.metadata.HoodieMetadataFileSystemView;
 
-import io.onetable.client.PerTableConfigImpl;
-import io.onetable.model.OneTable;
-import io.onetable.model.OneTableMetadata;
-import io.onetable.model.schema.OneField;
-import io.onetable.model.schema.OnePartitionField;
-import io.onetable.model.schema.OneSchema;
-import io.onetable.model.schema.OneType;
-import io.onetable.model.schema.PartitionTransformType;
-import io.onetable.model.stat.ColumnStat;
-import io.onetable.model.stat.PartitionValue;
-import io.onetable.model.stat.Range;
-import io.onetable.model.storage.DataLayoutStrategy;
-import io.onetable.model.storage.FileFormat;
-import io.onetable.model.storage.OneDataFile;
-import io.onetable.model.storage.OneDataFilesDiff;
-import io.onetable.model.storage.OneFileGroup;
-import io.onetable.model.storage.TableFormat;
-import io.onetable.spi.sync.TargetClient;
+import org.apache.xtable.client.PerTableConfigImpl;
+import org.apache.xtable.model.OneTable;
+import org.apache.xtable.model.OneTableMetadata;
+import org.apache.xtable.model.schema.OneField;
+import org.apache.xtable.model.schema.OnePartitionField;
+import org.apache.xtable.model.schema.OneSchema;
+import org.apache.xtable.model.schema.OneType;
+import org.apache.xtable.model.schema.PartitionTransformType;
+import org.apache.xtable.model.stat.ColumnStat;
+import org.apache.xtable.model.stat.PartitionValue;
+import org.apache.xtable.model.stat.Range;
+import org.apache.xtable.model.storage.DataLayoutStrategy;
+import org.apache.xtable.model.storage.FileFormat;
+import org.apache.xtable.model.storage.OneDataFile;
+import org.apache.xtable.model.storage.OneDataFilesDiff;
+import org.apache.xtable.model.storage.OneFileGroup;
+import org.apache.xtable.model.storage.TableFormat;
+import org.apache.xtable.spi.sync.TargetClient;
 
 /**
  * A suite of functional tests that assert that the metadata for the hudi table is properly written
diff --git a/core/src/test/java/io/onetable/hudi/TestBaseFileUpdatesExtractor.java b/core/src/test/java/org/apache/xtable/hudi/TestBaseFileUpdatesExtractor.java
similarity index 94%
rename from core/src/test/java/io/onetable/hudi/TestBaseFileUpdatesExtractor.java
rename to core/src/test/java/org/apache/xtable/hudi/TestBaseFileUpdatesExtractor.java
index 4075f912..f183d418 100644
--- a/core/src/test/java/io/onetable/hudi/TestBaseFileUpdatesExtractor.java
+++ b/core/src/test/java/org/apache/xtable/hudi/TestBaseFileUpdatesExtractor.java
@@ -16,13 +16,13 @@
  * limitations under the License.
  */
  
-package io.onetable.hudi;
+package org.apache.xtable.hudi;
 
-import static io.onetable.hudi.HudiTestUtil.SCHEMA_VERSION;
-import static io.onetable.hudi.HudiTestUtil.createWriteStatus;
-import static io.onetable.hudi.HudiTestUtil.getHoodieWriteConfig;
-import static io.onetable.hudi.HudiTestUtil.initTableAndGetMetaClient;
-import static io.onetable.testutil.ColumnStatMapUtil.getColumnStats;
+import static org.apache.xtable.hudi.HudiTestUtil.SCHEMA_VERSION;
+import static org.apache.xtable.hudi.HudiTestUtil.createWriteStatus;
+import static org.apache.xtable.hudi.HudiTestUtil.getHoodieWriteConfig;
+import static org.apache.xtable.hudi.HudiTestUtil.initTableAndGetMetaClient;
+import static org.apache.xtable.testutil.ColumnStatMapUtil.getColumnStats;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
 import java.io.IOException;
@@ -52,18 +52,19 @@ import org.apache.hudi.common.util.Option;
 import org.apache.hudi.config.HoodieWriteConfig;
 import org.apache.hudi.hadoop.CachingPath;
 
-import io.onetable.model.schema.OneField;
-import io.onetable.model.schema.OnePartitionField;
-import io.onetable.model.schema.OneSchema;
-import io.onetable.model.schema.OneType;
-import io.onetable.model.schema.PartitionTransformType;
-import io.onetable.model.stat.ColumnStat;
-import io.onetable.model.stat.PartitionValue;
-import io.onetable.model.stat.Range;
-import io.onetable.model.storage.FileFormat;
-import io.onetable.model.storage.OneDataFile;
-import io.onetable.model.storage.OneDataFilesDiff;
-import io.onetable.model.storage.OneFileGroup;
+import org.apache.xtable.model.schema.OneField;
+import org.apache.xtable.model.schema.OnePartitionField;
+import org.apache.xtable.model.schema.OneSchema;
+import org.apache.xtable.model.schema.OneType;
+import org.apache.xtable.model.schema.PartitionTransformType;
+import org.apache.xtable.model.stat.ColumnStat;
+import org.apache.xtable.model.stat.PartitionValue;
+import org.apache.xtable.model.stat.Range;
+import org.apache.xtable.model.storage.FileFormat;
+import org.apache.xtable.model.storage.OneDataFile;
+import org.apache.xtable.model.storage.OneDataFilesDiff;
+import org.apache.xtable.model.storage.OneFileGroup;
+import org.apache.xtable.testutil.ColumnStatMapUtil;
 
 public class TestBaseFileUpdatesExtractor {
   @TempDir public static java.nio.file.Path tempDir;
@@ -411,8 +412,7 @@ public class TestBaseFileUpdatesExtractor {
    * Get expected col stats for a file.
    *
    * @param fileName name of the file
-   * @return stats matching the column stats in {@link
-   *     io.onetable.testutil.ColumnStatMapUtil#getColumnStats()}
+   * @return stats matching the column stats in {@link ColumnStatMapUtil#getColumnStats()}
    */
   private Map<String, HoodieColumnRangeMetadata<Comparable>> getExpectedColumnStats(
       String fileName) {
diff --git a/core/src/test/java/io/onetable/hudi/TestHudiFileStatsExtractor.java b/core/src/test/java/org/apache/xtable/hudi/TestHudiFileStatsExtractor.java
similarity index 97%
rename from core/src/test/java/io/onetable/hudi/TestHudiFileStatsExtractor.java
rename to core/src/test/java/org/apache/xtable/hudi/TestHudiFileStatsExtractor.java
index d64a0236..994b239d 100644
--- a/core/src/test/java/io/onetable/hudi/TestHudiFileStatsExtractor.java
+++ b/core/src/test/java/org/apache/xtable/hudi/TestHudiFileStatsExtractor.java
@@ -16,9 +16,8 @@
  * limitations under the License.
  */
  
-package io.onetable.hudi;
+package org.apache.xtable.hudi;
 
-import static io.onetable.GenericTable.getTableName;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.mockito.Mockito.mock;
@@ -65,14 +64,15 @@ import org.apache.hudi.common.table.HoodieTableMetaClient;
 import org.apache.hudi.common.util.Option;
 import org.apache.hudi.metadata.HoodieTableMetadata;
 
-import io.onetable.TestJavaHudiTable;
-import io.onetable.model.schema.OneField;
-import io.onetable.model.schema.OneSchema;
-import io.onetable.model.schema.OneType;
-import io.onetable.model.schema.SchemaVersion;
-import io.onetable.model.stat.ColumnStat;
-import io.onetable.model.storage.FileFormat;
-import io.onetable.model.storage.OneDataFile;
+import org.apache.xtable.GenericTable;
+import org.apache.xtable.TestJavaHudiTable;
+import org.apache.xtable.model.schema.OneField;
+import org.apache.xtable.model.schema.OneSchema;
+import org.apache.xtable.model.schema.OneType;
+import org.apache.xtable.model.schema.SchemaVersion;
+import org.apache.xtable.model.stat.ColumnStat;
+import org.apache.xtable.model.storage.FileFormat;
+import org.apache.xtable.model.storage.OneDataFile;
 
 public class TestHudiFileStatsExtractor {
   private static final Schema AVRO_SCHEMA =
@@ -121,7 +121,7 @@ public class TestHudiFileStatsExtractor {
 
   @Test
   void columnStatsWithMetadataTable(@TempDir Path tempDir) throws Exception {
-    String tableName = getTableName();
+    String tableName = GenericTable.getTableName();
     String basePath;
     try (TestJavaHudiTable table =
         TestJavaHudiTable.withSchema(
diff --git a/core/src/test/java/io/onetable/hudi/TestHudiInstantUtils.java b/core/src/test/java/org/apache/xtable/hudi/TestHudiInstantUtils.java
similarity index 98%
rename from core/src/test/java/io/onetable/hudi/TestHudiInstantUtils.java
rename to core/src/test/java/org/apache/xtable/hudi/TestHudiInstantUtils.java
index 59f82ff8..a471c27b 100644
--- a/core/src/test/java/io/onetable/hudi/TestHudiInstantUtils.java
+++ b/core/src/test/java/org/apache/xtable/hudi/TestHudiInstantUtils.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.hudi;
+package org.apache.xtable.hudi;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
diff --git a/core/src/test/java/io/onetable/hudi/TestHudiPartitionValuesExtractor.java b/core/src/test/java/org/apache/xtable/hudi/TestHudiPartitionValuesExtractor.java
similarity index 97%
rename from core/src/test/java/io/onetable/hudi/TestHudiPartitionValuesExtractor.java
rename to core/src/test/java/org/apache/xtable/hudi/TestHudiPartitionValuesExtractor.java
index fcd68295..db0de953 100644
--- a/core/src/test/java/io/onetable/hudi/TestHudiPartitionValuesExtractor.java
+++ b/core/src/test/java/org/apache/xtable/hudi/TestHudiPartitionValuesExtractor.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.hudi;
+package org.apache.xtable.hudi;
 
 import java.time.Instant;
 import java.util.Arrays;
@@ -32,14 +32,14 @@ import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.Arguments;
 import org.junit.jupiter.params.provider.MethodSource;
 
-import io.onetable.exception.PartitionValuesExtractorException;
-import io.onetable.model.schema.OneField;
-import io.onetable.model.schema.OnePartitionField;
-import io.onetable.model.schema.OneSchema;
-import io.onetable.model.schema.OneType;
-import io.onetable.model.schema.PartitionTransformType;
-import io.onetable.model.stat.PartitionValue;
-import io.onetable.model.stat.Range;
+import org.apache.xtable.exception.PartitionValuesExtractorException;
+import org.apache.xtable.model.schema.OneField;
+import org.apache.xtable.model.schema.OnePartitionField;
+import org.apache.xtable.model.schema.OneSchema;
+import org.apache.xtable.model.schema.OneType;
+import org.apache.xtable.model.schema.PartitionTransformType;
+import org.apache.xtable.model.stat.PartitionValue;
+import org.apache.xtable.model.stat.Range;
 
 public class TestHudiPartitionValuesExtractor {
 
diff --git a/core/src/test/java/io/onetable/hudi/TestHudiSchemaExtractor.java b/core/src/test/java/org/apache/xtable/hudi/TestHudiSchemaExtractor.java
similarity index 92%
rename from core/src/test/java/io/onetable/hudi/TestHudiSchemaExtractor.java
rename to core/src/test/java/org/apache/xtable/hudi/TestHudiSchemaExtractor.java
index ab443145..92ebb2ec 100644
--- a/core/src/test/java/io/onetable/hudi/TestHudiSchemaExtractor.java
+++ b/core/src/test/java/org/apache/xtable/hudi/TestHudiSchemaExtractor.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.hudi;
+package org.apache.xtable.hudi;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.mockito.Mockito.mock;
@@ -27,8 +27,8 @@ import org.apache.avro.Schema;
 import org.apache.avro.SchemaBuilder;
 import org.junit.jupiter.api.Test;
 
-import io.onetable.avro.AvroSchemaConverter;
-import io.onetable.model.schema.OneSchema;
+import org.apache.xtable.avro.AvroSchemaConverter;
+import org.apache.xtable.model.schema.OneSchema;
 
 public class TestHudiSchemaExtractor {
 
diff --git a/core/src/test/java/io/onetable/hudi/TestHudiTableManager.java b/core/src/test/java/org/apache/xtable/hudi/TestHudiTableManager.java
similarity index 95%
rename from core/src/test/java/io/onetable/hudi/TestHudiTableManager.java
rename to core/src/test/java/org/apache/xtable/hudi/TestHudiTableManager.java
index 3ad8fd02..19e20c88 100644
--- a/core/src/test/java/io/onetable/hudi/TestHudiTableManager.java
+++ b/core/src/test/java/org/apache/xtable/hudi/TestHudiTableManager.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.hudi;
+package org.apache.xtable.hudi;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
@@ -38,13 +38,13 @@ import org.junit.jupiter.params.provider.MethodSource;
 
 import org.apache.hudi.common.table.HoodieTableMetaClient;
 
-import io.onetable.model.OneTable;
-import io.onetable.model.schema.OneField;
-import io.onetable.model.schema.OnePartitionField;
-import io.onetable.model.schema.OneSchema;
-import io.onetable.model.schema.PartitionTransformType;
-import io.onetable.model.storage.DataLayoutStrategy;
-import io.onetable.model.storage.TableFormat;
+import org.apache.xtable.model.OneTable;
+import org.apache.xtable.model.schema.OneField;
+import org.apache.xtable.model.schema.OnePartitionField;
+import org.apache.xtable.model.schema.OneSchema;
+import org.apache.xtable.model.schema.PartitionTransformType;
+import org.apache.xtable.model.storage.DataLayoutStrategy;
+import org.apache.xtable.model.storage.TableFormat;
 
 public class TestHudiTableManager {
 
diff --git a/core/src/test/java/io/onetable/hudi/TestHudiTargetClient.java b/core/src/test/java/org/apache/xtable/hudi/TestHudiTargetClient.java
similarity index 94%
rename from core/src/test/java/io/onetable/hudi/TestHudiTargetClient.java
rename to core/src/test/java/org/apache/xtable/hudi/TestHudiTargetClient.java
index 964c581d..2c132ead 100644
--- a/core/src/test/java/io/onetable/hudi/TestHudiTargetClient.java
+++ b/core/src/test/java/org/apache/xtable/hudi/TestHudiTargetClient.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.hudi;
+package org.apache.xtable.hudi;
 
 import static org.junit.jupiter.api.Assertions.*;
 import static org.mockito.Mockito.mock;
@@ -40,17 +40,17 @@ import org.apache.hudi.common.table.HoodieTableConfig;
 import org.apache.hudi.common.table.HoodieTableMetaClient;
 import org.apache.hudi.common.util.Option;
 
-import io.onetable.avro.AvroSchemaConverter;
-import io.onetable.exception.NotSupportedException;
-import io.onetable.model.OneTable;
-import io.onetable.model.OneTableMetadata;
-import io.onetable.model.schema.OneField;
-import io.onetable.model.schema.OnePartitionField;
-import io.onetable.model.schema.OneSchema;
-import io.onetable.model.schema.OneType;
-import io.onetable.model.schema.PartitionTransformType;
-import io.onetable.model.storage.OneDataFilesDiff;
-import io.onetable.model.storage.OneFileGroup;
+import org.apache.xtable.avro.AvroSchemaConverter;
+import org.apache.xtable.exception.NotSupportedException;
+import org.apache.xtable.model.OneTable;
+import org.apache.xtable.model.OneTableMetadata;
+import org.apache.xtable.model.schema.OneField;
+import org.apache.xtable.model.schema.OnePartitionField;
+import org.apache.xtable.model.schema.OneSchema;
+import org.apache.xtable.model.schema.OneType;
+import org.apache.xtable.model.schema.PartitionTransformType;
+import org.apache.xtable.model.storage.OneDataFilesDiff;
+import org.apache.xtable.model.storage.OneFileGroup;
 
 /**
  * Unit tests that focus on the basic control flow of the HudiTargetClient. Functional tests are in
diff --git a/core/src/test/java/io/onetable/iceberg/ITIcebergSourceClient.java b/core/src/test/java/org/apache/xtable/iceberg/ITIcebergSourceClient.java
similarity index 95%
rename from core/src/test/java/io/onetable/iceberg/ITIcebergSourceClient.java
rename to core/src/test/java/org/apache/xtable/iceberg/ITIcebergSourceClient.java
index 2e6c83ff..ec19baec 100644
--- a/core/src/test/java/io/onetable/iceberg/ITIcebergSourceClient.java
+++ b/core/src/test/java/org/apache/xtable/iceberg/ITIcebergSourceClient.java
@@ -16,11 +16,11 @@
  * limitations under the License.
  */
  
-package io.onetable.iceberg;
+package org.apache.xtable.iceberg;
 
-import static io.onetable.GenericTable.getTableName;
-import static io.onetable.ValidationTestHelper.validateOneSnapshot;
-import static io.onetable.ValidationTestHelper.validateTableChanges;
+import static org.apache.xtable.GenericTable.getTableName;
+import static org.apache.xtable.ValidationTestHelper.validateOneSnapshot;
+import static org.apache.xtable.ValidationTestHelper.validateTableChanges;
 import static org.junit.jupiter.api.Assertions.*;
 
 import java.nio.file.Path;
@@ -43,16 +43,16 @@ import org.junit.jupiter.params.provider.ValueSource;
 import org.apache.iceberg.Snapshot;
 import org.apache.iceberg.data.Record;
 
-import io.onetable.TestIcebergTable;
-import io.onetable.client.PerTableConfig;
-import io.onetable.client.PerTableConfigImpl;
-import io.onetable.model.CommitsBacklog;
-import io.onetable.model.InstantsForIncrementalSync;
-import io.onetable.model.OneSnapshot;
-import io.onetable.model.TableChange;
-import io.onetable.model.schema.OnePartitionField;
-import io.onetable.model.schema.PartitionTransformType;
-import io.onetable.model.storage.TableFormat;
+import org.apache.xtable.TestIcebergTable;
+import org.apache.xtable.client.PerTableConfig;
+import org.apache.xtable.client.PerTableConfigImpl;
+import org.apache.xtable.model.CommitsBacklog;
+import org.apache.xtable.model.InstantsForIncrementalSync;
+import org.apache.xtable.model.OneSnapshot;
+import org.apache.xtable.model.TableChange;
+import org.apache.xtable.model.schema.OnePartitionField;
+import org.apache.xtable.model.schema.PartitionTransformType;
+import org.apache.xtable.model.storage.TableFormat;
 
 public class ITIcebergSourceClient {
   private static final Configuration hadoopConf = new Configuration();
diff --git a/core/src/test/java/io/onetable/iceberg/IcebergTestUtils.java b/core/src/test/java/org/apache/xtable/iceberg/IcebergTestUtils.java
similarity index 98%
rename from core/src/test/java/io/onetable/iceberg/IcebergTestUtils.java
rename to core/src/test/java/org/apache/xtable/iceberg/IcebergTestUtils.java
index 84a9525c..04ffa8a9 100644
--- a/core/src/test/java/io/onetable/iceberg/IcebergTestUtils.java
+++ b/core/src/test/java/org/apache/xtable/iceberg/IcebergTestUtils.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.iceberg;
+package org.apache.xtable.iceberg;
 
 import org.apache.iceberg.Schema;
 import org.apache.iceberg.types.Types;
diff --git a/core/src/test/java/io/onetable/iceberg/StubCatalog.java b/core/src/test/java/org/apache/xtable/iceberg/StubCatalog.java
similarity index 98%
rename from core/src/test/java/io/onetable/iceberg/StubCatalog.java
rename to core/src/test/java/org/apache/xtable/iceberg/StubCatalog.java
index 740888cf..a25063c4 100644
--- a/core/src/test/java/io/onetable/iceberg/StubCatalog.java
+++ b/core/src/test/java/org/apache/xtable/iceberg/StubCatalog.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.iceberg;
+package org.apache.xtable.iceberg;
 
 import java.util.HashMap;
 import java.util.List;
diff --git a/core/src/test/java/io/onetable/iceberg/TestIcebergColumnStatsConverter.java b/core/src/test/java/org/apache/xtable/iceberg/TestIcebergColumnStatsConverter.java
similarity index 98%
rename from core/src/test/java/io/onetable/iceberg/TestIcebergColumnStatsConverter.java
rename to core/src/test/java/org/apache/xtable/iceberg/TestIcebergColumnStatsConverter.java
index 56c0840e..72991d29 100644
--- a/core/src/test/java/io/onetable/iceberg/TestIcebergColumnStatsConverter.java
+++ b/core/src/test/java/org/apache/xtable/iceberg/TestIcebergColumnStatsConverter.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.iceberg;
+package org.apache.xtable.iceberg;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
@@ -39,11 +39,11 @@ import org.apache.iceberg.Schema;
 import org.apache.iceberg.types.Conversions;
 import org.apache.iceberg.types.Types;
 
-import io.onetable.model.schema.OneField;
-import io.onetable.model.schema.OneSchema;
-import io.onetable.model.schema.OneType;
-import io.onetable.model.stat.ColumnStat;
-import io.onetable.model.stat.Range;
+import org.apache.xtable.model.schema.OneField;
+import org.apache.xtable.model.schema.OneSchema;
+import org.apache.xtable.model.schema.OneType;
+import org.apache.xtable.model.stat.ColumnStat;
+import org.apache.xtable.model.stat.Range;
 
 public class TestIcebergColumnStatsConverter {
   private static final CharsetEncoder ENCODER = StandardCharsets.UTF_8.newEncoder();
diff --git a/core/src/test/java/io/onetable/iceberg/TestIcebergDataHelper.java b/core/src/test/java/org/apache/xtable/iceberg/TestIcebergDataHelper.java
similarity index 99%
rename from core/src/test/java/io/onetable/iceberg/TestIcebergDataHelper.java
rename to core/src/test/java/org/apache/xtable/iceberg/TestIcebergDataHelper.java
index f2ad0c61..cf806fd6 100644
--- a/core/src/test/java/io/onetable/iceberg/TestIcebergDataHelper.java
+++ b/core/src/test/java/org/apache/xtable/iceberg/TestIcebergDataHelper.java
@@ -16,9 +16,9 @@
  * limitations under the License.
  */
  
-package io.onetable.iceberg;
+package org.apache.xtable.iceberg;
 
-import static io.onetable.GenericTable.LEVEL_VALUES;
+import static org.apache.xtable.GenericTable.LEVEL_VALUES;
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
diff --git a/core/src/test/java/io/onetable/iceberg/TestIcebergPartitionSpecExtractor.java b/core/src/test/java/org/apache/xtable/iceberg/TestIcebergPartitionSpecExtractor.java
similarity index 97%
rename from core/src/test/java/io/onetable/iceberg/TestIcebergPartitionSpecExtractor.java
rename to core/src/test/java/org/apache/xtable/iceberg/TestIcebergPartitionSpecExtractor.java
index e6d13c43..d3420363 100644
--- a/core/src/test/java/io/onetable/iceberg/TestIcebergPartitionSpecExtractor.java
+++ b/core/src/test/java/org/apache/xtable/iceberg/TestIcebergPartitionSpecExtractor.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.iceberg;
+package org.apache.xtable.iceberg;
 
 import java.util.Arrays;
 import java.util.Collections;
@@ -30,12 +30,12 @@ import org.apache.iceberg.Schema;
 import org.apache.iceberg.transforms.Transforms;
 import org.apache.iceberg.types.Types;
 
-import io.onetable.exception.NotSupportedException;
-import io.onetable.model.schema.OneField;
-import io.onetable.model.schema.OnePartitionField;
-import io.onetable.model.schema.OneSchema;
-import io.onetable.model.schema.OneType;
-import io.onetable.model.schema.PartitionTransformType;
+import org.apache.xtable.exception.NotSupportedException;
+import org.apache.xtable.model.schema.OneField;
+import org.apache.xtable.model.schema.OnePartitionField;
+import org.apache.xtable.model.schema.OneSchema;
+import org.apache.xtable.model.schema.OneType;
+import org.apache.xtable.model.schema.PartitionTransformType;
 
 public class TestIcebergPartitionSpecExtractor {
   // TODO assert error cases and add wrap errors in Onetable exceptions
diff --git a/core/src/test/java/io/onetable/iceberg/TestIcebergPartitionSpecSync.java b/core/src/test/java/org/apache/xtable/iceberg/TestIcebergPartitionSpecSync.java
similarity index 99%
rename from core/src/test/java/io/onetable/iceberg/TestIcebergPartitionSpecSync.java
rename to core/src/test/java/org/apache/xtable/iceberg/TestIcebergPartitionSpecSync.java
index 537a87ad..0212798c 100644
--- a/core/src/test/java/io/onetable/iceberg/TestIcebergPartitionSpecSync.java
+++ b/core/src/test/java/org/apache/xtable/iceberg/TestIcebergPartitionSpecSync.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.iceberg;
+package org.apache.xtable.iceberg;
 
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyString;
diff --git a/core/src/test/java/io/onetable/iceberg/TestIcebergPartitionValueConverter.java b/core/src/test/java/org/apache/xtable/iceberg/TestIcebergPartitionValueConverter.java
similarity index 94%
rename from core/src/test/java/io/onetable/iceberg/TestIcebergPartitionValueConverter.java
rename to core/src/test/java/org/apache/xtable/iceberg/TestIcebergPartitionValueConverter.java
index 7a3c8848..3d0f39d2 100644
--- a/core/src/test/java/io/onetable/iceberg/TestIcebergPartitionValueConverter.java
+++ b/core/src/test/java/org/apache/xtable/iceberg/TestIcebergPartitionValueConverter.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.iceberg;
+package org.apache.xtable.iceberg;
 
 import static org.junit.jupiter.api.Assertions.*;
 
@@ -32,13 +32,13 @@ import org.apache.iceberg.StructLike;
 import org.apache.iceberg.avro.AvroSchemaUtil;
 import org.apache.iceberg.types.Types;
 
-import io.onetable.model.OneTable;
-import io.onetable.model.schema.OneField;
-import io.onetable.model.schema.OnePartitionField;
-import io.onetable.model.schema.OneSchema;
-import io.onetable.model.schema.PartitionTransformType;
-import io.onetable.model.stat.PartitionValue;
-import io.onetable.model.stat.Range;
+import org.apache.xtable.model.OneTable;
+import org.apache.xtable.model.schema.OneField;
+import org.apache.xtable.model.schema.OnePartitionField;
+import org.apache.xtable.model.schema.OneSchema;
+import org.apache.xtable.model.schema.PartitionTransformType;
+import org.apache.xtable.model.stat.PartitionValue;
+import org.apache.xtable.model.stat.Range;
 
 public class TestIcebergPartitionValueConverter {
   private IcebergPartitionValueConverter partitionValueConverter =
diff --git a/core/src/test/java/io/onetable/iceberg/TestIcebergSchemaExtractor.java b/core/src/test/java/org/apache/xtable/iceberg/TestIcebergSchemaExtractor.java
similarity index 99%
rename from core/src/test/java/io/onetable/iceberg/TestIcebergSchemaExtractor.java
rename to core/src/test/java/org/apache/xtable/iceberg/TestIcebergSchemaExtractor.java
index bbd57ae5..83a6dab7 100644
--- a/core/src/test/java/io/onetable/iceberg/TestIcebergSchemaExtractor.java
+++ b/core/src/test/java/org/apache/xtable/iceberg/TestIcebergSchemaExtractor.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.iceberg;
+package org.apache.xtable.iceberg;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -29,9 +29,9 @@ import org.junit.jupiter.api.Test;
 import org.apache.iceberg.Schema;
 import org.apache.iceberg.types.Types;
 
-import io.onetable.model.schema.OneField;
-import io.onetable.model.schema.OneSchema;
-import io.onetable.model.schema.OneType;
+import org.apache.xtable.model.schema.OneField;
+import org.apache.xtable.model.schema.OneSchema;
+import org.apache.xtable.model.schema.OneType;
 
 public class TestIcebergSchemaExtractor {
 
diff --git a/core/src/test/java/io/onetable/iceberg/TestIcebergSchemaSync.java b/core/src/test/java/org/apache/xtable/iceberg/TestIcebergSchemaSync.java
similarity index 99%
rename from core/src/test/java/io/onetable/iceberg/TestIcebergSchemaSync.java
rename to core/src/test/java/org/apache/xtable/iceberg/TestIcebergSchemaSync.java
index fb9adb51..347eb309 100644
--- a/core/src/test/java/io/onetable/iceberg/TestIcebergSchemaSync.java
+++ b/core/src/test/java/org/apache/xtable/iceberg/TestIcebergSchemaSync.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.iceberg;
+package org.apache.xtable.iceberg;
 
 import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.verify;
@@ -37,7 +37,7 @@ import org.apache.iceberg.UpdateSchema;
 import org.apache.iceberg.types.Type;
 import org.apache.iceberg.types.Types;
 
-import io.onetable.exception.NotSupportedException;
+import org.apache.xtable.exception.NotSupportedException;
 
 public class TestIcebergSchemaSync {
 
diff --git a/core/src/test/java/io/onetable/iceberg/TestIcebergSourceClient.java b/core/src/test/java/org/apache/xtable/iceberg/TestIcebergSourceClient.java
similarity index 94%
rename from core/src/test/java/io/onetable/iceberg/TestIcebergSourceClient.java
rename to core/src/test/java/org/apache/xtable/iceberg/TestIcebergSourceClient.java
index fa164a58..9d799884 100644
--- a/core/src/test/java/io/onetable/iceberg/TestIcebergSourceClient.java
+++ b/core/src/test/java/org/apache/xtable/iceberg/TestIcebergSourceClient.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.iceberg;
+package org.apache.xtable.iceberg;
 
 import static org.junit.jupiter.api.Assertions.*;
 import static org.mockito.Mockito.*;
@@ -35,6 +35,7 @@ import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.io.TempDir;
+import org.mockito.Mockito;
 
 import org.apache.iceberg.*;
 import org.apache.iceberg.data.GenericRecord;
@@ -45,16 +46,24 @@ import org.apache.iceberg.io.DataWriter;
 import org.apache.iceberg.parquet.Parquet;
 import org.apache.iceberg.types.Types;
 
-import io.onetable.client.PerTableConfig;
-import io.onetable.client.PerTableConfigImpl;
-import io.onetable.model.*;
-import io.onetable.model.schema.*;
-import io.onetable.model.stat.PartitionValue;
-import io.onetable.model.storage.DataLayoutStrategy;
-import io.onetable.model.storage.FileFormat;
-import io.onetable.model.storage.OneDataFile;
-import io.onetable.model.storage.OneFileGroup;
-import io.onetable.model.storage.TableFormat;
+import org.apache.xtable.client.PerTableConfig;
+import org.apache.xtable.client.PerTableConfigImpl;
+import org.apache.xtable.model.CommitsBacklog;
+import org.apache.xtable.model.InstantsForIncrementalSync;
+import org.apache.xtable.model.OneSnapshot;
+import org.apache.xtable.model.OneTable;
+import org.apache.xtable.model.TableChange;
+import org.apache.xtable.model.schema.OneField;
+import org.apache.xtable.model.schema.OneSchema;
+import org.apache.xtable.model.schema.PartitionTransformType;
+import org.apache.xtable.model.schema.SchemaCatalog;
+import org.apache.xtable.model.schema.SchemaVersion;
+import org.apache.xtable.model.stat.PartitionValue;
+import org.apache.xtable.model.storage.DataLayoutStrategy;
+import org.apache.xtable.model.storage.FileFormat;
+import org.apache.xtable.model.storage.OneDataFile;
+import org.apache.xtable.model.storage.OneFileGroup;
+import org.apache.xtable.model.storage.TableFormat;
 
 class TestIcebergSourceClient {
 
@@ -98,7 +107,7 @@ class TestIcebergSourceClient {
     assertEquals(snapshot.timestampMillis(), oneTable.getLatestCommitTime().toEpochMilli());
     Assertions.assertNotNull(oneTable.getReadSchema());
 
-    assertEquals(7, oneTable.getReadSchema().getFields().size());
+    Assertions.assertEquals(7, oneTable.getReadSchema().getFields().size());
     validateSchema(oneTable.getReadSchema(), catalogSales.schema());
 
     assertEquals(1, oneTable.getPartitioningFields().size());
@@ -122,7 +131,7 @@ class TestIcebergSourceClient {
     PerTableConfig sourceTableConfig = getPerTableConfig(catalogSales);
 
     IcebergSourceClient client = clientProvider.getSourceClientInstance(sourceTableConfig);
-    IcebergSourceClient spyClient = spy(client);
+    IcebergSourceClient spyClient = Mockito.spy(client);
 
     SchemaCatalog schemaCatalog = spyClient.getSchemaCatalog(null, iceCurrentSnapshot);
     Assertions.assertNotNull(schemaCatalog);
diff --git a/core/src/test/java/io/onetable/iceberg/TestIcebergSync.java b/core/src/test/java/org/apache/xtable/iceberg/TestIcebergSync.java
similarity index 96%
rename from core/src/test/java/io/onetable/iceberg/TestIcebergSync.java
rename to core/src/test/java/org/apache/xtable/iceberg/TestIcebergSync.java
index e442e764..3cc9dd95 100644
--- a/core/src/test/java/io/onetable/iceberg/TestIcebergSync.java
+++ b/core/src/test/java/org/apache/xtable/iceberg/TestIcebergSync.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.iceberg;
+package org.apache.xtable.iceberg;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
@@ -81,27 +81,27 @@ import org.apache.iceberg.types.Types;
 import com.google.common.collect.Iterables;
 import com.google.common.collect.Sets;
 
-import io.onetable.ITOneTableClient;
-import io.onetable.client.PerTableConfigImpl;
-import io.onetable.model.OneSnapshot;
-import io.onetable.model.OneTable;
-import io.onetable.model.OneTableMetadata;
-import io.onetable.model.schema.OneField;
-import io.onetable.model.schema.OnePartitionField;
-import io.onetable.model.schema.OneSchema;
-import io.onetable.model.schema.OneType;
-import io.onetable.model.schema.PartitionTransformType;
-import io.onetable.model.schema.SchemaCatalog;
-import io.onetable.model.schema.SchemaVersion;
-import io.onetable.model.stat.PartitionValue;
-import io.onetable.model.stat.Range;
-import io.onetable.model.storage.DataLayoutStrategy;
-import io.onetable.model.storage.FileFormat;
-import io.onetable.model.storage.OneDataFile;
-import io.onetable.model.storage.OneFileGroup;
-import io.onetable.model.storage.TableFormat;
-import io.onetable.schema.SchemaFieldFinder;
-import io.onetable.spi.sync.TableFormatSync;
+import org.apache.xtable.ITOneTableClient;
+import org.apache.xtable.client.PerTableConfigImpl;
+import org.apache.xtable.model.OneSnapshot;
+import org.apache.xtable.model.OneTable;
+import org.apache.xtable.model.OneTableMetadata;
+import org.apache.xtable.model.schema.OneField;
+import org.apache.xtable.model.schema.OnePartitionField;
+import org.apache.xtable.model.schema.OneSchema;
+import org.apache.xtable.model.schema.OneType;
+import org.apache.xtable.model.schema.PartitionTransformType;
+import org.apache.xtable.model.schema.SchemaCatalog;
+import org.apache.xtable.model.schema.SchemaVersion;
+import org.apache.xtable.model.stat.PartitionValue;
+import org.apache.xtable.model.stat.Range;
+import org.apache.xtable.model.storage.DataLayoutStrategy;
+import org.apache.xtable.model.storage.FileFormat;
+import org.apache.xtable.model.storage.OneDataFile;
+import org.apache.xtable.model.storage.OneFileGroup;
+import org.apache.xtable.model.storage.TableFormat;
+import org.apache.xtable.schema.SchemaFieldFinder;
+import org.apache.xtable.spi.sync.TableFormatSync;
 
 /**
  * Validates that the metadata for the table is properly created/updated. {@link ITOneTableClient}
diff --git a/core/src/test/java/io/onetable/iceberg/TestIcebergTableManager.java b/core/src/test/java/org/apache/xtable/iceberg/TestIcebergTableManager.java
similarity index 99%
rename from core/src/test/java/io/onetable/iceberg/TestIcebergTableManager.java
rename to core/src/test/java/org/apache/xtable/iceberg/TestIcebergTableManager.java
index ba16e759..f81f1336 100644
--- a/core/src/test/java/io/onetable/iceberg/TestIcebergTableManager.java
+++ b/core/src/test/java/org/apache/xtable/iceberg/TestIcebergTableManager.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.iceberg;
+package org.apache.xtable.iceberg;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.mockito.ArgumentMatchers.any;
diff --git a/core/src/test/java/io/onetable/loadtest/LoadTest.java b/core/src/test/java/org/apache/xtable/loadtest/LoadTest.java
similarity index 91%
rename from core/src/test/java/io/onetable/loadtest/LoadTest.java
rename to core/src/test/java/org/apache/xtable/loadtest/LoadTest.java
index 4a392ce4..a5020fff 100644
--- a/core/src/test/java/io/onetable/loadtest/LoadTest.java
+++ b/core/src/test/java/org/apache/xtable/loadtest/LoadTest.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.loadtest;
+package org.apache.xtable.loadtest;
 
 import java.nio.file.Path;
 import java.util.Arrays;
@@ -34,14 +34,14 @@ import org.apache.hudi.common.model.HoodieTableType;
 import org.apache.hudi.common.table.timeline.HoodieInstant;
 import org.apache.hudi.config.HoodieArchivalConfig;
 
-import io.onetable.TestJavaHudiTable;
-import io.onetable.client.OneTableClient;
-import io.onetable.client.PerTableConfig;
-import io.onetable.client.PerTableConfigImpl;
-import io.onetable.client.SourceClientProvider;
-import io.onetable.hudi.HudiSourceClientProvider;
-import io.onetable.model.storage.TableFormat;
-import io.onetable.model.sync.SyncMode;
+import org.apache.xtable.TestJavaHudiTable;
+import org.apache.xtable.client.OneTableClient;
+import org.apache.xtable.client.PerTableConfig;
+import org.apache.xtable.client.PerTableConfigImpl;
+import org.apache.xtable.client.SourceClientProvider;
+import org.apache.xtable.hudi.HudiSourceClientProvider;
+import org.apache.xtable.model.storage.TableFormat;
+import org.apache.xtable.model.sync.SyncMode;
 
 /**
  * Tests that can be run manually to simulate lots of commits/partitions/files/etc. to understand
diff --git a/core/src/test/java/io/onetable/paths/TestPathUtils.java b/core/src/test/java/org/apache/xtable/paths/TestPathUtils.java
similarity index 98%
rename from core/src/test/java/io/onetable/paths/TestPathUtils.java
rename to core/src/test/java/org/apache/xtable/paths/TestPathUtils.java
index 5c3707ef..7dc23af9 100644
--- a/core/src/test/java/io/onetable/paths/TestPathUtils.java
+++ b/core/src/test/java/org/apache/xtable/paths/TestPathUtils.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.paths;
+package org.apache.xtable.paths;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
diff --git a/core/src/test/java/io/onetable/testutil/ColumnStatMapUtil.java b/core/src/test/java/org/apache/xtable/testutil/ColumnStatMapUtil.java
similarity index 97%
rename from core/src/test/java/io/onetable/testutil/ColumnStatMapUtil.java
rename to core/src/test/java/org/apache/xtable/testutil/ColumnStatMapUtil.java
index 8d8599ab..4c3d6c81 100644
--- a/core/src/test/java/io/onetable/testutil/ColumnStatMapUtil.java
+++ b/core/src/test/java/org/apache/xtable/testutil/ColumnStatMapUtil.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.testutil;
+package org.apache.xtable.testutil;
 
 import java.math.BigDecimal;
 import java.util.Arrays;
@@ -26,11 +26,11 @@ import java.util.List;
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
 
-import io.onetable.model.schema.OneField;
-import io.onetable.model.schema.OneSchema;
-import io.onetable.model.schema.OneType;
-import io.onetable.model.stat.ColumnStat;
-import io.onetable.model.stat.Range;
+import org.apache.xtable.model.schema.OneField;
+import org.apache.xtable.model.schema.OneSchema;
+import org.apache.xtable.model.schema.OneType;
+import org.apache.xtable.model.stat.ColumnStat;
+import org.apache.xtable.model.stat.Range;
 
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
 public class ColumnStatMapUtil {
diff --git a/core/src/test/java/io/onetable/testutil/Issues.java b/core/src/test/java/org/apache/xtable/testutil/Issues.java
similarity index 96%
rename from core/src/test/java/io/onetable/testutil/Issues.java
rename to core/src/test/java/org/apache/xtable/testutil/Issues.java
index 490ddd98..27608a90 100644
--- a/core/src/test/java/io/onetable/testutil/Issues.java
+++ b/core/src/test/java/org/apache/xtable/testutil/Issues.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.testutil;
+package org.apache.xtable.testutil;
 
 public class Issues {
 
diff --git a/core/src/test/resources/log4j2.xml b/core/src/test/resources/log4j2.xml
index da1ebeea..512a5555 100644
--- a/core/src/test/resources/log4j2.xml
+++ b/core/src/test/resources/log4j2.xml
@@ -14,7 +14,7 @@
         <Root level="warn" additivity="false">
             <AppenderRef ref="console" />
         </Root>
-        <Logger name="io.onetable" level="info" additivity="false">
+        <Logger name="org.apache.xtable" level="info" additivity="false">
             <AppenderRef ref="console"/>
         </Logger>
     </Loggers>
diff --git a/demo/notebook/demo.ipynb b/demo/notebook/demo.ipynb
index 273fc3b8..f7379365 100644
--- a/demo/notebook/demo.ipynb
+++ b/demo/notebook/demo.ipynb
@@ -27,17 +27,17 @@
     "import $ivy.`org.apache.hudi:hudi-spark3.2-bundle_2.12:0.14.0`\n",
     "import $ivy.`org.apache.hudi:hudi-java-client:0.14.0`\n",
     "import $ivy.`io.delta:delta-core_2.12:2.0.2`\n",
-    "import $cp.`/home/jars/onetable-core-0.1.0-SNAPSHOT.jar`\n",
-    "import $cp.`/home/jars/onetable-api-0.1.0-SNAPSHOT.jar`\n",
+    "import $cp.`/home/jars/xtable-core-0.1.0-SNAPSHOT.jar`\n",
+    "import $cp.`/home/jars/xtable-api-0.1.0-SNAPSHOT.jar`\n",
     "import $cp.`/home/jars/hudi-utils-0.1.0-SNAPSHOT.jar`\n",
     "import $ivy.`org.apache.iceberg:iceberg-hive-runtime:1.3.1`\n",
     "import $ivy.`io.trino:trino-jdbc:431`\n",
     "import java.util._\n",
-    "import io.onetable.client._\n",
-    "import io.onetable.model.sync._\n",
-    "import io.onetable.model.storage._\n",
-    "import io.onetable.hudi._\n",
-    "import io.onetable.iceberg._"
+    "import org.apache.xtable.client._\n",
+    "import org.apache.xtable.model.sync._\n",
+    "import org.apache.xtable.model.storage._\n",
+    "import org.apache.xtable.hudi._\n",
+    "import org.apache.xtable.iceberg._"
    ]
   },
   {
@@ -239,7 +239,7 @@
    "outputs": [],
    "source": [
     "// Sync from a Delta Lake table to Hudi\n",
-    "import io.onetable.delta._\n",
+    "import org.apache.xtable.delta._\n",
     "val deltaSourceClientProvider = new DeltaSourceClientProvider()\n",
     "deltaSourceClientProvider.init(spark.sparkContext.hadoopConfiguration, Collections.emptyMap())\n",
     "val deltaSourcePerTableConfig = PerTableConfigImpl.builder()\n",
diff --git a/demo/start_demo.sh b/demo/start_demo.sh
index 253b405c..62cb7d17 100755
--- a/demo/start_demo.sh
+++ b/demo/start_demo.sh
@@ -3,8 +3,8 @@
 cd .. && mvn install -am -pl core -DskipTests -T 2
 mkdir -p demo/jars
 cp hudi-support/utils/target/hudi-utils-0.1.0-SNAPSHOT.jar demo/jars
-cp api/target/onetable-api-0.1.0-SNAPSHOT.jar demo/jars
-cp core/target/onetable-core-0.1.0-SNAPSHOT.jar demo/jars
+cp api/target/xtable-api-0.1.0-SNAPSHOT.jar demo/jars
+cp core/target/xtable-core-0.1.0-SNAPSHOT.jar demo/jars
 
 cd demo
 docker-compose up
\ No newline at end of file
diff --git a/hudi-support/extensions/README.md b/hudi-support/extensions/README.md
index b01490fb..51ea57b6 100644
--- a/hudi-support/extensions/README.md
+++ b/hudi-support/extensions/README.md
@@ -6,8 +6,8 @@ The Hudi extensions provide the ability to add field IDs to the parquet schema w
 1. Add the extensions jar (`hudi-extensions-0.1.0-SNAPSHOT-bundled.jar`) to your class path.  
 For example, if you're using the Hudi [quick-start guide](https://hudi.apache.org/docs/quick-start-guide#spark-shellsql) for spark you can just add `--jars hudi-extensions-0.1.0-SNAPSHOT-bundled.jar` to the end of the command. 
 2. Set the following configurations in your writer options:  
-   `hoodie.avro.write.support.class: io.onetable.hudi.extensions.HoodieAvroWriteSupportWithFieldIds`  
-   `hoodie.client.init.callback.classes: io.onetable.hudi.extensions.AddFieldIdsClientInitCallback`  
+   `hoodie.avro.write.support.class: org.apache.xtable.hudi.extensions.HoodieAvroWriteSupportWithFieldIds`  
+   `hoodie.client.init.callback.classes: org.apache.xtable.hudi.extensions.AddFieldIdsClientInitCallback`  
    `hoodie.datasource.write.row.writer.enable : false` (RowWriter support is coming soon)  
 3. Run your existing code that use Hudi writers
 
@@ -16,7 +16,7 @@ For example, if you're using the Hudi [quick-start guide](https://hudi.apache.or
 If you want to use OneTable with Hudi [streaming ingestion](https://hudi.apache.org/docs/hoodie_streaming_ingestion) to sync each commit into other table formats.
 ### How do you use them?
 1. Add the extensions jar (`hudi-extensions-0.1.0-SNAPSHOT-bundled.jar`) to your class path.
-2. Add `io.onetable.hudi.sync.OneTableSyncTool` to your list of sync classes
+2. Add `org.apache.xtable.hudi.sync.OneTableSyncTool` to your list of sync classes
 3. Set the following configurations based on your preferences:
    `hoodie.onetable.formats: "ICEBERG,DELTA"` (or simply use one format)
    `hoodie.onetable.target.metadata.retention.hr: 168` (default retention for target format metadata is 168 hours)
\ No newline at end of file
diff --git a/hudi-support/extensions/pom.xml b/hudi-support/extensions/pom.xml
index 1f3507cf..8e972b93 100644
--- a/hudi-support/extensions/pom.xml
+++ b/hudi-support/extensions/pom.xml
@@ -6,19 +6,19 @@
     <artifactId>hudi-extensions</artifactId>
 
     <parent>
-        <groupId>io.onetable</groupId>
+        <groupId>org.apache.xtable</groupId>
         <artifactId>hudi-support</artifactId>
         <version>0.1.0-SNAPSHOT</version>
     </parent>
 
     <dependencies>
         <dependency>
-            <groupId>io.onetable</groupId>
+            <groupId>org.apache.xtable</groupId>
             <artifactId>hudi-utils</artifactId>
         </dependency>
         <dependency>
-            <groupId>io.onetable</groupId>
-            <artifactId>onetable-core</artifactId>
+            <groupId>org.apache.xtable</groupId>
+            <artifactId>xtable-core</artifactId>
         </dependency>
 
         <!-- Logging API -->
diff --git a/hudi-support/extensions/src/main/java/io/onetable/hudi/extensions/AddFieldIdsClientInitCallback.java b/hudi-support/extensions/src/main/java/org/apache/xtable/hudi/extensions/AddFieldIdsClientInitCallback.java
similarity index 97%
rename from hudi-support/extensions/src/main/java/io/onetable/hudi/extensions/AddFieldIdsClientInitCallback.java
rename to hudi-support/extensions/src/main/java/org/apache/xtable/hudi/extensions/AddFieldIdsClientInitCallback.java
index 29efd66c..ac82063e 100644
--- a/hudi-support/extensions/src/main/java/io/onetable/hudi/extensions/AddFieldIdsClientInitCallback.java
+++ b/hudi-support/extensions/src/main/java/org/apache/xtable/hudi/extensions/AddFieldIdsClientInitCallback.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.hudi.extensions;
+package org.apache.xtable.hudi.extensions;
 
 import lombok.extern.slf4j.Slf4j;
 
@@ -35,7 +35,7 @@ import org.apache.hudi.exception.HoodieException;
 
 import com.google.common.annotations.VisibleForTesting;
 
-import io.onetable.hudi.idtracking.IdTracker;
+import org.apache.xtable.hudi.idtracking.IdTracker;
 
 /**
  * An implementation of {@link HoodieClientInitCallback} that adds field ID metadata to the schema.
diff --git a/hudi-support/extensions/src/main/java/io/onetable/hudi/extensions/HoodieAvroWriteSupportWithFieldIds.java b/hudi-support/extensions/src/main/java/org/apache/xtable/hudi/extensions/HoodieAvroWriteSupportWithFieldIds.java
similarity index 95%
rename from hudi-support/extensions/src/main/java/io/onetable/hudi/extensions/HoodieAvroWriteSupportWithFieldIds.java
rename to hudi-support/extensions/src/main/java/org/apache/xtable/hudi/extensions/HoodieAvroWriteSupportWithFieldIds.java
index 7b134021..d3a1e788 100644
--- a/hudi-support/extensions/src/main/java/io/onetable/hudi/extensions/HoodieAvroWriteSupportWithFieldIds.java
+++ b/hudi-support/extensions/src/main/java/org/apache/xtable/hudi/extensions/HoodieAvroWriteSupportWithFieldIds.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.hudi.extensions;
+package org.apache.xtable.hudi.extensions;
 
 import java.util.List;
 import java.util.Properties;
@@ -35,9 +35,9 @@ import org.apache.iceberg.mapping.MappedFields;
 import org.apache.iceberg.mapping.NameMapping;
 import org.apache.iceberg.parquet.ParquetSchemaUtil;
 
-import io.onetable.hudi.idtracking.IdTracker;
-import io.onetable.hudi.idtracking.models.IdMapping;
-import io.onetable.hudi.idtracking.models.IdTracking;
+import org.apache.xtable.hudi.idtracking.IdTracker;
+import org.apache.xtable.hudi.idtracking.models.IdMapping;
+import org.apache.xtable.hudi.idtracking.models.IdTracking;
 
 /**
  * An extension of the standard {@link HoodieAvroWriteSupport} that adds field IDs to the parquet
diff --git a/hudi-support/extensions/src/main/java/io/onetable/hudi/sync/OneTableSyncConfig.java b/hudi-support/extensions/src/main/java/org/apache/xtable/hudi/sync/OneTableSyncConfig.java
similarity index 97%
rename from hudi-support/extensions/src/main/java/io/onetable/hudi/sync/OneTableSyncConfig.java
rename to hudi-support/extensions/src/main/java/org/apache/xtable/hudi/sync/OneTableSyncConfig.java
index 2773c3cf..fe716ad4 100644
--- a/hudi-support/extensions/src/main/java/io/onetable/hudi/sync/OneTableSyncConfig.java
+++ b/hudi-support/extensions/src/main/java/org/apache/xtable/hudi/sync/OneTableSyncConfig.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.hudi.sync;
+package org.apache.xtable.hudi.sync;
 
 import java.io.Serializable;
 import java.util.Properties;
diff --git a/hudi-support/extensions/src/main/java/io/onetable/hudi/sync/OneTableSyncTool.java b/hudi-support/extensions/src/main/java/org/apache/xtable/hudi/sync/OneTableSyncTool.java
similarity index 92%
rename from hudi-support/extensions/src/main/java/io/onetable/hudi/sync/OneTableSyncTool.java
rename to hudi-support/extensions/src/main/java/org/apache/xtable/hudi/sync/OneTableSyncTool.java
index 71902a5f..3d067d1a 100644
--- a/hudi-support/extensions/src/main/java/io/onetable/hudi/sync/OneTableSyncTool.java
+++ b/hudi-support/extensions/src/main/java/org/apache/xtable/hudi/sync/OneTableSyncTool.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.hudi.sync;
+package org.apache.xtable.hudi.sync;
 
 import java.util.Arrays;
 import java.util.Collections;
@@ -34,14 +34,14 @@ import org.apache.hudi.keygen.constant.KeyGeneratorOptions;
 import org.apache.hudi.sync.common.HoodieSyncConfig;
 import org.apache.hudi.sync.common.HoodieSyncTool;
 
-import io.onetable.client.OneTableClient;
-import io.onetable.client.PerTableConfig;
-import io.onetable.client.PerTableConfigImpl;
-import io.onetable.hudi.HudiSourceClientProvider;
-import io.onetable.hudi.HudiSourceConfigImpl;
-import io.onetable.model.schema.PartitionTransformType;
-import io.onetable.model.sync.SyncMode;
-import io.onetable.model.sync.SyncResult;
+import org.apache.xtable.client.OneTableClient;
+import org.apache.xtable.client.PerTableConfig;
+import org.apache.xtable.client.PerTableConfigImpl;
+import org.apache.xtable.hudi.HudiSourceClientProvider;
+import org.apache.xtable.hudi.HudiSourceConfigImpl;
+import org.apache.xtable.model.schema.PartitionTransformType;
+import org.apache.xtable.model.sync.SyncMode;
+import org.apache.xtable.model.sync.SyncResult;
 
 /** A HoodieSyncTool for syncing a Hudi table to other formats (Delta and Iceberg) with OneTable. */
 public class OneTableSyncTool extends HoodieSyncTool {
diff --git a/hudi-support/extensions/src/test/java/io/onetable/hudi/extensions/TestAddFieldIdsClientInitCallback.java b/hudi-support/extensions/src/test/java/org/apache/xtable/hudi/extensions/TestAddFieldIdsClientInitCallback.java
similarity index 98%
rename from hudi-support/extensions/src/test/java/io/onetable/hudi/extensions/TestAddFieldIdsClientInitCallback.java
rename to hudi-support/extensions/src/test/java/org/apache/xtable/hudi/extensions/TestAddFieldIdsClientInitCallback.java
index aa1c1081..e856d07a 100644
--- a/hudi-support/extensions/src/test/java/io/onetable/hudi/extensions/TestAddFieldIdsClientInitCallback.java
+++ b/hudi-support/extensions/src/test/java/org/apache/xtable/hudi/extensions/TestAddFieldIdsClientInitCallback.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.hudi.extensions;
+package org.apache.xtable.hudi.extensions;
 
 import static org.apache.hudi.common.table.HoodieTableConfig.HOODIE_TABLE_NAME_KEY;
 import static org.apache.hudi.common.table.HoodieTableConfig.VERSION;
@@ -58,7 +58,7 @@ import org.apache.hudi.config.HoodieIndexConfig;
 import org.apache.hudi.config.HoodieWriteConfig;
 import org.apache.hudi.index.HoodieIndex;
 
-import io.onetable.hudi.idtracking.IdTracker;
+import org.apache.xtable.hudi.idtracking.IdTracker;
 
 public class TestAddFieldIdsClientInitCallback {
   @TempDir static Path tempDir;
diff --git a/hudi-support/extensions/src/test/java/io/onetable/hudi/sync/TestOneTableSyncTool.java b/hudi-support/extensions/src/test/java/org/apache/xtable/hudi/sync/TestOneTableSyncTool.java
similarity index 99%
rename from hudi-support/extensions/src/test/java/io/onetable/hudi/sync/TestOneTableSyncTool.java
rename to hudi-support/extensions/src/test/java/org/apache/xtable/hudi/sync/TestOneTableSyncTool.java
index b6179f3c..21922811 100644
--- a/hudi-support/extensions/src/test/java/io/onetable/hudi/sync/TestOneTableSyncTool.java
+++ b/hudi-support/extensions/src/test/java/org/apache/xtable/hudi/sync/TestOneTableSyncTool.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.hudi.sync;
+package org.apache.xtable.hudi.sync;
 
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
diff --git a/hudi-support/pom.xml b/hudi-support/pom.xml
index 8aad155d..57b2685d 100644
--- a/hudi-support/pom.xml
+++ b/hudi-support/pom.xml
@@ -4,8 +4,8 @@
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
     <parent>
-        <groupId>io.onetable</groupId>
-        <artifactId>onetable</artifactId>
+        <groupId>org.apache.xtable</groupId>
+        <artifactId>xtable</artifactId>
         <version>0.1.0-SNAPSHOT</version>
     </parent>
 
diff --git a/hudi-support/utils/pom.xml b/hudi-support/utils/pom.xml
index f957de62..5697499a 100644
--- a/hudi-support/utils/pom.xml
+++ b/hudi-support/utils/pom.xml
@@ -6,7 +6,7 @@
     <artifactId>hudi-utils</artifactId>
 
     <parent>
-        <groupId>io.onetable</groupId>
+        <groupId>org.apache.xtable</groupId>
         <artifactId>hudi-support</artifactId>
         <version>0.1.0-SNAPSHOT</version>
     </parent>
diff --git a/hudi-support/utils/src/main/java/io/onetable/hudi/idtracking/IdTracker.java b/hudi-support/utils/src/main/java/org/apache/xtable/hudi/idtracking/IdTracker.java
similarity index 98%
rename from hudi-support/utils/src/main/java/io/onetable/hudi/idtracking/IdTracker.java
rename to hudi-support/utils/src/main/java/org/apache/xtable/hudi/idtracking/IdTracker.java
index 17f30624..bdf3c04a 100644
--- a/hudi-support/utils/src/main/java/io/onetable/hudi/idtracking/IdTracker.java
+++ b/hudi-support/utils/src/main/java/org/apache/xtable/hudi/idtracking/IdTracker.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.hudi.idtracking;
+package org.apache.xtable.hudi.idtracking;
 
 import java.io.IOException;
 import java.io.UncheckedIOException;
@@ -42,8 +42,8 @@ import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.ObjectReader;
 
-import io.onetable.hudi.idtracking.models.IdMapping;
-import io.onetable.hudi.idtracking.models.IdTracking;
+import org.apache.xtable.hudi.idtracking.models.IdMapping;
+import org.apache.xtable.hudi.idtracking.models.IdTracking;
 
 /** Utility class for reading and writing the IdTracking information from a schema. */
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
diff --git a/hudi-support/utils/src/main/java/io/onetable/hudi/idtracking/models/IdMapping.java b/hudi-support/utils/src/main/java/org/apache/xtable/hudi/idtracking/models/IdMapping.java
similarity index 97%
rename from hudi-support/utils/src/main/java/io/onetable/hudi/idtracking/models/IdMapping.java
rename to hudi-support/utils/src/main/java/org/apache/xtable/hudi/idtracking/models/IdMapping.java
index 18f61789..e4035c6f 100644
--- a/hudi-support/utils/src/main/java/io/onetable/hudi/idtracking/models/IdMapping.java
+++ b/hudi-support/utils/src/main/java/org/apache/xtable/hudi/idtracking/models/IdMapping.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.hudi.idtracking.models;
+package org.apache.xtable.hudi.idtracking.models;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/hudi-support/utils/src/main/java/io/onetable/hudi/idtracking/models/IdTracking.java b/hudi-support/utils/src/main/java/org/apache/xtable/hudi/idtracking/models/IdTracking.java
similarity index 96%
rename from hudi-support/utils/src/main/java/io/onetable/hudi/idtracking/models/IdTracking.java
rename to hudi-support/utils/src/main/java/org/apache/xtable/hudi/idtracking/models/IdTracking.java
index 5739984e..50a9429a 100644
--- a/hudi-support/utils/src/main/java/io/onetable/hudi/idtracking/models/IdTracking.java
+++ b/hudi-support/utils/src/main/java/org/apache/xtable/hudi/idtracking/models/IdTracking.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.hudi.idtracking.models;
+package org.apache.xtable.hudi.idtracking.models;
 
 import java.util.Collections;
 import java.util.List;
diff --git a/hudi-support/utils/src/test/java/io/onetable/hudi/idtracking/TestIdTracker.java b/hudi-support/utils/src/test/java/org/apache/xtable/hudi/idtracking/TestIdTracker.java
similarity index 99%
rename from hudi-support/utils/src/test/java/io/onetable/hudi/idtracking/TestIdTracker.java
rename to hudi-support/utils/src/test/java/org/apache/xtable/hudi/idtracking/TestIdTracker.java
index 02cfc3b1..6a728d6d 100644
--- a/hudi-support/utils/src/test/java/io/onetable/hudi/idtracking/TestIdTracker.java
+++ b/hudi-support/utils/src/test/java/org/apache/xtable/hudi/idtracking/TestIdTracker.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.hudi.idtracking;
+package org.apache.xtable.hudi.idtracking;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
@@ -29,8 +29,8 @@ import org.junit.jupiter.api.Test;
 
 import org.apache.hudi.common.util.Option;
 
-import io.onetable.hudi.idtracking.models.IdMapping;
-import io.onetable.hudi.idtracking.models.IdTracking;
+import org.apache.xtable.hudi.idtracking.models.IdMapping;
+import org.apache.xtable.hudi.idtracking.models.IdTracking;
 
 public class TestIdTracker {
 
diff --git a/pom.xml b/pom.xml
index 4d381be3..4f1b4743 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,9 +3,9 @@
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
-    <groupId>io.onetable</groupId>
-    <artifactId>onetable</artifactId>
-    <name>onetable</name>
+    <groupId>org.apache.xtable</groupId>
+    <artifactId>xtable</artifactId>
+    <name>xtable</name>
     <version>0.1.0-SNAPSHOT</version>
     <packaging>pom</packaging>
 
@@ -56,17 +56,17 @@
     <dependencyManagement>
         <dependencies>
             <dependency>
-                <groupId>io.onetable</groupId>
-                <artifactId>onetable-api</artifactId>
+                <groupId>org.apache.xtable</groupId>
+                <artifactId>xtable-api</artifactId>
                 <version>${project.version}</version>
             </dependency>
             <dependency>
-                <groupId>io.onetable</groupId>
-                <artifactId>onetable-core</artifactId>
+                <groupId>org.apache.xtable</groupId>
+                <artifactId>xtable-core</artifactId>
                 <version>${project.version}</version>
             </dependency>
             <dependency>
-                <groupId>io.onetable</groupId>
+                <groupId>org.apache.xtable</groupId>
                 <artifactId>hudi-utils</artifactId>
                 <version>${project.version}</version>
             </dependency>
@@ -533,7 +533,7 @@
                             <groupArtifact>com.google.googlejavaformat:google-java-format</groupArtifact>
                         </googleJavaFormat>
                         <importOrder>
-                            <order>java,javax,lombok,org,org.apache.hudi,org.apache.iceberg,org.apache.spark.sql.delta,scala,com,io.delta,io.onetable</order>
+                            <order>java,javax,lombok,org,org.apache.hudi,org.apache.iceberg,org.apache.spark.sql.delta,scala,com,io.delta,org.apache.xtable</order>
                         </importOrder>
                         <removeUnusedImports/>
                         <licenseHeader>
@@ -552,11 +552,4 @@
         </plugins>
     </build>
 
-    <distributionManagement>
-        <repository>
-            <id>github</id>
-            <name>GitHub Packages</name>
-            <url>https://maven.pkg.github.com/onetable-io/onetable</url>
-        </repository>
-    </distributionManagement>
 </project>
diff --git a/utilities/pom.xml b/utilities/pom.xml
index 06a20a11..3bfb3e5a 100644
--- a/utilities/pom.xml
+++ b/utilities/pom.xml
@@ -3,8 +3,8 @@
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <parent>
-        <artifactId>onetable</artifactId>
-        <groupId>io.onetable</groupId>
+        <groupId>org.apache.xtable</groupId>
+        <artifactId>xtable</artifactId>
         <version>0.1.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
@@ -13,12 +13,12 @@
 
     <dependencies>
         <dependency>
-            <groupId>io.onetable</groupId>
-            <artifactId>onetable-api</artifactId>
+            <groupId>org.apache.xtable</groupId>
+            <artifactId>xtable-api</artifactId>
         </dependency>
         <dependency>
-            <groupId>io.onetable</groupId>
-            <artifactId>onetable-core</artifactId>
+            <groupId>org.apache.xtable</groupId>
+            <artifactId>xtable-core</artifactId>
         </dependency>
 
         <!-- command line arg parsing -->
@@ -127,7 +127,7 @@
                 <configuration>
                     <transformers>
                         <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
-                            <mainClass>io.onetable.utilities.RunSync</mainClass>
+                            <mainClass>org.apache.xtable.utilities.RunSync</mainClass>
                         </transformer>
                     </transformers>
                 </configuration>
diff --git a/utilities/src/main/java/io/onetable/utilities/RunSync.java b/utilities/src/main/java/org/apache/xtable/utilities/RunSync.java
similarity index 93%
rename from utilities/src/main/java/io/onetable/utilities/RunSync.java
rename to utilities/src/main/java/org/apache/xtable/utilities/RunSync.java
index 5ece0c29..33dd67c2 100644
--- a/utilities/src/main/java/io/onetable/utilities/RunSync.java
+++ b/utilities/src/main/java/org/apache/xtable/utilities/RunSync.java
@@ -16,7 +16,7 @@
  * limitations under the License.
  */
  
-package io.onetable.utilities;
+package org.apache.xtable.utilities;
 
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
@@ -44,17 +44,17 @@ import com.fasterxml.jackson.databind.ObjectReader;
 import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
 import com.google.common.annotations.VisibleForTesting;
 
-import io.onetable.client.OneTableClient;
-import io.onetable.client.PerTableConfig;
-import io.onetable.client.PerTableConfigImpl;
-import io.onetable.client.SourceClientProvider;
-import io.onetable.hudi.ConfigurationBasedPartitionSpecExtractor;
-import io.onetable.hudi.HudiSourceConfigImpl;
-import io.onetable.iceberg.IcebergCatalogConfig;
-import io.onetable.model.storage.TableFormat;
-import io.onetable.model.sync.SyncMode;
-import io.onetable.reflection.ReflectionUtils;
-import io.onetable.utilities.RunSync.TableFormatClients.ClientConfig;
+import org.apache.xtable.client.OneTableClient;
+import org.apache.xtable.client.PerTableConfig;
+import org.apache.xtable.client.PerTableConfigImpl;
+import org.apache.xtable.client.SourceClientProvider;
+import org.apache.xtable.hudi.ConfigurationBasedPartitionSpecExtractor;
+import org.apache.xtable.hudi.HudiSourceConfigImpl;
+import org.apache.xtable.iceberg.IcebergCatalogConfig;
+import org.apache.xtable.model.storage.TableFormat;
+import org.apache.xtable.model.sync.SyncMode;
+import org.apache.xtable.reflection.ReflectionUtils;
+import org.apache.xtable.utilities.RunSync.TableFormatClients.ClientConfig;
 
 /**
  * Provides a standalone runner for the sync process. See README.md for more details on how to run
diff --git a/utilities/src/main/resources/onetable-client-defaults.yaml b/utilities/src/main/resources/onetable-client-defaults.yaml
index b0c96ec3..914d6122 100644
--- a/utilities/src/main/resources/onetable-client-defaults.yaml
+++ b/utilities/src/main/resources/onetable-client-defaults.yaml
@@ -12,13 +12,13 @@
 
 tableFormatsClients:
     HUDI:
-      sourceClientProviderClass: io.onetable.hudi.HudiSourceClientProvider
+      sourceClientProviderClass: org.apache.xtable.hudi.HudiSourceClientProvider
     DELTA:
-      sourceClientProviderClass: io.onetable.delta.DeltaSourceClientProvider
-      targetClientProviderClass: io.onetable.delta.DeltaClient
+      sourceClientProviderClass: org.apache.xtable.delta.DeltaSourceClientProvider
+      targetClientProviderClass: org.apache.xtable.delta.DeltaClient
       configuration:
         spark.master: local[2]
         spark.app.name: onetableclient
     ICEBERG:
-      sourceClientProviderClass: io.onetable.iceberg.IcebergSourceClientProvider
-      targetClientProviderClass: io.onetable.iceberg.IcebergTargetClient
\ No newline at end of file
+      sourceClientProviderClass: org.apache.xtable.iceberg.IcebergSourceClientProvider
+      targetClientProviderClass: org.apache.xtable.iceberg.IcebergTargetClient
\ No newline at end of file
diff --git a/utilities/src/test/java/io/onetable/utilities/TestRunSync.java b/utilities/src/test/java/org/apache/xtable/utilities/TestRunSync.java
similarity index 87%
rename from utilities/src/test/java/io/onetable/utilities/TestRunSync.java
rename to utilities/src/test/java/org/apache/xtable/utilities/TestRunSync.java
index d65281fa..1249f736 100644
--- a/utilities/src/test/java/io/onetable/utilities/TestRunSync.java
+++ b/utilities/src/test/java/org/apache/xtable/utilities/TestRunSync.java
@@ -16,11 +16,11 @@
  * limitations under the License.
  */
  
-package io.onetable.utilities;
+package org.apache.xtable.utilities;
 
-import static io.onetable.model.storage.TableFormat.DELTA;
-import static io.onetable.model.storage.TableFormat.HUDI;
-import static io.onetable.model.storage.TableFormat.ICEBERG;
+import static org.apache.xtable.model.storage.TableFormat.DELTA;
+import static org.apache.xtable.model.storage.TableFormat.HUDI;
+import static org.apache.xtable.model.storage.TableFormat.ICEBERG;
 
 import java.io.IOException;
 import java.util.Map;
@@ -29,9 +29,9 @@ import org.apache.hadoop.conf.Configuration;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
-import io.onetable.iceberg.IcebergCatalogConfig;
-import io.onetable.utilities.RunSync.TableFormatClients;
-import io.onetable.utilities.RunSync.TableFormatClients.ClientConfig;
+import org.apache.xtable.iceberg.IcebergCatalogConfig;
+import org.apache.xtable.utilities.RunSync.TableFormatClients;
+import org.apache.xtable.utilities.RunSync.TableFormatClients.ClientConfig;
 
 class TestRunSync {
 
@@ -86,13 +86,13 @@ class TestRunSync {
     Assertions.assertNotNull(tfClients.get(ICEBERG));
 
     Assertions.assertEquals(
-        "io.onetable.hudi.HudiSourceClientProvider",
+        "org.apache.xtable.hudi.HudiSourceClientProvider",
         tfClients.get(HUDI).getSourceClientProviderClass());
     Assertions.assertEquals(
-        "io.onetable.iceberg.IcebergTargetClient",
+        "org.apache.xtable.iceberg.IcebergTargetClient",
         tfClients.get(ICEBERG).getTargetClientProviderClass());
     Assertions.assertEquals(
-        "io.onetable.iceberg.IcebergSourceClientProvider",
+        "org.apache.xtable.iceberg.IcebergSourceClientProvider",
         tfClients.get(ICEBERG).getSourceClientProviderClass());
   }
 
@@ -126,13 +126,13 @@ class TestRunSync {
   @Test
   public void testIcebergCatalogConfig() throws IOException {
     String icebergConfig =
-        "catalogImpl: io.onetable.CatalogImpl\n"
+        "catalogImpl: org.apache.xtable.CatalogImpl\n"
             + "catalogName: test\n"
             + "catalogOptions: \n"
             + "  option1: value1\n"
             + "  option2: value2";
     IcebergCatalogConfig catalogConfig = RunSync.loadIcebergCatalogConfig(icebergConfig.getBytes());
-    Assertions.assertEquals("io.onetable.CatalogImpl", catalogConfig.getCatalogImpl());
+    Assertions.assertEquals("org.apache.xtable.CatalogImpl", catalogConfig.getCatalogImpl());
     Assertions.assertEquals("test", catalogConfig.getCatalogName());
     Assertions.assertEquals(2, catalogConfig.getCatalogOptions().size());
     Assertions.assertEquals("value1", catalogConfig.getCatalogOptions().get("option1"));
diff --git a/website/docs/biglake-metastore.md b/website/docs/biglake-metastore.md
index bceaa6f4..cb07e933 100644
--- a/website/docs/biglake-metastore.md
+++ b/website/docs/biglake-metastore.md
@@ -117,7 +117,7 @@ catalogOptions:
 From your terminal under the cloned Apache XTableâ„¢ (Incubating) directory, run the sync process using the below command.
 
 ```shell md title="shell"
-java -cp utilities/target/utilities-0.1.0-SNAPSHOT-bundled.jar:/path/to/downloaded/biglake-catalog-iceberg1.2.0-0.1.0-with-dependencies.jar io.onetable.utilities.RunSync  --datasetConfig my_config.yaml --icebergCatalogConfig catalog.yaml
+java -cp utilities/target/utilities-0.1.0-SNAPSHOT-bundled.jar:/path/to/downloaded/biglake-catalog-iceberg1.2.0-0.1.0-with-dependencies.jar org.apache.xtable.utilities.RunSync  --datasetConfig my_config.yaml --icebergCatalogConfig catalog.yaml
 ```
 
 :::tip Note:
diff --git a/website/docs/bigquery.md b/website/docs/bigquery.md
index 934f86e1..14265afa 100644
--- a/website/docs/bigquery.md
+++ b/website/docs/bigquery.md
@@ -40,8 +40,8 @@ If you are not planning on using Iceberg, then you do not need to add these to y
    for spark you can just add `--jars hudi-extensions-0.1.0-SNAPSHOT-bundled.jar` to the end of the command.
 2. Set the following configurations in your writer options:
    ```shell md title="shell"
-   hoodie.avro.write.support.class: io.onetable.hudi.extensions.HoodieAvroWriteSupportWithFieldIds
-   hoodie.client.init.callback.classes: io.onetable.hudi.extensions.AddFieldIdsClientInitCallback
+   hoodie.avro.write.support.class: org.apache.xtable.hudi.extensions.HoodieAvroWriteSupportWithFieldIds
+   hoodie.client.init.callback.classes: org.apache.xtable.hudi.extensions.AddFieldIdsClientInitCallback
    hoodie.datasource.write.row.writer.enable : false
    ```
 3. Run your existing code that use Hudi writers