diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/utility/highlevel_try_finally/safe_autoclose.kt b/src/commonMain/kotlin/ru/landgrafhomyak/utility/highlevel_try_finally/safe_autoclose.kt
index 53bd308..54f9208 100644
--- a/src/commonMain/kotlin/ru/landgrafhomyak/utility/highlevel_try_finally/safe_autoclose.kt
+++ b/src/commonMain/kotlin/ru/landgrafhomyak/utility/highlevel_try_finally/safe_autoclose.kt
@@ -3,21 +3,27 @@ package ru.landgrafhomyak.utility.highlevel_try_finally
 import kotlin.contracts.InvocationKind
 import kotlin.contracts.contract
 
-inline fun <R> safeAutoClose(onError: () -> Unit = {}, action: () -> R): R {
+inline fun <R> safeAutoClose(onError: () -> Unit = {}, onSuccess: () -> Unit = {}, action: () -> R): R {
 	contract {
 		callsInPlace(action, InvocationKind.EXACTLY_ONCE)
 		callsInPlace(onError, InvocationKind.AT_MOST_ONCE)
+		callsInPlace(onSuccess, InvocationKind.EXACTLY_ONCE)
 	}
 	val ret: R
+	var wasError = false
 	try {
 		ret = action()
 	} catch (e1: Throwable) {
+		wasError = true
 		try {
 			onError()
 		} catch (e2: Throwable) {
 			e1.addSuppressed(e2)
 		}
 		throw e1
+	} finally {
+		if (!wasError)
+			onSuccess()
 	}
 	return ret
 }
\ No newline at end of file