add geometric functions