added surface algorithms