Add more documentation, start moving towards spec impl