Lots of changes, still not finished