Fix it all! Solves #20, #6 and #4