diff --git a/src/builtin/fiber.zig b/src/builtin/fiber.zig
index b75b2916..5a049370 100644
--- a/src/builtin/fiber.zig
+++ b/src/builtin/fiber.zig
@@ -25,7 +25,7 @@ pub fn cancel(ctx: *NativeCtx) c_int {
 pub fn isMain(ctx: *NativeCtx) c_int {
     const self = ObjFiber.cast(ctx.vm.peek(0).obj()).?;
 
-    ctx.vm.push(Value.fromBoolean(ctx.vm.main_fiber == self.fiber));
+    ctx.vm.push(Value.fromBoolean(self.fiber.parent_fiber == null));
 
     return 1;
 }
diff --git a/src/lib/buzz_api.zig b/src/lib/buzz_api.zig
index 66de5e1c..548a6b4f 100644
--- a/src/lib/buzz_api.zig
+++ b/src/lib/buzz_api.zig
@@ -392,7 +392,6 @@ pub const ObjPattern = opaque {
 
 pub const ObjFiber = opaque {
     pub extern fn bz_getFiberProperty(vm: *VM, property_idx: usize) Value;
-    pub extern fn bz_isMainFiber(self: *ObjFiber, vm: *VM) Value;
 };
 
 pub const ObjForeignContainer = opaque {
diff --git a/src/lib/std.buzz b/src/lib/std.buzz
index bb2e6f1c..2dd16f29 100644
--- a/src/lib/std.buzz
+++ b/src/lib/std.buzz
@@ -55,4 +55,4 @@ export extern fun currentFiber() > fib<any, any?>;
 || Print message and exit program
 extern fun buzzPanic(str message) > void;
 
-export buzzPanic as panic;
\ No newline at end of file
+export buzzPanic as panic;
diff --git a/src/vm.zig b/src/vm.zig
index 72028aad..87ce5fa5 100644
--- a/src/vm.zig
+++ b/src/vm.zig
@@ -445,7 +445,6 @@ pub const VM = struct {
     gc: *GarbageCollector,
     current_fiber: *Fiber,
     current_ast: Ast,
-    main_fiber: *Fiber,
     globals: std.ArrayList(Value),
     globals_count: usize = 0,
     import_registry: *ImportRegistry,
@@ -462,7 +461,6 @@ pub const VM = struct {
             .globals = std.ArrayList(Value).init(gc.allocator),
             .current_ast = undefined,
             .current_fiber = undefined,
-            .main_fiber = undefined,
             .flavor = flavor,
             .reporter = Reporter{
                 .allocator = gc.allocator,
diff --git a/tests/038-fibers.buzz b/tests/038-fibers.buzz
index 8fedee5b..45286dd5 100644
--- a/tests/038-fibers.buzz
+++ b/tests/038-fibers.buzz
@@ -18,6 +18,8 @@ test "fiber" {
     std.assert(sum == 45, message: "Sum is good");
 
     std.assert(resolve &count(10) == "Counting is done!", message: "Resolve without any resume");
+
+    std.assert(std.currentFiber().isMain(), message: "We recognize main fiber");
 }
 
 | returns str, yields int