Proposal from Darius:
Looking at the way code is set up now, I see (in openmrs/web):
I propose that we deprecate these 6 classes, and make new copies of them where they belong, in the api layer, in an org.openmrs.layout package. While we're doing that, we can do some minor cleanup to expose them as beans rather than the current hacky non-spring singleton pattern that's there now.
This should not break any existing code for anyone. (The underlying data is in global properties, and it's fine to have two different objects both reading from one GP and listening for updates on it.) But it will allow us to fix this going forwards.
And I believe this is completely safe to backport to 1.9.