diff --git a/entity_embed.module b/entity_embed.module
index ba1d1fd..4c76bc7 100644
--- a/entity_embed.module
+++ b/entity_embed.module
@@ -18,3 +18,54 @@ function entity_embed_help($route_name, RouteMatchInterface $route_match) {
       return '<p>' . t("Embed buttons define the buttons that can be added to CKEditor's toolbar. All buttons correspond to the selcted entity type, although a particular entity type can have more than one buttons. After you've created the desired buttons, go to <a href='@filterformats'>Text formats and editors configuration</a> page to add them to CKEditor's toolbar. Make sure to add <em>&lt;drupal-entity&gt;</em> to the list of 'Allowed HTML tags'.", array('@filterformats' => Url::fromRoute('filter.admin_overview')->toString())) . '</p>';
   }
 }
+
+/**
+ * Implements hook_embed_button_insert().
+ */
+function entity_embed_embed_button_insert(\Drupal\entity_embed\EmbedButtonInterface $entity) {
+  $button_icon_uuid = $entity->get('button_icon_uuid');
+  if ($button_icon_uuid) {
+    if ($file = \Drupal::entityManager()->loadEntityByUuid('file', $button_icon_uuid)) {
+      \Drupal::service('file.usage')->add($file, 'entity_embed', $entity->getEntityTypeId(), $entity->id());
+    }
+  }
+}
+
+/**
+ * Implements hook_embed_button_update().
+ */
+function entity_embed_embed_button_update(\Drupal\entity_embed\EmbedButtonInterface $entity) {
+  $new_button_icon_uuid = $entity->get('button_icon_uuid');
+
+  if (isset($entity->original)) {
+    $unchanged = $entity->original;
+    $old_button_icon_uuid = $unchanged->get('button_icon_uuid');
+
+    if (!empty($old_button_icon_uuid) && $old_button_icon_uuid != $new_button_icon_uuid) {
+      if ($file = \Drupal::entityManager()->loadEntityByUuid('file', $old_button_icon_uuid)) {
+        \Drupal::service('file.usage')->delete($file, 'entity_embed', $entity->getEntityTypeId(), $entity->id());
+      }
+    }
+  }
+
+  if ($new_button_icon_uuid) {
+    if ($file = \Drupal::entityManager()->loadEntityByUuid('file', $new_button_icon_uuid)) {
+      $usage = \Drupal::service('file.usage')->listUsage($file);
+      if (empty($usage['entity_embed'][$entity->getEntityTypeId()][$entity->id()])) {
+        \Drupal::service('file.usage')->add($file, 'entity_embed', $entity->getEntityTypeId(), $entity->id());
+      }
+    }
+  }
+}
+
+/**
+ * Implements hook_embed_button_update().
+ */
+function entity_embed_embed_button_delete(\Drupal\entity_embed\EmbedButtonInterface $entity) {
+  $button_icon_uuid = $entity->get('button_icon_uuid');
+  if ($button_icon_uuid) {
+    if ($file = \Drupal::entityManager()->loadEntityByUuid('file', $button_icon_uuid)) {
+      \Drupal::service('file.usage')->delete($file, 'entity_embed', $entity->getEntityTypeId(), $entity->id());
+    }
+  }
+}
diff --git a/src/Tests/EmbedButtonAdminTest.php b/src/Tests/EmbedButtonAdminTest.php
index 4dc8581..9efa909 100644
--- a/src/Tests/EmbedButtonAdminTest.php
+++ b/src/Tests/EmbedButtonAdminTest.php
@@ -8,6 +8,7 @@
 namespace Drupal\entity_embed\Tests;
 
 Use \Drupal\Component\Utility\Unicode;
+use Drupal\file\Entity\File;
 
 /**
  * Tests the administrative UI.
@@ -99,4 +100,40 @@ class EmbedButtonAdminTest extends EntityEmbedTestBase {
     $this->assertNoText($name, 'Test embed_button does not appears on the list page');
   }
 
+  /**
+   * Tests the embed_button and file usage integration.
+   */
+  public function testEmbedButtonIcon() {
+    $file1 = file_save_data(file_get_contents(drupal_get_path('module', 'entity_embed') . '/tests/fixture/entity.png'));
+    $file1->setTemporary();
+    $file1->save();
+
+    $file2 = file_save_data(file_get_contents(drupal_get_path('module', 'entity_embed') . '/tests/fixture/entity.png'));
+    $file2->setTemporary();
+    $file2->save();
+
+    $button = array(
+      'id' => 'test_button',
+      'label' => 'Testing embed button instance',
+      'button_label' => 'Test',
+      'entity_type' => 'node',
+      'entity_type_bundles' => array('article'),
+      'button_icon_uuid' => $file1->uuid(),
+      'display_plugins' => array('default'),
+    );
+
+    $entity = entity_create('embed_button', $button);
+    $entity->save();
+    $this->assertTrue(File::load($file1->id())->isPermanent());
+
+    $entity->button_icon_uuid = $file2->uuid();
+    $entity->save();
+
+    $this->assertTrue(File::load($file1->id())->isTemporary());
+    $this->assertTrue(File::load($file2->id())->isPermanent());
+
+    $entity->delete();
+    $this->assertTrue(File::load($file2->id())->isTemporary());
+  }
+
 }
diff --git a/tests/fixture/entity.png b/tests/fixture/entity.png
new file mode 100644
index 0000000000000000000000000000000000000000..6960acd694da43010f15623f4f60c39d9b3aa13a
GIT binary patch
literal 3780
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

literal 0
HcmV?d00001

