diff --git a/CHANGELOG.md b/CHANGELOG.md
index b4dff22..e1b9da8 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,15 @@
# Changelog
+## 2.1.1
+
+* `asFlowWithoutDelays` and `asTzFlowWithoutDelays` will have nullable `since` parameters with default to `null`
+ to avoid any inconsistency of `Flow` idiom.
+
+ About the reason of changes
+ Cold flows should not contain some state by default. So, it was not right to save some `DateTime`/`DateTimeTz`
+ by default. Now it will not use some external state unless developers will set it manually
+
+
## 2.1.0
* Versions
diff --git a/gradle.properties b/gradle.properties
index 56fa1b8..c635ba5 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -36,5 +36,5 @@ androidx_work_version=2.8.1
## Common
-version=2.1.0
-android_code_version=27
+version=2.1.1
+android_code_version=28
diff --git a/src/commonMain/kotlin/dev/inmo/krontab/utils/SchedulerFlow.kt b/src/commonMain/kotlin/dev/inmo/krontab/utils/SchedulerFlow.kt
index 55971d2..a3bf055 100644
--- a/src/commonMain/kotlin/dev/inmo/krontab/utils/SchedulerFlow.kt
+++ b/src/commonMain/kotlin/dev/inmo/krontab/utils/SchedulerFlow.kt
@@ -18,10 +18,11 @@ import kotlinx.coroutines.isActive
* Will emit all the [KronScheduler.next] as soon as possible. In case [KronScheduler.next] return null, flow will
* be completed
*
- * @param since Will be used as the first parameter for [KronScheduler.next] fun
+ * @param since Will be used as the first parameter for [KronScheduler.next] fun. If passed null, `flow`
+ * will always start since the moment of collecting start
*/
-fun KronScheduler.asTzFlowWithoutDelays(since: DateTimeTz = DateTime.nowLocal()): Flow = flow {
- var previous = since
+fun KronScheduler.asTzFlowWithoutDelays(since: DateTimeTz? = null): Flow = flow {
+ var previous = since ?: DateTime.nowLocal()
while (currentCoroutineContext().isActive) {
val next = next(previous) ?: break
emit(next)
@@ -57,10 +58,11 @@ fun KronScheduler.asTzFlow(): Flow = asTzFlowWithDelays()
* Will emit all the [KronScheduler.next] as soon as possible. In case [KronScheduler.next] return null, flow will
* be completed
*
- * @param since Will be used as the first parameter for [KronScheduler.next] fun
+ * @param since Will be used as the first parameter for [KronScheduler.next] fun. If passed null, `flow`
+ * will always start since the moment of collecting start
*/
-fun KronScheduler.asFlowWithoutDelays(since: DateTime = DateTime.now()): Flow = flow {
- var previous = since
+fun KronScheduler.asFlowWithoutDelays(since: DateTime? = null): Flow = flow {
+ var previous = since ?: DateTime.now()
while (currentCoroutineContext().isActive) {
val next = next(previous) ?: break
emit(next)