diff --git a/rdf/parse_test.go b/rdf/parse_test.go
index fcba4a7b8609b4b76dba37439c1c8476ef516cc7..77e18c5bdb2cea9917b36489cfb7bf640e8a5f67 100644
--- a/rdf/parse_test.go
+++ b/rdf/parse_test.go
@@ -53,6 +53,24 @@ var testNQuads = []struct {
 			ObjectValue: nil,
 		},
 	},
+	{
+		input: `<some_subject_id> <predicate> _uid_:0x01 .`,
+		nq: NQuad{
+			Subject:     "some_subject_id",
+			Predicate:   "predicate",
+			ObjectId:    "_uid_:0x01",
+			ObjectValue: nil,
+		},
+	},
+	{
+		input: `_uid_:0x01 <predicate> _uid_:0x02 .`,
+		nq: NQuad{
+			Subject:     "_uid_:0x01",
+			Predicate:   "predicate",
+			ObjectId:    "_uid_:0x02",
+			ObjectValue: nil,
+		},
+	},
 	{
 		input: `_:alice <follows> _:bob0 .`,
 		nq: NQuad{
@@ -119,6 +137,10 @@ var testNQuads = []struct {
 		input:  "_uid_: 0x01 <knows> <something> .",
 		hasErr: true,
 	},
+	{
+		input:  "<alice> <knows> _uid_: 0x01 .",
+		hasErr: true,
+	},
 	{
 		input:  `_:alice "knows" stuff .`,
 		hasErr: true,
diff --git a/rdf/state.go b/rdf/state.go
index 78b3a7e0d150495057ee6c62f5722d67a52eb07f..737d901871496a906004f2244ef9feecdd3a6515 100644
--- a/rdf/state.go
+++ b/rdf/state.go
@@ -267,7 +267,13 @@ func lexObject(l *lex.Lexer) lex.StateFn {
 	}
 	if r == '_' {
 		l.Depth += 1
-		return lexBlankNode(l, itemObject, lexText)
+		r = l.Next()
+		if r == 'u' {
+			return lexUidNode(l, itemObject, lexText)
+
+		} else if r == ':' {
+			return lexBlankNode(l, itemObject, lexText)
+		}
 	}
 	if r == '"' {
 		l.Ignore()