Like my simple project, but this will be much more messy.