diff --git a/src/Scaffolding/Builders.php b/src/Scaffolding/Builders.php
new file mode 100644
index 0000000000000000000000000000000000000000..7dcc03454f55273440d4a3270660f2922ff05ff2
--- /dev/null
+++ b/src/Scaffolding/Builders.php
@@ -0,0 +1,58 @@
+<?php declare(strict_types = 1);
+
+namespace Grifart\Tables\Scaffolding;
+
+use Grifart\ClassScaffolder\Definition\ClassDefinition;
+use Grifart\ClassScaffolder\Definition\ClassDefinitionBuilder;
+
+
+final class Builders
+{
+	private function __construct(
+		private ClassDefinitionBuilder $rowClass,
+		private ClassDefinitionBuilder $modificationsClass,
+		private ClassDefinitionBuilder $tableClass,
+	) {}
+
+	public static function from(
+		ClassDefinitionBuilder $rowClass,
+		ClassDefinitionBuilder $modificationsClass,
+		ClassDefinitionBuilder $tableClass,
+	): self
+	{
+		return new self(
+			$rowClass,
+			$modificationsClass,
+			$tableClass,
+		);
+	}
+
+	public function row(): ClassDefinitionBuilder
+	{
+		return $this->rowClass;
+	}
+
+	public function modifications(): ClassDefinitionBuilder
+	{
+		return $this->modificationsClass;
+	}
+
+	public function table(): ClassDefinitionBuilder
+	{
+		return $this->tableClass;
+	}
+
+
+	/**
+	 * @return ClassDefinition[]
+	 */
+	public function buildAll(): array
+	{
+		return [
+			$this->rowClass->build(),
+			$this->modificationsClass->build(),
+			$this->tableClass->build(),
+		];
+	}
+
+}
diff --git a/src/Scaffolding/Scaffolding.php b/src/Scaffolding/Scaffolding.php
index d97ef28735e562a88ce3002069df368a297d1ae1..1d44e4c4876cb7071600082da467922acc01b33e 100644
--- a/src/Scaffolding/Scaffolding.php
+++ b/src/Scaffolding/Scaffolding.php
@@ -16,10 +16,12 @@ use function Grifart\ClassScaffolder\Definition\Types\resolve;
 final class Scaffolding
 {
 
-	private static function location(string $schema, string $table, string $column): string {
+	private static function location(string $schema, string $table, string $column): string
+	{
 		return "$schema.$table.$column";
 	}
 
+
 	/**
 	 * @return ClassDefinition[]
 	 */
@@ -32,8 +34,32 @@ final class Scaffolding
 		string $modificationClass,
 		string $tableClass,
 		string $primaryKeyClass
-	): array {
+	): array
+	{
+		return self::buildersForPgTable(
+			$pgReflector,
+			$mapper,
+			$schema,
+			$table,
+			$rowClass,
+			$modificationClass,
+			$tableClass,
+			$primaryKeyClass,
+		)->buildAll();
+	}
 
+
+	public static function buildersForPgTable(
+		PostgresReflector $pgReflector,
+		TypeMapper $mapper,
+		string $schema,
+		string $table,
+		string $rowClass,
+		string $modificationClass,
+		string $tableClass,
+		string $primaryKeyClass
+	): Builders
+	{
 		$columnsNativeTypes = $pgReflector->retrieveColumnInfo($schema, $table);
 		if (\count($columnsNativeTypes) === 0) {
 			throw new \LogicException('No columns found for given configuration. Does referenced table exist?');
@@ -56,36 +82,33 @@ final class Scaffolding
 			return $builder;
 		};
 
-		return [
-			// row class
-			$addTableFields(new ClassDefinitionBuilder($rowClass))
-				->implement(Row::class)
-				->decorate(new PropertiesDecorator())
-				->decorate(new InitializingConstructorDecorator())
-				->decorate(new GettersDecorator())
-				->decorate(new PrivateConstructorDecorator())
-				->decorate(new ReconstituteConstructorDecorator())
-				->build(),
-
-			// row modification class
-			$addTableFields(new ClassDefinitionBuilder($modificationClass))
-				->decorate(new ModificationsDecorator($tableClass, $primaryKeyClass))
-				->build(),
-
-			// table class
-			(new ClassDefinitionBuilder($tableClass))
-				->decorate(new TableDecorator(
-					$schema,
-					$table,
-					$primaryKeyClass,
-					$rowClass,
-					$modificationClass,
-					$columnsNativeTypes,
-					$columnsPhpTypes,
-				))
-				->build(),
-
-		];
+
+		// row class
+		$row = $addTableFields(new ClassDefinitionBuilder($rowClass))
+			->implement(Row::class)
+			->decorate(new PropertiesDecorator())
+			->decorate(new InitializingConstructorDecorator())
+			->decorate(new GettersDecorator())
+			->decorate(new PrivateConstructorDecorator())
+			->decorate(new ReconstituteConstructorDecorator());
+
+		// row modification class
+		$modifications = $addTableFields(new ClassDefinitionBuilder($modificationClass))
+			->decorate(new ModificationsDecorator($tableClass, $primaryKeyClass));
+
+		// table class
+		$table = (new ClassDefinitionBuilder($tableClass))
+			->decorate(new TableDecorator(
+				$schema,
+				$table,
+				$primaryKeyClass,
+				$rowClass,
+				$modificationClass,
+				$columnsNativeTypes,
+				$columnsPhpTypes,
+			));
+
+		return Builders::from($row, $modifications, $table);
 	}
 
 }