diff --git a/core/installer/cmd/launcher.go b/core/installer/cmd/launcher.go
index 832f159..e1707bf 100644
--- a/core/installer/cmd/launcher.go
+++ b/core/installer/cmd/launcher.go
@@ -2,21 +2,22 @@
 
 import (
 	"fmt"
+	"log"
 	"os"
 
 	"github.com/giolekva/pcloud/core/installer"
 	"github.com/giolekva/pcloud/core/installer/soft"
 	"github.com/giolekva/pcloud/core/installer/welcome"
+
 	"github.com/spf13/cobra"
 	"golang.org/x/crypto/ssh"
 )
 
 var launcherFlags struct {
-	logoutUrl  string
-	port       int
-	repoAddr   string
-	sshKey     string
-	appManager *installer.AppManager
+	logoutUrl string
+	port      int
+	repoAddr  string
+	sshKey    string
 }
 
 func launcherCmd() *cobra.Command {
@@ -54,11 +55,11 @@
 func launcherCmdRun(cmd *cobra.Command, args []string) error {
 	sshKey, err := os.ReadFile(launcherFlags.sshKey)
 	if err != nil {
-		return fmt.Errorf("failed reading ssh key: %v", err)
+		return err
 	}
 	signer, err := ssh.ParsePrivateKey(sshKey)
 	if err != nil {
-		return fmt.Errorf("failed parsing ssh private key: %v", err)
+		return err
 	}
 	addr, err := soft.ParseRepositoryAddress(launcherFlags.repoAddr)
 	if err != nil {
@@ -66,15 +67,16 @@
 	}
 	repo, err := soft.CloneRepository(addr, signer)
 	if err != nil {
-		return fmt.Errorf("failed cloning repository: %v", err)
+		return err
 	}
+	log.Println("Cloned repository")
 	repoIO, err := soft.NewRepoIO(repo, signer)
 	if err != nil {
-		return fmt.Errorf("failed initializing RepoIO: %v", err)
+		return err
 	}
 	appManager, err := installer.NewAppManager(repoIO, nil, "/apps")
 	if err != nil {
-		return fmt.Errorf("failed to create AppManager: %v", err)
+		return err
 	}
 	s, err := welcome.NewLauncherServer(
 		launcherFlags.port,
diff --git a/core/installer/cmd/rewrite.go b/core/installer/cmd/rewrite.go
index 8bb9173..c4bc7a8 100644
--- a/core/installer/cmd/rewrite.go
+++ b/core/installer/cmd/rewrite.go
@@ -60,7 +60,7 @@
 		return err
 	}
 	log.Println("Creating repository")
-	r := installer.NewInMemoryAppRepository(installer.CreateStoreApps())
+	r := installer.NewInMemoryAppRepository(installer.CreateAllApps())
 	mgr, err := installer.NewAppManager(repoIO, nil, "/apps")
 	if err != nil {
 		return err
