complete rework
merging after rework