diff --git a/core/modules/migrate/src/Row.php b/core/modules/migrate/src/Row.php
index 95e7f28..700329c 100644
--- a/core/modules/migrate/src/Row.php
+++ b/core/modules/migrate/src/Row.php
@@ -215,7 +215,21 @@ public function hasDestinationProperty($property) {
    */
   public function setDestinationProperty($property, $value) {
     $this->rawDestination[$property] = $value;
-    NestedArray::setValue($this->destination, explode(static::PROPERTY_SEPARATOR, $property), $value, TRUE);
+    // Properties like "body/format" should be nested differently in case they
+    // are multivalued.
+    if (strstr($property, static::PROPERTY_SEPARATOR) !== FALSE && is_array($value)) {
+      foreach ($value as $key => $subvalue) {
+        // Reorder the parents array so the key if after the property name,
+        // then the subproperty.
+        $parents = explode(static::PROPERTY_SEPARATOR, $property);
+        $first = array_shift($parents);
+        array_unshift($parents, $first, $key);
+        NestedArray::setValue($this->destination, $parents, $subvalue, TRUE);
+      }
+    }
+    else {
+      NestedArray::setValue($this->destination, explode(static::PROPERTY_SEPARATOR, $property), $value, TRUE);
+    }
   }
 
   /**
@@ -265,7 +279,19 @@ public function getRawDestination() {
    *   The destination value.
    */
   public function getDestinationProperty($property) {
-    return NestedArray::getValue($this->destination, explode(static::PROPERTY_SEPARATOR, $property));
+    $parents = explode(static::PROPERTY_SEPARATOR, $property);
+    $value = NestedArray::getValue($this->destination, $parents, $key_exists);
+    if (!$key_exists) {
+      $value = [];
+      $child = array_pop($parents);
+      $parent_value = NestedArray::getValue($this->destination, $parents, $key_exists);
+      foreach ($parent_value as $key => $subvalue) {
+        if (is_array($subvalue) && isset($subvalue[$child])) {
+          $value[$key] = $subvalue[$child];
+        }
+      }
+    }
+    return $value;
   }
 
   /**
diff --git a/core/modules/migrate/tests/src/Unit/RowTest.php b/core/modules/migrate/tests/src/Unit/RowTest.php
index 9a20bda..96dd8cf 100644
--- a/core/modules/migrate/tests/src/Unit/RowTest.php
+++ b/core/modules/migrate/tests/src/Unit/RowTest.php
@@ -260,15 +260,38 @@ public function testMultipleDestination() {
     $row->setDestinationProperty('image/alt', 'alt text');
     $row->setDestinationProperty('image/fid', 3);
 
+    $row->setDestinationProperty('body/value', [
+      'Body 1',
+      'Body 2',
+    ]);
+    $row->setDestinationProperty('body/format', [
+      'basic_html',
+      'full_html',
+    ]);
+    $row->setDestinationProperty('body/summary', [
+      'Summary 1',
+      'Summary 2',
+    ]);
+
     $this->assertTrue($row->hasDestinationProperty('image'));
     $this->assertFalse($row->hasDestinationProperty('alt'));
     $this->assertFalse($row->hasDestinationProperty('fid'));
 
+    $this->assertTrue($row->hasDestinationProperty('body'));
+    $this->assertFalse($row->hasDestinationProperty('value'));
+    $this->assertFalse($row->hasDestinationProperty('format'));
+    $this->assertFalse($row->hasDestinationProperty('summary'));
+
     $destination = $row->getDestination();
     $this->assertEquals('alt text', $destination['image']['alt']);
     $this->assertEquals(3, $destination['image']['fid']);
     $this->assertEquals('alt text', $row->getDestinationProperty('image/alt'));
     $this->assertEquals(3, $row->getDestinationProperty('image/fid'));
+
+    $this->assertEquals('Body 1', $destination['body'][0]['value']);
+    $this->assertEquals('full_html', $destination['body'][1]['format']);
+    $this->assertEquals(['Summary 1', 'Summary 2'], $row->getDestinationProperty('body/summary'));
+    $this->assertEquals(['basic_html', 'full_html'], $row->getDestinationProperty('body/format'));
   }
 
 }
