#40 #41 #43 refactor has been started