diff --git a/python_payload/event.py b/python_payload/event.py
index 4c176ae308a84b5ee6a473b1d0904848801c7b67..8c1d2e66a2c9bec2718163768b94da6c5c73a80b 100644
--- a/python_payload/event.py
+++ b/python_payload/event.py
@@ -28,16 +28,24 @@ class Engine():
     def add_timed(self,event):
         self.events_timed.append(event)
         self._sort_timed()
-    
+
+    def add_input(self,event):
+        self.events_input.append(event)
+
+    def remove(self,group_id):
+        self.remove_input(group_id)
+        self.remove_timed(group_id)
+
     def remove_timed(self,group_id):
-        self.events_timed = [event for event in self.events_timed if event.group_id==group_id]
+        self.events_timed = [event for event in self.events_timed if event.group_id!=group_id]
         self._sort_timed()
     
+    def remove_input(self,group_id):
+        self.events_input = [event for event in self.events_input if event.group_id!=group_id]
+
     def _sort_timed(self):
         self.events_timed = sorted(self.events_timed, key = lambda event: event.deadline)
 
-    def add_input(self,event):
-        self.events_input.append(event)
     
     def _handle_timed(self):
         if not self.next_timed and self.events_timed:
@@ -52,48 +60,53 @@ class Engine():
                 self.next_timed = None
                 
     def _handle_input(self):
-        input_state={
-            "b0":(hardware.get_button(0),"button",0),
-            "b1":(hardware.get_button(1),"button",1)
-        }
-        
+        input_state = []
+
+        #buttons
+        for i in [0,1]:
+            input_state.append({
+                "type" : "button",
+                "index" : i,
+                "value" : hardware.get_button(i)
+            })
+
+        #captouch
         for i in range(0,10):
-            input_state["c"+str(i)]=(hardware.get_captouch(i),"captouch",i)
-            
+            input_state.append({
+                "type" : "captouch",
+                "index" : i,
+                "value" : hardware.get_captouch(i),
+                "radius" : hardware.captouch_get_petal_rad(i),
+                "angle" : hardware.captouch_get_petal_phi(i)/10000
+            })
+
         
         if not self.last_input_state:
             self.last_input_state=input_state
+            #tprint (input_state)
             return
         
-        diff=[]
-        for key in input_state:
-            if input_state[key][0] != self.last_input_state[key][0]:
-                diff.append({
-                    "type" : input_state[key][1],
-                    "index" : input_state[key][2],
-                    "value" : input_state[key][0],
-                    "from" : self.last_input_state[key][0],
-                    "ticks_ms": time.ticks_ms(),
-                    "change": True
-                })
+        for i in range(len(input_state)):
+            entry = input_state[i]
+            last_entry = self.last_input_state[i]
+            
+            #update for all
+            entry["ticks_ms"] = time.ticks_ms()
+
+            if entry["value"] != last_entry["value"]:
+                #update only when value changed
+                entry["change"] = True
+                entry["from"] = last_entry["value"]
             else:
-                 diff.append({
-                    "type" : input_state[key][1],
-                    "index" : input_state[key][2],
-                    "value" : input_state[key][0],
-                    "ticks_ms": time.ticks_ms(),
-                    "change": False
-                })
-    
-        if diff:
-            #print(diff)
-            for d in diff:
-                triggered_events = list(filter(lambda e: e.condition(d),self.events_input))
-                #print (triggered_events)
-                #map(lambda e: e.trigger(d), triggered_events)
-                for e in triggered_events:
-                    e.trigger(d)
-                    
+                #update only when value did not change
+                 entry["change"] = False
+
+            #find and trigger the events q
+            triggered_events = list(filter(lambda e: e.condition(entry),self.events_input))
+            #print (triggered_events)
+            #map(lambda e: e.trigger(d), triggered_events)
+            for e in triggered_events:
+                e.trigger(entry)
             
         self.last_input_state=input_state        
         
@@ -105,6 +118,7 @@ class Engine():
         self._handle_timed()
         self._handle_input()
         self._handle_userloop()
+        hardware.display_update()
         
             
     def eventloop(self):