diff --git a/config/src/test/scala/com/typesafe/config/impl/ConfigSubstitutionTest.scala b/config/src/test/scala/com/typesafe/config/impl/ConfigSubstitutionTest.scala
index 59282c4f..ec8aa2a1 100644
--- a/config/src/test/scala/com/typesafe/config/impl/ConfigSubstitutionTest.scala
+++ b/config/src/test/scala/com/typesafe/config/impl/ConfigSubstitutionTest.scala
@@ -485,6 +485,63 @@ class ConfigSubstitutionTest extends TestUtils {
         assertTrue(e.getMessage.contains("item1.b"))
     }
 
+    // objects that mutually refer to each other
+    private val delayedMergeObjectEmbrace = {
+        parseObject("""
+  defaults {
+    a = 1
+    b = 2
+  }
+
+  item1 = ${defaults}
+  // item1.c refers to a field in item2 that refers to item1
+  item1.c = ${item2.d}
+  // item1.x refers to a field in item2 that doesn't go back to item1
+  item1.x = ${item2.y}
+
+  item2 = ${defaults}
+  // item2.d refers to a field in item1
+  item2.d = ${item1.a}
+  item2.y = 15
+""")
+    }
+
+    @Test
+    def resolveDelayedMergeObjectEmbrace() {
+        assertTrue(delayedMergeObjectEmbrace.attemptPeekWithPartialResolve("item1").isInstanceOf[ConfigDelayedMergeObject])
+        assertTrue(delayedMergeObjectEmbrace.attemptPeekWithPartialResolve("item2").isInstanceOf[ConfigDelayedMergeObject])
+
+        val resolved = delayedMergeObjectEmbrace.toConfig.resolve()
+        assertEquals(1, resolved.getInt("item1.c"))
+        assertEquals(1, resolved.getInt("item2.d"))
+        assertEquals(15, resolved.getInt("item1.x"))
+    }
+
+    // objects that mutually refer to each other
+    private val plainObjectEmbrace = {
+        parseObject("""
+  item1.a = 10
+  item1.b = ${item2.d}
+  item2.c = 12
+  item2.d = 14
+  item2.e = ${item1.a}
+  item2.f = ${item1.b}   // item1.b goes back to item2
+  item2.g = ${item2.f}   // goes back to ourselves
+""")
+    }
+
+    @Test
+    def resolvePlainObjectEmbrace() {
+        assertTrue(plainObjectEmbrace.attemptPeekWithPartialResolve("item1").isInstanceOf[SimpleConfigObject])
+        assertTrue(plainObjectEmbrace.attemptPeekWithPartialResolve("item2").isInstanceOf[SimpleConfigObject])
+
+        val resolved = plainObjectEmbrace.toConfig.resolve()
+        assertEquals(14, resolved.getInt("item1.b"))
+        assertEquals(10, resolved.getInt("item2.e"))
+        assertEquals(14, resolved.getInt("item2.f"))
+        assertEquals(14, resolved.getInt("item2.g"))
+    }
+
     @Test
     def useRelativeToSameFileWhenRelativized() {
         val child = parseObject("""foo=in child,bar=${foo}""")