diff --git a/workflow-direct/main.go b/workflow-direct/main.go
index cd69f4f..6f2eb8e 100644
--- a/workflow-direct/main.go
+++ b/workflow-direct/main.go
@@ -58,7 +58,9 @@ func concatenateErrors(err1, err2 error) error {
 	return fmt.Errorf("%w\n%w", err1, err2)
 }
 
-func processRepositoryAction(request *common.Request) error {
+type RepositoryActionProcessor struct{}
+
+func (*RepositoryActionProcessor) ProcessFunc(request *common.Request) error {
 	action := request.Data.(*common.RepositoryWebhookEvent)
 	configs, configFound := configuredRepos[action.Organization.Username]
 
@@ -84,7 +86,8 @@ func processRepositoryAction(request *common.Request) error {
 
 func processConfiguredRepositoryAction(action *common.RepositoryWebhookEvent, config *common.AutogitConfig) error {
 	prjgit := config.GitProjectName
-	git, err := common.CreateGitHandler(GitAuthor, GitEmail, AppName)
+	ghi := common.GitHandlerGeneratorImpl{}
+	git, err := ghi.CreateGitHandler(GitAuthor, GitEmail, AppName)
 	common.PanicOnError(err)
 	if !DebugMode {
 		defer git.Close()
@@ -114,8 +117,8 @@ func processConfiguredRepositoryAction(action *common.RepositoryWebhookEvent, co
 		common.PanicOnError(git.GitExec(prjgit, "push"))
 
 	case "deleted":
-		if stat, err := os.Stat(filepath.Join(git.GitPath, prjgit, action.Repository.Name)); err != nil || !stat.IsDir() {
-			if git.DebugLogger {
+		if stat, err := os.Stat(filepath.Join(git.GetPath(), prjgit, action.Repository.Name)); err != nil || !stat.IsDir() {
+			if DebugMode {
 				log.Println("delete event for", action.Repository.Name, "-- not in project. Ignoring")
 			}
 			return nil
@@ -131,7 +134,9 @@ func processConfiguredRepositoryAction(action *common.RepositoryWebhookEvent, co
 	return nil
 }
 
-func processPushAction(request *common.Request) error {
+type PushActionProcessor struct{}
+
+func (*PushActionProcessor) ProcessFunc(request *common.Request) error {
 	action := request.Data.(*common.PushWebhookEvent)
 	configs, configFound := configuredRepos[action.Repository.Owner.Username]
 
@@ -157,7 +162,8 @@ func processPushAction(request *common.Request) error {
 
 func processConfiguredPushAction(action *common.PushWebhookEvent, config *common.AutogitConfig) error {
 	prjgit := config.GitProjectName
-	git, err := common.CreateGitHandler(GitAuthor, GitEmail, AppName)
+	ghi := common.GitHandlerGeneratorImpl{}
+	git, err := ghi.CreateGitHandler(GitAuthor, GitEmail, AppName)
 	common.PanicOnError(err)
 	if !DebugMode {
 		defer git.Close()
@@ -174,8 +180,8 @@ func processConfiguredPushAction(action *common.PushWebhookEvent, config *common
 	}
 
 	common.PanicOnError(git.GitExec("", "clone", "--depth", "1", prjGitRepo.SSHURL, prjgit))
-	if stat, err := os.Stat(filepath.Join(git.GitPath, prjgit, action.Repository.Name)); err != nil || !stat.IsDir() {
-		if git.DebugLogger {
+	if stat, err := os.Stat(filepath.Join(git.GetPath(), prjgit, action.Repository.Name)); err != nil || !stat.IsDir() {
+		if DebugMode {
 			log.Println("Pushed to package that is not part of the project. Ignoring:", err)
 		}
 		return nil
@@ -200,7 +206,7 @@ func processConfiguredPushAction(action *common.PushWebhookEvent, config *common
 	return nil
 }
 
-func verifyProjectState(git *common.GitHandler, orgName string, config *common.AutogitConfig, configs []*common.AutogitConfig) (err error) {
+func verifyProjectState(git common.Git, orgName string, config *common.AutogitConfig, configs []*common.AutogitConfig) (err error) {
 	defer func() {
 		e := recover()
 		if e != nil {
@@ -353,7 +359,8 @@ func checkRepos() {
 			}
 
 			log.Printf(" ++ starting verification, org: `%s` config: `%s`\n", org, config.GitProjectName)
-			git, err := common.CreateGitHandler(GitAuthor, GitEmail, AppName)
+			ghi := common.GitHandlerGeneratorImpl{}
+			git, err := ghi.CreateGitHandler(GitAuthor, GitEmail, AppName)
 			if err != nil {
 				log.Println("Faield to allocate GitHandler:", err)
 				return
@@ -437,8 +444,8 @@ func main() {
 	defs.RabbitURL = *rabbitUrl
 
 	defs.Handlers = make(map[string]common.RequestProcessor)
-	defs.Handlers[common.RequestType_Push] = processPushAction
-	defs.Handlers[common.RequestType_Repository] = processRepositoryAction
+	defs.Handlers[common.RequestType_Push] = &PushActionProcessor{}
+	defs.Handlers[common.RequestType_Repository] = &RepositoryActionProcessor{}
 
 	log.Fatal(common.ProcessRabbitMQEvents(defs, orgs))
 }