+In Krita we don't use all the advanced features of Lager. We don't even use functional approach in its pure form. Instead we user Lager and its cursors to split "business logic" of Krita brush option from the GUI.
+
+## Problem statement
+
+* in Krita we have brush engines with very complicated bursh settings
+* these brush settings may depend one on another
+* we need to separate the "business logic" of these options from the GUI
+
+For example, "Brush Mode" option depends on:
+
+* whether the brush file has alpha channel or black-and-white
+ * all the modes are avaialble for brushes having the alpha-channel
+ * black-and-white brushes can work only in "Alpha Mask" mode
+* whether the brush engine uses new or old colorsmudge algorithm (selected on a different options page)
+* "Neutral Point", "Brightness" and "Contrast" options are available only for the last three modes in the list
+In other words, the number of modes available depends on the traits of the brush selected and on a checkbox from a completely different page of the options.
+* originally, all this logic was implemented using standard signal-slot connections between QWidget objects
+* it worked really badly, caused infinite loops signal-slot connections
+* it finally broke when we decided to implement "Brush HUD" feature: a separate widget that provides quick access to some of the brush settings for the user.
+ * now we have a serializable "data-model". Such data-models are just PODs that represent one-to-one how the user settings are saved on disk.
+ * then on top of this data-model we build "GUI-model".
+ * "GUI model" models all dependencies between different user settings (i.e. business-logic).
+ * we can easily pass `lager::cursor<>` from one settings page to another
+ * it has several benefits against normal Qt signals:
+ * connections are unidirectional, cycles are not possible, because the connection doesn't let the update pass through if the value is not changed (remember that we use PODs, so checks are easy)
+ * cursor-based connections have automatic cold-initialization, which is always forgotten in Qt's signals.
+
+## Conclusion
+
+ * if you have complex GUI that has dependencies between elements, use Lager to model these dependencies
+ * it will also help to transition to QML smoothly
+
+## Code examples
+
+You can find code examples in the article from the official Krita documentation: