Squashed commit of the following:
commit 6315a8f05f43ccc52bbddf0739f9638fdc01e0e5
commit 6a11ff64d1e5acd5e8c916ff8046751f93091efd
commit cb2cb217ebc01824e5ecfdeab0183bfb107f701b
commit 789c324332f4f6215b1a43eb965dfd337f9f3cb8
commit 65b798d7be34ecfac8476a58b50b9365754031c1
commit 42a4ab503404d1029597784d200502e5012b5885
commit a38fe1352ac020b82d7b34f22ef18c4005ab2e79
commit 18fa1a754ea3fe4b2a0159bc7acbd699b4f662cf