diff --git a/decode.go b/decode.go
index d0b67a8..0e7932e 100644
--- a/decode.go
+++ b/decode.go
@@ -30,8 +30,9 @@
 
 // Decoder struct
 type Decoder struct {
-	reader *bufio.Reader
-	refs   []interface{}
+	reader     *bufio.Reader
+	refs       []interface{}
+	refHolders []*_refHolder
 	// record type refs, both list and map need it
 	typeRefs      *TypeRefs
 	classInfoList []*ClassInfo
@@ -236,7 +237,16 @@
 
 // Decode parse hessian data, and ensure the reflection value unpacked
 func (d *Decoder) Decode() (interface{}, error) {
-	return EnsureInterface(d.DecodeValue())
+	v, err := d.DecodeValue()
+	if err != nil {
+		return nil, err
+	}
+
+	for _, holder := range d.refHolders {
+		holder.notify()
+	}
+
+	return EnsureRawAny(v), nil
 }
 
 func (d *Decoder) Buffered() int { return d.reader.Buffered() }
diff --git a/decode_test.go b/decode_test.go
index 99db40b..ccdd092 100644
--- a/decode_test.go
+++ b/decode_test.go
@@ -30,6 +30,7 @@
 	"os/exec"
 	"reflect"
 	"testing"
+	"unsafe"
 )
 
 import (
@@ -257,3 +258,56 @@
 		return
 	}
 }
+
+type Issue323B struct {
+	Num int
+}
+
+func (b *Issue323B) JavaClassName() string {
+	return "B"
+}
+
+type Issue323BB struct {
+	List1 []*Issue323B
+	List2 []*Issue323B
+}
+
+func (bb *Issue323BB) JavaClassName() string {
+	return "BB"
+}
+
+func TestIssue323(t *testing.T) {
+	RegisterPOJO(&Issue323B{})
+	RegisterPOJO(&Issue323BB{})
+	a1 := &Issue323B{
+		Num: 1,
+	}
+	a2 := &Issue323B{
+		Num: 2,
+	}
+	list := []*Issue323B{a1, a2}
+	b := &Issue323BB{
+		List1: list,
+		List2: list,
+	}
+	e := NewEncoder()
+	err := e.Encode(b)
+	assert.Nil(t, err)
+	fmt.Println(b)
+
+	d := NewDecoder(e.Buffer())
+	res, err := d.Decode()
+	assert.Nil(t, err)
+	fmt.Println(res)
+	assert.True(t, reflect.DeepEqual(b, res))
+
+	decodB, ok := res.(*Issue323BB)
+	if !ok {
+		t.Log("res is not Issue323BB")
+		t.FailNow()
+	}
+
+	// list1 and list2 should be reference to the same one.
+	assert.Equal(t, unsafe.Pointer(reflect.ValueOf(decodB.List1).Pointer()),
+		unsafe.Pointer(reflect.ValueOf(decodB.List2).Pointer()))
+}
diff --git a/ref.go b/ref.go
index 09cd380..e23d688 100644
--- a/ref.go
+++ b/ref.go
@@ -78,6 +78,8 @@
 		}
 		// pack holder value
 		v = reflect.ValueOf(holder)
+
+		d.refHolders = append(d.refHolders, holder)
 	}
 
 	d.refs = append(d.refs, v)
