To your point 5, you may be interested in the discussion about changing keyed widget behavior. Session state “losing” parameters is tied to the widget cleanup process and I’m guessing that’s what you came across. Namely, when a widget is not rendered on the screen, it’s data gets deleted (including its value in session state). This is entirely expected, and you mentioned a solution that “interrupts” the cleanup process thereby keeping the keys. (My usual preferred solution is to treat all data assigned to widget keys as transient and have separate keys for keeping data between pages. This also keeps the solution on the page with the affected key and doesn’t require a copy-paste script at the top of every page in the app. )