Updated quite a bit