explicit surface constructor