diff --git a/pkg/items/pagination.go b/pkg/items/pagination.go
index 0c07c415ccfd2ad2d005c2c02fae92ad8e01036d..de9354a35b654d1d63fc69b2b3239b4d16aa5186 100644
--- a/pkg/items/pagination.go
+++ b/pkg/items/pagination.go
@@ -16,9 +16,7 @@ type BatchProcessor struct {
 	FindPublishedOptions         *FindPublishedOptions
 	Filter                       *Filter
 
-	// Deprecated использовать offset, limit
-	pageSize, pageNum int
-
+	limit int
 	sort      []string
 	processed int
 }
@@ -39,7 +37,7 @@ func (b *BatchProcessor) getBatch(ctx context.Context) ([]*Item, bool, error) {
 				Regular:     b.FindPublishedOptions.Regular,
 				Hidden:      b.FindPublishedOptions.Hidden,
 				Templates:   b.FindPublishedOptions.Templates,
-				FindOptions: *options.NewFindOptions(b.pageNum, b.pageSize, b.sort...),
+				FindOptions: *options.GetFindOptions(b.processed, b.limit, b.sort...),
 			},
 		)
 	} else {
@@ -54,14 +52,13 @@ func (b *BatchProcessor) getBatch(ctx context.Context) ([]*Item, bool, error) {
 				Regular:     b.FindOptions.Regular,
 				Hidden:      b.FindOptions.Hidden,
 				Templates:   b.FindOptions.Templates,
-				FindOptions: *options.NewFindOptions(b.pageNum, b.pageSize, b.sort...),
+				FindOptions: *options.GetFindOptions(b.processed, b.limit, b.sort...),
 			},
 		)
 	}
 
 	if err == nil {
 		b.processed += len(res)
-		b.pageNum++
 	}
 
 	return res, b.processed != total, err
@@ -86,32 +83,35 @@ func (b *BatchProcessor) next(ctx context.Context) (res []*Item, next bool, err
 }
 
 func (b *BatchProcessor) reducePageSize() bool {
-	if b.pageSize == 1 {
+	if b.limit == 1 {
 		return false
 	}
 
-	b.pageNum = 2 * b.pageNum
-	b.pageSize = b.pageSize / 2
-
+	b.limit /= 2
 	return true
 }
 
 func (b *BatchProcessor) Do(ctx context.Context, f func(batch []*Item) error) (int, error) {
-
 	if b.FindOptions == nil && b.FindPublishedOptions == nil {
 		b.FindOptions = new(FindOptions)
 	}
 	if b.FindOptions != nil {
-		b.pageSize = b.FindOptions.PageSize
+		b.limit = b.FindOptions.PageSize
 		b.sort = b.FindOptions.Sort
+		if b.FindOptions.Limit != 0 {
+			b.limit = b.FindOptions.Limit
+		}
 	}
 	if b.FindPublishedOptions != nil {
-		b.pageSize = b.FindPublishedOptions.PageSize
+		b.limit = b.FindPublishedOptions.PageSize
 		b.sort = b.FindPublishedOptions.Sort
+		if b.FindPublishedOptions.Limit != 0 {
+			b.limit = b.FindPublishedOptions.Limit
+		}
 	}
 
-	if b.pageSize == 0 {
-		b.pageSize = 128
+	if b.limit == 0 {
+		b.limit = 128
 	}
 
 	if b.Filter != nil && (len(b.Filter.ID) > 0 || len(b.Filter.Q) > 0) && !data.Contains("_id", b.sort) {
diff --git a/pkg/options/options.go b/pkg/options/options.go
index d1e7960895bb6239c89c15b4b82968bf33974ae5..6de164acfab0f91ac1f81b67c5ec0b0f877b557d 100644
--- a/pkg/options/options.go
+++ b/pkg/options/options.go
@@ -39,12 +39,18 @@ type FindOptions struct {
 	FieldOptions
 }
 
+// Deprecated использовать GetFindOptions
 // NewFindOptions создает новые результаты поиска
 func NewFindOptions(pageNum, pageSize int, sort ...string) *FindOptions {
+	return GetFindOptions(pageNum*pageSize, pageSize, sort...)
+}
+
+// GetFindOptions создает новые параметры поиска
+func GetFindOptions(offset, limit int, sort ...string) *FindOptions {
 	return &FindOptions{
 		PaginationOptions: PaginationOptions{
-			PageNum:  pageNum,
-			PageSize: pageSize,
+			Offset: offset,
+			Limit:  limit,
 		},
 		SortOptions: SortOptions{
 			Sort: sort,