the order of loaded modules is important, use an ordered dictionary to ensure order