diff --git a/events/processor.go b/events/processor.go
index fa234cc..aa9ac5c 100644
--- a/events/processor.go
+++ b/events/processor.go
@@ -1,16 +1,9 @@
 package events
 
 import (
-	"bytes"
-	"context"
-	"text/template"
 	"time"
 
-	apiv1 "k8s.io/api/core/v1"
-	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	"k8s.io/apimachinery/pkg/util/yaml"
 	"k8s.io/client-go/kubernetes"
-	corev1 "k8s.io/client-go/kubernetes/typed/core/v1"
 
 	"github.com/golang/glog"
 	// "github.com/itaysk/regogo"
@@ -57,73 +50,20 @@
 				continue
 			}
 			for _, t := range triggers {
-				pod, err := renderTriggerTemplate(t, event.NodeId, p.pcloudApi, p.objectStoreApi)
+				err := p.appManager.LaunchAction(t.App, t.Action, args{event.NodeId, p.pcloudApi, p.objectStoreApi})
+				// TODO(giolekva): do not simply ignore error and monitor progress
 				if err != nil {
-					glog.Errorf("Could not render trigger: %v %v", err, t)
 					continue
 				}
-				glog.Info("Creating pod: %v", pod)
-				pods := p.kube.CoreV1().Pods(t.Namespace)
-				resp, err := pods.Create(context.TODO(), pod, metav1.CreateOptions{})
-				if err != nil {
-					glog.Error(err)
-					continue
-				}
-				glog.Infof("Pod created: %s", resp)
-				// TODO(giolekva): do not ignore error
-				_ = monitorPod(resp, pods)
+				glog.Info("Launched action: %s %s", t.App, t.Action)
 			}
 			p.store.MarkEventDone(event)
 		}
 	}
 }
 
-func isInTerminalState(pod *apiv1.Pod) bool {
-	return pod.Status.Phase == apiv1.PodSucceeded ||
-		pod.Status.Phase == apiv1.PodFailed
-}
-
-func monitorPod(pod *apiv1.Pod, pods corev1.PodInterface) error {
-	w, err := pods.Watch(context.TODO(), metav1.SingleObject(pod.ObjectMeta))
-	if err != nil {
-		return err
-	}
-	for {
-		select {
-		case events, ok := <-w.ResultChan():
-			if !ok {
-				return nil
-			}
-			p := events.Object.(*apiv1.Pod)
-			glog.Infof("Pod status: %s", pod.Status.Phase)
-			if isInTerminalState(p) {
-				glog.Info("Pod is DONE")
-				w.Stop()
-			}
-		}
-	}
-	return nil
-}
-
 type args struct {
 	Id              string
 	PCloudApiAddr   string
 	ObjectStoreAddr string
 }
-
-func renderTriggerTemplate(t Trigger, id string, pcloudApi string, objectStoreApi string) (*apiv1.Pod, error) {
-	tmpl, err := template.New("trigger").Parse(t.Template)
-	if err != nil {
-		return nil, err
-	}
-	var b bytes.Buffer
-	if err := tmpl.Execute(&b, args{id, pcloudApi, objectStoreApi}); err != nil {
-		return nil, err
-	}
-	var pod apiv1.Pod
-	dec := yaml.NewYAMLOrJSONDecoder(&b, 100)
-	if err := dec.Decode(&pod); err != nil {
-		return nil, err
-	}
-	return &pod, nil
-}
