further splitting up, reorganizing source files