Lots of work, especially for better code structure