String() is generated now
diff --git a/src/gojsonpointer/pointer.go b/src/gojsonpointer/pointer.go
index c8673b6..da255e2 100644
--- a/src/gojsonpointer/pointer.go
+++ b/src/gojsonpointer/pointer.go
@@ -27,20 +27,20 @@
 }
 
 type JsonPointer struct {
-	stringRepresentation string
-	referenceTokens      []string
+	hasFragment     bool
+	referenceTokens []string
 }
 
 func (p *JsonPointer) parse(jsonPointerString string) error {
 
 	var err error
-	p.stringRepresentation = jsonPointerString
 
-	if p.stringRepresentation != EMPTY_POINTER {
-		if !strings.HasPrefix(p.stringRepresentation, POINTER_SEPARATOR) && !strings.HasPrefix(p.stringRepresentation, FRAGMENT) {
+	if jsonPointerString != EMPTY_POINTER {
+		p.hasFragment = strings.HasPrefix(jsonPointerString, FRAGMENT)
+		if !strings.HasPrefix(jsonPointerString, POINTER_SEPARATOR) && !p.hasFragment {
 			err = errors.New(INVALID_START)
 		} else {
-			referenceTokens := strings.Split(p.stringRepresentation, POINTER_SEPARATOR)
+			referenceTokens := strings.Split(jsonPointerString, POINTER_SEPARATOR)
 			for _, referenceToken := range referenceTokens[1:] {
 				p.referenceTokens = append(p.referenceTokens, decodeReferenceToken(referenceToken))
 			}
@@ -51,7 +51,19 @@
 }
 
 func (p *JsonPointer) String() string {
-	return p.stringRepresentation
+
+	tokens := p.referenceTokens
+	for i := range tokens {
+		tokens[i] = encodeReferenceToken(tokens[i])
+	}
+
+	pointerString := strings.Join(tokens, POINTER_SEPARATOR)
+
+	if p.hasFragment {
+		return FRAGMENT + pointerString
+	}
+
+	return pointerString
 }
 
 const (