diff --git a/core/installer/app_manager.go b/core/installer/app_manager.go
index cad18eb..d3b64ab 100644
--- a/core/installer/app_manager.go
+++ b/core/installer/app_manager.go
@@ -299,13 +299,17 @@
 		i(&o)
 	}
 	dopts := []soft.DoOption{}
+	// NOTE(gio): Expects caller to have pulled already
+	dopts = append(dopts, soft.WithNoPull())
 	if o.Branch != "" {
-		dopts = append(dopts, soft.WithForce())
 		dopts = append(dopts, soft.WithCommitToBranch(o.Branch))
 	}
 	if o.NoPublish {
 		dopts = append(dopts, soft.WithNoCommit())
 	}
+	if o.Force {
+		dopts = append(dopts, soft.WithForce())
+	}
 	return ReleaseResources{}, repo.Do(func(r soft.RepoFS) (string, error) {
 		if err := r.RemoveDir(appDir); err != nil {
 			return "", err
@@ -432,17 +436,11 @@
 			return ReleaseResources{}, err
 		}
 	}
-	var localCharts map[string]helmv2.HelmChartTemplateSpec
-	if err := m.repoIO.Do(func(rfs soft.RepoFS) (string, error) {
-		charts, err := pullHelmCharts(m.hf, rendered.HelmCharts, rfs, "/helm-charts")
-		if err != nil {
-			return "", err
-		}
-		localCharts = generateLocalCharts(lg, charts)
-		return "pull helm charts", nil
-	}); err != nil {
+	charts, err := pullHelmCharts(m.hf, rendered.HelmCharts, m.repoIO, "/helm-charts")
+	if err != nil {
 		return ReleaseResources{}, err
 	}
+	localCharts := generateLocalCharts(lg, charts)
 	if o.FetchContainerImages {
 		release.ImageRegistry = imageRegistry
 	}
@@ -597,6 +595,7 @@
 	Branch               string
 	LG                   LocalChartGenerator
 	FetchContainerImages bool
+	Force                bool
 }
 
 type InstallOption func(*installOptions)
@@ -613,6 +612,12 @@
 	}
 }
 
+func WithForce() InstallOption {
+	return func(o *installOptions) {
+		o.Force = true
+	}
+}
+
 func WithLocalChartGenerator(lg LocalChartGenerator) InstallOption {
 	return func(o *installOptions) {
 		o.LG = lg
@@ -711,17 +716,11 @@
 	if err != nil {
 		return ReleaseResources{}, err
 	}
-	var localCharts map[string]helmv2.HelmChartTemplateSpec
-	if err := m.repoIO.Do(func(rfs soft.RepoFS) (string, error) {
-		charts, err := pullHelmCharts(m.hf, rendered.HelmCharts, rfs, "/helm-charts")
-		if err != nil {
-			return "", err
-		}
-		localCharts = generateLocalCharts(m.lg, charts)
-		return "pull helm charts", nil
-	}); err != nil {
+	charts, err := pullHelmCharts(m.hf, rendered.HelmCharts, m.repoIO, "/helm-charts")
+	if err != nil {
 		return ReleaseResources{}, err
 	}
+	localCharts := generateLocalCharts(m.lg, charts)
 	rendered, err = app.Render(release, infra, values, localCharts)
 	if err != nil {
 		return ReleaseResources{}, err
diff --git a/core/installer/soft/repoio.go b/core/installer/soft/repoio.go
index 7df75dc..dcf897d 100644
--- a/core/installer/soft/repoio.go
+++ b/core/installer/soft/repoio.go
@@ -36,6 +36,7 @@
 type DoFn func(r RepoFS) (string, error)
 
 type doOptions struct {
+	NoPull   bool
 	NoCommit bool
 	Force    bool
 	ToBranch string
@@ -43,6 +44,12 @@
 
 type DoOption func(*doOptions)
 
+func WithNoPull() DoOption {
+	return func(o *doOptions) {
+		o.NoPull = true
+	}
+}
+
 func WithNoCommit() DoOption {
 	return func(o *doOptions) {
 		o.NoCommit = true
@@ -219,13 +226,15 @@
 func (r *repoIO) Do(op DoFn, opts ...DoOption) error {
 	r.l.Lock()
 	defer r.l.Unlock()
-	if err := r.pullWithoutLock(); err != nil {
-		return err
-	}
 	o := &doOptions{}
 	for _, i := range opts {
 		i(o)
 	}
+	if !o.NoPull {
+		if err := r.pullWithoutLock(); err != nil {
+			return err
+		}
+	}
 	if msg, err := op(r); err != nil {
 		return err
 	} else {
diff --git a/core/installer/welcome/dodo_app.go b/core/installer/welcome/dodo_app.go
index 7ca9198..39d3a03 100644
--- a/core/installer/welcome/dodo_app.go
+++ b/core/installer/welcome/dodo_app.go
@@ -134,10 +134,20 @@
 		return err
 	}
 	lg := installer.GitRepositoryLocalChartGenerator{"app", namespace}
-	if _, err := m.Install(app, "app", "/.dodo/app", namespace, map[string]any{
-		"repoAddr":      repo.FullAddress(),
-		"sshPrivateKey": sshKey,
-	}, installer.WithConfig(env), installer.WithBranch("dodo"), installer.WithLocalChartGenerator(lg)); err != nil {
+	if _, err := m.Install(
+		app,
+		"app",
+		"/.dodo/app",
+		namespace,
+		map[string]any{
+			"repoAddr":      repo.FullAddress(),
+			"sshPrivateKey": sshKey,
+		},
+		installer.WithConfig(env),
+		installer.WithLocalChartGenerator(lg),
+		installer.WithBranch("dodo"),
+		installer.WithForce(),
+	); err != nil {
 		return err
 	}
 	return nil
