Filling out lots more impl, even added tests