I tried to squash the commits where it made sense and tested that every commit built.
(cherry picked from commit e94baffb)
(cherry picked from commit e3c25c0f)
(cherry picked from commit 8ae3870c)
(cherry picked from commit 8c7a70b6)
(cherry picked from commit 03b3f47b)