add geometry functions