diff --git a/bynder.info.yml b/bynder.info.yml
index 75ee9fd..b4ffa19 100644
--- a/bynder.info.yml
+++ b/bynder.info.yml
@@ -6,11 +6,12 @@ core: 8.x
 configure: bynder.configuration_form
 
 dependencies:
-  - media_entity:media_entity
-  - dropzonejs:dropzonejs
+  - drupal:media (>= 8.5.0)
+  - dropzonejs:dropzonejs (>= 8.x-2.x)
   - ctools:ctools
   - entity_usage:entity_usage
 
 test_dependencies:
   - ctools:ctools
   - entity_usage:entity_usage
+  - media_entity_generic:media_entity_generic
diff --git a/bynder.install b/bynder.install
index 6f21b07..93b0c07 100644
--- a/bynder.install
+++ b/bynder.install
@@ -15,23 +15,23 @@ function bynder_requirements($phase) {
   $masonry_path = DRUPAL_ROOT . '/libraries/masonry/dist/masonry.pkgd.min.js';
 
   if (!file_exists($imagesloaded_path)) {
-    $requirements['imagesloaded'] = array(
+    $requirements['imagesloaded'] = [
       'title' => t('ImagesLoaded library missing'),
       'description' => t(
         'Bynder requires the imagesLoaded library. Download the newest release from https://github.com/desandro/imagesloaded releases and place it in /libraries'
       ),
       'severity' => REQUIREMENT_ERROR,
-    );
+    ];
   }
 
   if (!file_exists($masonry_path)) {
-    $requirements['masonry'] = array(
+    $requirements['masonry'] = [
       'title' => t('Masonry library missing'),
       'description' => t(
         'Bynder requires the Masonry library. Download the newest release from https://github.com/desandro/masonry/releases and place it in /libraries'
       ),
       'severity' => REQUIREMENT_ERROR,
-    );
+    ];
   }
 
   return $requirements;
@@ -42,8 +42,20 @@ function bynder_requirements($phase) {
  */
 function bynder_install() {
   $source = drupal_get_path('module', 'bynder') . '/images/icons';
-  $destination = \Drupal::config('media_entity.settings')->get('icon_base');
-  media_entity_copy_icons($source, $destination);
+  $destination = \Drupal::config('media.settings')->get('icon_base_uri');
+  file_prepare_directory($destination, FILE_CREATE_DIRECTORY | FILE_MODIFY_PERMISSIONS);
+  $files = file_scan_directory($source, '/.*\.(svg|png|jpg|jpeg|gif)$/');
+  foreach ($files as $file) {
+    // When reinstalling this module we don't want to copy the icons when they
+    // already exist. The icons could be replaced (by a contrib module or
+    // manually), so we don't want to replace the existing files. Removing the
+    // files when we uninstall could also be a problem if the files are
+    // referenced somewhere else. Since showing an error that it was not
+    // possible to copy the files is also confusing, we silently do nothing.
+    if (!file_exists($destination . DIRECTORY_SEPARATOR . $file->filename)) {
+      file_unmanaged_copy($file->uri, $destination, FILE_EXISTS_ERROR);
+    }
+  }
 }
 
 /**
diff --git a/bynder.module b/bynder.module
index b314a4f..e423515 100644
--- a/bynder.module
+++ b/bynder.module
@@ -5,12 +5,12 @@
  * Provides bynder integration.
  */
 
-use Drupal\bynder\Plugin\MediaEntity\Type\Bynder;
+use Drupal\bynder\Plugin\media\Source\Bynder;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Routing\RouteMatchInterface;
 use Drupal\Core\Url;
-use Drupal\media_entity\Entity\MediaBundle;
-use Drupal\media_entity\MediaInterface;
+use Drupal\media\Entity\MediaType;
+use Drupal\media\MediaInterface;
 
 /**
  * Implements hook_help().
@@ -56,9 +56,9 @@ function bynder_theme($existing, $type, $theme, $path) {
  */
 function bynder_form_alter(&$form, FormStateInterface $form_state, $form_id) {
   if ('media_bynder_edit_form' == $form_id) {
-    /** @var \Drupal\media_entity\Entity\Media $entity */
+    /** @var \Drupal\media\MediaInterface $entity */
     $entity = $form_state->getBuildInfo()['callback_object']->getEntity();
-    if ($entity->getType() instanceof Bynder) {
+    if ($entity->getSource() instanceof Bynder) {
       $form['edit_on_bynder'] = [
         '#type' => 'inline_template',
         '#template' => 'It is strongly advised to <a href="{{ uri }}" target="_blank"><i>edit asset\'s metadata on Bynder.</i></a> Please note that the changes won\'t be automatically updated here.',
@@ -73,14 +73,15 @@ function bynder_form_alter(&$form, FormStateInterface $form_state, $form_id) {
 /**
  * Returns edit link for Bynder asset.
  *
- * @param \Drupal\media_entity\MediaInterface $media
+ * @param \Drupal\media\MediaInterface $media
  *   The media entity with bynder as type provider.
  *
  * @return bool|string
  *   Returns edit link for Bynder asset or FALSE.
  */
 function get_uri_to_bynder(MediaInterface $media) {
-  if (!$media->getType() instanceof Bynder) {
+  $source_plugin = $media->getSource();
+  if (!$source_plugin instanceof Bynder) {
     return FALSE;
   }
 
@@ -88,10 +89,9 @@ function get_uri_to_bynder(MediaInterface $media) {
     return FALSE;
   }
 
-  $bynder_id = $media->{$media->getType()
-    ->getConfiguration()['source_field']}->value;
-
-  return Url::fromUri($account_domain . '/media', ['query' => ['mediaId' => $bynder_id]])->toString();
+  return Url::fromUri($account_domain . '/media', [
+    'query' => ['mediaId' => $source_plugin->getSourceFieldValue($media)],
+  ])->toString();
 }
 
 /**
@@ -100,10 +100,10 @@ function get_uri_to_bynder(MediaInterface $media) {
 function bynder_entity_extra_field_info() {
   $extra = [];
 
-  foreach (MediaBundle::loadMultiple() as $bundle) {
-    /** @var \Drupal\media_entity\Entity\MediaBundle $bundle */
-    if ($bundle->getType() instanceof Bynder) {
-      $extra['media'][$bundle->id()]['form']['edit_on_bynder'] = [
+  foreach (MediaType::loadMultiple() as $type) {
+    /** @var \Drupal\media\Entity\MediaType $type */
+    if ($type->getSource() instanceof Bynder) {
+      $extra['media'][$type->id()]['form']['edit_on_bynder'] = [
         'label' => t('Edit on Bynder'),
         'description' => t('Displays message that advises to edit metadata on Bynder.'),
         'weight' => -1,
@@ -205,17 +205,16 @@ function get_media_restriction($property_options) {
  * @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException
  */
 function update_bynder_media_usage_info() {
-  $entity_type_manager = \Drupal::entityTypeManager();
-  $bundle = $entity_type_manager->getStorage('media_bundle')->load('bynder');
-  $source_field = $bundle->getTypeConfiguration()['source_field'];
-
   $query = \Drupal::entityQuery('media');
   $query->condition('bundle', 'bynder');
   $entity_ids = $query->execute();
-  $entities = $entity_type_manager->getStorage('media')->loadMultiple($entity_ids);
-  foreach ($entities as $id => $media) {
+  $entities = \Drupal::entityTypeManager()
+    ->getStorage('media')
+    ->loadMultiple($entity_ids);
+  /** @var \Drupal\media\MediaInterface $media */
+  foreach ($entities as $media) {
     foreach (\Drupal::service('entity_usage.usage')->listUsage($media) as $type => $usage) {
-      if($type == 'node') {
+      if ($type == 'node') {
         foreach ($usage as $nid => $count) {
           $usage_url = Url::fromRoute(
             'entity.node.canonical',
@@ -223,19 +222,19 @@ function update_bynder_media_usage_info() {
             ['fragment' => "node/$nid"]
           );
 
-          $media_id = $media->{$source_field}->value;
+          $media_id = $media->getSource()->getSourceFieldValue($media);
           try {
             $usages = \Drupal::service('bynder_api')->getAssetUsages($media_id);
             foreach ($usages as $usage_info) {
               $old_usage_url = $usage_info['uri'];
               $url_parts = explode('#', $old_usage_url);
-              $node_info = isset($url_parts[1]) ? $url_parts[1] : null;
-              if($node_info == "node/$nid"
+              $node_info = isset($url_parts[1]) ? $url_parts[1] : NULL;
+              if ($node_info == "node/$nid"
                 && $usage_info['uri'] !== $usage_url->setAbsolute(TRUE)->toString()
                 && $usage_info['integration']['id']
                 && \Drupal::service('bynder_api')->getIntegrationId()) {
-                    \Drupal::service('bynder_api')->removeAssetUsage($media_id, $usage_info['uri']);
-                    \Drupal::service('bynder_api')->addAssetUsage(
+                \Drupal::service('bynder_api')->removeAssetUsage($media_id, $usage_info['uri']);
+                \Drupal::service('bynder_api')->addAssetUsage(
                   $media_id,
                   $usage_url,
                   $usage_info['timestamp'],
diff --git a/composer.json b/composer.json
index 58e2252..ec43bae 100644
--- a/composer.json
+++ b/composer.json
@@ -4,13 +4,13 @@
   "type": "drupal-module",
   "require": {
     "Bynder/bynder-php-sdk": "~1.0",
-    "drupal/media_entity": "~1.0",
-    "drupal/dropzonejs": "~1.0",
+    "drupal/dropzonejs": "~2.0",
     "drupal/entity_usage": "~1.0"
   },
   "require-dev": {
     "drupal/ctools": "~3.0",
     "drupal/entity_usage": "~1.0",
-    "drupal/entity_browser": "~1.0"
+    "drupal/entity_browser": "~1.0",
+    "drupal/media_entity_generic": "~1.0"
   }
 }
diff --git a/config/optional/core.entity_form_display.media.bynder.default.yml b/config/optional/core.entity_form_display.media.bynder.default.yml
index 7d69ec0..8e6aa1c 100644
--- a/config/optional/core.entity_form_display.media.bynder.default.yml
+++ b/config/optional/core.entity_form_display.media.bynder.default.yml
@@ -5,7 +5,7 @@ dependencies:
     - field.field.media.bynder.field_bynder_id
     - field.field.media.bynder.field_bynder_description
     - field.field.media.bynder.field_bynder_type
-    - media_entity.bundle.bynder
+    - media.type.bynder
 _core:
   default_config_hash: m7AoYQO-dpP9ahYMfrvbmSn8oKQPy-XtZqOjWDatUkA
 id: media.bynder.default
diff --git a/config/optional/core.entity_view_display.media.bynder.default.yml b/config/optional/core.entity_view_display.media.bynder.default.yml
index 800d0ba..0b3179d 100644
--- a/config/optional/core.entity_view_display.media.bynder.default.yml
+++ b/config/optional/core.entity_view_display.media.bynder.default.yml
@@ -5,7 +5,7 @@ dependencies:
     - field.field.media.bynder.field_bynder_id
     - field.field.media.bynder.field_bynder_description
     - field.field.media.bynder.field_bynder_type
-    - media_entity.bundle.bynder
+    - media.type.bynder
   module:
     - bynder
     - options
diff --git a/config/optional/field.field.media.bynder.field_bynder_description.yml b/config/optional/field.field.media.bynder.field_bynder_description.yml
index fbea4a5..5b98062 100644
--- a/config/optional/field.field.media.bynder.field_bynder_description.yml
+++ b/config/optional/field.field.media.bynder.field_bynder_description.yml
@@ -3,7 +3,7 @@ status: true
 dependencies:
   config:
     - field.storage.media.field_bynder_description
-    - media_entity.bundle.bynder
+    - media.type.bynder
 id: media.bynder.field_bynder_description
 field_name: field_bynder_description
 entity_type: media
diff --git a/config/optional/field.field.media.bynder.field_bynder_id.yml b/config/optional/field.field.media.bynder.field_bynder_id.yml
index 584a2b8..f134b66 100644
--- a/config/optional/field.field.media.bynder.field_bynder_id.yml
+++ b/config/optional/field.field.media.bynder.field_bynder_id.yml
@@ -3,7 +3,7 @@ status: true
 dependencies:
   config:
     - field.storage.media.field_bynder_id
-    - media_entity.bundle.bynder
+    - media.type.bynder
 id: media.bynder.field_bynder_id
 field_name: field_bynder_id
 entity_type: media
diff --git a/config/optional/field.field.media.bynder.field_bynder_type.yml b/config/optional/field.field.media.bynder.field_bynder_type.yml
index e166116..c62c12f 100644
--- a/config/optional/field.field.media.bynder.field_bynder_type.yml
+++ b/config/optional/field.field.media.bynder.field_bynder_type.yml
@@ -3,7 +3,7 @@ status: true
 dependencies:
   config:
     - field.storage.media.field_bynder_type
-    - media_entity.bundle.bynder
+    - media.type.bynder
   module:
     - options
 id: media.bynder.field_bynder_type
diff --git a/config/optional/field.storage.media.field_bynder_description.yml b/config/optional/field.storage.media.field_bynder_description.yml
index 9254f62..7ff8cff 100644
--- a/config/optional/field.storage.media.field_bynder_description.yml
+++ b/config/optional/field.storage.media.field_bynder_description.yml
@@ -2,7 +2,7 @@ langcode: en
 status: true
 dependencies:
   module:
-    - media_entity
+    - media
 id: media.field_bynder_description
 field_name: field_bynder_description
 entity_type: media
diff --git a/config/optional/field.storage.media.field_bynder_id.yml b/config/optional/field.storage.media.field_bynder_id.yml
index 4544654..af0aecd 100644
--- a/config/optional/field.storage.media.field_bynder_id.yml
+++ b/config/optional/field.storage.media.field_bynder_id.yml
@@ -2,7 +2,7 @@ langcode: en
 status: true
 dependencies:
   module:
-    - media_entity
+    - media
 id: media.field_bynder_id
 field_name: field_bynder_id
 entity_type: media
diff --git a/config/optional/field.storage.media.field_bynder_type.yml b/config/optional/field.storage.media.field_bynder_type.yml
index 3ea4be4..f2d1381 100644
--- a/config/optional/field.storage.media.field_bynder_type.yml
+++ b/config/optional/field.storage.media.field_bynder_type.yml
@@ -2,7 +2,7 @@ langcode: en
 status: true
 dependencies:
   module:
-    - media_entity
+    - media
     - options
 id: media.field_bynder_type
 field_name: field_bynder_type
diff --git a/config/optional/media_entity.bundle.bynder.yml b/config/optional/media.type.bynder.yml
similarity index 89%
rename from config/optional/media_entity.bundle.bynder.yml
rename to config/optional/media.type.bynder.yml
index 2ef9daf..4d4f7fb 100644
--- a/config/optional/media_entity.bundle.bynder.yml
+++ b/config/optional/media.type.bynder.yml
@@ -6,10 +6,10 @@ dependencies:
 id: bynder
 label: 'Bynder'
 description: 'Store for assets that are stored on Bynder.'
-type: bynder
+source: bynder
 queue_thumbnail_downloads: false
 new_revision: false
-type_configuration:
+source_configuration:
   source_field: field_bynder_id
 field_map:
   description: field_bynder_description
diff --git a/config/schema/bynder.schema.yml b/config/schema/bynder.schema.yml
index 3d4d167..98099f7 100644
--- a/config/schema/bynder.schema.yml
+++ b/config/schema/bynder.schema.yml
@@ -40,13 +40,9 @@ bynder.settings:
       type: integer
       label: 'Cached data lifetime'
 
-media_entity.bundle.type.bynder:
-  type: mapping
+media.source.bynder:
+  type: media.source.field_aware
   label: 'Bynder type configuration'
-  mapping:
-    source_field:
-      type: string
-      label: 'Field with Bynder media UUID'
 
 field.formatter.settings.bynder:
   type: mapping
@@ -72,9 +68,9 @@ entity_browser.browser.widget.bynder_search:
     items_per_page:
       type: integer
       label: 'Number of items to display per page'
-    media_bundle:
+    media_type:
       type: string
-      label: 'Media bundle for created entities'
+      label: 'Media type for created entities'
     tags_filter:
       type: boolean
       label: 'Wether to enable filtering based on tags'
@@ -92,9 +88,9 @@ entity_browser.browser.widget.bynder_upload:
     submit_text:
       type: string
       label: 'Submit button text'
-    media_bundle:
+    media_type:
       type: string
-      label: 'Media bundle for created entities'
+      label: 'Media type for created entities'
     brand:
       type: string
       label: 'Bynder brand for uploaded assets'
diff --git a/modules/bynder_select2/bynder_select2.module b/modules/bynder_select2/bynder_select2.module
deleted file mode 100644
index b3d9bbc..0000000
--- a/modules/bynder_select2/bynder_select2.module
+++ /dev/null
@@ -1 +0,0 @@
-<?php
diff --git a/modules/bynder_select2/src/Plugin/Field/FieldWidget/BynderSelect2SimpleWidget.php b/modules/bynder_select2/src/Plugin/Field/FieldWidget/BynderSelect2SimpleWidget.php
index a903fef..365dd51 100755
--- a/modules/bynder_select2/src/Plugin/Field/FieldWidget/BynderSelect2SimpleWidget.php
+++ b/modules/bynder_select2/src/Plugin/Field/FieldWidget/BynderSelect2SimpleWidget.php
@@ -66,7 +66,7 @@ class BynderSelect2SimpleWidget extends OptionsSelectWidget {
       'selector' => '.' . $class,
       'field_name' => $field_name,
       'settings' => $this->getSettings(),
-      'placeholder_text' =>  $element['#placeholder_text']
+      'placeholder_text' => $element['#placeholder_text'],
     ];
 
     $element['#attached']['drupalSettings']['bynder_select2'][$class] = $select2_settings;
diff --git a/modules/demo/bynder_demo.info.yml b/modules/demo/bynder_demo.info.yml
index 1f7d597..2e41e0b 100644
--- a/modules/demo/bynder_demo.info.yml
+++ b/modules/demo/bynder_demo.info.yml
@@ -6,7 +6,6 @@ core: 8.x
 
 dependencies:
   - bynder:bynder
-  - media_entity:media_entity
   - entity_browser:entity_browser
   - bynder:bynder_select2
   - drupal:node
diff --git a/modules/demo/config/install/core.entity_view_display.media.bynder.thumbnail.yml b/modules/demo/config/install/core.entity_view_display.media.bynder.thumbnail.yml
index a3e0f21..913d037 100644
--- a/modules/demo/config/install/core.entity_view_display.media.bynder.thumbnail.yml
+++ b/modules/demo/config/install/core.entity_view_display.media.bynder.thumbnail.yml
@@ -6,7 +6,7 @@ dependencies:
     - field.field.media.bynder.field_bynder_id
     - field.field.media.bynder.field_bynder_description
     - field.field.media.bynder.field_bynder_type
-    - media_entity.bundle.bynder
+    - media.type.bynder
   module:
     - bynder
 _core:
diff --git a/modules/demo/config/install/core.entity_view_mode.media.thumbnail.yml b/modules/demo/config/install/core.entity_view_mode.media.thumbnail.yml
index 588e0ed..50b32a4 100644
--- a/modules/demo/config/install/core.entity_view_mode.media.thumbnail.yml
+++ b/modules/demo/config/install/core.entity_view_mode.media.thumbnail.yml
@@ -2,7 +2,7 @@ langcode: en
 status: true
 dependencies:
   module:
-    - media_entity
+    - media
 id: media.thumbnail
 label: Thumbnail
 targetEntityType: media
diff --git a/modules/demo/config/install/entity_browser.browser.bynder.yml b/modules/demo/config/install/entity_browser.browser.bynder.yml
index af4a37f..04832ac 100644
--- a/modules/demo/config/install/entity_browser.browser.bynder.yml
+++ b/modules/demo/config/install/entity_browser.browser.bynder.yml
@@ -19,7 +19,7 @@ widgets:
   065aa618-5851-4744-b51c-02e57f5f0cc3:
     settings:
       submit_text: 'Select assets'
-      media_bundle: 'bynder'
+      media_type: 'bynder'
       tags_filter: true
     uuid: 065aa618-5851-4744-b51c-02e57f5f0cc3
     weight: 1
@@ -27,7 +27,7 @@ widgets:
     id: bynder_search
   71e675ea-7be0-4062-b7f7-b7f3e136bf03:
     settings:
-      media_bundle: bynder
+      media_type: bynder
       extensions: 'jpg jpeg png gif'
       dropzone_description: 'Drop files here to upload them.'
       submit_text: 'Upload assets'
diff --git a/modules/demo/config/install/field.field.node.bynder.field_media.yml b/modules/demo/config/install/field.field.node.bynder.field_media.yml
index ee5c158..079fa8b 100644
--- a/modules/demo/config/install/field.field.node.bynder.field_media.yml
+++ b/modules/demo/config/install/field.field.node.bynder.field_media.yml
@@ -3,7 +3,7 @@ status: true
 dependencies:
   config:
     - field.storage.node.field_media
-    - media_entity.bundle.bynder
+    - media.type.bynder
     - node.type.bynder
 id: node.bynder.field_media
 field_name: field_media
diff --git a/modules/demo/config/install/field.storage.node.field_media.yml b/modules/demo/config/install/field.storage.node.field_media.yml
index 40cad92..a3609ea 100644
--- a/modules/demo/config/install/field.storage.node.field_media.yml
+++ b/modules/demo/config/install/field.storage.node.field_media.yml
@@ -2,7 +2,7 @@ langcode: en
 status: true
 dependencies:
   module:
-    - media_entity
+    - media
     - node
 id: node.field_media
 field_name: field_media
diff --git a/modules/lightning/bynder_lightning.install b/modules/lightning/bynder_lightning.install
index 47d19f1..5fd3413 100644
--- a/modules/lightning/bynder_lightning.install
+++ b/modules/lightning/bynder_lightning.install
@@ -45,7 +45,7 @@ function bynder_lightning_install() {
       'label' => $bynder_upload['label'],
       'weight' => -10,
       'settings' => [
-        'media_bundle' => 'bynder',
+        'media_type' => 'bynder',
       ],
     ]
   );
@@ -55,7 +55,7 @@ function bynder_lightning_install() {
       'label' => $bynder_search['label'],
       'weight' => -20,
       'settings' => [
-        'media_bundle' => 'bynder',
+        'media_type' => 'bynder',
       ],
     ]
   );
diff --git a/modules/lightning/config/install/core.entity_view_display.media.bynder.embedded.yml b/modules/lightning/config/install/core.entity_view_display.media.bynder.embedded.yml
index 4e4760f..5a8d6ed 100644
--- a/modules/lightning/config/install/core.entity_view_display.media.bynder.embedded.yml
+++ b/modules/lightning/config/install/core.entity_view_display.media.bynder.embedded.yml
@@ -8,7 +8,7 @@ dependencies:
     - field.field.media.bynder.field_bynder_id
     - field.field.media.bynder.field_bynder_type
     - field.field.media.bynder.field_media_in_library
-    - media_entity.bundle.bynder
+    - media.type.bynder
   module:
     - bynder
 _core:
diff --git a/src/Controller/BynderMediaUsage.php b/src/Controller/BynderMediaUsage.php
index a758b86..e571558 100644
--- a/src/Controller/BynderMediaUsage.php
+++ b/src/Controller/BynderMediaUsage.php
@@ -3,7 +3,7 @@
 namespace Drupal\bynder\Controller;
 
 use Drupal\bynder\BynderApiInterface;
-use Drupal\bynder\Plugin\MediaEntity\Type\Bynder;
+use Drupal\bynder\Plugin\media\Source\Bynder;
 use Drupal\Core\Config\ConfigFactoryInterface;
 use Drupal\Core\Controller\ControllerBase;
 use Drupal\Core\Field\EntityReferenceFieldItemList;
@@ -75,10 +75,12 @@ class BynderMediaUsage extends ControllerBase {
    *   Bynder media usage list.
    */
   public function bynderMediaInfo(Request $request) {
+    /** @var \Drupal\node\NodeInterface $node */
     $node = $this->entityTypeManager()->getStorage('node')->load($request->attributes->get('node'));
-    $media_bundles = $this->entityTypeManager()->getStorage('media_bundle')->loadMultiple();
-    $bynder_bundles = array_filter($media_bundles, function ($bundle) {
-      return $bundle->getType() instanceof Bynder;
+    $media_types = $this->entityTypeManager()->getStorage('media_type')->loadMultiple();
+    $bynder_types = array_filter($media_types, function ($type) {
+      /** @var \Drupal\media\MediaTypeInterface $type */
+      return $type->getSource() instanceof Bynder;
     });
     $entity_reference_fields = array_filter($node->getFields(), function ($field) {
       return $field instanceof EntityReferenceFieldItemList;
@@ -92,18 +94,19 @@ class BynderMediaUsage extends ControllerBase {
     $rows = [];
     $entities = [];
 
+    /** @var \Drupal\Core\Field\EntityReferenceFieldItemListInterface $field */
     foreach ($entity_reference_fields as $field) {
-      /** @var \Drupal\media_entity\Entity\Media $entity */
+      /** @var \Drupal\media\Entity\Media $entity */
       foreach ($field->referencedEntities() as $entity) {
-        if (in_array($entity->bundle(), array_keys($bynder_bundles))) {
+        if (in_array($entity->bundle(), array_keys($bynder_types))) {
           $entities[] = $entity;
           $account_domain = $this->configFactory->get('bynder.settings')->get('account_domain');
-          $name = $entity->getType()->getField($entity, 'name');
-          $type = $entity->getType()->getField($entity, 'type');
-          $bynder_id = $entity->getType()->getField($entity, 'uuid');
+          $name = $entity->getSource()->getMetadata($entity, 'name');
+          $type = $entity->getSource()->getMetadata($entity, 'type');
+          $bynder_id = $entity->getSource()->getMetadata($entity, 'uuid');
           $row['name'] = $name ?: $bynder_id;
           $row['type'] = $type ?: $this->t('N/A');
-          $row['restriction'] = get_media_restriction($entity->getType()->getField($entity, 'propertyOptions'));
+          $row['restriction'] = get_media_restriction($entity->getSource()->getMetadata($entity, 'propertyOptions'));
           $links['edit'] = [
             'title' => $this->t('Edit'),
             'url' => $entity->toUrl('edit-form'),
diff --git a/src/Controller/BynderOAuthLogin.php b/src/Controller/BynderOAuthLogin.php
index 3cadc47..a7e9729 100644
--- a/src/Controller/BynderOAuthLogin.php
+++ b/src/Controller/BynderOAuthLogin.php
@@ -11,12 +11,10 @@ use Drupal\Core\Controller\ControllerBase;
 use Drupal\Core\Logger\LoggerChannelFactoryInterface;
 use Drupal\Core\Routing\TrustedRedirectResponse;
 use Drupal\Core\Session\AccountInterface;
-use GuzzleHttp\Exception\ClientException;
-use GuzzleHttp\Exception\TransferException;
+use GuzzleHttp\Exception\GuzzleException;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 use Symfony\Component\HttpFoundation\Request;
 use Symfony\Component\HttpFoundation\Response as SymfonyResponse;
-use GuzzleHttp\Exception\GuzzleException;
 
 /**
  * Controller for oAuth login.
diff --git a/src/Controller/BynderTagSearchService.php b/src/Controller/BynderTagSearchService.php
index 6479b52..fc23a0d 100644
--- a/src/Controller/BynderTagSearchService.php
+++ b/src/Controller/BynderTagSearchService.php
@@ -10,6 +10,9 @@ use Symfony\Component\DependencyInjection\ContainerInterface;
 use Symfony\Component\HttpFoundation\JsonResponse;
 use Symfony\Component\HttpFoundation\Request;
 
+/**
+ * Class BynderTagSearchService.
+ */
 class BynderTagSearchService extends ControllerBase {
 
   /**
@@ -63,8 +66,14 @@ class BynderTagSearchService extends ControllerBase {
 
     try {
       $results = array_map(
-        function ($tag) { return ['id' => $tag['tag'], 'text' => $tag['tag']]; },
-        $this->bynder->getTags(['limit' => self::TAG_LIST_LIMIT, 'keyword' => $keyword, 'minCount' => 1])
+        function ($tag) {
+          return ['id' => $tag['tag'], 'text' => $tag['tag']];
+        },
+        $this->bynder->getTags([
+          'limit' => self::TAG_LIST_LIMIT,
+          'keyword' => $keyword,
+          'minCount' => 1,
+        ])
       );
     }
     catch (\Exception $e) {
@@ -73,11 +82,11 @@ class BynderTagSearchService extends ControllerBase {
     }
 
     usort($results, function ($first, $second) {
-      return ($first['text'] < $b['text']) ? -1 : 1;
+      return ($first['text'] < $second['text']) ? -1 : 1;
     });
 
     $response['results'] = $results;
-    return new JsonResponse( $response );
+    return new JsonResponse($response);
   }
 
 }
\ No newline at end of file
diff --git a/src/EventSubscriber/UsageEventSubscriber.php b/src/EventSubscriber/UsageEventSubscriber.php
index 5fc0721..20982dc 100644
--- a/src/EventSubscriber/UsageEventSubscriber.php
+++ b/src/EventSubscriber/UsageEventSubscriber.php
@@ -5,7 +5,7 @@ namespace Drupal\bynder\EventSubscriber;
 use Drupal\bynder\BynderApiInterface;
 use Drupal\bynder\Exception\UnableToAddUsageException;
 use Drupal\bynder\Exception\UnableToDeleteUsageException;
-use Drupal\bynder\Plugin\MediaEntity\Type\Bynder;
+use Drupal\bynder\Plugin\media\Source\Bynder;
 use Drupal\Core\Entity\EntityTypeManagerInterface;
 use Drupal\Core\Url;
 use Drupal\entity_usage\Events\EntityUsageEvent;
@@ -71,35 +71,37 @@ class UsageEventSubscriber implements EventSubscriberInterface {
    *
    * @param \Drupal\entity_usage\Events\EntityUsageEvent $event
    *
-   * @return array | void
+   * @return array|null
    */
   private function getUsageEventMediainformation(EntityUsageEvent $event) {
     if ($event->getTargetEntityType() !== 'media') {
-        return;
+      return NULL;
     }
 
+    /** @var \Drupal\media\MediaInterface $media */
     $media = $this->entityTypeManager->getStorage('media')
       ->load($event->getTargetEntityId());
-    if(!isset($media)) {
-      return;
+    if (!isset($media)) {
+      return NULL;
     }
-    $bundle = $this->entityTypeManager->getStorage('media_bundle')->load($media->bundle());
 
-    if (!$bundle->getType() instanceof Bynder) {
-      return;
+    $source_plugin = $media->getSource();
+    if (!$source_plugin instanceof Bynder) {
+      return NULL;
     }
 
-    $source_field = $bundle->getTypeConfiguration()['source_field'];
-
-    $url = null;
-    if($event->getReferencingEntityId()) {
+    $url = NULL;
+    if ($event->getReferencingEntityId()) {
       $url = Url::fromRoute(
         'entity.' . $event->getReferencingEntityType() . '.canonical',
         [$event->getReferencingEntityType() => $event->getReferencingEntityId()],
         ['fragment' => $event->getReferencingEntityType() . '/' . $event->getReferencingEntityId()]
       );
     }
-    return ['mediaId' => $media->{$source_field}->value, 'url' => $url];
+    return [
+      'mediaId' => $source_plugin->getSourceFieldValue($media),
+      'url' => $url,
+    ];
   }
 
   /**
@@ -109,9 +111,9 @@ class UsageEventSubscriber implements EventSubscriberInterface {
    *   The event to process.
    */
   public function onAdd(EntityUsageEvent $event) {
-    if (\Drupal::service('module_handler')->moduleExists('entity_usage')){
+    if (\Drupal::service('module_handler')->moduleExists('entity_usage')) {
       $mediaInfo = $this->getUsageEventMediainformation($event);
-      if(isset($mediaInfo)) {
+      if (isset($mediaInfo)) {
         try {
           $this->bynderApi->addAssetUsage(
             $mediaInfo['mediaId'],
@@ -136,7 +138,7 @@ class UsageEventSubscriber implements EventSubscriberInterface {
   public function onDelete(EntityUsageEvent $event) {
 
     $mediaInfo = $this->getUsageEventMediainformation($event);
-    if(isset($mediaInfo['mediaId'])) {
+    if (isset($mediaInfo['mediaId'])) {
       try {
         $this->bynderApi->removeAssetUsage(
           $mediaInfo['mediaId'],
diff --git a/src/Exception/BundleNotBynderException.php b/src/Exception/BundleNotBynderException.php
index ddb3153..a5df9d4 100644
--- a/src/Exception/BundleNotBynderException.php
+++ b/src/Exception/BundleNotBynderException.php
@@ -21,7 +21,7 @@ class BundleNotBynderException extends BynderException {
    *   Name of the bundle.
    */
   public function __construct($bundle) {
-    $log_message = 'Media bundle @bundle is not using Bynder plugin. Please fix the Bynder <a href=":eb_conf">search widget configuration</a>.';
+    $log_message = 'Media type @bundle is not using Bynder plugin. Please fix the Bynder <a href=":eb_conf">search widget configuration</a>.';
     $log_message_args = [
       ':eb_conf' => Url::fromRoute('entity.entity_browser.collection')
         ->toString(),
diff --git a/src/Exception/BundleNotExistException.php b/src/Exception/BundleNotExistException.php
index 4e17983..9754070 100644
--- a/src/Exception/BundleNotExistException.php
+++ b/src/Exception/BundleNotExistException.php
@@ -21,7 +21,7 @@ class BundleNotExistException extends BynderException {
    *   Name of the bundle.
    */
   public function __construct($bundle) {
-    $log_message = 'Media bundle @bundle does not exists. Please fix the Bynder <a href=":eb_conf">search widget configuration</a>.';
+    $log_message = 'Media type @bundle does not exist. Please fix the Bynder <a href=":eb_conf">search widget configuration</a>.';
     $log_message_args = [
       ':eb_conf' => Url::fromRoute('entity.entity_browser.collection')
         ->toString(),
diff --git a/src/Form/BynderConfigurationForm.php b/src/Form/BynderConfigurationForm.php
index 4481b45..3868a58 100644
--- a/src/Form/BynderConfigurationForm.php
+++ b/src/Form/BynderConfigurationForm.php
@@ -3,7 +3,6 @@
 namespace Drupal\bynder\Form;
 
 use Drupal\bynder\BynderApiInterface;
-use Drupal\bynder\Plugin\EntityBrowser\Widget\BynderSearch;
 use Drupal\Core\Ajax\AjaxResponse;
 use Drupal\Core\Ajax\ReplaceCommand;
 use Drupal\Core\Config\ConfigFactoryInterface;
diff --git a/src/Plugin/EntityBrowser/Widget/BynderSearch.php b/src/Plugin/EntityBrowser/Widget/BynderSearch.php
index 2fb9c63..68f9f5d 100644
--- a/src/Plugin/EntityBrowser/Widget/BynderSearch.php
+++ b/src/Plugin/EntityBrowser/Widget/BynderSearch.php
@@ -3,12 +3,14 @@
 namespace Drupal\bynder\Plugin\EntityBrowser\Widget;
 
 use Drupal\bynder\BynderApiInterface;
-use Drupal\bynder\Controller\BynderTagSearchService;
 use Drupal\bynder\Exception\UnableToConnectException;
-use Drupal\bynder\Plugin\MediaEntity\Type\Bynder;
-use Drupal\Core\Database\Database;
+use Drupal\bynder\Plugin\media\Source\Bynder;
+use Drupal\Component\Datetime\TimeInterface;
+use Drupal\Core\Cache\CacheBackendInterface;
+use Drupal\Core\Config\ConfigFactoryInterface;
 use Drupal\Core\Entity\EntityTypeManagerInterface;
 use Drupal\Core\Entity\Query\QueryFactory;
+use Drupal\Core\Extension\ModuleHandlerInterface;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Language\LanguageManagerInterface;
 use Drupal\Core\Link;
@@ -17,15 +19,11 @@ use Drupal\Core\Routing\UrlGeneratorInterface;
 use Drupal\Core\Session\AccountProxyInterface;
 use Drupal\entity_browser\Element\EntityBrowserPagerElement;
 use Drupal\entity_browser\WidgetValidationManager;
-use Drupal\media_entity\Entity\Media;
-use Drupal\media_entity\MediaInterface;
+use Drupal\media\Entity\Media;
+use Drupal\media\MediaInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 use Symfony\Component\EventDispatcher\EventDispatcherInterface;
 use Symfony\Component\HttpFoundation\RequestStack;
-use Drupal\Core\Config\ConfigFactoryInterface;
-use Drupal\Core\Cache\CacheBackendInterface;
-use Drupal\Component\Datetime\TimeInterface;
-use Drupal\Core\Extension\ModuleHandlerInterface;
 
 /**
  * Uses a Bynder API to search and provide entity listing in a browser's widget.
@@ -88,7 +86,7 @@ class BynderSearch extends BynderWidgetBase {
   /**
    * The time service.
    *
-   * @var \Drupal\Component\Datetime\TimeInterface $time
+   * @var \Drupal\Component\Datetime\TimeInterface
    */
   protected $time;
 
@@ -202,18 +200,18 @@ class BynderSearch extends BynderWidgetBase {
       '#default_value' => $this->configuration['tags_filter'],
     ];
 
-    foreach ($this->entityTypeManager->getStorage('media_bundle')->loadMultiple() as $bundle) {
-      /** @var \Drupal\media_entity\MediaBundleInterface $bundle */
-      if ($bundle->getType() instanceof Bynder) {
-        $form['media_bundle']['#options'][$bundle->id()] = $bundle->label();
+    foreach ($this->entityTypeManager->getStorage('media_type')->loadMultiple() as $type) {
+      /** @var \Drupal\media\MediaTypeInterface $type */
+      if ($type->getSource() instanceof Bynder) {
+        $form['media_type']['#options'][$type->id()] = $type->label();
       }
     }
 
-    if (empty($form['media_bundle']['#options'])) {
-      $form['media_bundle']['#disabled'] = TRUE;
+    if (empty($form['media_type']['#options'])) {
+      $form['media_type']['#disabled'] = TRUE;
       $form['items_per_page']['#disabled'] = TRUE;
-      $form['media_bundle']['#description'] = $this->t('You must @create_bundle before using this widget.', [
-        '@create_bundle' => Link::createFromRoute($this->t('create a Bynder media bundle'), 'entity.media_bundle.add_form')
+      $form['media_type']['#description'] = $this->t('You must @create_type before using this widget.', [
+        '@create_type' => Link::createFromRoute($this->t('create a Bynder media type'), 'entity.media_type.add_form')
           ->toString(),
       ]);
     }
@@ -234,7 +232,8 @@ class BynderSearch extends BynderWidgetBase {
         '#default_value' => $this->configuration['allowed_properties'],
         '#options' => $options,
       ];
-    } catch (\Exception $e) {
+    }
+    catch (\Exception $e) {
       (new UnableToConnectException())->logException()->displayMessage();
     }
 
@@ -245,15 +244,15 @@ class BynderSearch extends BynderWidgetBase {
    * {@inheritdoc}
    */
   protected function prepareEntities(array $form, FormStateInterface $form_state) {
-    if (!$this->checkBundle()) {
+    if (!$this->checkType()) {
       return [];
     }
     $media = [];
     $selected_ids = array_keys(array_filter($form_state->getValue('selection', [])));
-    /** @var \Drupal\media_entity\MediaBundleInterface $bundle */
-    $bundle = $this->entityTypeManager->getStorage('media_bundle')
-      ->load($this->configuration['media_bundle']);
-    $plugin = $bundle->getType();
+    /** @var \Drupal\media\MediaTypeInterface $type */
+    $type = $this->entityTypeManager->getStorage('media_type')
+      ->load($this->configuration['media_type']);
+    $plugin = $type->getSource();
     $source_field = $plugin->getConfiguration()['source_field'];
     foreach ($selected_ids as $bynder_id) {
       $mid = $this->entityQuery->get('media')
@@ -266,7 +265,7 @@ class BynderSearch extends BynderWidgetBase {
       }
       else {
         $media[] = Media::create([
-          'bundle' => $bundle->id(),
+          'bundle' => $type->id(),
           $source_field => $bynder_id,
         ]);
       }
@@ -284,9 +283,6 @@ class BynderSearch extends BynderWidgetBase {
       $form['actions']['submit']['#access'] = FALSE;
       return $form;
     }
-    $select_element_type = \Drupal::service('module_handler')
-      ->moduleExists('bynder_select2')
-      ? 'bynder_select2_simple_element' : 'select';
 
     $form['#attached']['library'][] = 'bynder/search_view';
 
diff --git a/src/Plugin/EntityBrowser/Widget/BynderUpload.php b/src/Plugin/EntityBrowser/Widget/BynderUpload.php
index d0fb216..a481636 100644
--- a/src/Plugin/EntityBrowser/Widget/BynderUpload.php
+++ b/src/Plugin/EntityBrowser/Widget/BynderUpload.php
@@ -10,7 +10,7 @@ use Drupal\bynder\Exception\BynderException;
 use Drupal\bynder\Exception\UnableToConnectException;
 use Drupal\bynder\Exception\UploadPermissionException;
 use Drupal\bynder\Exception\UploadFailedException;
-use Drupal\bynder\Plugin\MediaEntity\Type\Bynder;
+use Drupal\bynder\Plugin\media\Source\Bynder;
 use Drupal\Component\Utility\NestedArray;
 use Drupal\Core\Config\ConfigFactoryInterface;
 use Drupal\Core\Entity\EntityTypeManagerInterface;
@@ -20,8 +20,8 @@ use Drupal\Core\Link;
 use Drupal\Core\Logger\LoggerChannelFactoryInterface;
 use Drupal\Core\Url;
 use Drupal\entity_browser\WidgetValidationManager;
-use Drupal\media_entity\Entity\Media;
-use Drupal\media_entity\MediaInterface;
+use Drupal\media\Entity\Media;
+use Drupal\media\MediaInterface;
 use GuzzleHttp\Exception\RequestException;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 use Symfony\Component\EventDispatcher\EventDispatcherInterface;
@@ -132,7 +132,7 @@ class BynderUpload extends BynderWidgetBase {
       $form['actions']['submit']['#access'] = FALSE;
       (new UploadPermissionException($this->configuration['entity_browser_id']))->logException();
       $form['message'] = [
-        '#markup' => t("Unable to upload files to Bynder. Make sure your user account has enough permissions.")
+        '#markup' => $this->t("Unable to upload files to Bynder. Make sure your user account has enough permissions."),
       ];
     }
     else {
@@ -189,10 +189,11 @@ class BynderUpload extends BynderWidgetBase {
    */
   public function submit(array &$element, array &$form, FormStateInterface $form_state) {
     if (!empty($form_state->getTriggeringElement()['#bynder_upload_submit'])) {
-      $bundle = $this->entityTypeManager->getStorage('media_bundle')
-        ->load($this->configuration['media_bundle']);
+      /** @var \Drupal\media\MediaTypeInterface $type */
+      $type = $this->entityTypeManager->getStorage('media_type')
+        ->load($this->configuration['media_type']);
 
-      if ($bundle && ($bundle->getType()) instanceof Bynder) {
+      if ($type && ($type->getSource()) instanceof Bynder) {
         $form_state->setRebuild();
         $batch = [
           'title' => $this->t('Uploading assets to Bynder'),
@@ -219,8 +220,8 @@ class BynderUpload extends BynderWidgetBase {
             [static::class, 'batchCreateEntities'],
             [
               $file,
-              $bundle->getTypeConfiguration()['source_field'],
-              $bundle->id()
+              $type->get('source_configuration')['source_field'],
+              $type->id(),
             ],
           ];
         }
@@ -240,11 +241,11 @@ class BynderUpload extends BynderWidgetBase {
         }
       }
       else {
-        if (!$bundle) {
-          (new BundleNotExistException($this->configuration['media_bundle']))->logException()->displayMessage();
+        if (!$type) {
+          (new BundleNotExistException($this->configuration['media_type']))->logException()->displayMessage();
         }
         else {
-          (new BundleNotBynderException($bundle->label()))->logException()->displayMessage();
+          (new BundleNotBynderException($type->label()))->logException()->displayMessage();
         }
 
       }
@@ -253,7 +254,9 @@ class BynderUpload extends BynderWidgetBase {
       try {
         $media = $this->prepareEntities($form, $form_state);
         array_walk($media, function (MediaInterface $item) {
-          $item->save();
+          if (!$item->id()) {
+            $item->save();
+          }
         });
         $this->selectEntities($media, $form_state);
         $form_state->set('uploaded_assets', NULL);
@@ -292,7 +295,7 @@ class BynderUpload extends BynderWidgetBase {
         }
       }
 
-      if(isset($context['results']['accessRequestId'])) {
+      if (isset($context['results']['accessRequestId'])) {
         $data['accessRequestId'] = $context['results']['accessRequestId'];
       }
       $result = \Drupal::service('bynder_api')->uploadFileAsync($data);
@@ -322,7 +325,7 @@ class BynderUpload extends BynderWidgetBase {
    */
   public static function batchCreateEntities($file, $source_field, $bundle, &$context) {
     try {
-      if(\Drupal::service('session')->get('upload_permissions', FALSE) != 'MEDIAUPLOADFORAPPROVAL') {
+      if (\Drupal::service('session')->get('upload_permissions', FALSE) != 'MEDIAUPLOADFORAPPROVAL') {
         // Let's try to fetch the uploaded resource from the API as we will be
         // able to save it only if that succeeds.
         $uuid = $context['results'][$file['path']];
@@ -353,7 +356,7 @@ class BynderUpload extends BynderWidgetBase {
       sleep(3);
 
       if ($context['sandbox']['fails'] >= static::FAIL_LIMIT) {
-        (new UploadFailedException(t("There was an unexpected error after uploading the file to Bynder. ")))->logException()->displayMessage();
+        (new UploadFailedException(t("There was an unexpected error after uploading the file to Bynder.")))->logException()->displayMessage();
         drupal_set_message(t("There was an unexpected error after uploading the file to Bynder. Please contact your site administrator for more info."), 'warning');
       }
     }
@@ -393,17 +396,17 @@ class BynderUpload extends BynderWidgetBase {
   public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
     $form = parent::buildConfigurationForm($form, $form_state);
 
-    foreach ($this->entityTypeManager->getStorage('media_bundle')->loadMultiple() as $bundle) {
-      /** @var \Drupal\media_entity\MediaBundleInterface $bundle */
-      if ($bundle->getType() instanceof Bynder) {
-        $form['media_bundle']['#options'][$bundle->id()] = $bundle->label();
+    foreach ($this->entityTypeManager->getStorage('media_type')->loadMultiple() as $type) {
+      /** @var \Drupal\media\MediaTypeInterface $type */
+      if ($type->getSource() instanceof Bynder) {
+        $form['media_type']['#options'][$type->id()] = $type->label();
       }
     }
 
-    if (empty($form['media_bundle']['#options'])) {
-      $form['media_bundle']['#disabled'] = TRUE;
-      $form['media_bundle']['#description'] = $this->t('You must @create_bundle before using this widget.', [
-        '@create_bundle' => Link::createFromRoute($this->t('create a Bynder media bundle'), 'media.bundle_add')->toString(),
+    if (empty($form['media_type']['#options'])) {
+      $form['media_type']['#disabled'] = TRUE;
+      $form['media_type']['#description'] = $this->t('You must @create_bundle before using this widget.', [
+        '@create_bundle' => Link::createFromRoute($this->t('create a Bynder media type'), 'media.bundle_add')->toString(),
       ]);
     }
 
@@ -507,10 +510,9 @@ class BynderUpload extends BynderWidgetBase {
   /**
    * Ajax callback for metaproperties configuration.
    */
-  public static function ajaxMetaproperties(&$form, &$form_state, $request) {
+  public static function ajaxMetaproperties(array &$form, FormStateInterface &$form_state, $request) {
     $parents = array_slice($form_state->getTriggeringElement()['#array_parents'], 0, -2);
     $parents[] = 'metaproperty_options';
-    $test = NestedArray::getValue($form, $parents);
     return NestedArray::getValue($form, $parents);
   }
 
diff --git a/src/Plugin/EntityBrowser/Widget/BynderWidgetBase.php b/src/Plugin/EntityBrowser/Widget/BynderWidgetBase.php
index 942da97..71cb5e4 100644
--- a/src/Plugin/EntityBrowser/Widget/BynderWidgetBase.php
+++ b/src/Plugin/EntityBrowser/Widget/BynderWidgetBase.php
@@ -6,7 +6,7 @@ use Drupal\bynder\BynderApiInterface;
 use Drupal\bynder\Exception\BundleNotBynderException;
 use Drupal\bynder\Exception\BundleNotExistException;
 use Drupal\bynder\Exception\UnableToConnectException;
-use Drupal\bynder\Plugin\MediaEntity\Type\Bynder;
+use Drupal\bynder\Plugin\media\Source\Bynder;
 use Drupal\Core\Entity\EntityTypeManagerInterface;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Language\LanguageManagerInterface;
@@ -118,7 +118,7 @@ abstract class BynderWidgetBase extends WidgetBase {
    */
   public function defaultConfiguration() {
     return [
-      'media_bundle' => NULL,
+      'media_type' => NULL,
     ] + parent::defaultConfiguration();
   }
 
@@ -128,10 +128,10 @@ abstract class BynderWidgetBase extends WidgetBase {
   public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
     $form = parent::buildConfigurationForm($form, $form_state);
 
-    $form['media_bundle'] = [
+    $form['media_type'] = [
       '#type' => 'select',
-      '#title' => $this->t('Media bundle'),
-      '#default_value' => $this->configuration['media_bundle'],
+      '#title' => $this->t('Media type'),
+      '#default_value' => $this->configuration['media_type'],
       '#required' => TRUE,
       '#options' => [],
     ];
@@ -145,7 +145,7 @@ abstract class BynderWidgetBase extends WidgetBase {
   public function getForm(array &$original_form, FormStateInterface $form_state, array $additional_widget_parameters) {
     $form = parent::getForm($original_form, $form_state, $additional_widget_parameters);
 
-    if (!$this->checkBundle()) {
+    if (!$this->checkType()) {
       $form_state->setValue('errors', TRUE);
       return $form;
     }
@@ -185,24 +185,24 @@ abstract class BynderWidgetBase extends WidgetBase {
   }
 
   /**
-   * Check that media bundle is properly configured.
+   * Check that media type is properly configured.
    *
    * @return bool
-   *   Returns TRUE if media bundle is configured correctly.
+   *   Returns TRUE if media type is configured correctly.
    */
-  protected function checkBundle() {
-    /** @var \Drupal\media_entity\MediaBundleInterface $bundle */
-    $bundle = $this->entityTypeManager->getStorage('media_bundle')
-      ->load($this->configuration['media_bundle']);
+  protected function checkType() {
+    /** @var \Drupal\media\MediaTypeInterface $type */
+    $type = $this->entityTypeManager->getStorage('media_type')
+      ->load($this->configuration['media_type']);
 
-    if (!$bundle) {
+    if (!$type) {
       (new BundleNotExistException(
-        $this->configuration['media_bundle']
+        $this->configuration['media_type']
       ))->logException()->displayMessage();
       return FALSE;
     }
-    elseif (!$bundle->getType() instanceof Bynder) {
-      (new BundleNotBynderException($bundle->label()))->logException()
+    elseif (!($type->getSource() instanceof Bynder)) {
+      (new BundleNotBynderException($type->label()))->logException()
         ->displayMessage();
       return FALSE;
     }
diff --git a/src/Plugin/Field/FieldFormatter/BynderFormatter.php b/src/Plugin/Field/FieldFormatter/BynderFormatter.php
index 75f0d72..a4e9851 100644
--- a/src/Plugin/Field/FieldFormatter/BynderFormatter.php
+++ b/src/Plugin/Field/FieldFormatter/BynderFormatter.php
@@ -3,7 +3,7 @@
 namespace Drupal\bynder\Plugin\Field\FieldFormatter;
 
 use Drupal\bynder\BynderApiInterface;
-use Drupal\bynder\Plugin\MediaEntity\Type\Bynder;
+use Drupal\bynder\Plugin\media\Source\Bynder;
 use Drupal\Core\Access\AccessResult;
 use Drupal\Core\Config\ConfigFactoryInterface;
 use Drupal\Core\Entity\EntityFieldManagerInterface;
@@ -16,7 +16,7 @@ use Drupal\Core\Link;
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
 use Drupal\Core\Render\RendererInterface;
 use Drupal\Core\Session\AccountProxyInterface;
-use Drupal\media_entity\Entity\MediaBundle;
+use Drupal\media\Entity\MediaType;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
@@ -202,25 +202,25 @@ class BynderFormatter extends FormatterBase implements ContainerFactoryPluginInt
     $bundles = [];
     if ($handler_settings && is_array($handler_settings['target_bundles'])) {
       foreach ($handler_settings['target_bundles'] as $bundle) {
-        /** @var \Drupal\media_entity\MediaBundleInterface $bundle_entity */
-        $bundle_entity = $this->entityTypeManager->getStorage('media_bundle')->load($bundle);
-        if ($bundle_entity && ($bundle_entity->getType() instanceof Bynder)) {
-          $bundles[] = $bundle_entity;
+        /** @var \Drupal\media\MediaTypeInterface $type */
+        $type = $this->entityTypeManager->getStorage('media_type')->load($bundle);
+        if ($type && ($type->getSource() instanceof Bynder)) {
+          $bundles[] = $type;
         }
       }
     }
     else {
-      /** @var \Drupal\media_entity\MediaBundleInterface $bundle_entity */
-      foreach ($this->entityTypeManager->getStorage('media_bundle')->loadMultiple() as $bundle_entity) {
-        if ($bundle_entity && ($bundle_entity->getType() instanceof Bynder)) {
-          $bundles[] = $bundle_entity;
+      /** @var \Drupal\media\MediaTypeInterface $type */
+      foreach ($this->entityTypeManager->getStorage('media_type')->loadMultiple() as $type) {
+        if ($type && ($type->getSource() instanceof Bynder)) {
+          $bundles[] = $type;
         }
       }
     }
 
     $options = [];
-    foreach ($bundles as $bundle_entity) {
-      foreach ($this->entityFieldManager->getFieldDefinitions('media', $bundle_entity->id()) as $field_name => $field) {
+    foreach ($bundles as $type) {
+      foreach ($this->entityFieldManager->getFieldDefinitions('media', $type->id()) as $field_name => $field) {
         if (in_array($field->getType(), $allowed_field_types)) {
           $options[$field_name] = $field->getLabel();
         }
@@ -266,11 +266,11 @@ class BynderFormatter extends FormatterBase implements ContainerFactoryPluginInt
     $is_entityreference = $this->fieldDefinition->getType() == 'entity_reference';
 
     foreach ($items as $delta => $item) {
-      /** @var \Drupal\media_entity\MediaInterface $media_entity */
+      /** @var \Drupal\media\MediaInterface $media_entity */
       if ($media_entity = $is_entityreference ? $item->entity : $items->getEntity()) {
-        /** @var \Drupal\media_entity\MediaTypeInterface $type_plugin */
-        $type_plugin = $media_entity->bundle->entity->getType();
-        if ($type_plugin instanceof Bynder && ($thumbnails = $type_plugin->getField($media_entity, 'thumbnail_urls'))) {
+        /** @var \Drupal\media\MediaSourceInterface $source_plugin */
+        $source_plugin = $media_entity->getSource();
+        if ($source_plugin instanceof Bynder && ($thumbnails = $source_plugin->getMetadata($media_entity, 'thumbnail_urls'))) {
           $element['#attached']['library'][] = 'bynder/formatter';
           $element[$delta]['bynder_wrapper'] = [
             '#type' => 'container',
@@ -300,7 +300,7 @@ class BynderFormatter extends FormatterBase implements ContainerFactoryPluginInt
             '#alt' => 'usage-image',
             // @todo Information is not available yet. Fix when API supports it.
             '#title' => $this->t('Usage info is not available yet. Usage restriction level: @restriction', [
-              '@restriction' => get_media_restriction($type_plugin->getField($media_entity, 'propertyOptions')),
+              '@restriction' => get_media_restriction($source_plugin->getMetadata($media_entity, 'propertyOptions')),
             ]),
             '#attributes' => ['class' => ['usage-image']],
             '#access' => AccessResult::allowedIfHasPermission($this->currentUser, 'view bynder media usage'),
@@ -326,9 +326,9 @@ class BynderFormatter extends FormatterBase implements ContainerFactoryPluginInt
           }
           elseif (is_array($handler_settings['target_bundles'])) {
             foreach ($handler_settings['target_bundles'] as $bundle) {
-              /** @var \Drupal\media_entity\MediaBundleInterface $bundle_entity */
-              $bundle_entity = \Drupal::entityTypeManager()->getStorage('media_bundle')->load($bundle);
-              if ($bundle_entity->getType() instanceof Bynder) {
+              /** @var \Drupal\media\MediaTypeInterface $type */
+              $type = \Drupal::entityTypeManager()->getStorage('media_type')->load($bundle);
+              if ($type->getSource() instanceof Bynder) {
                 return TRUE;
               }
             }
@@ -348,17 +348,17 @@ class BynderFormatter extends FormatterBase implements ContainerFactoryPluginInt
         return FALSE;
       }
 
-      /** @var \Drupal\media_entity\MediaBundleInterface $bundle */
-      if (!($bundle = $field_definition->getTargetBundle()) || !($bundle = MediaBundle::load($field_definition->getTargetBundle()))) {
+      /** @var \Drupal\media\MediaTypeInterface $type_entity */
+      if (!($type_entity = $field_definition->getTargetBundle()) || !($type_entity = MediaType::load($field_definition->getTargetBundle()))) {
         return FALSE;
       }
 
-      $type = $bundle->getType();
-      if (!($type instanceof Bynder)) {
+      $source = $type_entity->getSource();
+      if (!($source instanceof Bynder)) {
         return FALSE;
       }
 
-      if ($type->getConfiguration()['source_field'] != $field_definition->getName()) {
+      if ($source->getConfiguration()['source_field'] != $field_definition->getName()) {
         return FALSE;
       }
 
diff --git a/src/Plugin/MediaEntity/Type/Bynder.php b/src/Plugin/media/Source/Bynder.php
similarity index 72%
rename from src/Plugin/MediaEntity/Type/Bynder.php
rename to src/Plugin/media/Source/Bynder.php
index e22bbba..1acd9e2 100644
--- a/src/Plugin/MediaEntity/Type/Bynder.php
+++ b/src/Plugin/media/Source/Bynder.php
@@ -1,15 +1,16 @@
 <?php
 
-namespace Drupal\bynder\Plugin\MediaEntity\Type;
+namespace Drupal\bynder\Plugin\media\Source;
 
 use Drupal\bynder\BynderApiInterface;
-use Drupal\Core\Config\Config;
+use Drupal\Core\Config\ConfigFactoryInterface;
 use Drupal\Core\Entity\EntityFieldManagerInterface;
 use Drupal\Core\Entity\EntityTypeManagerInterface;
+use Drupal\Core\Field\FieldTypePluginManagerInterface;
 use Drupal\Core\Logger\LoggerChannelFactoryInterface;
 use Drupal\Core\Session\AccountProxyInterface;
-use Drupal\media_entity\MediaInterface;
-use Drupal\media_entity\MediaTypeBase;
+use Drupal\media\MediaInterface;
+use Drupal\media\MediaSourceBase;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Routing\UrlGeneratorInterface;
@@ -17,15 +18,17 @@ use GuzzleHttp\Exception\GuzzleException;
 use Drupal\Core\Cache\CacheBackendInterface;
 
 /**
- * Provides media type plugin for Bynder.
+ * Provides media source plugin for Bynder.
  *
- * @MediaType(
+ * @MediaSource(
  *   id = "bynder",
  *   label = @Translation("Bynder"),
- *   description = @Translation("Provides business logic and metadata for Bynder.")
+ *   description = @Translation("Provides business logic and metadata for Bynder."),
+ *   default_thumbnail_filename = "bynder_no_image.png",
+ *   allowed_field_types = {"string", "string_long"}
  * )
  */
-class Bynder extends MediaTypeBase {
+class Bynder extends MediaSourceBase {
 
   /**
    * Bynder api service.
@@ -83,8 +86,10 @@ class Bynder extends MediaTypeBase {
    *   Entity type manager service.
    * @param \Drupal\Core\Entity\EntityFieldManagerInterface $entity_field_manager
    *   Entity field manager service.
-   * @param \Drupal\Core\Config\Config $config
-   *   Media entity config object.
+   * @param \Drupal\Core\Field\FieldTypePluginManagerInterface $field_type_manager
+   *   The field type plugin manager service.
+   * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
+   *   The config factory service.
    * @param \Drupal\bynder\BynderApiInterface $bynder_api_service
    *   Bynder api service.
    * @param \Drupal\Core\Session\AccountProxyInterface $account_proxy
@@ -96,8 +101,8 @@ class Bynder extends MediaTypeBase {
    * @param \Drupal\Core\Cache\CacheBackendInterface $cache
    *   The cache service.
    */
-  public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityTypeManagerInterface $entity_type_manager, EntityFieldManagerInterface $entity_field_manager, Config $config, BynderApiInterface $bynder_api_service, AccountProxyInterface $account_proxy, UrlGeneratorInterface $url_generator, LoggerChannelFactoryInterface $logger, CacheBackendInterface $cache) {
-    parent::__construct($configuration, $plugin_id, $plugin_definition, $entity_type_manager, $entity_field_manager, $config);
+  public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityTypeManagerInterface $entity_type_manager, EntityFieldManagerInterface $entity_field_manager, FieldTypePluginManagerInterface $field_type_manager, ConfigFactoryInterface $config_factory, BynderApiInterface $bynder_api_service, AccountProxyInterface $account_proxy, UrlGeneratorInterface $url_generator, LoggerChannelFactoryInterface $logger, CacheBackendInterface $cache) {
+    parent::__construct($configuration, $plugin_id, $plugin_definition, $entity_type_manager, $entity_field_manager, $field_type_manager, $config_factory);
 
     $this->bynderApi = $bynder_api_service;
     $this->accountProxy = $account_proxy;
@@ -116,7 +121,8 @@ class Bynder extends MediaTypeBase {
       $plugin_definition,
       $container->get('entity_type.manager'),
       $container->get('entity_field.manager'),
-      $container->get('config.factory')->get('media_entity.settings'),
+      $container->get('plugin.manager.field.field_type'),
+      $container->get('config.factory'),
       $container->get('bynder_api'),
       $container->get('current_user'),
       $container->get('url_generator'),
@@ -128,7 +134,7 @@ class Bynder extends MediaTypeBase {
   /**
    * {@inheritdoc}
    */
-  public function providedFields() {
+  public function getMetadataAttributes() {
     $fields = [
       'uuid' => $this->t('ID'),
       'name' => $this->t('Name'),
@@ -159,7 +165,7 @@ class Bynder extends MediaTypeBase {
   /**
    * {@inheritdoc}
    */
-  public function getField(MediaInterface $media, $name) {
+  public function getMetadata(MediaInterface $media, $name) {
     if (!$source_field = $this->configuration['source_field']) {
       return FALSE;
     }
@@ -205,12 +211,23 @@ class Bynder extends MediaTypeBase {
         case 'thumbnail_urls':
           return isset($this->apiResponse['thumbnails']) ? $this->apiResponse['thumbnails'] : FALSE;
 
+        case 'thumbnail_uri':
+          if (!empty($this->apiResponse['thumbnails']['webimage'])) {
+            if ($file = system_retrieve_file($this->apiResponse['thumbnails']['webimage'], NULL, TRUE)) {
+              return $file->getFileUri();
+            }
+          }
+          return parent::getMetadata($media, 'thumbnail_uri');
+
         case 'created':
           return isset($this->apiResponse['dateCreated']) ? $this->apiResponse['dateCreated'] : FALSE;
 
         case 'modified':
           return isset($this->apiResponse['dateModified']) ? $this->apiResponse['dateModified'] : FALSE;
 
+        case 'default_name':
+          return isset($this->apiResponse['name']) ? $this->apiResponse['name'] : parent::getMetadata($media, 'default_name');
+
         default:
           return isset($this->apiResponse[$name]) ? $this->apiResponse[$name] : FALSE;
       }
@@ -237,58 +254,8 @@ class Bynder extends MediaTypeBase {
         drupal_set_message($this->t('Something went wrong with the Bynder connection. Please contact the site administrator.'), 'error');
       }
     }
-    /** @var \Drupal\media_entity\MediaBundleInterface $bundle */
-    $bundle = $form_state->getFormObject()->getEntity();
-    $options = [];
-    $allowed_field_types = ['string', 'string_long'];
-    foreach ($this->entityFieldManager->getFieldDefinitions('media', $bundle->id()) as $field_name => $field) {
-      if (in_array($field->getType(), $allowed_field_types) && !$field->getFieldStorageDefinition()->isBaseField()) {
-        $options[$field_name] = $field->getLabel();
-      }
-    }
-
-    $form['source_field'] = [
-      '#type' => 'select',
-      '#title' => $this->t('Field with source information'),
-      '#description' => $this->t('Field on media entity that stores the media UUID from Bynder. You can create a bundle without selecting a value for this dropdown initially. This dropdown can be populated after adding fields to the bundle.'),
-      '#default_value' => $this->configuration['source_field'] ?:  NULL,
-      '#options' => $options,
-    ];
-
-    return $form;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getDefaultThumbnail() {
-    return $this->config->get('icon_base') . '/bynder_no_image.png';
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function thumbnail(MediaInterface $media) {
-    if ($thumbnail = $this->getField($media, 'thumbnail_urls')) {
-      if (isset($thumbnail['webimage'])) {
-        if ($file = system_retrieve_file($thumbnail['webimage'], NULL, TRUE)) {
-          return $file->getFileUri();
-        }
-      }
-    }
-
-    return $this->getDefaultThumbnail();
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getDefaultName(MediaInterface $media) {
-    if ($name = $this->getField($media, 'name')) {
-      return $name;
-    }
 
-    return parent::getDefaultName($media);
+    return parent::buildConfigurationForm($form, $form_state);
   }
 
 }
diff --git a/tests/modules/bynder_test_module/config/install/core.entity_form_display.media.media_type.default.yml b/tests/modules/bynder_test_module/config/install/core.entity_form_display.media.media_type.default.yml
index a8961a4..2232e10 100644
--- a/tests/modules/bynder_test_module/config/install/core.entity_form_display.media.media_type.default.yml
+++ b/tests/modules/bynder_test_module/config/install/core.entity_form_display.media.media_type.default.yml
@@ -13,7 +13,7 @@ dependencies:
     - field.field.media.media_type.field_type
     - field.field.media.media_type.field_video_preview_urls
     - field.field.media.media_type.field_width
-    - media_entity.bundle.media_type
+    - media.type.media_type
 id: media.media_type.default
 targetEntityType: media
 bundle: media_type
diff --git a/tests/modules/bynder_test_module/config/install/core.entity_view_display.media.media_type.default.yml b/tests/modules/bynder_test_module/config/install/core.entity_view_display.media.media_type.default.yml
index d3c33eb..08f5e2b 100644
--- a/tests/modules/bynder_test_module/config/install/core.entity_view_display.media.media_type.default.yml
+++ b/tests/modules/bynder_test_module/config/install/core.entity_view_display.media.media_type.default.yml
@@ -14,7 +14,7 @@ dependencies:
     - field.field.media.media_type.field_video_preview_urls
     - field.field.media.media_type.field_width
     - image.style.thumbnail
-    - media_entity.bundle.media_type
+    - media.type.media_type
   module:
     - image
     - user
diff --git a/tests/modules/bynder_test_module/config/install/field.field.media.media_type.field_date_created.yml b/tests/modules/bynder_test_module/config/install/field.field.media.media_type.field_date_created.yml
index b4a5555..f98b45f 100644
--- a/tests/modules/bynder_test_module/config/install/field.field.media.media_type.field_date_created.yml
+++ b/tests/modules/bynder_test_module/config/install/field.field.media.media_type.field_date_created.yml
@@ -3,7 +3,7 @@ status: true
 dependencies:
   config:
     - field.storage.media.field_date_created
-    - media_entity.bundle.media_type
+    - media.type.media_type
 id: media.media_type.field_date_created
 field_name: field_date_created
 entity_type: media
diff --git a/tests/modules/bynder_test_module/config/install/field.field.media.media_type.field_date_modified.yml b/tests/modules/bynder_test_module/config/install/field.field.media.media_type.field_date_modified.yml
index 48a4821..71dafd9 100644
--- a/tests/modules/bynder_test_module/config/install/field.field.media.media_type.field_date_modified.yml
+++ b/tests/modules/bynder_test_module/config/install/field.field.media.media_type.field_date_modified.yml
@@ -3,7 +3,7 @@ status: true
 dependencies:
   config:
     - field.storage.media.field_date_modified
-    - media_entity.bundle.media_type
+    - media.type.media_type
 id: media.media_type.field_date_modified
 field_name: field_date_modified
 entity_type: media
diff --git a/tests/modules/bynder_test_module/config/install/field.field.media.media_type.field_description.yml b/tests/modules/bynder_test_module/config/install/field.field.media.media_type.field_description.yml
index 2c646c5..1796269 100644
--- a/tests/modules/bynder_test_module/config/install/field.field.media.media_type.field_description.yml
+++ b/tests/modules/bynder_test_module/config/install/field.field.media.media_type.field_description.yml
@@ -3,7 +3,7 @@ status: true
 dependencies:
   config:
     - field.storage.media.field_description
-    - media_entity.bundle.media_type
+    - media.type.media_type
 id: media.media_type.field_description
 field_name: field_description
 entity_type: media
diff --git a/tests/modules/bynder_test_module/config/install/field.field.media.media_type.field_height.yml b/tests/modules/bynder_test_module/config/install/field.field.media.media_type.field_height.yml
index fd3f765..0a4d076 100644
--- a/tests/modules/bynder_test_module/config/install/field.field.media.media_type.field_height.yml
+++ b/tests/modules/bynder_test_module/config/install/field.field.media.media_type.field_height.yml
@@ -3,7 +3,7 @@ status: true
 dependencies:
   config:
     - field.storage.media.field_height
-    - media_entity.bundle.media_type
+    - media.type.media_type
 id: media.media_type.field_height
 field_name: field_height
 entity_type: media
diff --git a/tests/modules/bynder_test_module/config/install/field.field.media.media_type.field_media_uuid.yml b/tests/modules/bynder_test_module/config/install/field.field.media.media_type.field_media_uuid.yml
index 381f756..158fe2e 100644
--- a/tests/modules/bynder_test_module/config/install/field.field.media.media_type.field_media_uuid.yml
+++ b/tests/modules/bynder_test_module/config/install/field.field.media.media_type.field_media_uuid.yml
@@ -3,7 +3,7 @@ status: true
 dependencies:
   config:
     - field.storage.media.field_media_uuid
-    - media_entity.bundle.media_type
+    - media.type.media_type
 id: media.media_type.field_media_uuid
 field_name: field_media_uuid
 entity_type: media
diff --git a/tests/modules/bynder_test_module/config/install/field.field.media.media_type.field_tags.yml b/tests/modules/bynder_test_module/config/install/field.field.media.media_type.field_tags.yml
index dbafc4e..52fc6ad 100644
--- a/tests/modules/bynder_test_module/config/install/field.field.media.media_type.field_tags.yml
+++ b/tests/modules/bynder_test_module/config/install/field.field.media.media_type.field_tags.yml
@@ -3,7 +3,7 @@ status: true
 dependencies:
   config:
     - field.storage.media.field_tags
-    - media_entity.bundle.media_type
+    - media.type.media_type
 id: media.media_type.field_tags
 field_name: field_tags
 entity_type: media
diff --git a/tests/modules/bynder_test_module/config/install/field.field.media.media_type.field_thumbnail_urls.yml b/tests/modules/bynder_test_module/config/install/field.field.media.media_type.field_thumbnail_urls.yml
index 51f0a93..483e8ce 100644
--- a/tests/modules/bynder_test_module/config/install/field.field.media.media_type.field_thumbnail_urls.yml
+++ b/tests/modules/bynder_test_module/config/install/field.field.media.media_type.field_thumbnail_urls.yml
@@ -3,7 +3,7 @@ status: true
 dependencies:
   config:
     - field.storage.media.field_thumbnail_urls
-    - media_entity.bundle.media_type
+    - media.type.media_type
 id: media.media_type.field_thumbnail_urls
 field_name: field_thumbnail_urls
 entity_type: media
diff --git a/tests/modules/bynder_test_module/config/install/field.field.media.media_type.field_type.yml b/tests/modules/bynder_test_module/config/install/field.field.media.media_type.field_type.yml
index 33b4a98..541491b 100644
--- a/tests/modules/bynder_test_module/config/install/field.field.media.media_type.field_type.yml
+++ b/tests/modules/bynder_test_module/config/install/field.field.media.media_type.field_type.yml
@@ -3,7 +3,7 @@ status: true
 dependencies:
   config:
     - field.storage.media.field_type
-    - media_entity.bundle.media_type
+    - media.type.media_type
 id: media.media_type.field_type
 field_name: field_type
 entity_type: media
diff --git a/tests/modules/bynder_test_module/config/install/field.field.media.media_type.field_video_preview_urls.yml b/tests/modules/bynder_test_module/config/install/field.field.media.media_type.field_video_preview_urls.yml
index bd90716..1a5e8e7 100644
--- a/tests/modules/bynder_test_module/config/install/field.field.media.media_type.field_video_preview_urls.yml
+++ b/tests/modules/bynder_test_module/config/install/field.field.media.media_type.field_video_preview_urls.yml
@@ -3,7 +3,7 @@ status: true
 dependencies:
   config:
     - field.storage.media.field_video_preview_urls
-    - media_entity.bundle.media_type
+    - media.type.media_type
 id: media.media_type.field_video_preview_urls
 field_name: field_video_preview_urls
 entity_type: media
diff --git a/tests/modules/bynder_test_module/config/install/field.field.media.media_type.field_width.yml b/tests/modules/bynder_test_module/config/install/field.field.media.media_type.field_width.yml
index 2eefd2c..5bfa8ff 100644
--- a/tests/modules/bynder_test_module/config/install/field.field.media.media_type.field_width.yml
+++ b/tests/modules/bynder_test_module/config/install/field.field.media.media_type.field_width.yml
@@ -3,7 +3,7 @@ status: true
 dependencies:
   config:
     - field.storage.media.field_width
-    - media_entity.bundle.media_type
+    - media.type.media_type
 id: media.media_type.field_width
 field_name: field_width
 entity_type: media
diff --git a/tests/modules/bynder_test_module/config/install/field.storage.media.field_date_created.yml b/tests/modules/bynder_test_module/config/install/field.storage.media.field_date_created.yml
index cc483b0..5c69b44 100644
--- a/tests/modules/bynder_test_module/config/install/field.storage.media.field_date_created.yml
+++ b/tests/modules/bynder_test_module/config/install/field.storage.media.field_date_created.yml
@@ -2,7 +2,7 @@ langcode: en
 status: true
 dependencies:
   module:
-    - media_entity
+    - media
 id: media.field_date_created
 field_name: field_date_created
 entity_type: media
diff --git a/tests/modules/bynder_test_module/config/install/field.storage.media.field_date_modified.yml b/tests/modules/bynder_test_module/config/install/field.storage.media.field_date_modified.yml
index 12d6567..f733303 100644
--- a/tests/modules/bynder_test_module/config/install/field.storage.media.field_date_modified.yml
+++ b/tests/modules/bynder_test_module/config/install/field.storage.media.field_date_modified.yml
@@ -2,7 +2,7 @@ langcode: en
 status: true
 dependencies:
   module:
-    - media_entity
+    - media
 id: media.field_date_modified
 field_name: field_date_modified
 entity_type: media
diff --git a/tests/modules/bynder_test_module/config/install/field.storage.media.field_description.yml b/tests/modules/bynder_test_module/config/install/field.storage.media.field_description.yml
index 589bd34..aadc8c5 100644
--- a/tests/modules/bynder_test_module/config/install/field.storage.media.field_description.yml
+++ b/tests/modules/bynder_test_module/config/install/field.storage.media.field_description.yml
@@ -2,7 +2,7 @@ langcode: en
 status: true
 dependencies:
   module:
-    - media_entity
+    - media
 id: media.field_description
 field_name: field_description
 entity_type: media
diff --git a/tests/modules/bynder_test_module/config/install/field.storage.media.field_height.yml b/tests/modules/bynder_test_module/config/install/field.storage.media.field_height.yml
index 704da91..385ea7c 100644
--- a/tests/modules/bynder_test_module/config/install/field.storage.media.field_height.yml
+++ b/tests/modules/bynder_test_module/config/install/field.storage.media.field_height.yml
@@ -2,7 +2,7 @@ langcode: en
 status: true
 dependencies:
   module:
-    - media_entity
+    - media
 id: media.field_height
 field_name: field_height
 entity_type: media
diff --git a/tests/modules/bynder_test_module/config/install/field.storage.media.field_media_uuid.yml b/tests/modules/bynder_test_module/config/install/field.storage.media.field_media_uuid.yml
index 82847d7..cc2fc44 100644
--- a/tests/modules/bynder_test_module/config/install/field.storage.media.field_media_uuid.yml
+++ b/tests/modules/bynder_test_module/config/install/field.storage.media.field_media_uuid.yml
@@ -2,7 +2,7 @@ langcode: en
 status: true
 dependencies:
   module:
-    - media_entity
+    - media
 id: media.field_media_uuid
 field_name: field_media_uuid
 entity_type: media
diff --git a/tests/modules/bynder_test_module/config/install/field.storage.media.field_tags.yml b/tests/modules/bynder_test_module/config/install/field.storage.media.field_tags.yml
index f00d808..1633942 100644
--- a/tests/modules/bynder_test_module/config/install/field.storage.media.field_tags.yml
+++ b/tests/modules/bynder_test_module/config/install/field.storage.media.field_tags.yml
@@ -2,7 +2,7 @@ langcode: en
 status: true
 dependencies:
   module:
-    - media_entity
+    - media
 id: media.field_tags
 field_name: field_tags
 entity_type: media
diff --git a/tests/modules/bynder_test_module/config/install/field.storage.media.field_thumbnail_urls.yml b/tests/modules/bynder_test_module/config/install/field.storage.media.field_thumbnail_urls.yml
index 6bcdb89..cbd8e3a 100644
--- a/tests/modules/bynder_test_module/config/install/field.storage.media.field_thumbnail_urls.yml
+++ b/tests/modules/bynder_test_module/config/install/field.storage.media.field_thumbnail_urls.yml
@@ -2,7 +2,7 @@ langcode: en
 status: true
 dependencies:
   module:
-    - media_entity
+    - media
 id: media.field_thumbnail_urls
 field_name: field_thumbnail_urls
 entity_type: media
diff --git a/tests/modules/bynder_test_module/config/install/field.storage.media.field_type.yml b/tests/modules/bynder_test_module/config/install/field.storage.media.field_type.yml
index 06acb1c..c081a41 100644
--- a/tests/modules/bynder_test_module/config/install/field.storage.media.field_type.yml
+++ b/tests/modules/bynder_test_module/config/install/field.storage.media.field_type.yml
@@ -2,7 +2,7 @@ langcode: en
 status: true
 dependencies:
   module:
-    - media_entity
+    - media
 id: media.field_type
 field_name: field_type
 entity_type: media
diff --git a/tests/modules/bynder_test_module/config/install/field.storage.media.field_video_preview_urls.yml b/tests/modules/bynder_test_module/config/install/field.storage.media.field_video_preview_urls.yml
index 9580121..013629e 100644
--- a/tests/modules/bynder_test_module/config/install/field.storage.media.field_video_preview_urls.yml
+++ b/tests/modules/bynder_test_module/config/install/field.storage.media.field_video_preview_urls.yml
@@ -2,7 +2,7 @@ langcode: en
 status: true
 dependencies:
   module:
-    - media_entity
+    - media
 id: media.field_video_preview_urls
 field_name: field_video_preview_urls
 entity_type: media
diff --git a/tests/modules/bynder_test_module/config/install/field.storage.media.field_width.yml b/tests/modules/bynder_test_module/config/install/field.storage.media.field_width.yml
index c01daa1..df02f1f 100644
--- a/tests/modules/bynder_test_module/config/install/field.storage.media.field_width.yml
+++ b/tests/modules/bynder_test_module/config/install/field.storage.media.field_width.yml
@@ -2,7 +2,7 @@ langcode: en
 status: true
 dependencies:
   module:
-    - media_entity
+    - media
 id: media.field_width
 field_name: field_width
 entity_type: media
diff --git a/tests/modules/bynder_test_module/config/install/media_entity.bundle.media_type.yml b/tests/modules/bynder_test_module/config/install/media.type.media_type.yml
similarity index 92%
rename from tests/modules/bynder_test_module/config/install/media_entity.bundle.media_type.yml
rename to tests/modules/bynder_test_module/config/install/media.type.media_type.yml
index fe42564..2ef7671 100644
--- a/tests/modules/bynder_test_module/config/install/media_entity.bundle.media_type.yml
+++ b/tests/modules/bynder_test_module/config/install/media.type.media_type.yml
@@ -6,10 +6,10 @@ dependencies:
 id: media_type
 label: 'Media type'
 description: ''
-type: bynder
+source: bynder
 queue_thumbnail_downloads: false
 new_revision: false
-type_configuration:
+source_configuration:
   source_field: field_media_uuid
 field_map:
   description: field_description
diff --git a/tests/modules/entity_browser_bynder_test/config/install/entity_browser.browser.bynder.yml b/tests/modules/entity_browser_bynder_test/config/install/entity_browser.browser.bynder.yml
index 3df615c..2edb212 100644
--- a/tests/modules/entity_browser_bynder_test/config/install/entity_browser.browser.bynder.yml
+++ b/tests/modules/entity_browser_bynder_test/config/install/entity_browser.browser.bynder.yml
@@ -19,7 +19,7 @@ widgets:
   065aa618-5851-4744-b51c-02e57f5f0cc3:
     settings:
       submit_text: 'Select assets'
-      media_bundle: bynder
+      media_type: bynder
       items_per_page: 15
       tags_filter: false
     uuid: 065aa618-5851-4744-b51c-02e57f5f0cc3
diff --git a/tests/src/Functional/BynderFormatterTest.php b/tests/src/Functional/BynderFormatterTest.php
index 6470678..1e3f45e 100644
--- a/tests/src/Functional/BynderFormatterTest.php
+++ b/tests/src/Functional/BynderFormatterTest.php
@@ -2,10 +2,8 @@
 
 namespace Drupal\Tests\bynder\Functional;
 
-use Drupal\Core\DependencyInjection\ContainerBuilder;
 use Drupal\Core\Field\FieldStorageDefinitionInterface;
 use Drupal\Tests\BrowserTestBase;
-use Drupal\Tests\Core\DependencyInjection\ContainerBuilderTest;
 use Drupal\Tests\TestFileCreationTrait;
 
 /**
@@ -22,10 +20,10 @@ class BynderFormatterTest extends BrowserTestBase {
    */
   public static $modules = [
     'bynder',
-    'media_entity',
+    'media',
     'node',
     'field_ui',
-    'bynder_test_module'
+    'bynder_test_module',
   ];
 
   /**
@@ -38,7 +36,7 @@ class BynderFormatterTest extends BrowserTestBase {
       'view media',
       'administer content types',
       'administer node display',
-      'administer media bundles',
+      'administer media types',
       'administer media display',
       'create media',
       'administer media form display',
@@ -220,7 +218,7 @@ class BynderFormatterTest extends BrowserTestBase {
       'view media',
       'administer content types',
       'administer node display',
-      'administer media bundles',
+      'administer media types',
       'administer media display',
       'create media',
       'administer media form display',
diff --git a/tests/src/Functional/BynderWidgetsTest.php b/tests/src/Functional/BynderWidgetsTest.php
index 7a3947d..fff992f 100644
--- a/tests/src/Functional/BynderWidgetsTest.php
+++ b/tests/src/Functional/BynderWidgetsTest.php
@@ -16,7 +16,7 @@ class BynderWidgetsTest extends BrowserTestBase {
    */
   public static $modules = [
     'bynder',
-    'media_entity',
+    'media',
     'node',
     'bynder_test_module',
     'entity_browser_bynder_test',
@@ -59,7 +59,7 @@ class BynderWidgetsTest extends BrowserTestBase {
       'label' => 'Bynder upload',
       'weight' => 5,
       'settings' => [
-        'media_bundle' => 'media_type',
+        'media_type' => 'media_type',
         'brand' => 'brand_id',
       ],
     ];
diff --git a/tests/src/Functional/MediaEntityTypePluginTest.php b/tests/src/Functional/MediaEntityTypePluginTest.php
index cb9719c..8b56d9b 100644
--- a/tests/src/Functional/MediaEntityTypePluginTest.php
+++ b/tests/src/Functional/MediaEntityTypePluginTest.php
@@ -19,7 +19,7 @@ class MediaEntityTypePluginTest extends BrowserTestBase {
    */
   public static $modules = [
     'bynder',
-    'media_entity',
+    'media',
     'bynder_test_module',
     'node',
   ];
@@ -30,7 +30,7 @@ class MediaEntityTypePluginTest extends BrowserTestBase {
   protected function setUp() {
     parent::setUp();
     $this->drupalLogin($this->drupalCreateUser([
-      'administer media bundles',
+      'administer media types',
       'create media',
       'view media',
     ]));
@@ -47,17 +47,17 @@ class MediaEntityTypePluginTest extends BrowserTestBase {
     $this->getSession()->getPage()->hasSelect('edit-fields-edit-on-bynder-type');
     $this->drupalGet('admin/structure/media/manage/media_type');
     // Check that the type provider is set to bynder.
-    $this->assertSession()->fieldValueEquals('type', 'bynder');
+    $this->assertSession()->fieldValueEquals('source', 'bynder');
     // Check field mapping.
-    $this->assertSession()->fieldValueEquals('field_mapping[description]', 'field_description');
-    $this->assertSession()->fieldValueEquals('field_mapping[name]', 'name');
-    $this->assertSession()->fieldValueEquals('field_mapping[type]', 'field_type');
-    $this->assertSession()->fieldValueEquals('field_mapping[video_preview_urls]', 'field_video_preview_urls');
-    $this->assertSession()->fieldValueEquals('field_mapping[thumbnail_urls]', 'field_thumbnail_urls');
-    $this->assertSession()->fieldValueEquals('field_mapping[width]', 'field_width');
-    $this->assertSession()->fieldValueEquals('field_mapping[height]', 'field_height');
-    $this->assertSession()->fieldValueEquals('field_mapping[created]', 'field_date_created');
-    $this->assertSession()->fieldValueEquals('field_mapping[modified]', 'field_date_modified');
+    $this->assertSession()->fieldValueEquals('field_map[description]', 'field_description');
+    $this->assertSession()->fieldValueEquals('field_map[name]', 'name');
+    $this->assertSession()->fieldValueEquals('field_map[type]', 'field_type');
+    $this->assertSession()->fieldValueEquals('field_map[video_preview_urls]', 'field_video_preview_urls');
+    $this->assertSession()->fieldValueEquals('field_map[thumbnail_urls]', 'field_thumbnail_urls');
+    $this->assertSession()->fieldValueEquals('field_map[width]', 'field_width');
+    $this->assertSession()->fieldValueEquals('field_map[height]', 'field_height');
+    $this->assertSession()->fieldValueEquals('field_map[created]', 'field_date_created');
+    $this->assertSession()->fieldValueEquals('field_map[modified]', 'field_date_modified');
 
     $bynder_data = [
       'dateModified' => '2016-12-13T21:10:55Z',
@@ -110,7 +110,7 @@ class MediaEntityTypePluginTest extends BrowserTestBase {
     $this->assertSession()->elementTextContains('css', '.field--name-field-description', 'Some description');
     $this->assertSession()->elementTextContains('css', '.field--name-field-type', 'image');
     $this->assertSession()->elementTextContains('css', '.field--name-field-width', '259');
-    $this->assertSession()->elementTextContains('css', '.field--name-field-height','194');
+    $this->assertSession()->elementTextContains('css', '.field--name-field-height', '194');
     $this->assertSession()->elementTextContains('css', '.field--name-field-date-created', '2016-12-09T14:18:24Z');
     $this->assertSession()->elementTextContains('css', '.field--name-field-date-modified', '2016-12-13T21:10:55Z');
 
diff --git a/tests/src/Functional/UsageTest.php b/tests/src/Functional/UsageTest.php
index 9e9baed..5d5b251 100644
--- a/tests/src/Functional/UsageTest.php
+++ b/tests/src/Functional/UsageTest.php
@@ -5,7 +5,7 @@ namespace Drupal\Tests\bynder\Functional;
 use Drupal\bynder\BynderApi;
 use Drupal\bynder_test_module\BynderApiTest;
 use Drupal\Core\Field\FieldStorageDefinitionInterface;
-use Drupal\media_entity\Entity\MediaBundle;
+use Drupal\media\Entity\MediaType;
 use Drupal\Tests\BrowserTestBase;
 
 /**
@@ -20,6 +20,8 @@ class UsageTest extends BrowserTestBase {
    */
   public static $modules = [
     'node',
+    'media',
+    'media_entity_generic',
     'path',
     'entity_usage',
     'bynder_test_module',
@@ -31,10 +33,10 @@ class UsageTest extends BrowserTestBase {
   protected function setUp() {
     parent::setUp();
 
-    MediaBundle::create([
+    MediaType::create([
       'id' => 'generic',
       'label' => 'Generic media bundle',
-      'type' => 'generic',
+      'source' => 'generic',
     ])->save();
 
     $this->createContentType(['type' => 'reference']);
diff --git a/tests/src/FunctionalJavascript/BynderSearchWidgetTest.php b/tests/src/FunctionalJavascript/BynderSearchWidgetTest.php
index d9c07ef..2c3268e 100644
--- a/tests/src/FunctionalJavascript/BynderSearchWidgetTest.php
+++ b/tests/src/FunctionalJavascript/BynderSearchWidgetTest.php
@@ -6,7 +6,7 @@ use Drupal\Core\Field\FieldStorageDefinitionInterface;
 use Drupal\field\Entity\FieldConfig;
 use Drupal\field\Entity\FieldStorageConfig;
 use Drupal\FunctionalJavascriptTests\JavascriptTestBase;
-use Drupal\media_entity\Entity\MediaBundle;
+use Drupal\media\Entity\MediaType;
 use Drupal\Tests\TestFileCreationTrait;
 
 /**
@@ -258,19 +258,19 @@ class BynderSearchWidgetTest extends JavascriptTestBase {
 
     // Delete all media type and test message on Entity Browser widget.
     $types = \Drupal::entityTypeManager()
-      ->getStorage('media_bundle')
+      ->getStorage('media_type')
       ->loadMultiple();
-    \Drupal::entityTypeManager()->getStorage('media_bundle')->delete($types);
+    \Drupal::entityTypeManager()->getStorage('media_type')->delete($types);
     $this->drupalGet('admin/config/content/entity_browser/bynder/widgets');
-    $this->assertSession()->pageTextContains('You must create a Bynder media bundle before using this widget.');
+    $this->assertSession()->pageTextContains('You must create a Bynder media type before using this widget.');
 
     $this->drupalGet('entity-browser/modal/bynder');
-    $this->assertSession()->pageTextContains('Media bundle bynder does not exists. Please fix the Bynder search widget configuration.');
+    $this->assertSession()->pageTextContains('Media type bynder does not exist. Please fix the Bynder search widget configuration.');
 
-    MediaBundle::create([
+    MediaType::create([
       'id' => 'bynder',
       'label' => 'Bynder assets',
-      'type' => 'bynder',
+      'source' => 'bynder',
     ])->save();
 
     $this->drupalGet('admin/config/content/entity_browser/bynder/widgets');
diff --git a/tests/src/FunctionalJavascript/BynderUploadWidgetTest.php b/tests/src/FunctionalJavascript/BynderUploadWidgetTest.php
index e23f0c8..e8cd8e5 100644
--- a/tests/src/FunctionalJavascript/BynderUploadWidgetTest.php
+++ b/tests/src/FunctionalJavascript/BynderUploadWidgetTest.php
@@ -11,7 +11,6 @@
 namespace Drupal\Tests\bynder\FunctionalJavascript;
 
 use Drupal\Core\Field\FieldStorageDefinitionInterface;
-use Drupal\Core\Form\FormState;
 use Drupal\field\Entity\FieldConfig;
 use Drupal\field\Entity\FieldStorageConfig;
 use Drupal\FunctionalJavascriptTests\JavascriptTestBase;
@@ -247,7 +246,7 @@ class BynderUploadWidgetTest extends JavascriptTestBase {
     $this->getSession()->getPage()->fillField('Allowed file extensions', 'png jpg');
     $this->getSession()->getPage()->fillField('Dropzone drag-n-drop zone text', 'Drop files...');
     $this->getSession()->getPage()->fillField('Tags', 'foo,bar,     baz');
-    $this->getSession()->getPage()->selectFieldOption('Media bundle', 'Bynder');
+    $this->getSession()->getPage()->selectFieldOption('Media type', 'Bynder');
     $this->getSession()->getPage()->selectFieldOption('Brand', 'Brand Name');
     $this->getSession()->getPage()->pressButton('Finish');
 
@@ -262,7 +261,7 @@ class BynderUploadWidgetTest extends JavascriptTestBase {
         'extensions' => 'png jpg',
         'dropzone_description' => 'Drop files...',
         'tags' => ['foo', 'bar', 'baz'],
-        'media_bundle' => 'bynder',
+        'media_type' => 'bynder',
         'submit_text' => 'Upload assets',
         'metaproperty_options' => [],
       ],
@@ -276,7 +275,7 @@ class BynderUploadWidgetTest extends JavascriptTestBase {
     $this->drupalGet('admin/config/content/entity_browser/bynder/widgets');
     $this->assertSession()->fieldValueEquals('Label (Bynder upload)', 'Upload');
     $this->assertSession()->fieldValueEquals('Submit button text', 'Upload assets');
-    $this->assertTrue($this->xpath('//select[@name="table[' . $widget_uuid . '][form][media_bundle]"]//option[@selected="selected" and @value="bynder"]'));
+    $this->assertTrue($this->xpath('//select[@name="table[' . $widget_uuid . '][form][media_type]"]//option[@selected="selected" and @value="bynder"]'));
     $this->assertTrue($this->xpath('//select[@name="table[' . $widget_uuid . '][form][brand]"]//option[@selected="selected" and @value="brand_id"]'));
     $this->assertSession()->fieldValueEquals('Allowed file extensions', 'png jpg');
     $this->assertSession()->fieldValueEquals('Dropzone drag-n-drop zone text', 'Drop files...');
@@ -299,7 +298,7 @@ class BynderUploadWidgetTest extends JavascriptTestBase {
         'extensions' => 'png jpg',
         'dropzone_description' => 'Drop files...',
         'tags' => ['foo', 'bar', 'baz'],
-        'media_bundle' => 'bynder',
+        'media_type' => 'bynder',
         'submit_text' => 'Upload assets',
         'metaproperty_options' => [
           'test_filter' => ['optiona2'],
diff --git a/tests/src/FunctionalJavascript/BynderUsageTest.php b/tests/src/FunctionalJavascript/BynderUsageTest.php
index 43889a7..2f3c4e4 100644
--- a/tests/src/FunctionalJavascript/BynderUsageTest.php
+++ b/tests/src/FunctionalJavascript/BynderUsageTest.php
@@ -34,7 +34,7 @@ class BynderUsageTest extends JavascriptTestBase {
    */
   public static $modules = [
     'bynder',
-    'media_entity',
+    'media',
     'bynder_test_module',
     'node',
   ];
diff --git a/tests/src/FunctionalJavascript/ConfigurationFormTest.php b/tests/src/FunctionalJavascript/ConfigurationFormTest.php
index 8a2b5c0..311ee8e 100644
--- a/tests/src/FunctionalJavascript/ConfigurationFormTest.php
+++ b/tests/src/FunctionalJavascript/ConfigurationFormTest.php
@@ -2,7 +2,6 @@
 
 namespace Drupal\Tests\bynder\FunctionalJavascript;
 
-use Drupal\bynder\Form\BynderConfigurationForm;
 use Drupal\FunctionalJavascriptTests\JavascriptTestBase;
 
 /**
