several improvements, basic surface wrapper