VERY BIG TODO: - give a contructor a way to fail, so that no object will be created at all