initial version
restructured