restructured for multi-module