diff --git a/.vscode/launch.json b/.vscode/launch.json
deleted file mode 100644
index 2cb4d6493de2bd698c946f9161fc9ec66a58a94c..0000000000000000000000000000000000000000
--- a/.vscode/launch.json
+++ /dev/null
@@ -1,490 +0,0 @@
-{
-    // Use IntelliSense to learn about possible attributes.
-    // Hover to view descriptions of existing attributes.
-    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
-    "version": "0.2.0",
-    "configurations": [
-        {
-            "type": "lldb",
-            "request": "launch",
-            "name": "Debug unit tests in library 'kayak_ui'",
-            "cargo": {
-                "args": [
-                    "test",
-                    "--no-run",
-                    "--lib",
-                    "--package=kayak_ui"
-                ],
-                "filter": {
-                    "name": "kayak_ui",
-                    "kind": "lib"
-                }
-            },
-            "args": [],
-            "cwd": "${workspaceFolder}"
-        },
-        {
-            "type": "lldb",
-            "request": "launch",
-            "name": "Debug example 'tabs'",
-            "cargo": {
-                "args": [
-                    "build",
-                    "--example=tabs",
-                    "--package=kayak_ui"
-                ],
-                "filter": {
-                    "name": "tabs",
-                    "kind": "example"
-                }
-            },
-            "args": [],
-            "cwd": "${workspaceFolder}"
-        },
-        {
-            "type": "lldb",
-            "request": "launch",
-            "name": "Debug unit tests in example 'tabs'",
-            "cargo": {
-                "args": [
-                    "test",
-                    "--no-run",
-                    "--example=tabs",
-                    "--package=kayak_ui"
-                ],
-                "filter": {
-                    "name": "tabs",
-                    "kind": "example"
-                }
-            },
-            "args": [],
-            "cwd": "${workspaceFolder}"
-        },
-        {
-            "type": "lldb",
-            "request": "launch",
-            "name": "Debug example 'clipping'",
-            "cargo": {
-                "args": [
-                    "build",
-                    "--example=clipping",
-                    "--package=kayak_ui"
-                ],
-                "filter": {
-                    "name": "clipping",
-                    "kind": "example"
-                }
-            },
-            "args": [],
-            "cwd": "${workspaceFolder}"
-        },
-        {
-            "type": "lldb",
-            "request": "launch",
-            "name": "Debug unit tests in example 'clipping'",
-            "cargo": {
-                "args": [
-                    "test",
-                    "--no-run",
-                    "--example=clipping",
-                    "--package=kayak_ui"
-                ],
-                "filter": {
-                    "name": "clipping",
-                    "kind": "example"
-                }
-            },
-            "args": [],
-            "cwd": "${workspaceFolder}"
-        },
-        {
-            "type": "lldb",
-            "request": "launch",
-            "name": "Debug example 'context'",
-            "cargo": {
-                "args": [
-                    "build",
-                    "--example=context",
-                    "--package=kayak_ui"
-                ],
-                "filter": {
-                    "name": "context",
-                    "kind": "example"
-                }
-            },
-            "args": [],
-            "cwd": "${workspaceFolder}"
-        },
-        {
-            "type": "lldb",
-            "request": "launch",
-            "name": "Debug unit tests in example 'context'",
-            "cargo": {
-                "args": [
-                    "test",
-                    "--no-run",
-                    "--example=context",
-                    "--package=kayak_ui"
-                ],
-                "filter": {
-                    "name": "context",
-                    "kind": "example"
-                }
-            },
-            "args": [],
-            "cwd": "${workspaceFolder}"
-        },
-        {
-            "type": "lldb",
-            "request": "launch",
-            "name": "Debug example 'image'",
-            "cargo": {
-                "args": [
-                    "build",
-                    "--example=image",
-                    "--package=kayak_ui"
-                ],
-                "filter": {
-                    "name": "image",
-                    "kind": "example"
-                }
-            },
-            "args": [],
-            "cwd": "${workspaceFolder}"
-        },
-        {
-            "type": "lldb",
-            "request": "launch",
-            "name": "Debug unit tests in example 'image'",
-            "cargo": {
-                "args": [
-                    "test",
-                    "--no-run",
-                    "--example=image",
-                    "--package=kayak_ui"
-                ],
-                "filter": {
-                    "name": "image",
-                    "kind": "example"
-                }
-            },
-            "args": [],
-            "cwd": "${workspaceFolder}"
-        },
-        {
-            "type": "lldb",
-            "request": "launch",
-            "name": "Debug example 'nine_patch'",
-            "cargo": {
-                "args": [
-                    "build",
-                    "--example=nine_patch",
-                    "--package=kayak_ui"
-                ],
-                "filter": {
-                    "name": "nine_patch",
-                    "kind": "example"
-                }
-            },
-            "args": [],
-            "cwd": "${workspaceFolder}"
-        },
-        {
-            "type": "lldb",
-            "request": "launch",
-            "name": "Debug unit tests in example 'nine_patch'",
-            "cargo": {
-                "args": [
-                    "test",
-                    "--no-run",
-                    "--example=nine_patch",
-                    "--package=kayak_ui"
-                ],
-                "filter": {
-                    "name": "nine_patch",
-                    "kind": "example"
-                }
-            },
-            "args": [],
-            "cwd": "${workspaceFolder}"
-        },
-        {
-            "type": "lldb",
-            "request": "launch",
-            "name": "Debug example 'quads'",
-            "cargo": {
-                "args": [
-                    "build",
-                    "--example=quads",
-                    "--package=kayak_ui"
-                ],
-                "filter": {
-                    "name": "quads",
-                    "kind": "example"
-                }
-            },
-            "args": [],
-            "cwd": "${workspaceFolder}"
-        },
-        {
-            "type": "lldb",
-            "request": "launch",
-            "name": "Debug unit tests in example 'quads'",
-            "cargo": {
-                "args": [
-                    "test",
-                    "--no-run",
-                    "--example=quads",
-                    "--package=kayak_ui"
-                ],
-                "filter": {
-                    "name": "quads",
-                    "kind": "example"
-                }
-            },
-            "args": [],
-            "cwd": "${workspaceFolder}"
-        },
-        {
-            "type": "lldb",
-            "request": "launch",
-            "name": "Debug example 'scrolling'",
-            "cargo": {
-                "args": [
-                    "build",
-                    "--example=scrolling",
-                    "--package=kayak_ui"
-                ],
-                "filter": {
-                    "name": "scrolling",
-                    "kind": "example"
-                }
-            },
-            "args": [],
-            "cwd": "${workspaceFolder}"
-        },
-        {
-            "type": "lldb",
-            "request": "launch",
-            "name": "Debug unit tests in example 'scrolling'",
-            "cargo": {
-                "args": [
-                    "test",
-                    "--no-run",
-                    "--example=scrolling",
-                    "--package=kayak_ui"
-                ],
-                "filter": {
-                    "name": "scrolling",
-                    "kind": "example"
-                }
-            },
-            "args": [],
-            "cwd": "${workspaceFolder}"
-        },
-        {
-            "type": "lldb",
-            "request": "launch",
-            "name": "Debug example 'simple'",
-            "cargo": {
-                "args": [
-                    "build",
-                    "--example=simple",
-                    "--package=kayak_ui"
-                ],
-                "filter": {
-                    "name": "simple",
-                    "kind": "example"
-                }
-            },
-            "args": [],
-            "cwd": "${workspaceFolder}"
-        },
-        {
-            "type": "lldb",
-            "request": "launch",
-            "name": "Debug unit tests in example 'simple'",
-            "cargo": {
-                "args": [
-                    "test",
-                    "--no-run",
-                    "--example=simple",
-                    "--package=kayak_ui"
-                ],
-                "filter": {
-                    "name": "simple",
-                    "kind": "example"
-                }
-            },
-            "args": [],
-            "cwd": "${workspaceFolder}"
-        },
-        {
-            "type": "lldb",
-            "request": "launch",
-            "name": "Debug example 'simple_state'",
-            "cargo": {
-                "args": [
-                    "build",
-                    "--example=simple_state",
-                    "--package=kayak_ui"
-                ],
-                "filter": {
-                    "name": "simple_state",
-                    "kind": "example"
-                }
-            },
-            "args": [],
-            "cwd": "${workspaceFolder}"
-        },
-        {
-            "type": "lldb",
-            "request": "launch",
-            "name": "Debug unit tests in example 'simple_state'",
-            "cargo": {
-                "args": [
-                    "test",
-                    "--no-run",
-                    "--example=simple_state",
-                    "--package=kayak_ui"
-                ],
-                "filter": {
-                    "name": "simple_state",
-                    "kind": "example"
-                }
-            },
-            "args": [],
-            "cwd": "${workspaceFolder}"
-        },
-        {
-            "type": "lldb",
-            "request": "launch",
-            "name": "Debug example 'text'",
-            "cargo": {
-                "args": [
-                    "build",
-                    "--example=text",
-                    "--package=kayak_ui"
-                ],
-                "filter": {
-                    "name": "text",
-                    "kind": "example"
-                }
-            },
-            "args": [],
-            "cwd": "${workspaceFolder}"
-        },
-        {
-            "type": "lldb",
-            "request": "launch",
-            "name": "Debug unit tests in example 'text'",
-            "cargo": {
-                "args": [
-                    "test",
-                    "--no-run",
-                    "--example=text",
-                    "--package=kayak_ui"
-                ],
-                "filter": {
-                    "name": "text",
-                    "kind": "example"
-                }
-            },
-            "args": [],
-            "cwd": "${workspaceFolder}"
-        },
-        {
-            "type": "lldb",
-            "request": "launch",
-            "name": "Debug example 'texture_atlas'",
-            "cargo": {
-                "args": [
-                    "build",
-                    "--example=texture_atlas",
-                    "--package=kayak_ui"
-                ],
-                "filter": {
-                    "name": "texture_atlas",
-                    "kind": "example"
-                }
-            },
-            "args": [],
-            "cwd": "${workspaceFolder}"
-        },
-        {
-            "type": "lldb",
-            "request": "launch",
-            "name": "Debug unit tests in example 'texture_atlas'",
-            "cargo": {
-                "args": [
-                    "test",
-                    "--no-run",
-                    "--example=texture_atlas",
-                    "--package=kayak_ui"
-                ],
-                "filter": {
-                    "name": "texture_atlas",
-                    "kind": "example"
-                }
-            },
-            "args": [],
-            "cwd": "${workspaceFolder}"
-        },
-        {
-            "type": "lldb",
-            "request": "launch",
-            "name": "Debug unit tests in library 'kayak_font'",
-            "cargo": {
-                "args": [
-                    "test",
-                    "--no-run",
-                    "--lib",
-                    "--package=kayak_font"
-                ],
-                "filter": {
-                    "name": "kayak_font",
-                    "kind": "lib"
-                }
-            },
-            "args": [],
-            "cwd": "${workspaceFolder}"
-        },
-        {
-            "type": "lldb",
-            "request": "launch",
-            "name": "Debug example 'bevy'",
-            "cargo": {
-                "args": [
-                    "build",
-                    "--example=bevy",
-                    "--package=kayak_font"
-                ],
-                "filter": {
-                    "name": "bevy",
-                    "kind": "example"
-                }
-            },
-            "args": [],
-            "cwd": "${workspaceFolder}"
-        },
-        {
-            "type": "lldb",
-            "request": "launch",
-            "name": "Debug unit tests in example 'bevy'",
-            "cargo": {
-                "args": [
-                    "test",
-                    "--no-run",
-                    "--example=bevy",
-                    "--package=kayak_font"
-                ],
-                "filter": {
-                    "name": "bevy",
-                    "kind": "example"
-                }
-            },
-            "args": [],
-            "cwd": "${workspaceFolder}"
-        }
-    ]
-}
\ No newline at end of file
diff --git a/assets/kenny/arrowBeige_left.png b/assets/kenny/arrowBeige_left.png
deleted file mode 100644
index 0d2fdaae0a322aa0b01767f6838018fbe99f031b..0000000000000000000000000000000000000000
Binary files a/assets/kenny/arrowBeige_left.png and /dev/null differ
diff --git a/assets/kenny/arrowBeige_right.png b/assets/kenny/arrowBeige_right.png
deleted file mode 100644
index 166bbfe83c11f9f8918309bd790fa0b8b1923ecd..0000000000000000000000000000000000000000
Binary files a/assets/kenny/arrowBeige_right.png and /dev/null differ
diff --git a/assets/kenny/arrowBlue_left.png b/assets/kenny/arrowBlue_left.png
deleted file mode 100644
index 05d3b3b7bd788db6abf3351e1eba315c0f6f152b..0000000000000000000000000000000000000000
Binary files a/assets/kenny/arrowBlue_left.png and /dev/null differ
diff --git a/assets/kenny/arrowBlue_right.png b/assets/kenny/arrowBlue_right.png
deleted file mode 100644
index 51fb299c4537f2a8b5a16ae0089ab0e41e0eecec..0000000000000000000000000000000000000000
Binary files a/assets/kenny/arrowBlue_right.png and /dev/null differ
diff --git a/assets/kenny/arrowBrown_left.png b/assets/kenny/arrowBrown_left.png
deleted file mode 100644
index de9961bc391b207b163a09827fd288127b163d14..0000000000000000000000000000000000000000
Binary files a/assets/kenny/arrowBrown_left.png and /dev/null differ
diff --git a/assets/kenny/arrowBrown_right.png b/assets/kenny/arrowBrown_right.png
deleted file mode 100644
index 2a6b571d6f308991f5822300c6f8ec770bbdba1e..0000000000000000000000000000000000000000
Binary files a/assets/kenny/arrowBrown_right.png and /dev/null differ
diff --git a/assets/kenny/arrowSilver_left.png b/assets/kenny/arrowSilver_left.png
deleted file mode 100644
index 8ed60b705238c5782b255868c5198233edbda554..0000000000000000000000000000000000000000
Binary files a/assets/kenny/arrowSilver_left.png and /dev/null differ
diff --git a/assets/kenny/arrowSilver_right.png b/assets/kenny/arrowSilver_right.png
deleted file mode 100644
index be71d37da86af30a30c960197227656aca4aee1b..0000000000000000000000000000000000000000
Binary files a/assets/kenny/arrowSilver_right.png and /dev/null differ
diff --git a/assets/kenny/barBack_horizontalLeft.png b/assets/kenny/barBack_horizontalLeft.png
deleted file mode 100644
index 801e6b5b29ba00f5009a9fcd462cfb4dabd77931..0000000000000000000000000000000000000000
Binary files a/assets/kenny/barBack_horizontalLeft.png and /dev/null differ
diff --git a/assets/kenny/barBack_horizontalMid.png b/assets/kenny/barBack_horizontalMid.png
deleted file mode 100644
index 319bdbc38ebf193cee5310fdbb35ab589a5a3475..0000000000000000000000000000000000000000
Binary files a/assets/kenny/barBack_horizontalMid.png and /dev/null differ
diff --git a/assets/kenny/barBack_horizontalRight.png b/assets/kenny/barBack_horizontalRight.png
deleted file mode 100644
index c9a850f506334abd9d52f64f744c7387cab7a279..0000000000000000000000000000000000000000
Binary files a/assets/kenny/barBack_horizontalRight.png and /dev/null differ
diff --git a/assets/kenny/barBack_verticalBottom.png b/assets/kenny/barBack_verticalBottom.png
deleted file mode 100644
index f0e7064bd2886df713fc7e548b237c3021e6e259..0000000000000000000000000000000000000000
Binary files a/assets/kenny/barBack_verticalBottom.png and /dev/null differ
diff --git a/assets/kenny/barBack_verticalMid.png b/assets/kenny/barBack_verticalMid.png
deleted file mode 100644
index 2d3e8fd2b5e605adb97a592da9c0d528c352c1f9..0000000000000000000000000000000000000000
Binary files a/assets/kenny/barBack_verticalMid.png and /dev/null differ
diff --git a/assets/kenny/barBack_verticalTop.png b/assets/kenny/barBack_verticalTop.png
deleted file mode 100644
index 543cd193f4438d0971841dc245e78dda4b4de964..0000000000000000000000000000000000000000
Binary files a/assets/kenny/barBack_verticalTop.png and /dev/null differ
diff --git a/assets/kenny/barBlue_horizontalBlue.png b/assets/kenny/barBlue_horizontalBlue.png
deleted file mode 100644
index 5367dba38591073c177329b2d08825f0decf9eaf..0000000000000000000000000000000000000000
Binary files a/assets/kenny/barBlue_horizontalBlue.png and /dev/null differ
diff --git a/assets/kenny/barBlue_horizontalLeft.png b/assets/kenny/barBlue_horizontalLeft.png
deleted file mode 100644
index 0245eb3b533adb39089d3b5d5544f3040ce18938..0000000000000000000000000000000000000000
Binary files a/assets/kenny/barBlue_horizontalLeft.png and /dev/null differ
diff --git a/assets/kenny/barBlue_horizontalRight.png b/assets/kenny/barBlue_horizontalRight.png
deleted file mode 100644
index e94c0c61e76ad123581c93972a91659a6ce7cec8..0000000000000000000000000000000000000000
Binary files a/assets/kenny/barBlue_horizontalRight.png and /dev/null differ
diff --git a/assets/kenny/barBlue_verticalBottom.png b/assets/kenny/barBlue_verticalBottom.png
deleted file mode 100644
index 2834db913084b0aa6402b3e2b8db40d1b54771e8..0000000000000000000000000000000000000000
Binary files a/assets/kenny/barBlue_verticalBottom.png and /dev/null differ
diff --git a/assets/kenny/barBlue_verticalMid.png b/assets/kenny/barBlue_verticalMid.png
deleted file mode 100644
index 7629e5527e7a9d9e2d430011c4ab7b143122e5d3..0000000000000000000000000000000000000000
Binary files a/assets/kenny/barBlue_verticalMid.png and /dev/null differ
diff --git a/assets/kenny/barBlue_verticalTop.png b/assets/kenny/barBlue_verticalTop.png
deleted file mode 100644
index 18dda588ea2c163cac750aae5d5b832ed7e33cc5..0000000000000000000000000000000000000000
Binary files a/assets/kenny/barBlue_verticalTop.png and /dev/null differ
diff --git a/assets/kenny/barGreen_horizontalLeft.png b/assets/kenny/barGreen_horizontalLeft.png
deleted file mode 100644
index 5b08f21c6657ad089f2371a30c866dd0f7d2ca87..0000000000000000000000000000000000000000
Binary files a/assets/kenny/barGreen_horizontalLeft.png and /dev/null differ
diff --git a/assets/kenny/barGreen_horizontalMid.png b/assets/kenny/barGreen_horizontalMid.png
deleted file mode 100644
index f7b5d775bebc60dc63879a9f100fa2dc4056366b..0000000000000000000000000000000000000000
Binary files a/assets/kenny/barGreen_horizontalMid.png and /dev/null differ
diff --git a/assets/kenny/barGreen_horizontalRight.png b/assets/kenny/barGreen_horizontalRight.png
deleted file mode 100644
index 407b61b535d91dcbbd524f03d9f52bfd556bf039..0000000000000000000000000000000000000000
Binary files a/assets/kenny/barGreen_horizontalRight.png and /dev/null differ
diff --git a/assets/kenny/barGreen_verticalBottom.png b/assets/kenny/barGreen_verticalBottom.png
deleted file mode 100644
index 1f733d4c07fa0bfad2d060ece7260ac0c573874c..0000000000000000000000000000000000000000
Binary files a/assets/kenny/barGreen_verticalBottom.png and /dev/null differ
diff --git a/assets/kenny/barGreen_verticalMid.png b/assets/kenny/barGreen_verticalMid.png
deleted file mode 100644
index 03ff210f290097aadfdadb8d958f16de269f4feb..0000000000000000000000000000000000000000
Binary files a/assets/kenny/barGreen_verticalMid.png and /dev/null differ
diff --git a/assets/kenny/barGreen_verticalTop.png b/assets/kenny/barGreen_verticalTop.png
deleted file mode 100644
index 235afa0b4f1be3e64c4a4b26ed7471eb58e6d8cb..0000000000000000000000000000000000000000
Binary files a/assets/kenny/barGreen_verticalTop.png and /dev/null differ
diff --git a/assets/kenny/barRed_horizontalLeft.png b/assets/kenny/barRed_horizontalLeft.png
deleted file mode 100644
index 0d8e7a6f84084924da9526600d46c5c8107a3313..0000000000000000000000000000000000000000
Binary files a/assets/kenny/barRed_horizontalLeft.png and /dev/null differ
diff --git a/assets/kenny/barRed_horizontalMid.png b/assets/kenny/barRed_horizontalMid.png
deleted file mode 100644
index 99da8810a636da75e56777141a476a3349270a2c..0000000000000000000000000000000000000000
Binary files a/assets/kenny/barRed_horizontalMid.png and /dev/null differ
diff --git a/assets/kenny/barRed_horizontalRight.png b/assets/kenny/barRed_horizontalRight.png
deleted file mode 100644
index 9ec2bd4fd1b9336a1ad147e72e0b90cd8a506335..0000000000000000000000000000000000000000
Binary files a/assets/kenny/barRed_horizontalRight.png and /dev/null differ
diff --git a/assets/kenny/barRed_verticalBottom.png b/assets/kenny/barRed_verticalBottom.png
deleted file mode 100644
index 767d6a4c607e94fc625ef175be65ec02caefa3cf..0000000000000000000000000000000000000000
Binary files a/assets/kenny/barRed_verticalBottom.png and /dev/null differ
diff --git a/assets/kenny/barRed_verticalMid.png b/assets/kenny/barRed_verticalMid.png
deleted file mode 100644
index 934e6f80d48c32fd19067d255ded269a8d157e8c..0000000000000000000000000000000000000000
Binary files a/assets/kenny/barRed_verticalMid.png and /dev/null differ
diff --git a/assets/kenny/barRed_verticalTop.png b/assets/kenny/barRed_verticalTop.png
deleted file mode 100644
index 35101937914a1de0c7b84c3fe246811b47fa7391..0000000000000000000000000000000000000000
Binary files a/assets/kenny/barRed_verticalTop.png and /dev/null differ
diff --git a/assets/kenny/barYellow_horizontalLeft.png b/assets/kenny/barYellow_horizontalLeft.png
deleted file mode 100644
index 79c4b63fdde994900ebceb2c3eed8f52b9869908..0000000000000000000000000000000000000000
Binary files a/assets/kenny/barYellow_horizontalLeft.png and /dev/null differ
diff --git a/assets/kenny/barYellow_horizontalMid.png b/assets/kenny/barYellow_horizontalMid.png
deleted file mode 100644
index 38f37b6c06e4a31b51fdea38752be70e9a77f953..0000000000000000000000000000000000000000
Binary files a/assets/kenny/barYellow_horizontalMid.png and /dev/null differ
diff --git a/assets/kenny/barYellow_horizontalRight.png b/assets/kenny/barYellow_horizontalRight.png
deleted file mode 100644
index 3d00f789fbbb163d20c5184a9970a02e6b218928..0000000000000000000000000000000000000000
Binary files a/assets/kenny/barYellow_horizontalRight.png and /dev/null differ
diff --git a/assets/kenny/barYellow_verticalBottom.png b/assets/kenny/barYellow_verticalBottom.png
deleted file mode 100644
index d0cc9d72dcdbe6c404639f66db905b3203fa29c0..0000000000000000000000000000000000000000
Binary files a/assets/kenny/barYellow_verticalBottom.png and /dev/null differ
diff --git a/assets/kenny/barYellow_verticalMid.png b/assets/kenny/barYellow_verticalMid.png
deleted file mode 100644
index e2491258bddf717d2026d2f804bd89a935b4e4a4..0000000000000000000000000000000000000000
Binary files a/assets/kenny/barYellow_verticalMid.png and /dev/null differ
diff --git a/assets/kenny/barYellow_verticalTop.png b/assets/kenny/barYellow_verticalTop.png
deleted file mode 100644
index 18b96ab2111d5f88218092ca0d6e816552326977..0000000000000000000000000000000000000000
Binary files a/assets/kenny/barYellow_verticalTop.png and /dev/null differ
diff --git a/assets/kenny/buttonLong_beige.png b/assets/kenny/buttonLong_beige.png
deleted file mode 100644
index c9b35372b38e503f3e22f3a05c529cd04d82991c..0000000000000000000000000000000000000000
Binary files a/assets/kenny/buttonLong_beige.png and /dev/null differ
diff --git a/assets/kenny/buttonLong_beige_pressed.png b/assets/kenny/buttonLong_beige_pressed.png
deleted file mode 100644
index 25378784c18ce313bfe6ec505cef5d962f8d3778..0000000000000000000000000000000000000000
Binary files a/assets/kenny/buttonLong_beige_pressed.png and /dev/null differ
diff --git a/assets/kenny/buttonLong_blue.png b/assets/kenny/buttonLong_blue.png
deleted file mode 100644
index cbaf8d7817a9bb52324e9bdf9df811638a6a5bd8..0000000000000000000000000000000000000000
Binary files a/assets/kenny/buttonLong_blue.png and /dev/null differ
diff --git a/assets/kenny/buttonLong_blue_pressed.png b/assets/kenny/buttonLong_blue_pressed.png
deleted file mode 100644
index 8ad0b5c2c60076b7a300246003fb4a8fbd35500c..0000000000000000000000000000000000000000
Binary files a/assets/kenny/buttonLong_blue_pressed.png and /dev/null differ
diff --git a/assets/kenny/buttonLong_brown.png b/assets/kenny/buttonLong_brown.png
deleted file mode 100644
index 299dc59d80e91af63053fdc0fe26d6224e43fcfe..0000000000000000000000000000000000000000
Binary files a/assets/kenny/buttonLong_brown.png and /dev/null differ
diff --git a/assets/kenny/buttonLong_brown_pressed.png b/assets/kenny/buttonLong_brown_pressed.png
deleted file mode 100644
index ec0a49445c98f2f9dbc6285973a913eca9ed7be2..0000000000000000000000000000000000000000
Binary files a/assets/kenny/buttonLong_brown_pressed.png and /dev/null differ
diff --git a/assets/kenny/buttonLong_grey.png b/assets/kenny/buttonLong_grey.png
deleted file mode 100644
index b8c3fe09dc4da9950b0d82d926402377ecee47d8..0000000000000000000000000000000000000000
Binary files a/assets/kenny/buttonLong_grey.png and /dev/null differ
diff --git a/assets/kenny/buttonLong_grey_pressed.png b/assets/kenny/buttonLong_grey_pressed.png
deleted file mode 100644
index ef427446823017796b305b808a73e77fc5b9c149..0000000000000000000000000000000000000000
Binary files a/assets/kenny/buttonLong_grey_pressed.png and /dev/null differ
diff --git a/assets/kenny/buttonRound_beige.png b/assets/kenny/buttonRound_beige.png
deleted file mode 100644
index 69cbb7ba27900d43ff74555b266d232c88f5c35c..0000000000000000000000000000000000000000
Binary files a/assets/kenny/buttonRound_beige.png and /dev/null differ
diff --git a/assets/kenny/buttonRound_blue.png b/assets/kenny/buttonRound_blue.png
deleted file mode 100644
index f6fb596e506aaf4d41c5eeec08c5ac60cbad38e0..0000000000000000000000000000000000000000
Binary files a/assets/kenny/buttonRound_blue.png and /dev/null differ
diff --git a/assets/kenny/buttonRound_brown.png b/assets/kenny/buttonRound_brown.png
deleted file mode 100644
index cb824ea08112cade237ce70b0e480784d11b9f04..0000000000000000000000000000000000000000
Binary files a/assets/kenny/buttonRound_brown.png and /dev/null differ
diff --git a/assets/kenny/buttonRound_grey.png b/assets/kenny/buttonRound_grey.png
deleted file mode 100644
index 1fe89f8acde8482d72d2a95572dbf13759eea766..0000000000000000000000000000000000000000
Binary files a/assets/kenny/buttonRound_grey.png and /dev/null differ
diff --git a/assets/kenny/buttonSquare_beige.png b/assets/kenny/buttonSquare_beige.png
deleted file mode 100644
index 15ecc1cab174e47effe6b26d35594886c7b499e8..0000000000000000000000000000000000000000
Binary files a/assets/kenny/buttonSquare_beige.png and /dev/null differ
diff --git a/assets/kenny/buttonSquare_beige_pressed.png b/assets/kenny/buttonSquare_beige_pressed.png
deleted file mode 100644
index 2465c870a33cdc902374d3a2136f40c18ce2dcbd..0000000000000000000000000000000000000000
Binary files a/assets/kenny/buttonSquare_beige_pressed.png and /dev/null differ
diff --git a/assets/kenny/buttonSquare_blue.png b/assets/kenny/buttonSquare_blue.png
deleted file mode 100644
index c165e51f7feb1169ed3cea51e4f87617a1e6b93c..0000000000000000000000000000000000000000
Binary files a/assets/kenny/buttonSquare_blue.png and /dev/null differ
diff --git a/assets/kenny/buttonSquare_blue_pressed.png b/assets/kenny/buttonSquare_blue_pressed.png
deleted file mode 100644
index 8ab31c5c340034da8b1d95e05f9563cb20774ba3..0000000000000000000000000000000000000000
Binary files a/assets/kenny/buttonSquare_blue_pressed.png and /dev/null differ
diff --git a/assets/kenny/buttonSquare_brown.png b/assets/kenny/buttonSquare_brown.png
deleted file mode 100644
index 1707aab0be8282fa1d7e1ed9e5f69f0170c21215..0000000000000000000000000000000000000000
Binary files a/assets/kenny/buttonSquare_brown.png and /dev/null differ
diff --git a/assets/kenny/buttonSquare_brown_pressed.png b/assets/kenny/buttonSquare_brown_pressed.png
deleted file mode 100644
index 0ea2427e98d65f0db66cd11011356c813c226945..0000000000000000000000000000000000000000
Binary files a/assets/kenny/buttonSquare_brown_pressed.png and /dev/null differ
diff --git a/assets/kenny/buttonSquare_grey.png b/assets/kenny/buttonSquare_grey.png
deleted file mode 100644
index f21b17e1b4b38c0bff17c3db279ec4b6a433ea8f..0000000000000000000000000000000000000000
Binary files a/assets/kenny/buttonSquare_grey.png and /dev/null differ
diff --git a/assets/kenny/buttonSquare_grey_pressed.png b/assets/kenny/buttonSquare_grey_pressed.png
deleted file mode 100644
index bf7b41072881803606334a14dae6e24b14145ae7..0000000000000000000000000000000000000000
Binary files a/assets/kenny/buttonSquare_grey_pressed.png and /dev/null differ
diff --git a/assets/kenny/cursorGauntlet_blue.png b/assets/kenny/cursorGauntlet_blue.png
deleted file mode 100644
index ab9eaafe0d11b360e536799037004edab6b4dfbc..0000000000000000000000000000000000000000
Binary files a/assets/kenny/cursorGauntlet_blue.png and /dev/null differ
diff --git a/assets/kenny/cursorGauntlet_bronze.png b/assets/kenny/cursorGauntlet_bronze.png
deleted file mode 100644
index 379b6f5c889eb8de8b7ad6738b7fd92144d26b33..0000000000000000000000000000000000000000
Binary files a/assets/kenny/cursorGauntlet_bronze.png and /dev/null differ
diff --git a/assets/kenny/cursorGauntlet_grey.png b/assets/kenny/cursorGauntlet_grey.png
deleted file mode 100644
index b6f84c34ad917931ce414044910c0f6693f9ae1a..0000000000000000000000000000000000000000
Binary files a/assets/kenny/cursorGauntlet_grey.png and /dev/null differ
diff --git a/assets/kenny/cursorHand_beige.png b/assets/kenny/cursorHand_beige.png
deleted file mode 100644
index ff2bba7414d26868c7e3b9a1cf8e399ae0b653fb..0000000000000000000000000000000000000000
Binary files a/assets/kenny/cursorHand_beige.png and /dev/null differ
diff --git a/assets/kenny/cursorHand_blue.png b/assets/kenny/cursorHand_blue.png
deleted file mode 100644
index 1ee5baaf38d45a98f51b209a968502e46681c942..0000000000000000000000000000000000000000
Binary files a/assets/kenny/cursorHand_blue.png and /dev/null differ
diff --git a/assets/kenny/cursorHand_grey.png b/assets/kenny/cursorHand_grey.png
deleted file mode 100644
index fa83d37ef5c20e9bda94ed989ff8383a4139c8b8..0000000000000000000000000000000000000000
Binary files a/assets/kenny/cursorHand_grey.png and /dev/null differ
diff --git a/assets/kenny/cursorSword_bronze.png b/assets/kenny/cursorSword_bronze.png
deleted file mode 100644
index 2b43075a33e0f6bd05e39e834bc6ff5894bf76b8..0000000000000000000000000000000000000000
Binary files a/assets/kenny/cursorSword_bronze.png and /dev/null differ
diff --git a/assets/kenny/cursorSword_gold.png b/assets/kenny/cursorSword_gold.png
deleted file mode 100644
index ccca5fd30a5ee35e6c5d59212e787285510d5033..0000000000000000000000000000000000000000
Binary files a/assets/kenny/cursorSword_gold.png and /dev/null differ
diff --git a/assets/kenny/cursorSword_silver.png b/assets/kenny/cursorSword_silver.png
deleted file mode 100644
index 1b37fe8e588fd429e789e50b9fd8b5675f48bbad..0000000000000000000000000000000000000000
Binary files a/assets/kenny/cursorSword_silver.png and /dev/null differ
diff --git a/assets/kenny/iconCheck_beige.png b/assets/kenny/iconCheck_beige.png
deleted file mode 100644
index bc4790e7f1e91579f31fc16ca705dacd2719ec21..0000000000000000000000000000000000000000
Binary files a/assets/kenny/iconCheck_beige.png and /dev/null differ
diff --git a/assets/kenny/iconCheck_blue.png b/assets/kenny/iconCheck_blue.png
deleted file mode 100644
index 1ef72cde22fb2f178e6c6d14853473bd40039dcc..0000000000000000000000000000000000000000
Binary files a/assets/kenny/iconCheck_blue.png and /dev/null differ
diff --git a/assets/kenny/iconCheck_bronze.png b/assets/kenny/iconCheck_bronze.png
deleted file mode 100644
index cdaa2f239d8d53bcfdb88e300cde5de81ade3f9f..0000000000000000000000000000000000000000
Binary files a/assets/kenny/iconCheck_bronze.png and /dev/null differ
diff --git a/assets/kenny/iconCheck_grey.png b/assets/kenny/iconCheck_grey.png
deleted file mode 100644
index e4016cf7d97d78ab3443a8b0df0f749b4311580e..0000000000000000000000000000000000000000
Binary files a/assets/kenny/iconCheck_grey.png and /dev/null differ
diff --git a/assets/kenny/iconCircle_beige.png b/assets/kenny/iconCircle_beige.png
deleted file mode 100644
index a5e3ca1ed5671c2cfe54b60cc75e16902b6d5cd4..0000000000000000000000000000000000000000
Binary files a/assets/kenny/iconCircle_beige.png and /dev/null differ
diff --git a/assets/kenny/iconCircle_blue.png b/assets/kenny/iconCircle_blue.png
deleted file mode 100644
index 7062e5c7d1efbb13987f28a76400c89fa8676546..0000000000000000000000000000000000000000
Binary files a/assets/kenny/iconCircle_blue.png and /dev/null differ
diff --git a/assets/kenny/iconCircle_brown.png b/assets/kenny/iconCircle_brown.png
deleted file mode 100644
index 7abf40fe3ce29d58c2492c095da6c454a7b37e12..0000000000000000000000000000000000000000
Binary files a/assets/kenny/iconCircle_brown.png and /dev/null differ
diff --git a/assets/kenny/iconCircle_grey.png b/assets/kenny/iconCircle_grey.png
deleted file mode 100644
index d35d80be281cb016b4f8eeeeb381969fb7b0d67a..0000000000000000000000000000000000000000
Binary files a/assets/kenny/iconCircle_grey.png and /dev/null differ
diff --git a/assets/kenny/iconCross_beige.png b/assets/kenny/iconCross_beige.png
deleted file mode 100644
index 32278dccd955874b321a7410a35a84342a32065a..0000000000000000000000000000000000000000
Binary files a/assets/kenny/iconCross_beige.png and /dev/null differ
diff --git a/assets/kenny/iconCross_blue.png b/assets/kenny/iconCross_blue.png
deleted file mode 100644
index 2ab70a18ce0590995d90340d15327f287575b306..0000000000000000000000000000000000000000
Binary files a/assets/kenny/iconCross_blue.png and /dev/null differ
diff --git a/assets/kenny/iconCross_brown.png b/assets/kenny/iconCross_brown.png
deleted file mode 100644
index 7cce69ada1e4cb5a85cfbf0b4acd6ab9b6f1a5cd..0000000000000000000000000000000000000000
Binary files a/assets/kenny/iconCross_brown.png and /dev/null differ
diff --git a/assets/kenny/iconCross_grey.png b/assets/kenny/iconCross_grey.png
deleted file mode 100644
index f57ccd8c322d5474a09f734c61f72fc63f65f442..0000000000000000000000000000000000000000
Binary files a/assets/kenny/iconCross_grey.png and /dev/null differ
diff --git a/assets/kenny/panelInset_beige.png b/assets/kenny/panelInset_beige.png
deleted file mode 100644
index f92416fa221ee96a706413b02140b7ecf08e46e1..0000000000000000000000000000000000000000
Binary files a/assets/kenny/panelInset_beige.png and /dev/null differ
diff --git a/assets/kenny/panelInset_beigeLight.png b/assets/kenny/panelInset_beigeLight.png
deleted file mode 100644
index 9ed1a7bc90f65bce6867a26062079b362c4a3b6d..0000000000000000000000000000000000000000
Binary files a/assets/kenny/panelInset_beigeLight.png and /dev/null differ
diff --git a/assets/kenny/panelInset_blue.png b/assets/kenny/panelInset_blue.png
deleted file mode 100644
index 0c2b5851e38c010d067501f099cbf88ebc97a492..0000000000000000000000000000000000000000
Binary files a/assets/kenny/panelInset_blue.png and /dev/null differ
diff --git a/assets/kenny/panelInset_brown.png b/assets/kenny/panelInset_brown.png
deleted file mode 100644
index fc293f144b4acc58ac8c44ea2f7cb4ff532fc252..0000000000000000000000000000000000000000
Binary files a/assets/kenny/panelInset_brown.png and /dev/null differ
diff --git a/assets/kenny/panel_beige.png b/assets/kenny/panel_beige.png
deleted file mode 100644
index a4a1d99d5249af3b6cb7e68681bb806e3b95d24b..0000000000000000000000000000000000000000
Binary files a/assets/kenny/panel_beige.png and /dev/null differ
diff --git a/assets/kenny/panel_beigeLight.png b/assets/kenny/panel_beigeLight.png
deleted file mode 100644
index 8ccf82cf70d500ed7d5e627f70b54e56cb02ed2a..0000000000000000000000000000000000000000
Binary files a/assets/kenny/panel_beigeLight.png and /dev/null differ
diff --git a/assets/kenny/panel_blue.png b/assets/kenny/panel_blue.png
deleted file mode 100644
index cf58c662e703e08e83f31c56834224e6810ee1ac..0000000000000000000000000000000000000000
Binary files a/assets/kenny/panel_blue.png and /dev/null differ
diff --git a/assets/kenny/panel_brown.png b/assets/kenny/panel_brown.png
deleted file mode 100644
index 97c381ba6000d74d29284c3e8bef0f9929c8ffdb..0000000000000000000000000000000000000000
Binary files a/assets/kenny/panel_brown.png and /dev/null differ
diff --git a/assets/main_menu/button-hover.png b/assets/main_menu/button-hover.png
new file mode 100644
index 0000000000000000000000000000000000000000..96ff294a033bd370702ce696eda1a79f6fe77334
Binary files /dev/null and b/assets/main_menu/button-hover.png differ
diff --git a/assets/main_menu/button.png b/assets/main_menu/button.png
new file mode 100644
index 0000000000000000000000000000000000000000..3923d2526c863619d63d1c6a821078f4aa5c1bd1
Binary files /dev/null and b/assets/main_menu/button.png differ
diff --git a/assets/main_menu/logo.png b/assets/main_menu/logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..cd21f03153fd9d802d4e9e77532bcbb66b7fdacc
Binary files /dev/null and b/assets/main_menu/logo.png differ
diff --git a/assets/main_menu/panel1.png b/assets/main_menu/panel1.png
new file mode 100644
index 0000000000000000000000000000000000000000..7eda0a714e2477f57f3be3480a151b8ef2e6b5f7
Binary files /dev/null and b/assets/main_menu/panel1.png differ
diff --git a/book/src/chapter_8.md b/book/src/chapter_8.md
index e83d1d3d4de77019496c7e92138ddcf0ed862b9a..b45eb3820ffc98f2531e4320d4d09bf799657f59 100644
--- a/book/src/chapter_8.md
+++ b/book/src/chapter_8.md
@@ -34,6 +34,7 @@ The nine patch widget is a special widget designed to render a sliced UI image.
     - `handle`: A bevy handle to a nine patch image asset which.
     - `border`: This represents the area that is sliced into eight pieces along the edge of the image. The ninth piece is the middle which is repeated.
 - KStyle
+- OnEvent
 - KChildren
 
 ### Text
diff --git a/examples/clipping.rs b/examples/clipping.rs
index b9c32fad3d0206023be1fed069f21de2e63ea3a0..b58313779fd5860584b02df79743aaa7aac29da1 100644
--- a/examples/clipping.rs
+++ b/examples/clipping.rs
@@ -6,11 +6,11 @@ fn startup(
     mut font_mapping: ResMut<FontMapping>,
     asset_server: Res<AssetServer>,
 ) {
-    font_mapping.set_default(asset_server.load("roboto.kayak_font"));
+    font_mapping.set_default(asset_server.load("lato-light.kayak_font"));
 
     commands.spawn(UICameraBundle::new());
 
-    let image = asset_server.load("kenny/panel_brown.png");
+    let image = asset_server.load("panel.png");
 
     let mut widget_context = KayakRootContext::new();
     let parent_id = None;
diff --git a/examples/image.rs b/examples/image.rs
index 990607ae4ac12ea4c6d202fa7700e0d3225d6630..03cac2b74d6477463abaceb386ec106d642d1e08 100644
--- a/examples/image.rs
+++ b/examples/image.rs
@@ -18,7 +18,7 @@ fn startup(
         <KayakAppBundle>
             <KImageBundle
                 image={KImage(image)}
-                style={KStyle {
+                styles={KStyle {
                     position_type: StyleProp::Value(KPositionType::SelfDirected),
                     left: StyleProp::Value(Units::Pixels(10.0)),
                     top: StyleProp::Value(Units::Pixels(10.0)),
diff --git a/examples/main_menu.rs b/examples/main_menu.rs
new file mode 100644
index 0000000000000000000000000000000000000000..a67d67bf27b210bc85056115b8f60092606cb979
--- /dev/null
+++ b/examples/main_menu.rs
@@ -0,0 +1,228 @@
+use bevy::{app::AppExit, prelude::*};
+use kayak_ui::prelude::{widgets::*, *};
+
+#[derive(Default, Clone, PartialEq, Component)]
+pub struct MenuButton {
+    text: String,
+}
+
+impl Widget for MenuButton {}
+
+#[derive(Bundle)]
+pub struct MenuButtonBundle {
+    button: MenuButton,
+    styles: KStyle,
+    on_event: OnEvent,
+    widget_name: WidgetName,
+}
+
+impl Default for MenuButtonBundle {
+    fn default() -> Self {
+        Self {
+            button: Default::default(),
+            styles: KStyle {
+                bottom: Units::Pixels(20.0).into(),
+                cursor: KCursorIcon(CursorIcon::Hand).into(),
+                ..Default::default()
+            },
+            on_event: OnEvent::default(),
+            widget_name: MenuButton::default().get_name(),
+        }
+    }
+}
+
+fn menu_button_render(
+    In((widget_context, entity)): In<(KayakWidgetContext, Entity)>,
+    mut commands: Commands,
+    asset_server: Res<AssetServer>,
+    menu_button_query: Query<&MenuButton>,
+    state_query: Query<&ButtonState>,
+) -> bool {
+    let state_entity =
+        widget_context.use_state(&mut commands, entity, ButtonState { hovering: false });
+
+    let button_text = menu_button_query.get(entity).unwrap().text.clone();
+    let button_image = asset_server.load("main_menu/button.png");
+    let button_image_hover = asset_server.load("main_menu/button-hover.png");
+
+    let on_event = OnEvent::new(
+        move |In((event_dispatcher_context, _, mut event, _entity)): In<(
+            EventDispatcherContext,
+            WidgetState,
+            Event,
+            Entity,
+        )>,
+              mut query: Query<&mut ButtonState>| {
+            if let Ok(mut button) = query.get_mut(state_entity) {
+                match event.event_type {
+                    EventType::MouseIn(..) => {
+                        event.stop_propagation();
+                        button.hovering = true;
+                    }
+                    EventType::MouseOut(..) => {
+                        button.hovering = false;
+                    }
+                    _ => {}
+                }
+            }
+            (event_dispatcher_context, event)
+        },
+    );
+
+    if let Ok(button_state) = state_query.get(state_entity) {
+        let button_image_handle = if button_state.hovering {
+            button_image_hover
+        } else {
+            button_image
+        };
+
+        let parent_id = Some(entity);
+        rsx! {
+            <NinePatchBundle
+                nine_patch={NinePatch {
+                    handle: button_image_handle,
+                    border: Edge::all(10.0),
+                }}
+                styles={KStyle {
+                    width: Units::Stretch(1.0).into(),
+                    height: Units::Pixels(40.0).into(),
+                    ..KStyle::default()
+                }}
+                on_event={on_event}
+            >
+                <TextWidgetBundle
+                    text={TextProps {
+                        alignment: Alignment::Middle,
+                        content: button_text,
+                        size: 28.0,
+                        user_styles: KStyle {
+                            top: Units::Stretch(1.0).into(),
+                            bottom: Units::Stretch(1.0).into(),
+                            ..Default::default()
+                        },
+                        ..Default::default()
+                    }}
+                />
+            </NinePatchBundle>
+        }
+    }
+    true
+}
+
+#[derive(Default, Resource)]
+pub struct PreloadResource {
+    images: Vec<Handle<Image>>,
+}
+
+fn startup(
+    mut commands: Commands,
+    mut font_mapping: ResMut<FontMapping>,
+    asset_server: Res<AssetServer>,
+    mut preload_resource: ResMut<PreloadResource>,
+) {
+    font_mapping.set_default(asset_server.load("lato-light.kayak_font"));
+
+    commands.spawn(UICameraBundle::new());
+
+    let mut widget_context = KayakRootContext::new();
+    widget_context.add_widget_data::<MenuButton, ButtonState>();
+    widget_context.add_widget_system(
+        MenuButton::default().get_name(),
+        widget_update::<MenuButton, ButtonState>,
+        menu_button_render,
+    );
+
+    let panel1_image = asset_server.load("main_menu/panel1.png");
+    let logo_image = asset_server.load("main_menu/logo.png");
+    let button_image = asset_server.load("main_menu/button.png");
+    let button_image_hover = asset_server.load("main_menu/button-hover.png");
+
+    preload_resource.images.extend(vec![
+        panel1_image.clone(),
+        logo_image.clone(),
+        button_image.clone(),
+        button_image_hover.clone(),
+    ]);
+
+    let handle_click_close = OnEvent::new(
+        move |In((event_dispatcher_context, _, event, _entity)): In<(
+            EventDispatcherContext,
+            WidgetState,
+            Event,
+            Entity,
+        )>,
+              mut exit: EventWriter<AppExit>| {
+            match event.event_type {
+                EventType::Click(..) => {
+                    exit.send(AppExit);
+                }
+                _ => {}
+            }
+            (event_dispatcher_context, event)
+        },
+    );
+
+    let parent_id = None;
+    rsx! {
+        <KayakAppBundle>
+            <NinePatchBundle
+                nine_patch={NinePatch {
+                    handle: panel1_image,
+                    border: Edge::all(25.0),
+                }}
+                styles={KStyle {
+                    width: Units::Pixels(350.0).into(),
+                    height: Units::Pixels(512.0).into(),
+                    left: Units::Stretch(1.0).into(),
+                    right: Units::Stretch(1.0).into(),
+                    top: Units::Stretch(1.0).into(),
+                    bottom: Units::Stretch(1.0).into(),
+                    padding: Edge::new(
+                        Units::Pixels(20.0),
+                        Units::Pixels(20.0),
+                        Units::Pixels(50.0),
+                        Units::Pixels(20.0),
+                    ).into(),
+                    ..KStyle::default()
+                }}
+            >
+                <KImageBundle
+                    image={KImage(logo_image)}
+                    styles={KStyle {
+                        width: Units::Pixels(310.0).into(),
+                        height: Units::Pixels(78.0).into(),
+                        bottom: Units::Stretch(1.0).into(),
+                        ..KStyle::default()
+                    }}
+                />
+                <ElementBundle
+                    id={"button_area"}
+                    styles={KStyle {
+                        left: Units::Pixels(50.0).into(),
+                        right: Units::Pixels(50.0).into(),
+                        ..Default::default()
+                    }}
+                >
+                    <MenuButtonBundle button={MenuButton { text: "Play".into() }} />
+                    <MenuButtonBundle button={MenuButton { text: "Options".into() }} />
+                    <MenuButtonBundle
+                        button={MenuButton { text: "Quit".into() }}
+                        on_event={handle_click_close}
+                    />
+                </ElementBundle>
+            </NinePatchBundle>
+        </KayakAppBundle>
+    }
+
+    commands.insert_resource(widget_context);
+}
+
+fn main() {
+    App::new()
+        .init_resource::<PreloadResource>()
+        .add_plugins(DefaultPlugins.set(ImagePlugin::default_nearest()))
+        .add_plugin(KayakContextPlugin)
+        .add_plugin(KayakWidgets)
+        .add_startup_system(startup)
+        .run()
+}
diff --git a/images/screen1.png b/images/screen1.png
index 31f281ae42390846d05f9ae3840fc4799e680725..6d6ef7380ad22715586e1d7d30953506271de2b0 100644
Binary files a/images/screen1.png and b/images/screen1.png differ
diff --git a/src/calculate_nodes.rs b/src/calculate_nodes.rs
index d3d0f616eec4d9e7bc2e7bf209527fda6436b80d..5f37f783ad27d02b2e6c3025a59d59c55a39c4a7 100644
--- a/src/calculate_nodes.rs
+++ b/src/calculate_nodes.rs
@@ -164,7 +164,7 @@ pub fn calculate_nodes(
             if !needs_layout {
                 commands.entity(entity).remove::<DirtyNode>();
             } else {
-                // log::info!("{:?} needs layout!", entity.id());
+                log::trace!("{:?} needs layout!", entity.index());
             }
 
             commands.entity(entity).insert(node);
diff --git a/src/widgets/button.rs b/src/widgets/button.rs
index 533e927fc8f860ac1e0b940304bd737a9517f178..ab772e2de7b527d71a164502a4e650f434858f7c 100644
--- a/src/widgets/button.rs
+++ b/src/widgets/button.rs
@@ -49,7 +49,7 @@ impl Widget for KButton {}
 
 #[derive(Component, Default, Debug, Clone, PartialEq, Eq)]
 pub struct ButtonState {
-    hovering: bool,
+    pub hovering: bool,
 }
 
 pub fn button_render(
diff --git a/src/widgets/image.rs b/src/widgets/image.rs
index fee9429bccfe176128690502165e1983a5cddb07..bc6d5cfe3f2c6085d1c50d99af58630c3b97a64e 100644
--- a/src/widgets/image.rs
+++ b/src/widgets/image.rs
@@ -17,7 +17,7 @@ impl Widget for KImage {}
 #[derive(Bundle)]
 pub struct KImageBundle {
     pub image: KImage,
-    pub style: KStyle,
+    pub styles: KStyle,
     pub widget_name: WidgetName,
 }
 
@@ -25,7 +25,7 @@ impl Default for KImageBundle {
     fn default() -> Self {
         Self {
             image: Default::default(),
-            style: Default::default(),
+            styles: Default::default(),
             widget_name: KImage::default().get_name(),
         }
     }
diff --git a/src/widgets/nine_patch.rs b/src/widgets/nine_patch.rs
index bd3014a8f37756df85322adf9a976c3fdb042ed1..0dd5b91e2fe6b5051845514da22d15f2fb2bf7c4 100644
--- a/src/widgets/nine_patch.rs
+++ b/src/widgets/nine_patch.rs
@@ -3,6 +3,7 @@ use bevy::prelude::{Bundle, Commands, Component, Entity, Handle, Image, In, Quer
 use crate::{
     children::KChildren,
     context::WidgetName,
+    on_event::OnEvent,
     prelude::KayakWidgetContext,
     styles::{Edge, KStyle, RenderCommand, StyleProp},
     widget::Widget,
@@ -52,6 +53,7 @@ pub struct NinePatchBundle {
     pub nine_patch: NinePatch,
     pub styles: KStyle,
     pub children: KChildren,
+    pub on_event: OnEvent,
     pub widget_name: WidgetName,
 }
 
@@ -61,6 +63,7 @@ impl Default for NinePatchBundle {
             nine_patch: Default::default(),
             styles: Default::default(),
             children: KChildren::default(),
+            on_event: OnEvent::default(),
             widget_name: NinePatch::default().get_name(),
         }
     }
@@ -76,7 +79,6 @@ pub fn nine_patch_render(
             border: nine_patch.border,
             handle: nine_patch.handle.clone_weak(),
         });
-
         children.process(&widget_context, Some(entity));
     }