diff --git a/avr/modules/lcd2/staticgui/0BUILD b/avr/modules/lcd2/staticgui/0BUILD
new file mode 100644
index 0000000..7ad68a8
--- /dev/null
+++ b/avr/modules/lcd2/staticgui/0BUILD
@@ -0,0 +1,16 @@
+
+
+
+
+
+ defs.asm
+ dialog.asm
+ main.asm
+ style.asm
+ titlewindow.asm
+ window.asm
+
+
+
+
+
diff --git a/avr/modules/lcd2/staticgui/TODO b/avr/modules/lcd2/staticgui/TODO
new file mode 100644
index 0000000..898a149
--- /dev/null
+++ b/avr/modules/lcd2/staticgui/TODO
@@ -0,0 +1,13 @@
+
+
+- Screen
+ - functions:
+ - show
+ - unshow
+ - touch
+ - key
+ - activeAreas:
+ - x, y, w, h (in FLASH)
+ - only small variable data in SRAM, no need for heap!
+
+
diff --git a/avr/modules/lcd2/staticgui/defs.asm b/avr/modules/lcd2/staticgui/defs.asm
new file mode 100644
index 0000000..0ea9fcd
--- /dev/null
+++ b/avr/modules/lcd2/staticgui/defs.asm
@@ -0,0 +1,65 @@
+; ***************************************************************************
+; copyright : (C) 2025 by Martin Preuss
+; email : martin@libchipcard.de
+;
+; ***************************************************************************
+; * This file is part of the project "AqHome". *
+; * Please see toplevel file COPYING of that project for license details. *
+; ***************************************************************************
+
+#ifndef AQH_AVR_STATICGUI_DEFS_ASM
+#define AQH_AVR_STATICGUI_DEFS_ASM
+
+
+; all offsets in byte size (to be used with LPM)
+.equ WIN_F_OFFS_X_LO = 0
+.equ WIN_F_OFFS_X_HI = 1
+.equ WIN_F_OFFS_Y_LO = 2
+.equ WIN_F_OFFS_Y_HI = 3
+.equ WIN_F_OFFS_WIDTH_LO = 4
+.equ WIN_F_OFFS_WIDTH_HI = 5
+.equ WIN_F_OFFS_HEIGHT_LO = 6
+.equ WIN_F_OFFS_HEIGHT_HI = 7
+.equ WIN_F_SIZE = 8
+
+.equ COLORWIN_F_OFFS_WIN = WIN_F_SIZE
+.equ COLORWIN_F_OFFS_BG_COLOR_LO = WIN_F_SIZE
+.equ COLORWIN_F_OFFS_BG_COLOR_HI = WIN_F_SIZE+1
+.equ COLORWIN_F_OFFS_FG_COLOR_LO = WIN_F_SIZE+2
+.equ COLORWIN_F_OFFS_FG_COLOR_HI = WIN_F_SIZE+3
+.equ COLORWIN_F_SIZE = WIN_F_SIZE+4
+
+.equ TEXTWIN_F_OFFS_WIN = COLORWIN_F_SIZE
+.equ TEXTWIN_F_OFFS_FONT_LO = COLORWIN_F_SIZE
+.equ TEXTWIN_F_OFFS_FONT_HI = COLORWIN_F_SIZE+1
+.equ TEXTWIN_F_SIZE = COLORWIN_F_SIZE+2
+
+
+
+.equ WIN_OFFS_X_LO = 0
+.equ WIN_OFFS_X_HI = 1
+.equ WIN_OFFS_Y_LO = 2
+.equ WIN_OFFS_Y_HI = 3
+.equ WIN_OFFS_WIDTH_LO = 4
+.equ WIN_OFFS_WIDTH_HI = 5
+.equ WIN_OFFS_HEIGHT_LO = 6
+.equ WIN_OFFS_HEIGHT_HI = 7
+.equ WIN_OFFS_BG_COL_LO = 8
+.equ WIN_OFFS_BG_COL_HI = 9
+.equ WIN_OFFS_FG_COL_LO = 10
+.equ WIN_OFFS_FG_COL_HI = 11
+.equ WIN_OFFS_FONT_LO = 12 ;byte address!
+.equ WIN_OFFS_FONT_HI = 13
+.equ WIN_SIZE = 14
+
+
+
+.equ WIN_EVENT_DESTROY = 1
+.equ WIN_EVENT_SHOW = 2
+.equ WIN_EVENT_HIDE = 3
+.equ WIN_EVENT_DRAW = 4
+.equ WIN_EVENT_TIMER = 5
+
+
+#endif ; AQH_AVR_STATICGUI_DEFS_ASM
+
diff --git a/avr/modules/lcd2/staticgui/dialog.asm b/avr/modules/lcd2/staticgui/dialog.asm
new file mode 100644
index 0000000..a865699
--- /dev/null
+++ b/avr/modules/lcd2/staticgui/dialog.asm
@@ -0,0 +1,288 @@
+; ***************************************************************************
+; copyright : (C) 2025 by Martin Preuss
+; email : martin@libchipcard.de
+;
+; ***************************************************************************
+; * This file is part of the project "AqHome". *
+; * Please see toplevel file COPYING of that project for license details. *
+; ***************************************************************************
+
+#ifndef AQHOME_AVR_MODS_STATICGUI_DIALOG_ASM
+#define AQHOME_AVR_MODS_STATICGUI_DIALOG_ASM
+
+
+
+; ***************************************************************************
+; defines
+
+.equ DIALOG_MAX_ACTIVE = 8
+
+.equ DIALOG_OFFS_HANDLER_LO = 0
+.equ DIALOG_OFFS_HANDLER_HI = 1
+.equ DIALOG_OFFS_OPTIONS = 2
+.equ DIALOG_OFFS_COUNTER = 3
+.equ DIALOG_SIZE = 4
+
+
+.equ DIALOG_OPT_ACTIVE_BIT = 7
+
+
+.equ DIALOG_FN_INIT = 0
+.equ DIALOG_FN_FINI = 1
+.equ DIALOG_FN_SHOW = 2
+.equ DIALOG_FN_HIDE = 3
+.equ DIALOG_FN_DRAW = 4
+.equ DIALOG_FN_TOUCH = 5
+.equ DIALOG_FN_TIMER = 6
+
+
+
+; ***************************************************************************
+; data
+
+.dseg
+
+dialogCurrent: .byte 2
+dialogStack: .byte DIALOG_MAX_ACTIVE*2
+dialogStackPos: .byte 1
+
+dialogWindow: .byte WIN_SIZE
+
+
+
+; ***************************************************************************
+; code
+
+.cseg
+
+
+; ---------------------------------------------------------------------------
+; @routine GraphApp_Init @global
+;
+
+DialogMgr_Init:
+ clr r16
+ sts dialogStackPos, r16
+ sts dialogCurrent, r16
+ sts dialogCurrent+1, r16
+
+ ldi yl, LOW(dialogWindow)
+ ldi yh, HIGH(dialogWindow)
+ bigcall TitleWindow_Init
+
+ ldi zl, LOW(ili9341Font12x20_1*2)
+ ldi zh, HIGH(ili9341Font12x20_1*2)
+ std Y+WIN_OFFS_FONT_LO, zl
+ std Y+WIN_OFFS_FONT_HI, zh
+
+ bigcall TitleWindow_SetFullSize
+ bigcall TitleWindow_SetStyleColors
+
+ bigcall Window_Clear
+ ret
+; @end
+
+
+
+; ---------------------------------------------------------------------------
+; @routine DialogMgr_Every100ms @global
+;
+; Handle display touch events
+; Send timer event to every app in the stack (started with last added app).
+
+DialogMgr_Every100ms:
+ ; check for touch input changes
+ rcall Display_InputGetState ; r16=flags, r5:r4=x, r7:r6=y
+ mov r17, r16
+ andi r17, (1<