diff --git a/runtime/factories/fake/rpc.go b/runtime/factories/fake/rpc.go
index 85e57a2..7a561f3 100644
--- a/runtime/factories/fake/rpc.go
+++ b/runtime/factories/fake/rpc.go
@@ -48,3 +48,8 @@
 	defer apilog.LogCall(ctx)(ctx) // gologcop: DO NOT EDIT, MUST BE FIRST STATEMENT
 	panic("unimplemented")
 }
+
+func (r *Runtime) ExperimentalWithNewFlowManager(ctx *context.T) (*context.T, flow.Manager, error) {
+	defer apilog.LogCall(ctx)(ctx) // gologcop: DO NOT EDIT, MUST BE FIRST STATEMENT
+	panic("unimplemented")
+}
diff --git a/runtime/internal/rt/runtime.go b/runtime/internal/rt/runtime.go
index dac4bed..2deb20a 100644
--- a/runtime/internal/rt/runtime.go
+++ b/runtime/internal/rt/runtime.go
@@ -176,7 +176,7 @@
 	// Add the flow.Manager to the context.
 	// TODO(suharshs): Once the client and server use the flow.Manager we will need
 	// manage those dependencies (exactly as we are doing with stream.Manager)
-	ctx, err = r.setNewFlowManager(ctx)
+	ctx, _, err = r.setNewFlowManager(ctx)
 	if err != nil {
 		return nil, nil, nil, err
 	}
@@ -315,13 +315,13 @@
 	return manager.New(ctx, rid), nil
 }
 
-func (r *Runtime) setNewFlowManager(ctx *context.T) (*context.T, error) {
+func (r *Runtime) setNewFlowManager(ctx *context.T) (*context.T, flow.Manager, error) {
 	fm, err := newFlowManager(ctx)
 	if err != nil {
-		return nil, err
+		return nil, nil, err
 	}
 	newctx := context.WithValue(ctx, flowManagerKey, fm)
-	return newctx, err
+	return newctx, fm, nil
 }
 
 func (r *Runtime) setNewStreamManager(ctx *context.T) (*context.T, error) {
@@ -378,7 +378,7 @@
 	if newctx, err = r.setNewStreamManager(newctx); err != nil {
 		return ctx, err
 	}
-	if newctx, err = r.setNewFlowManager(newctx); err != nil {
+	if newctx, _, err = r.setNewFlowManager(newctx); err != nil {
 		return ctx, err
 	}
 	if newctx, _, err = r.setNewNamespace(newctx, r.GetNamespace(ctx).Roots()...); err != nil {
@@ -527,3 +527,17 @@
 	}
 	return nil
 }
+
+func (r *Runtime) ExperimentalWithNewFlowManager(ctx *context.T) (*context.T, flow.Manager, error) {
+	defer apilog.LogCall(ctx)(ctx) // gologcop: DO NOT EDIT, MUST BE FIRST STATEMENT
+	newctx, m, err := r.setNewFlowManager(ctx)
+	if err != nil {
+		return ctx, nil, err
+	}
+	// Create a new client since it depends on the flow manager.
+	newctx, _, err = r.WithNewClient(newctx)
+	if err != nil {
+		return ctx, nil, err
+	}
+	return newctx, m, nil
+}
diff --git a/runtime/internal/rt/runtime_test.go b/runtime/internal/rt/runtime_test.go
index a8753fe..9b7f6cd 100644
--- a/runtime/internal/rt/runtime_test.go
+++ b/runtime/internal/rt/runtime_test.go
@@ -148,7 +148,7 @@
 	debugDisp := r.GetReservedNameDispatcher(nctx)
 
 	if debugDisp != newDebugDisp || debugDisp == oldDebugDisp {
-		t.Error("SetNewDebugDispatcher didn't update the context properly")
+		t.Error("WithNewDebugDispatcher didn't update the context properly")
 	}
 
 }
@@ -157,8 +157,19 @@
 	r, ctx, shutdown := initForTest(t)
 	defer shutdown()
 
-	if man := r.ExperimentalGetFlowManager(ctx); man == nil {
+	oldman := r.ExperimentalGetFlowManager(ctx)
+	if oldman == nil {
 		t.Error("ExperimentalGetFlowManager should have returned a non-nil value")
 	}
-
+	newctx, newman, err := r.ExperimentalWithNewFlowManager(ctx)
+	if err != nil || newman == nil || newman == oldman {
+		t.Fatalf("Could not create flow manager: %v", err)
+	}
+	if !newctx.Initialized() {
+		t.Fatal("Got uninitialized context.")
+	}
+	man := r.ExperimentalGetFlowManager(newctx)
+	if man != newman || man == oldman {
+		t.Error("ExperimentalWithNewFlowManager didn't update the context properly")
+	}
 }
