diff --git a/app/code/Magento/Catalog/Model/Product/Gallery/CreateHandler.php b/app/code/Magento/Catalog/Model/Product/Gallery/CreateHandler.php
index ada156f571b0e60c8ff1a0ada71b308f9b62b38f..f17760237034041764539e533d5f1440b8dad3e4 100644
--- a/app/code/Magento/Catalog/Model/Product/Gallery/CreateHandler.php
+++ b/app/code/Magento/Catalog/Model/Product/Gallery/CreateHandler.php
@@ -160,12 +160,13 @@ class CreateHandler implements ExtensionInterface
             if (in_array($attrData, array_keys($existImages))) {
                 $product->setData($mediaAttrCode . '_label', $existImages[$attrData]['label']);
             }
-
-            $product->addAttributeUpdate(
-                $mediaAttrCode,
-                $product->getData($mediaAttrCode),
-                $product->getStoreId()
-            );
+            if (!empty($product->getData($mediaAttrCode))) {
+                $product->addAttributeUpdate(
+                    $mediaAttrCode,
+                    $product->getData($mediaAttrCode),
+                    $product->getStoreId()
+                );
+            }
         }
 
         $product->setData($attrCode, $value);
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/Gallery/CreateHandlerTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/Gallery/CreateHandlerTest.php
index 992c3bf310f51995ece1b78f6c566fd1d3baf1a4..2c42a289bd4c017a15591d9a110220fce74de346 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/Gallery/CreateHandlerTest.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/Gallery/CreateHandlerTest.php
@@ -18,6 +18,10 @@ class CreateHandlerTest extends \PHPUnit_Framework_TestCase
      */
     protected $createHandler;
 
+    private $fileName = '/m/a/magento_image.jpg';
+
+    private $fileLabel = 'Magento image';
+
     protected function setUp()
     {
         $this->createHandler = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
@@ -28,10 +32,8 @@ class CreateHandlerTest extends \PHPUnit_Framework_TestCase
     /**
      * @covers \Magento\Catalog\Model\Product\Gallery\CreateHandler::execute
      */
-    public function testExecute()
+    public function testExecuteWithImageDuplicate()
     {
-        $fileName = '/m/a/magento_image.jpg';
-        $fileLabel = 'Magento image';
         /** @var $product \Magento\Catalog\Model\Product */
         $product = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
             \Magento\Catalog\Model\Product::class
@@ -39,20 +41,141 @@ class CreateHandlerTest extends \PHPUnit_Framework_TestCase
         $product->load(1);
         $product->setData(
             'media_gallery',
-            ['images' => ['image' => ['file' => $fileName, 'label' => $fileLabel]]]
+            ['images' => ['image' => ['file' => $this->fileName, 'label' => $this->fileLabel]]]
         );
-        $product->setData('image', $fileName);
+        $product->setData('image', $this->fileName);
         $this->createHandler->execute($product);
         $this->assertStringStartsWith('/m/a/magento_image', $product->getData('media_gallery/images/image/new_file'));
-        $this->assertEquals($fileLabel, $product->getData('image_label'));
+        $this->assertEquals($this->fileLabel, $product->getData('image_label'));
 
         $product->setIsDuplicate(true);
         $product->setData(
             'media_gallery',
-            ['images' => ['image' => ['value_id' => '100', 'file' => $fileName, 'label' => $fileLabel]]]
+            ['images' => ['image' => ['value_id' => '100', 'file' => $this->fileName, 'label' => $this->fileLabel]]]
         );
         $this->createHandler->execute($product);
         $this->assertStringStartsWith('/m/a/magento_image', $product->getData('media_gallery/duplicate/100'));
-        $this->assertEquals($fileLabel, $product->getData('image_label'));
+        $this->assertEquals($this->fileLabel, $product->getData('image_label'));
+    }
+
+    /**
+     * @dataProvider executeDataProvider
+     * @param $image
+     * @param $smallImage
+     * @param $swatchImage
+     * @param $thumbnail
+     */
+    public function testExecuteWithImageRoles($image, $smallImage, $swatchImage, $thumbnail)
+    {
+        /** @var $product \Magento\Catalog\Model\Product */
+        $product = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
+            \Magento\Catalog\Model\Product::class
+        );
+        $product->load(1);
+        $product->setData(
+            'media_gallery',
+            ['images' => ['image' => ['file' => $this->fileName, 'label' => '']]]
+        );
+        $product->setData('image', $image);
+        $product->setData('small_image', $smallImage);
+        $product->setData('swatch_image', $swatchImage);
+        $product->setData('thumbnail', $thumbnail);
+        $this->createHandler->execute($product);
+
+        $resource = $product->getResource();
+        $id = $product->getId();
+        $storeId = $product->getStoreId();
+
+        $this->assertStringStartsWith('/m/a/magento_image', $product->getData('media_gallery/images/image/new_file'));
+        $this->assertEquals(
+            $image,
+            $resource->getAttributeRawValue($id, $resource->getAttribute('image'), $storeId)
+        );
+        $this->assertEquals(
+            $smallImage,
+            $resource->getAttributeRawValue($id, $resource->getAttribute('small_image'), $storeId)
+        );
+        $this->assertEquals(
+            $swatchImage,
+            $resource->getAttributeRawValue($id, $resource->getAttribute('swatch_image'), $storeId)
+        );
+        $this->assertEquals(
+            $thumbnail,
+            $resource->getAttributeRawValue($id, $resource->getAttribute('thumbnail'), $storeId)
+        );
+    }
+
+    /**
+     * @dataProvider executeDataProvider
+     * @param $image
+     * @param $smallImage
+     * @param $swatchImage
+     * @param $thumbnail
+     */
+    public function testExecuteWithoutImages($image, $smallImage, $swatchImage, $thumbnail)
+    {
+        /** @var $product \Magento\Catalog\Model\Product */
+        $product = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
+            \Magento\Catalog\Model\Product::class
+        );
+        $product->load(1);
+        $product->setData(
+            'media_gallery',
+            ['images' => ['image' => ['file' => $this->fileName, 'label' => '']]]
+        );
+        $product->setData('image', $image);
+        $product->setData('small_image', $smallImage);
+        $product->setData('swatch_image', $swatchImage);
+        $product->setData('thumbnail', $thumbnail);
+        $this->createHandler->execute($product);
+
+        $product->unsetData('image');
+        $product->unsetData('small_image');
+        $product->unsetData('swatch_image');
+        $product->unsetData('thumbnail');
+        $this->createHandler->execute($product);
+
+        $resource = $product->getResource();
+        $id = $product->getId();
+        $storeId = $product->getStoreId();
+
+        $this->assertStringStartsWith('/m/a/magento_image', $product->getData('media_gallery/images/image/new_file'));
+        $this->assertEquals(
+            $image,
+            $resource->getAttributeRawValue($id, $resource->getAttribute('image'), $storeId)
+        );
+        $this->assertEquals(
+            $smallImage,
+            $resource->getAttributeRawValue($id, $resource->getAttribute('small_image'), $storeId)
+        );
+        $this->assertEquals(
+            $swatchImage,
+            $resource->getAttributeRawValue($id, $resource->getAttribute('swatch_image'), $storeId)
+        );
+        $this->assertEquals(
+            $thumbnail,
+            $resource->getAttributeRawValue($id, $resource->getAttribute('thumbnail'), $storeId)
+        );
+    }
+
+    /**
+     * @return array
+     */
+    public function executeDataProvider()
+    {
+        return [
+            [
+                'image' => $this->fileName,
+                'small_image' => $this->fileName,
+                'swatch_image' => $this->fileName,
+                'thumbnail' => $this->fileName
+            ],
+            [
+                'image' => 'no_selection',
+                'small_image' => 'no_selection',
+                'swatch_image' => 'no_selection',
+                'thumbnail' => 'no_selection'
+            ]
+        ];
     }
 }