Squashed commit of the following: commit 1f6f25a106bda1bc1612fbbaf412c1fa8bd4338a commit c4c2f392c3bb15cb8c95d5b4adfb442d1585c4d1 commit d78954f8a3384898fa6e676336fa4e04534ef441 commit 844cdf310ca34a42560b893cc4dc8449cbc0ec57 commit f3e3a6a40d5daf159eed4946eaa770ebeb184d63