Door refactor part 1

I'm going to school now and merge from upstream make my works go to nothing (hint: I'm bad at merging from upstream)

So another branch for part 2.