diff --git a/events/appmanager.go b/events/appmanager.go
index 91b6791..783586c 100644
--- a/events/appmanager.go
+++ b/events/appmanager.go
@@ -1,19 +1,24 @@
 package events
 
 import (
+	"bytes"
 	"encoding/json"
 	"fmt"
 	"io/ioutil"
 	"net/http"
+
+	"github.com/golang/glog"
 )
 
 type Trigger struct {
-	Namespace string `json:"namespace"`
-	Template  string `json:"template"`
+	App    string `json:"app"`
+	Action string `json:"action"`
 }
 
 type AppManager interface {
-	QueryTriggers(triggerOnType string, triggerOnEvent string) ([]Trigger, error)
+	QueryTriggers(triggerOnType, triggerOnEvent string) ([]Trigger, error)
+	// TODO(giolekva): must return launched action id to enable monitoring
+	LaunchAction(app, action string, args interface{}) error
 }
 
 type appManagerClient struct {
@@ -41,3 +46,27 @@
 	}
 	return triggers, nil
 }
+
+type actionArgs struct {
+	App    string      `json:"app"`
+	Action string      `json:"action"`
+	Args   interface{} `json:"args"`
+}
+
+func (c *appManagerClient) LaunchAction(app, action string, args interface{}) error {
+	actionUrl := fmt.Sprintf("%s/launch_action", c.addr)
+	reqJson, err := json.Marshal(actionArgs{app, action, args})
+	if err != nil {
+		return err
+	}
+	resp, err := http.Post(actionUrl, "application/json", bytes.NewReader(reqJson))
+	if err != nil {
+		return err
+	}
+	respBody, err := ioutil.ReadAll(resp.Body)
+	if err != nil {
+		return err
+	}
+	glog.Info("Triggered action: %s", string(respBody))
+	return nil
+}
diff --git a/events/install.yaml b/events/install.yaml
index 9f2b66c..fd17a00 100644
--- a/events/install.yaml
+++ b/events/install.yaml
@@ -4,34 +4,6 @@
 metadata:
   name: pcloud-events
 ---
-apiVersion: v1
-kind: ServiceAccount
-metadata:
-  name: event-processor
-  namespace: pcloud-events
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
-  name: modify-pods
-rules:
-  - apiGroups: [""]
-    resources: ["pods"]
-    verbs: ["create", "get", "watch", "list", "delete"]
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRoleBinding
-metadata:
-  name: modify-pods-to-sa
-subjects:
-  - kind: ServiceAccount
-    name: event-processor
-    namespace: pcloud-events
-roleRef:
-  kind: ClusterRole
-  name: modify-pods
-  apiGroup: rbac.authorization.k8s.io
----
 apiVersion: apps/v1
 kind: Deployment
 metadata:
@@ -47,9 +19,8 @@
       labels:
         app: event-processor
     spec:
-      serviceAccountName: event-processor
       containers:
       - name: event-processor
         image: giolekva/pcloud-event-processor:latest
         imagePullPolicy: Always
-        command: ["event-processor", "--logtostderr", "--api_addr=http://api.pcloud.svc:1111/graphql", "--app_manager_addr=http://app-manager.pcloud-app-manager.svc:80", "--object_store_addr=http://minio.minio.svc:9000"]
+        command: ["event-processor", "--logtostderr", "--api_addr=http://api.pcloud.svc:1111/graphql", "--app_manager_addr=http://app-manager.pcloud-app-manager.svc:80", "--object_store_addr=http://minio.app-object-store.svc:9000"]
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
-}
