diff --git a/python_payload/demo_sparabo.py b/python_payload/demo_sparabo.py
new file mode 100644
index 0000000000000000000000000000000000000000..691f26559df634cdc9a98d2975a32f66f471453d
--- /dev/null
+++ b/python_payload/demo_sparabo.py
@@ -0,0 +1,46 @@
+import event
+import hardware
+from synth import tinysynth
+import math
+
+def xy_from_polar(r,deg):
+	#rad = deg/180*math.pi
+	
+	return( (
+		r * math.sin(deg), #x
+		r * math.cos(deg)  #y
+	)  )
+
+ctx = hardware.get_ctx()
+ctx.text_align = ctx.CENTER
+ctx.text_baseline = ctx.MIDDLE
+
+synth = tinysynth(440,1)
+synth.decay(25)
+
+popcorn = [9,7,9,5,0,5,-3,999]
+
+def on_step(data):
+	note = popcorn[data["step"]]
+	if note != 999:
+		synth.tone(note)
+		synth.start()
+	
+	
+	ctx.rgb(1,1,0).rectangle(-120,-120,240,240).fill()
+	(x,y) = xy_from_polar(90,-2*math.pi/8*data["step"]+math.pi)
+	size=180
+	ctx.rgb(0.8,0.8,0)
+	ctx.round_rectangle(
+			x-size/2,
+			y-size/2,
+			size,size,size//2
+	).fill()
+	ctx.move_to(x,y).rgb(0.5,0.5,0).text("{}".format(data["step"]))
+	hardware.display_update()
+	
+	
+	
+	
+event.Sequence(bpm=160, steps=8, action=on_step, loop=True)
+event.the_engine.eventloop()
diff --git a/python_payload/event.py b/python_payload/event.py
index 6a39ff489063357e5f3497f97e22adbd94118eaf..3e8e9dac10407acd22fde36c9e350f7b44a80dd9 100644
--- a/python_payload/event.py
+++ b/python_payload/event.py
@@ -126,6 +126,22 @@ class EventTimed(Event):
 	def __repr__(self):
 		return ("event on tick {} ({})".format(self.deadline,self.name))
 
+
+class Sequence():
+	def __init__(self,bpm=60,loop=True,steps=16,action=None):
+		self.bpm = bpm
+		if not action:
+			self.action = lambda data: print("step {}".format(data.get("step")))
+		else:
+			self.action = action
+		stepsize_ms = int(60*1000/bpm)
+		for i in range(steps):
+			EventTimed(stepsize_ms*i,name="seq{}".format(i),action=self.action, data={'step':i})
+		
+		if loop:
+			EventTimed(stepsize_ms*steps,name="loop",action=lambda data: Sequence(bpm=bpm,loop=loop,steps=steps,action=action))
+
+		
 global the_engine
 the_engine = Engine()
 
@@ -136,5 +152,10 @@ Event(name="baz",
 	condition=lambda data: data.get('type')=="captouch"
 )
 
+
+
+#Sequence(action=axelf)
+
 print (the_engine.events_timed)
-#e.eventloop()
+#the_engine.eventloop()
+