     
     var inputSyntax: RDFSyntax
     var defaultBase: String
-    
-    public init(syntax: RDFSyntax = .turtle, base defaultBase: String = "http://base.example.org/") {
+    var produceUniqueBlankIdentifiers: Bool
+    
+    public init(syntax: RDFSyntax = .turtle, base defaultBase: String = "http://base.example.org/", produceUniqueBlankIdentifiers: Bool = true) {
         self.inputSyntax = syntax
         self.defaultBase = defaultBase
+        self.produceUniqueBlankIdentifiers = produceUniqueBlankIdentifiers
     }
 
     @discardableResult
     public func parse(string: String, handleTriple: @escaping (Term, Term, Term) -> Void) throws -> Int {
         switch inputSyntax {
         case .ntriples, .turtle:
-            return try serd_parse(string: string, handleTriple: handleTriple)
+            return try serd_parse(string: string, produceUniqueBlankIdentifiers: produceUniqueBlankIdentifiers, handleTriple: handleTriple)
         default:
             let p = RDFXMLParser()
             try p.parse(string: string, tripleHandler: handleTriple)

    public func parse(file filename: String, base: String? = nil, handleTriple: @escaping TripleHandler) throws -> Int {
        switch inputSyntax {
        case .ntriples, .turtle:
            return try serd_parse(file: filename, base: base, handleTriple: handleTriple)
        default:
            let fileURI = URL(fileURLWithPath: filename)
            let p = RDFXMLParser(base: fileURI.absoluteString)

}

extension RDFParser {
    public func serd_parse(string: String, produceUniqueBlankIdentifiers: Bool = true, handleTriple: @escaping (Term, Term, Term) -> Void) throws -> Int {
        var baseUri = SERD_URI_NULL
        var base = SERD_NODE_NULL
        
        guard let env = serd_env_new(&base) else { throw RDFParserError.internalError("Failed to construct parser context") }
        base = serd_node_new_uri_from_string(defaultBase, nil, &baseUri)
        
        var context = ParserContext(env: env, handler: handleTriple, produceUniqueBlankIdentifiers: produceUniqueBlankIdentifiers)
        let status = withUnsafePointer(to: &context) { (ctx) -> SerdStatus in
            guard let reader = serd_reader_new(inputSyntax.serdSyntax!, UnsafeMutableRawPointer(mutating: ctx), serd_free_handle, serd_base_sink, serd_prefix_sink, serd_statement_sink, serd_end_sink) else { fatalError() }
            
