Replaced .reset(new Surface()) with a factory method