diff --git a/src/Driver/PostgresCursorFactory.php b/src/Driver/PostgresCursorFactory.php
index e2f2468fae982e830536beb10874ade7f097f1b0..9d5db529d5904004c33dfc8fa2d0d2926f280cf0 100644
--- a/src/Driver/PostgresCursorFactory.php
+++ b/src/Driver/PostgresCursorFactory.php
@@ -8,6 +8,10 @@ namespace Grifart\Mappi\Cursor\Driver;
 use Dibi\Connection;
 use Grifart\Mappi\Cursor\Cursor;
 use Grifart\Mappi\Cursor\ICursor;
+use Grifart\Mappi\Cursor\Position;
+use Grifart\Mappi\Cursor\SemanticCursor;
+use Grifart\Mappi\Cursor\SemanticTrackedCursor;
+use Grifart\Mappi\Cursor\TrackedCursor;
 
 final class PostgresCursorFactory
 {
@@ -48,6 +52,20 @@ final class PostgresCursorFactory
 		);
 	}
 
+	public function createSemantic(string $sql, bool $scroll) : SemanticTrackedCursor
+	{
+		$cursor = $this->create($sql, $scroll);
+		return new SemanticCursor($cursor);
+	}
+
+	public function createTrackedSemantic(string $sql, bool $scroll) : SemanticTrackedCursor
+	{
+		$cursor = $this->create($sql, $scroll);
+		return new SemanticTrackedCursor(
+			new TrackedCursor($cursor, Position::fromLeft(0))
+		);
+	}
+
 	/**
 	 * Generate cursor unique name in current transaction
 	 * @return string