Add surface module and tests for it.