All a shift calculation really is is a lookup function based on day of week and time of day to some text based output. I wonder if this is really something that could just live as a custom expression (Thread 1, Thread 2) instead of trying to create an isolated, unique part of the platform.