diff --git a/.gitignore b/.gitignore
index 3a9875b460f3bab5c185900528ba5efe1a18de33..072705cd41d0111abef574c33e1978883bfc7e75 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,3 @@
-/vendor/
+.idea/
+vendor/
 composer.lock
diff --git a/composer.json b/composer.json
index 1f7d5643b07eae844705c2188e4998e2b528e49c..d1aaf19e30c36dc3e964f1b35840eea9718c1618 100644
--- a/composer.json
+++ b/composer.json
@@ -24,7 +24,7 @@
     "require": {
         "php": "^8.0",
         "dibi/dibi": "^4.0.2",
-        "grifart/scaffolder": "^0.5.0",
+        "grifart/scaffolder": "^0.5.3",
         "nette/utils": "^3.0.1"
     },
     "require-dev": {
diff --git a/src/Scaffolding/Builders.php b/src/Scaffolding/Builders.php
new file mode 100644
index 0000000000000000000000000000000000000000..439104dd77cd1623b452e38b20990689f316d9dd
--- /dev/null
+++ b/src/Scaffolding/Builders.php
@@ -0,0 +1,56 @@
+<?php declare(strict_types = 1);
+
+namespace Grifart\Tables\Scaffolding;
+
+use Grifart\ClassScaffolder\Definition\ClassDefinition;
+use Grifart\ClassScaffolder\Definition\ClassDefinitionBuilder;
+
+
+/**
+ * @implements \IteratorAggregate<ClassDefinition>
+ */
+final class Builders implements \IteratorAggregate
+{
+	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 getRowClass(): ClassDefinitionBuilder
+	{
+		return $this->rowClass;
+	}
+
+	public function getModificationsClass(): ClassDefinitionBuilder
+	{
+		return $this->modificationsClass;
+	}
+
+	public function getTableClass(): ClassDefinitionBuilder
+	{
+		return $this->tableClass;
+	}
+
+
+	public function getIterator(): \Traversable
+	{
+		yield $this->rowClass->build();
+		yield $this->modificationsClass->build();
+		yield $this->tableClass->build();
+	}
+
+}
diff --git a/src/Scaffolding/Scaffolding.php b/src/Scaffolding/Scaffolding.php
index d83bd9673324b8c73dbd385af1bd1c0a569758d2..b6a83674df17b75ecd47791ce71bfa89988719f4 100644
--- a/src/Scaffolding/Scaffolding.php
+++ b/src/Scaffolding/Scaffolding.php
@@ -1,10 +1,7 @@
 <?php declare(strict_types=1);
 
-
 namespace Grifart\Tables\Scaffolding;
 
-/** @var \Nette\DI\Container $container */
-
 use Grifart\ClassScaffolder\Decorators\GettersDecorator;
 use Grifart\ClassScaffolder\Decorators\InitializingConstructorDecorator;
 use Grifart\ClassScaffolder\Decorators\PropertiesDecorator;
@@ -19,31 +16,68 @@ 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[]
+	 * Usage:
+	 * ```php
+	 * return Scaffolding::definitionsForPgTable(...);
+	 * ```
 	 */
 	public static function definitionsForPgTable(
 		PostgresReflector $pgReflector,
 		TypeMapper $mapper,
 		string $schema,
 		string $table,
-		string $rowClass,
-		string $modificationClass,
-		string $tableClass,
+		string $rowClassName,
+		string $modificationsClassName,
+		string $tableClassName,
 		string $primaryKeyClass
-	): array {
+	): Builders
+	{
+		return self::buildersForPgTable(
+			$pgReflector,
+			$mapper,
+			$schema,
+			$table,
+			$rowClassName,
+			$modificationsClassName,
+			$tableClassName,
+			$primaryKeyClass,
+		);
+	}
+
 
-		$columnsNativeTypes = $pgReflector->retrieveColumnInfo($schema, $table);
+	/**
+	 * Usage:
+	 * ```php
+	 * $builders = Scaffolding::buildersForPgTable(...);
+	 * $builders->getRowClass()->decorate(...);
+	 * return $builders;
+	 * ```
+	 */
+	public static function buildersForPgTable(
+		PostgresReflector $pgReflector,
+		TypeMapper $mapper,
+		string $schema,
+		string $tableClass,
+		string $rowClassName,
+		string $modificationsClassName,
+		string $tableClassName,
+		string $primaryKeyClass
+	): Builders
+	{
+		$columnsNativeTypes = $pgReflector->retrieveColumnInfo($schema, $tableClass);
 		if (\count($columnsNativeTypes) === 0) {
 			throw new \LogicException('No columns found for given configuration. Does referenced table exist?');
 		}
 
-		$location = function(string $column) use ($schema, $table): string {
-			return self::location($schema, $table, $column);
+		$location = function(string $column) use ($schema, $tableClass): string {
+			return self::location($schema, $tableClass, $column);
 		};
 
 		$columnsPhpTypes = [];
@@ -59,36 +93,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
+		$rowClass = $addTableFields(new ClassDefinitionBuilder($rowClassName))
+			->implement(Row::class)
+			->decorate(new PropertiesDecorator())
+			->decorate(new InitializingConstructorDecorator())
+			->decorate(new GettersDecorator())
+			->decorate(new PrivateConstructorDecorator())
+			->decorate(new ReconstituteConstructorDecorator());
+
+		// row modification class
+		$modificationsClass = $addTableFields(new ClassDefinitionBuilder($modificationsClassName))
+			->decorate(new ModificationsDecorator($tableClassName, $primaryKeyClass));
+
+		// table class
+		$tableClass = (new ClassDefinitionBuilder($tableClassName))
+			->decorate(new TableDecorator(
+				$schema,
+				$tableClass,
+				$primaryKeyClass,
+				$rowClassName,
+				$modificationsClassName,
+				$columnsNativeTypes,
+				$columnsPhpTypes,
+			));
+
+		return Builders::from($rowClass, $modificationsClass, $tableClass);
 	}
 
 }