this is very incomplete, but I'm committing so I don't lose my progress