EQH-2376

Initial implementation complete. Some opportunities for optimizations, but since this code holds up the remaining module development I feel we should try to move forward.