rearranged the structure for more documentation