         return envelope
     }
     
-    /** Returns a ShapeKitPolygon that represents the bounding envelope of this geometry. */
+    /** TODO: missing description */
     func pointOnSurface() -> Point {
         let pointOnSurfaceGEOM = GEOSPointOnSurface_r(GEOS_HANDLE, self.geometry)
         let pointOnSurface = Geometry.create(pointOnSurfaceGEOM, destroyOnDeinit: true) as! Point

    }
    
    /** Returns the DE-9IM intersection matrix (a string) representing the topological relationship between this geometry and the other. */
//    -(NSString *)relationshipWithGeometry:(ShapeKitGeometry *)geometry;
    func relationship(geometry: Geometry) -> String {
        let CString = GEOSRelate_r(GEOS_HANDLE, self.geometry, geometry.geometry)
        return String.fromCString(CString)!
    }
    
    /** Returns a ShapeKitGeometry representing the points shared by this geometry and other. */
    func intersection(geometry: Geometry) -> Geometry  {
        let intersectionGEOM = GEOSIntersection_r(GEOS_HANDLE, self.geometry, geometry.geometry)
        let intersection = Geometry.create(intersectionGEOM, destroyOnDeinit: true) as! Geometry
        return intersection
    }
    
    /** Returns a ShapeKitGeometry representing the points making up this geometry that do not make up other. */
    func difference(geometry: Geometry) -> Geometry  {
        let differenceGEOM = GEOSDifference_r(GEOS_HANDLE, self.geometry, geometry.geometry)
        let difference = Geometry.create(differenceGEOM, destroyOnDeinit: true) as! Geometry
        return difference
    }
    
    /** Returns a ShapeKitGeometry representing all the points in this geometry and the other. */
    func union(geometry: Geometry) -> Geometry  {
        let unionGEOM = GEOSIntersection_r(GEOS_HANDLE, self.geometry, geometry.geometry)
        let union = Geometry.create(unionGEOM, destroyOnDeinit: true) as! Geometry

public extension Geometry {
    /** @name Topological properties */
    
    /** Returns a Polygon that represents all points whose distance from this geometry is less than or equal to the given width.
    */
    func bufferWithWidth(width: Double) -> Polygon {
        let bufferGEOM = GEOSBuffer_r(GEOS_HANDLE, self.geometry, width, 0)
