         var result = (z: false, m: false)
 
         if tokenizer.accept(.SINGLE_SPACE) == nil {
-            throw ParseError.unexpectedToken(errorMessage(tokenizer, expectedToken: .SINGLE_SPACE))
+            throw WKTReaderError.unexpectedToken(errorMessage(tokenizer, expectedToken: .SINGLE_SPACE))
         }
 
         if let requireZ = require.z, requireZ  == true { // Z is required and must be present


            if tokenizer.accept(.COMMA) != nil {
                if tokenizer.accept(.SINGLE_SPACE) == nil {
                    throw ParseError.unexpectedToken(errorMessage(tokenizer, expectedToken: .SINGLE_SPACE))
                }
            } else {
                done = true
            }
        } while !done

        if tokenizer.accept(.RIGHT_PAREN) == nil {
            throw ParseError.unexpectedToken(errorMessage(tokenizer, expectedToken: .RIGHT_PAREN))
        }

        return MultiPolygon<CoordinateType>(elements: elements)

        }

        if tokenizer.accept(.LEFT_PAREN) == nil {
            throw WKTReaderError.unexpectedToken(errorMessage(tokenizer, expectedToken: .LEFT_PAREN))
        }

        var elements = [Geometry]()
