Almost finished (maybe it's correct)
Revert "Almost finished (maybe it's correct)"

This reverts commit d2a6bb8d4e50243c079c383f013807df58cce4ca.
Revert "Revert "Almost finished (maybe it's correct)""

This reverts commit 473d571b6295cd8443998cd213cccad74819dded.