diff --git a/python_payload/apps/__init__.py b/python_payload/apps/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/python_payload/cap_touch_demo.py b/python_payload/apps/cap_touch_demo.py
similarity index 92%
rename from python_payload/cap_touch_demo.py
rename to python_payload/apps/cap_touch_demo.py
index 3bbac30b5e0d187fd43b0fdd386758cabef52892..85fb4bfd2c9475fd9c5e3d85aa3bb36f6e6916e3 100644
--- a/python_payload/cap_touch_demo.py
+++ b/python_payload/apps/cap_touch_demo.py
@@ -1,9 +1,10 @@
-import hardware
-import utils
 import cmath
 import math
 import time
 
+import hardware
+from st3m import utils
+
 ctx = hardware.get_ctx()
 
 def init():
@@ -29,7 +30,7 @@ def foreground():
     pass
 
 
-from application import Application
+from st3m.application import Application
 
 app = Application("cap touch")
 app.main_foreground = run
diff --git a/python_payload/apps/demo_mandelbrot.py b/python_payload/apps/demo_mandelbrot.py
new file mode 100644
index 0000000000000000000000000000000000000000..1528d7aab3364d6a0125706ced53cb20c0686619
--- /dev/null
+++ b/python_payload/apps/demo_mandelbrot.py
@@ -0,0 +1,31 @@
+from application import Application
+import ui
+
+class MandelbrotApp(Application):
+    def on_init(self):
+        pass
+
+    def on_foreground(self):
+        print("on foreground")
+        ctx = self.ui.ctx
+
+        #center the text horizontally and vertically
+        ctx.text_align = ctx.CENTER
+        ctx.text_baseline = ctx.MIDDLE
+
+        #ctx.rgb() expects individual values for the channels, so unpack a list/tuple with *
+        #operations on ctx can be chained
+        #create a blue background
+        ctx.rgb(*ui.RED).rectangle(-ui.WIDTH/2,-ui.HEIGHT/2,ui.WIDTH,ui.HEIGHT).fill()
+
+        #Write some text
+        ctx.move_to(0,0).rgb(*ui.WHITE).text("Mandelbrot")
+
+    def main_forground():
+        
+        for x in range(-240,240):
+            for y in range(-240,240):
+                
+
+app=MandelbrotApp("Mandelbrot")
+app.run()
\ No newline at end of file
diff --git a/python_payload/demo_sparabo.py b/python_payload/apps/demo_sparabo.py
similarity index 94%
rename from python_payload/demo_sparabo.py
rename to python_payload/apps/demo_sparabo.py
index f22a12a6aacfdf1678ea309d21a7acca86277d53..e4cf06b0a99e0c0f9f353122ecfc5da0e1213ff6 100644
--- a/python_payload/demo_sparabo.py
+++ b/python_payload/apps/demo_sparabo.py
@@ -2,13 +2,9 @@
 import math
 
 #badge23
-import event
-import hardware
+from st3m import event,application,ui
+from st3m.system import hardware,audio
 from synth import tinysynth
-import application
-import ui
-
-import audio
 
 popcorn = [9,7,9,5,0,5,-3,999]
 
diff --git a/python_payload/demo_worms.py b/python_payload/apps/demo_worms.py
similarity index 98%
rename from python_payload/demo_worms.py
rename to python_payload/apps/demo_worms.py
index b1a2c4cf25e92b8d2c3ecb7a42c94eb60e19a321..d45ed1d5525a7e8d5b5606e4c3845464e1460eb8 100644
--- a/python_payload/demo_worms.py
+++ b/python_payload/apps/demo_worms.py
@@ -4,10 +4,7 @@ import time
 import math
 
 #flow3r imports
-import event
-import application
-import ui
-
+from st3m import event,application,ui
 
 # Subclass Application
 class AppWorms(application.Application):
diff --git a/python_payload/apps/flow3r/__init__.py b/python_payload/apps/flow3r/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/python_payload/menu_settings.py b/python_payload/apps/flow3r/menu_settings.py
similarity index 97%
rename from python_payload/menu_settings.py
rename to python_payload/apps/flow3r/menu_settings.py
index aa74f8ddacea80e69e0f63829330893c99b6dc8d..5436d933d5d1c34f4608cd9e3a0d32736996582b 100644
--- a/python_payload/menu_settings.py
+++ b/python_payload/apps/flow3r/menu_settings.py
@@ -1,9 +1,5 @@
-import menu
-import event
-import audio
-import control
-import ui
-import hardware
+from st3m import menu,event,control,ui
+from st3m.system import audio,hardware
 
 
 ui_input = ui.Icon("")
diff --git a/python_payload/menu_tinysynth.py b/python_payload/apps/flow3r/menu_tinysynth.py
similarity index 94%
rename from python_payload/menu_tinysynth.py
rename to python_payload/apps/flow3r/menu_tinysynth.py
index de60b013570d40a764495b349bd1cbd7e82be3ea..70c67a3a82d76e5b15976ed3d1c3c3a8a9463378 100644
--- a/python_payload/menu_tinysynth.py
+++ b/python_payload/apps/flow3r/menu_tinysynth.py
@@ -1,11 +1,7 @@
 from synth import tinysynth
 
-import menu
-import event
-import control
-import ui
-import hardware
-import audio
+from st3m import menu,event,control,ui
+from st3m.system import hardware,audio
 
 synth = tinysynth(440,0)
 
diff --git a/python_payload/apps/flow3roids.py b/python_payload/apps/flow3roids.py
new file mode 100644
index 0000000000000000000000000000000000000000..2cd1398735dc39c1bc167c2f4dfee759eb471b19
--- /dev/null
+++ b/python_payload/apps/flow3roids.py
@@ -0,0 +1,22 @@
+from application import SimpleApplication
+
+app = SimpleApplication("flow3rdroids")
+
+def on_init():
+    ship_position = complex(0,0)
+    ship_direction = complex(0,0)
+
+def on_tick():
+    if abs(ship_position.real)>240: ship_position.real*=-1
+    if abs(ship_position.imag)>240: ship_position.imag*=-1
+    
+    ship_position += ship_direction
+
+def on_draw():
+    ui.Pointer(x=ship_position.imag,y=ship_position.real)
+
+def on_scroll_step(direction):
+    #TODO: ship_direction += direction * angle
+
+def def on_enter():
+    #TODO:ship_direction += speed
diff --git a/python_payload/harmonic_demo.py b/python_payload/apps/harmonic_demo.py
similarity index 97%
rename from python_payload/harmonic_demo.py
rename to python_payload/apps/harmonic_demo.py
index 372c6e5016b302659106739d30b74ed2e9ceceb9..e211bd92657339c43e589f3967cc86bc243f0877 100644
--- a/python_payload/harmonic_demo.py
+++ b/python_payload/apps/harmonic_demo.py
@@ -59,7 +59,7 @@ def foreground():
     chord_index = -1
     set_chord(tmp)
 
-from application import Application
+from st3m.application import Application
 class HarmonicApp(Application):
     def on_init(self):
         init()
diff --git a/python_payload/melodic_demo.py b/python_payload/apps/melodic_demo.py
similarity index 97%
rename from python_payload/melodic_demo.py
rename to python_payload/apps/melodic_demo.py
index 06878ead5db0d7a18e69c16e2f81d44075a382e1..6460bb623ff67c248bd11e7bc8653a1495a80279 100644
--- a/python_payload/melodic_demo.py
+++ b/python_payload/apps/melodic_demo.py
@@ -66,7 +66,7 @@ def init():
 def foreground():
     adjust_playing_field_to_octave()
 
-from application import Application
+from st3m.application import Application
 
 class MelodicApp(Application):
     def on_init(self):
diff --git a/python_payload/demo_menu.py b/python_payload/demo_menu.py
index d247069e4073f127a92925d6175bc24ff2c59883..6e92a9f126fb3f2303449fd4817b38c1b82ec4f3 100644
--- a/python_payload/demo_menu.py
+++ b/python_payload/demo_menu.py
@@ -1,19 +1,12 @@
-import menu
-import event
-import hardware
-import control
-import audio
-import application
+from st3m import menu,event,control,application
 
-import demo_worms, cap_touch_demo
-import demo_sparabo, melodic_demo, harmonic_demo
-import menu_settings,menu_tinysynth
+from apps import demo_worms, cap_touch_demo
+from apps import demo_sparabo, melodic_demo, harmonic_demo
+from apps.flow3r import menu_settings,menu_tinysynth
 
 
 import time
 
-hardware.captouch_autocalib()
-audio.set_volume_dB(0)
 
 menu_main = menu.Menu("flow3r",has_back=False)
 menu_badge = menu.Menu("badge")
diff --git a/python_payload/main.py b/python_payload/main.py
index 4371fafc7724d64b6125c396ab20680dcafacb2b..a89d95269ac17fab23240bb80e44635c1e44464a 100644
--- a/python_payload/main.py
+++ b/python_payload/main.py
@@ -1 +1,6 @@
+from st3m.system import hardware,audio
+
 import demo_menu
+
+hardware.captouch_autocalib()
+audio.set_volume_dB(0)
\ No newline at end of file
diff --git a/python_payload/st3m/__init__.py b/python_payload/st3m/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/python_payload/application.py b/python_payload/st3m/application.py
similarity index 99%
rename from python_payload/application.py
rename to python_payload/st3m/application.py
index 9751a9a7f304588bd529f058d73fad80ad8d0990..23fe9f9a41c725489670867ffb9b28111a54372c 100644
--- a/python_payload/application.py
+++ b/python_payload/st3m/application.py
@@ -1,6 +1,4 @@
-import ui
-import event
-import menu
+from . import ui,event,menu
 
 STATE_OFF = 0
 STATE_INIT = 10
diff --git a/python_payload/control.py b/python_payload/st3m/control.py
similarity index 96%
rename from python_payload/control.py
rename to python_payload/st3m/control.py
index c1fabf6be6d23510c01ce5fc479172e11a765bd0..fe3febc9a68a8ae410256f2d6e86226dcd5d7376 100644
--- a/python_payload/control.py
+++ b/python_payload/st3m/control.py
@@ -1,4 +1,4 @@
-import ui
+from . import ui
 
 class Control():
     def __init__(self,name, default=0, on_set=None, on_get=None, on_mod=None):
@@ -119,4 +119,10 @@ class ControlSlide(ControlFloat):
         if z<0: #Release
             if self.do_reset:
                 self.set_value(self._saved_value)
-        self.draw()
\ No newline at end of file
+        self.draw()
+
+class ControlString(Control):
+    pass
+
+class ControlTextField():
+    pass
\ No newline at end of file
diff --git a/python_payload/event.py b/python_payload/st3m/event.py
similarity index 100%
rename from python_payload/event.py
rename to python_payload/st3m/event.py
diff --git a/python_payload/menu.py b/python_payload/st3m/menu.py
similarity index 99%
rename from python_payload/menu.py
rename to python_payload/st3m/menu.py
index 27319bea5e3a8dd59df6d212eb38852ede4d04db..31d7f762aebc30ad79073e69e33ac3a06ea627d5 100644
--- a/python_payload/menu.py
+++ b/python_payload/st3m/menu.py
@@ -1,8 +1,9 @@
-import ui
-import time
+from . import ui,event
 import hardware
+
+
+import time
 import math
-import event
 
 menu_stack = []
 active_menu = None
diff --git a/python_payload/st3m/system/__init__.py b/python_payload/st3m/system/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..93c01cec089e843cc4dd252e3d521b6feadd0345
--- /dev/null
+++ b/python_payload/st3m/system/__init__.py
@@ -0,0 +1,30 @@
+import hardware as _hardware
+
+class NamedObject():
+    def __init__(self,name="foo"):
+        self.__name = name
+    
+    def __repr__(self):
+        return self.__name
+
+class MockObject(NamedObject):
+    
+    def __getattr__(self,attr):
+        attr_name = "{}.{}".format(str(self),attr)
+        print ("mock attr", attr_name)
+        return MockObject(attr_name)
+
+    def __call__(self,*args,**kwargs):
+        call_name = "{}({}{})".format(str(self),args,kwargs)
+        print ("mock call",call_name)
+        return MockObject(call_name)
+
+
+try:
+    import audio as _audio
+except ModuleNotFoundError:
+    print("no real audio, using mock module")
+    _audio = MockObject("audio")
+
+hardware = _hardware
+audio = _audio
\ No newline at end of file
diff --git a/python_payload/ui.py b/python_payload/st3m/ui.py
similarity index 100%
rename from python_payload/ui.py
rename to python_payload/st3m/ui.py
diff --git a/python_payload/utils.py b/python_payload/st3m/utils.py
similarity index 96%
rename from python_payload/utils.py
rename to python_payload/st3m/utils.py
index 060d754b6555249ab9b5d7ba96ae68d0b1b14922..0be418b9e617a8150934c75705afee918b3d2aff 100644
--- a/python_payload/utils.py
+++ b/python_payload/st3m/utils.py
@@ -1,6 +1,6 @@
 import time
 from hardware import *
-import audio
+from st3m.system import audio
 
 RED = 0b1111100000000000
 GREEN = 0b0000011111100000