diff --git a/core/modules/action/migration_templates/action_settings.yml b/core/modules/action/migration_templates/action_settings.yml
index df69e33..4aca21a 100644
--- a/core/modules/action/migration_templates/action_settings.yml
+++ b/core/modules/action/migration_templates/action_settings.yml
@@ -7,6 +7,7 @@ source:
   plugin: variable
   variables:
     - actions_max_stack
+  provider: action
 process:
   recursion_limit: actions_max_stack
 destination:
diff --git a/core/modules/action/migration_templates/d6_action.yml b/core/modules/action/migration_templates/d6_action.yml
index 592ed18..c429b2f 100644
--- a/core/modules/action/migration_templates/d6_action.yml
+++ b/core/modules/action/migration_templates/d6_action.yml
@@ -37,3 +37,4 @@ process:
       callable: unserialize
 destination:
   plugin: entity:action
+  provider: action
diff --git a/core/modules/action/migration_templates/d7_action.yml b/core/modules/action/migration_templates/d7_action.yml
index 03b869a..96626d7 100644
--- a/core/modules/action/migration_templates/d7_action.yml
+++ b/core/modules/action/migration_templates/d7_action.yml
@@ -34,3 +34,4 @@ process:
       callable: unserialize
 destination:
   plugin: entity:action
+  provider: action
diff --git a/core/modules/aggregator/migration_templates/d6_aggregator_feed.yml b/core/modules/aggregator/migration_templates/d6_aggregator_feed.yml
index cad1553..47abaad 100644
--- a/core/modules/aggregator/migration_templates/d6_aggregator_feed.yml
+++ b/core/modules/aggregator/migration_templates/d6_aggregator_feed.yml
@@ -17,3 +17,4 @@ process:
   modified: modified
 destination:
   plugin: entity:aggregator_feed
+  provider: aggregator
diff --git a/core/modules/aggregator/migration_templates/d6_aggregator_item.yml b/core/modules/aggregator/migration_templates/d6_aggregator_item.yml
index fb4040a..33ad0eb 100644
--- a/core/modules/aggregator/migration_templates/d6_aggregator_item.yml
+++ b/core/modules/aggregator/migration_templates/d6_aggregator_item.yml
@@ -18,6 +18,7 @@ process:
   guid: guid
 destination:
   plugin: entity:aggregator_item
+  provider: aggregator
 migration_dependencies:
   required:
     - d6_aggregator_feed
diff --git a/core/modules/aggregator/migration_templates/d6_aggregator_settings.yml b/core/modules/aggregator/migration_templates/d6_aggregator_settings.yml
index 72372e4..12abfd5 100644
--- a/core/modules/aggregator/migration_templates/d6_aggregator_settings.yml
+++ b/core/modules/aggregator/migration_templates/d6_aggregator_settings.yml
@@ -12,6 +12,7 @@ source:
     - aggregator_teaser_length
     - aggregator_clear
     - aggregator_summary_items
+  provider: aggregator
 process:
   fetcher: aggregator_fetcher
   parser: aggregator_parser
diff --git a/core/modules/aggregator/migration_templates/d7_aggregator_feed.yml b/core/modules/aggregator/migration_templates/d7_aggregator_feed.yml
index 5dbeb25..9f9d0ff 100644
--- a/core/modules/aggregator/migration_templates/d7_aggregator_feed.yml
+++ b/core/modules/aggregator/migration_templates/d7_aggregator_feed.yml
@@ -18,3 +18,5 @@ process:
   modified: modified
 destination:
   plugin: entity:aggregator_feed
+  provider: aggregator
+
diff --git a/core/modules/aggregator/migration_templates/d7_aggregator_item.yml b/core/modules/aggregator/migration_templates/d7_aggregator_item.yml
index 9735e19..5dc0b49 100644
--- a/core/modules/aggregator/migration_templates/d7_aggregator_item.yml
+++ b/core/modules/aggregator/migration_templates/d7_aggregator_item.yml
@@ -18,6 +18,7 @@ process:
   guid: guid
 destination:
   plugin: entity:aggregator_item
+  provider: aggregator
 migration_dependencies:
   required:
     - d7_aggregator_feed
diff --git a/core/modules/aggregator/migration_templates/d7_aggregator_settings.yml b/core/modules/aggregator/migration_templates/d7_aggregator_settings.yml
index c8c793f..229dd01 100644
--- a/core/modules/aggregator/migration_templates/d7_aggregator_settings.yml
+++ b/core/modules/aggregator/migration_templates/d7_aggregator_settings.yml
@@ -12,6 +12,7 @@ source:
     - aggregator_teaser_length
     - aggregator_clear
     - aggregator_summary_items
+  provider: aggregator
 process:
   fetcher: aggregator_fetcher
   parser: aggregator_parser
diff --git a/core/modules/ban/migration_templates/d7_blocked_ips.yml b/core/modules/ban/migration_templates/d7_blocked_ips.yml
index 0122dc6..70a216c 100644
--- a/core/modules/ban/migration_templates/d7_blocked_ips.yml
+++ b/core/modules/ban/migration_templates/d7_blocked_ips.yml
@@ -8,3 +8,4 @@ process:
   ip: ip
 destination:
   plugin: blocked_ip
+  provider: ban
diff --git a/core/modules/block/migration_templates/d6_block.yml b/core/modules/block/migration_templates/d6_block.yml
index 472d48d..f474b8c 100644
--- a/core/modules/block/migration_templates/d6_block.yml
+++ b/core/modules/block/migration_templates/d6_block.yml
@@ -95,6 +95,7 @@ process:
     skip_php: true
 destination:
   plugin: entity:block
+  provider: block
 migration_dependencies:
   required:
     - menu
diff --git a/core/modules/block/migration_templates/d7_block.yml b/core/modules/block/migration_templates/d7_block.yml
index 96b204e..a6a8d87 100644
--- a/core/modules/block/migration_templates/d7_block.yml
+++ b/core/modules/block/migration_templates/d7_block.yml
@@ -104,6 +104,7 @@ process:
     skip_php: true
 destination:
   plugin: entity:block
+  provider: block
 migration_dependencies:
   optional:
     - d7_custom_block
diff --git a/core/modules/block_content/migration_templates/block_content_body_field.yml b/core/modules/block_content/migration_templates/block_content_body_field.yml
index b51d032..75a0f3c 100644
--- a/core/modules/block_content/migration_templates/block_content_body_field.yml
+++ b/core/modules/block_content/migration_templates/block_content_body_field.yml
@@ -19,6 +19,7 @@ source:
       type: string
     field_name:
       type: string
+  provider: block
 process:
   entity_type: entity_type
   bundle: bundle
@@ -27,6 +28,7 @@ process:
   'settings/display_summary': display_summary
 destination:
   plugin: entity:field_config
+  provider: block_content
 migration_dependencies:
   required:
     - block_content_type
diff --git a/core/modules/block_content/migration_templates/block_content_type.yml b/core/modules/block_content/migration_templates/block_content_type.yml
index bc75eea..3bbe791 100644
--- a/core/modules/block_content/migration_templates/block_content_type.yml
+++ b/core/modules/block_content/migration_templates/block_content_type.yml
@@ -12,11 +12,13 @@ source:
   ids:
     id:
       type: string
+  provider: block
 process:
   id: id
   label: label
 destination:
   plugin: entity:block_content_type
+  provider: block_content
 provider:
   - block_content
   - migrate_drupal
diff --git a/core/modules/block_content/migration_templates/d6_custom_block.yml b/core/modules/block_content/migration_templates/d6_custom_block.yml
index 8394c64..3eee829 100644
--- a/core/modules/block_content/migration_templates/d6_custom_block.yml
+++ b/core/modules/block_content/migration_templates/d6_custom_block.yml
@@ -16,6 +16,7 @@ destination:
   plugin: entity:block_content
   default_bundle: basic
   no_stub: true
+  provider: block
 migration_dependencies:
   required:
     - d6_filter_format
diff --git a/core/modules/block_content/migration_templates/d7_custom_block.yml b/core/modules/block_content/migration_templates/d7_custom_block.yml
index 42021fb..093632d 100644
--- a/core/modules/block_content/migration_templates/d7_custom_block.yml
+++ b/core/modules/block_content/migration_templates/d7_custom_block.yml
@@ -16,6 +16,7 @@ destination:
   plugin: entity:block_content
   default_bundle: basic
   no_stub: true
+  provider: block
 migration_dependencies:
   required:
     - d7_filter_format
diff --git a/core/modules/block_content/src/Plugin/migrate/source/d6/Box.php b/core/modules/block_content/src/Plugin/migrate/source/d6/Box.php
index 4135233..bef2ef9 100644
--- a/core/modules/block_content/src/Plugin/migrate/source/d6/Box.php
+++ b/core/modules/block_content/src/Plugin/migrate/source/d6/Box.php
@@ -8,7 +8,8 @@
  * Drupal 6 block source from database.
  *
  * @MigrateSource(
- *   id = "d6_box"
+ *   id = "d6_box",
+ *   source_provider = "block"
  * )
  */
 class Box extends DrupalSqlBase {
diff --git a/core/modules/block_content/src/Plugin/migrate/source/d7/BlockCustom.php b/core/modules/block_content/src/Plugin/migrate/source/d7/BlockCustom.php
index 4aee2a4..d0bff3c 100644
--- a/core/modules/block_content/src/Plugin/migrate/source/d7/BlockCustom.php
+++ b/core/modules/block_content/src/Plugin/migrate/source/d7/BlockCustom.php
@@ -8,7 +8,8 @@
  * Drupal 7 custom block source from database.
  *
  * @MigrateSource(
- *   id = "d7_block_custom"
+ *   id = "d7_block_custom",
+ *   source_provider = "block"
  * )
  */
 class BlockCustom extends DrupalSqlBase {
diff --git a/core/modules/book/migration_templates/d6_book.yml b/core/modules/book/migration_templates/d6_book.yml
index f5020c3..2a0a8f9 100644
--- a/core/modules/book/migration_templates/d6_book.yml
+++ b/core/modules/book/migration_templates/d6_book.yml
@@ -18,6 +18,7 @@ process:
       migration: d6_book
 destination:
   plugin: book
+  provider: book
 migration_dependencies:
   required:
     - d6_node
diff --git a/core/modules/book/migration_templates/d6_book_settings.yml b/core/modules/book/migration_templates/d6_book_settings.yml
index 16e6695..8b7b377 100644
--- a/core/modules/book/migration_templates/d6_book_settings.yml
+++ b/core/modules/book/migration_templates/d6_book_settings.yml
@@ -8,6 +8,7 @@ source:
     - book_child_type
     - book_block_mode
     - book_allowed_types
+  provider: book
 process:
   child_type: book_child_type
   'block/navigation/mode': book_block_mode
diff --git a/core/modules/book/src/Plugin/migrate/source/d6/Book.php b/core/modules/book/src/Plugin/migrate/source/d6/Book.php
index 76833aa..73c0d3f 100644
--- a/core/modules/book/src/Plugin/migrate/source/d6/Book.php
+++ b/core/modules/book/src/Plugin/migrate/source/d6/Book.php
@@ -8,7 +8,8 @@
  * Drupal 6 book source.
  *
  * @MigrateSource(
- *   id = "d6_book"
+ *   id = "d6_book",
+ *   source_provider = "book"
  * )
  */
 class Book extends DrupalSqlBase {
diff --git a/core/modules/comment/migration_templates/d6_comment.yml b/core/modules/comment/migration_templates/d6_comment.yml
index f4dff98..71e1c68 100644
--- a/core/modules/comment/migration_templates/d6_comment.yml
+++ b/core/modules/comment/migration_templates/d6_comment.yml
@@ -37,6 +37,7 @@ process:
     source: format
 destination:
   plugin: entity:comment
+  provider: comment
 migration_dependencies:
   required:
     - d6_node
diff --git a/core/modules/comment/migration_templates/d6_comment_entity_display.yml b/core/modules/comment/migration_templates/d6_comment_entity_display.yml
index c650673..966b04e 100644
--- a/core/modules/comment/migration_templates/d6_comment_entity_display.yml
+++ b/core/modules/comment/migration_templates/d6_comment_entity_display.yml
@@ -12,6 +12,7 @@ source:
       label: hidden
       type: comment_default
       weight: 20
+  provider: comment
 process:
   entity_type: 'constants/entity_type'
   field_name: 'constants/field_name'
@@ -20,6 +21,7 @@ process:
   bundle: node_type
 destination:
   plugin: component_entity_display
+  provider: comment
 migration_dependencies:
   required:
     - d6_comment_field_instance
diff --git a/core/modules/comment/migration_templates/d6_comment_entity_form_display.yml b/core/modules/comment/migration_templates/d6_comment_entity_form_display.yml
index c33685f..37b033c 100644
--- a/core/modules/comment/migration_templates/d6_comment_entity_form_display.yml
+++ b/core/modules/comment/migration_templates/d6_comment_entity_form_display.yml
@@ -11,6 +11,7 @@ source:
     options:
       type: comment_default
       weight: 20
+  provider: comment
 process:
   entity_type: 'constants/entity_type'
   field_name: 'constants/field_name'
@@ -19,6 +20,7 @@ process:
   bundle: node_type
 destination:
   plugin: component_entity_form_display
+  provider: comment
 migration_dependencies:
   required:
     - d6_comment_field_instance
diff --git a/core/modules/comment/migration_templates/d6_comment_entity_form_display_subject.yml b/core/modules/comment/migration_templates/d6_comment_entity_form_display_subject.yml
index abe6191..e49839a 100644
--- a/core/modules/comment/migration_templates/d6_comment_entity_form_display_subject.yml
+++ b/core/modules/comment/migration_templates/d6_comment_entity_form_display_subject.yml
@@ -11,6 +11,7 @@ source:
     options:
       type: string_textfield
       weight: 10
+  provider: comment
 process:
   entity_type: 'constants/entity_type'
   field_name: 'constants/field_name'
@@ -26,6 +27,7 @@ process:
   bundle: comment_type
 destination:
   plugin: component_entity_form_display
+  provider: comment
 migration_dependencies:
   required:
     - d6_comment_type
diff --git a/core/modules/comment/migration_templates/d6_comment_field.yml b/core/modules/comment/migration_templates/d6_comment_field.yml
index d14d1aa..5f0b80b 100644
--- a/core/modules/comment/migration_templates/d6_comment_field.yml
+++ b/core/modules/comment/migration_templates/d6_comment_field.yml
@@ -7,6 +7,7 @@ source:
   constants:
     entity_type: node
     type: comment
+  provider: comment
 process:
   entity_type: 'constants/entity_type'
   field_name: comment_type
@@ -14,6 +15,7 @@ process:
   'settings/comment_type': comment_type
 destination:
   plugin: entity:field_storage_config
+  provider: comment
   dependencies:
     module:
       - comment
diff --git a/core/modules/comment/migration_templates/d6_comment_field_instance.yml b/core/modules/comment/migration_templates/d6_comment_field_instance.yml
index d708619..04fc03b 100644
--- a/core/modules/comment/migration_templates/d6_comment_field_instance.yml
+++ b/core/modules/comment/migration_templates/d6_comment_field_instance.yml
@@ -8,6 +8,7 @@ source:
     entity_type: node
     label: Comments
     required: true
+  provider: comment
 process:
   entity_type: 'constants/entity_type'
   label: 'constants/label'
@@ -38,6 +39,7 @@ process:
   'settings/preview': comment_preview
 destination:
   plugin: entity:field_config
+  provider: comment
 migration_dependencies:
   required:
     - d6_comment_field
diff --git a/core/modules/comment/migration_templates/d6_comment_type.yml b/core/modules/comment/migration_templates/d6_comment_type.yml
index 69a2bd8..bdf178a 100644
--- a/core/modules/comment/migration_templates/d6_comment_type.yml
+++ b/core/modules/comment/migration_templates/d6_comment_type.yml
@@ -6,6 +6,7 @@ source:
   plugin: d6_comment_variable_per_comment_type
   constants:
     entity_type: node
+  provider: comment
 process:
   target_entity_type_id: 'constants/entity_type'
   id: comment_type
@@ -13,3 +14,4 @@ process:
   description: description
 destination:
   plugin: entity:comment_type
+  provider: comment
diff --git a/core/modules/comment/migration_templates/d7_comment.yml b/core/modules/comment/migration_templates/d7_comment.yml
index d4e3c57..d06eec2 100644
--- a/core/modules/comment/migration_templates/d7_comment.yml
+++ b/core/modules/comment/migration_templates/d7_comment.yml
@@ -31,6 +31,7 @@ process:
   comment_body: comment_body
 destination:
   plugin: entity:comment
+  provider: comment
 migration_dependencies:
   required:
     - d7_node
diff --git a/core/modules/comment/migration_templates/d7_comment_entity_display.yml b/core/modules/comment/migration_templates/d7_comment_entity_display.yml
index 2004505..dac6a61 100644
--- a/core/modules/comment/migration_templates/d7_comment_entity_display.yml
+++ b/core/modules/comment/migration_templates/d7_comment_entity_display.yml
@@ -19,6 +19,7 @@ process:
   bundle: node_type
 destination:
   plugin: component_entity_display
+  provider: comment
 migration_dependencies:
   required:
     - d7_comment_field_instance
diff --git a/core/modules/comment/migration_templates/d7_comment_entity_form_display.yml b/core/modules/comment/migration_templates/d7_comment_entity_form_display.yml
index 0315c4a..282f4e3 100644
--- a/core/modules/comment/migration_templates/d7_comment_entity_form_display.yml
+++ b/core/modules/comment/migration_templates/d7_comment_entity_form_display.yml
@@ -19,6 +19,7 @@ process:
   bundle: node_type
 destination:
   plugin: component_entity_form_display
+  provider: comment
 migration_dependencies:
   required:
     - d7_comment_field_instance
diff --git a/core/modules/comment/migration_templates/d7_comment_entity_form_display_subject.yml b/core/modules/comment/migration_templates/d7_comment_entity_form_display_subject.yml
index c27303e..eb90ca3 100644
--- a/core/modules/comment/migration_templates/d7_comment_entity_form_display_subject.yml
+++ b/core/modules/comment/migration_templates/d7_comment_entity_form_display_subject.yml
@@ -25,6 +25,7 @@ process:
   bundle: bundle
 destination:
   plugin: component_entity_form_display
+  provider: comment
 migration_dependencies:
   required:
     - d7_comment_type
diff --git a/core/modules/comment/migration_templates/d7_comment_field.yml b/core/modules/comment/migration_templates/d7_comment_field.yml
index b4b3543..79a15f7 100644
--- a/core/modules/comment/migration_templates/d7_comment_field.yml
+++ b/core/modules/comment/migration_templates/d7_comment_field.yml
@@ -14,6 +14,7 @@ process:
   'settings/comment_type': bundle
 destination:
   plugin: entity:field_storage_config
+  provider: comment
 migration_dependencies:
   required:
     - d7_comment_type
diff --git a/core/modules/comment/migration_templates/d7_comment_field_instance.yml b/core/modules/comment/migration_templates/d7_comment_field_instance.yml
index 80a1a51..6e5bdcb 100644
--- a/core/modules/comment/migration_templates/d7_comment_field_instance.yml
+++ b/core/modules/comment/migration_templates/d7_comment_field_instance.yml
@@ -22,6 +22,7 @@ process:
   'settings/preview': preview
 destination:
   plugin: entity:field_config
+  provider: comment
 migration_dependencies:
   required:
     - d7_comment_field
diff --git a/core/modules/comment/migration_templates/d7_comment_type.yml b/core/modules/comment/migration_templates/d7_comment_type.yml
index 090bfdd..5bae0da 100644
--- a/core/modules/comment/migration_templates/d7_comment_type.yml
+++ b/core/modules/comment/migration_templates/d7_comment_type.yml
@@ -12,6 +12,7 @@ process:
   label: label
 destination:
   plugin: entity:comment_type
+  provider: comment
 migration_dependencies:
   required:
     - d7_node_type
diff --git a/core/modules/config_translation/migration_templates/d6_i18n_system_maintenance.yml b/core/modules/config_translation/migration_templates/d6_i18n_system_maintenance.yml
index c227019..e5057d2 100644
--- a/core/modules/config_translation/migration_templates/d6_i18n_system_maintenance.yml
+++ b/core/modules/config_translation/migration_templates/d6_i18n_system_maintenance.yml
@@ -6,6 +6,7 @@ source:
   plugin: i18n_variable
   variables:
     - site_offline_message
+  provider: system
 process:
   langcode: language
   message: site_offline_message
diff --git a/core/modules/config_translation/migration_templates/d6_i18n_system_site.yml b/core/modules/config_translation/migration_templates/d6_i18n_system_site.yml
index 9c9337c..3342d81 100644
--- a/core/modules/config_translation/migration_templates/d6_i18n_system_site.yml
+++ b/core/modules/config_translation/migration_templates/d6_i18n_system_site.yml
@@ -13,6 +13,7 @@ source:
     - site_frontpage
     - site_403
     - site_404
+  provider: system
 process:
   langcode: language
   name: site_name
diff --git a/core/modules/config_translation/migration_templates/d6_i18n_user_mail.yml b/core/modules/config_translation/migration_templates/d6_i18n_user_mail.yml
index b3c916f..e89e834 100644
--- a/core/modules/config_translation/migration_templates/d6_i18n_user_mail.yml
+++ b/core/modules/config_translation/migration_templates/d6_i18n_user_mail.yml
@@ -19,6 +19,7 @@ source:
     - user_mail_register_pending_approval_body
     - user_mail_status_blocked_subject
     - user_mail_status_blocked_body
+  provider: system
 process:
   langcode: language
   'status_activated/subject':
diff --git a/core/modules/config_translation/migration_templates/d6_i18n_user_settings.yml b/core/modules/config_translation/migration_templates/d6_i18n_user_settings.yml
index 979a74a..a5e16a1 100644
--- a/core/modules/config_translation/migration_templates/d6_i18n_user_settings.yml
+++ b/core/modules/config_translation/migration_templates/d6_i18n_user_settings.yml
@@ -10,6 +10,7 @@ source:
     - user_email_verification
     - user_register
     - anonymous
+  provider: system
 process:
   langcode: language
   'notify/status_blocked': user_mail_status_blocked_notify
diff --git a/core/modules/contact/migration_templates/contact_category.yml b/core/modules/contact/migration_templates/contact_category.yml
index 0174de4..7c344d5 100644
--- a/core/modules/contact/migration_templates/contact_category.yml
+++ b/core/modules/contact/migration_templates/contact_category.yml
@@ -21,3 +21,4 @@ process:
   weight: weight
 destination:
   plugin: entity:contact_form
+  provider: contact
diff --git a/core/modules/dblog/migration_templates/d6_dblog_settings.yml b/core/modules/dblog/migration_templates/d6_dblog_settings.yml
index 64da0a7..afa1e53 100644
--- a/core/modules/dblog/migration_templates/d6_dblog_settings.yml
+++ b/core/modules/dblog/migration_templates/d6_dblog_settings.yml
@@ -6,8 +6,10 @@ source:
   plugin: variable
   variables:
     - dblog_row_limit
+  provider: dblog
 process:
   row_limit: dblog_row_limit
 destination:
   plugin: config
   config_name: dblog.settings
+  provider: dblog
diff --git a/core/modules/dblog/migration_templates/d7_dblog_settings.yml b/core/modules/dblog/migration_templates/d7_dblog_settings.yml
index e22768f..b2dbfb2 100644
--- a/core/modules/dblog/migration_templates/d7_dblog_settings.yml
+++ b/core/modules/dblog/migration_templates/d7_dblog_settings.yml
@@ -6,8 +6,10 @@ source:
   plugin: variable
   variables:
     - dblog_row_limit
+  provider: dblog
 process:
   row_limit: dblog_row_limit
 destination:
   plugin: config
   config_name: dblog.settings
+  provider: dblog
diff --git a/core/modules/field/migration_templates/d6_field.yml b/core/modules/field/migration_templates/d6_field.yml
index 1205b67..a32cd58 100644
--- a/core/modules/field/migration_templates/d6_field.yml
+++ b/core/modules/field/migration_templates/d6_field.yml
@@ -124,3 +124,4 @@ process:
       - global_settings
 destination:
   plugin: entity:field_storage_config
+  provider: field
diff --git a/core/modules/field/migration_templates/d6_field_formatter_settings.yml b/core/modules/field/migration_templates/d6_field_formatter_settings.yml
index 7496db3..e2dd626 100644
--- a/core/modules/field/migration_templates/d6_field_formatter_settings.yml
+++ b/core/modules/field/migration_templates/d6_field_formatter_settings.yml
@@ -258,6 +258,7 @@ process:
 
 destination:
   plugin: component_entity_display
+  provider: field
 migration_dependencies:
   required:
     - d6_field_instance
diff --git a/core/modules/field/migration_templates/d6_field_instance.yml b/core/modules/field/migration_templates/d6_field_instance.yml
index b5035c2..a8df915 100644
--- a/core/modules/field/migration_templates/d6_field_instance.yml
+++ b/core/modules/field/migration_templates/d6_field_instance.yml
@@ -55,6 +55,7 @@ process:
 
 destination:
   plugin: entity:field_config
+  provider: field
 migration_dependencies:
   required:
     - d6_node_type
diff --git a/core/modules/field/migration_templates/d6_field_instance_widget_settings.yml b/core/modules/field/migration_templates/d6_field_instance_widget_settings.yml
index 46b7d75..7aecdb3 100644
--- a/core/modules/field/migration_templates/d6_field_instance_widget_settings.yml
+++ b/core/modules/field/migration_templates/d6_field_instance_widget_settings.yml
@@ -64,6 +64,7 @@ process:
 
 destination:
   plugin: component_entity_form_display
+  provider: field
 migration_dependencies:
   required:
     - d6_field_instance
diff --git a/core/modules/field/migration_templates/d7_field.yml b/core/modules/field/migration_templates/d7_field.yml
index 0693343..b775e93 100644
--- a/core/modules/field/migration_templates/d7_field.yml
+++ b/core/modules/field/migration_templates/d7_field.yml
@@ -9,6 +9,7 @@ source:
   constants:
     status: true
     langcode: und
+  provider: field
 process:
   entity_type: entity_type
   status: 'constants/status'
@@ -41,3 +42,4 @@ process:
     plugin: d7_field_settings
 destination:
   plugin: entity:field_storage_config
+  provider: field
diff --git a/core/modules/field/migration_templates/d7_field_formatter_settings.yml b/core/modules/field/migration_templates/d7_field_formatter_settings.yml
index 14cdd66..7db427d 100644
--- a/core/modules/field/migration_templates/d7_field_formatter_settings.yml
+++ b/core/modules/field/migration_templates/d7_field_formatter_settings.yml
@@ -74,6 +74,7 @@ process:
   "options/third_party_settings": 'constants/third_party_settings'
 destination:
   plugin: component_entity_display
+  provider: field
 migration_dependencies:
   required:
     - d7_field_instance
diff --git a/core/modules/field/migration_templates/d7_field_instance.yml b/core/modules/field/migration_templates/d7_field_instance.yml
index 6f9d074..c98b828 100644
--- a/core/modules/field/migration_templates/d7_field_instance.yml
+++ b/core/modules/field/migration_templates/d7_field_instance.yml
@@ -30,6 +30,7 @@ process:
       - widget_settings
 destination:
   plugin: entity:field_config
+  provider: field
 migration_dependencies:
   required:
     - d7_field
diff --git a/core/modules/field/migration_templates/d7_field_instance_widget_settings.yml b/core/modules/field/migration_templates/d7_field_instance_widget_settings.yml
index b5ee417..0ed1017 100644
--- a/core/modules/field/migration_templates/d7_field_instance_widget_settings.yml
+++ b/core/modules/field/migration_templates/d7_field_instance_widget_settings.yml
@@ -9,6 +9,7 @@ source:
   constants:
     form_mode: default
     third_party_settings: { }
+  provider: field
 process:
   # We skip field types that don't exist because they weren't migrated by the
   # field migration.
@@ -56,6 +57,7 @@ process:
   'options/third_party_settings': 'constants/third_party_settings'
 destination:
   plugin: component_entity_form_display
+  provider: field
 migration_dependencies:
   required:
     - d7_field_instance
diff --git a/core/modules/field/migration_templates/d7_view_modes.yml b/core/modules/field/migration_templates/d7_view_modes.yml
index fd17138..836ee54 100644
--- a/core/modules/field/migration_templates/d7_view_modes.yml
+++ b/core/modules/field/migration_templates/d7_view_modes.yml
@@ -4,6 +4,7 @@ migration_tags:
   - Drupal 7
 source:
   plugin: d7_view_mode
+  provider: field
 process:
   mode:
     plugin: static_map
@@ -26,3 +27,5 @@ process:
   targetEntityType: entity_type
 destination:
   plugin: entity:entity_view_mode
+  provider: field
+
diff --git a/core/modules/file/migration_templates/d6_file.yml b/core/modules/file/migration_templates/d6_file.yml
index 6df20b5..ebca483 100644
--- a/core/modules/file/migration_templates/d6_file.yml
+++ b/core/modules/file/migration_templates/d6_file.yml
@@ -12,6 +12,7 @@ source:
     # table are specified, and must end with a /. See source_full_path
     # configuration in this migration's process pipeline as an example.
     source_base_path: ''
+  provider: system
 process:
     # If you are using both this migration and d6_user_picture_file in a custom
     # migration and executing migrations incrementally, it is recommended that
@@ -46,3 +47,4 @@ process:
   uid: uid
 destination:
   plugin: entity:file
+  provider: file
diff --git a/core/modules/file/migration_templates/d6_upload.yml b/core/modules/file/migration_templates/d6_upload.yml
index 75164a8..154298e 100644
--- a/core/modules/file/migration_templates/d6_upload.yml
+++ b/core/modules/file/migration_templates/d6_upload.yml
@@ -20,6 +20,7 @@ process:
       description: description
 destination:
   plugin: entity:node
+  provider: file
 migration_dependencies:
   required:
     - d6_file
diff --git a/core/modules/file/migration_templates/d6_upload_entity_display.yml b/core/modules/file/migration_templates/d6_upload_entity_display.yml
index b097c88..6a0b81a 100644
--- a/core/modules/file/migration_templates/d6_upload_entity_display.yml
+++ b/core/modules/file/migration_templates/d6_upload_entity_display.yml
@@ -22,6 +22,7 @@ process:
   'options/type': '@type'
 destination:
   plugin: component_entity_display
+  provider: file
 migration_dependencies:
   required:
     - d6_upload_field_instance
diff --git a/core/modules/file/migration_templates/d6_upload_entity_form_display.yml b/core/modules/file/migration_templates/d6_upload_entity_form_display.yml
index 75436db..f1cda2b 100644
--- a/core/modules/file/migration_templates/d6_upload_entity_form_display.yml
+++ b/core/modules/file/migration_templates/d6_upload_entity_form_display.yml
@@ -23,6 +23,7 @@ process:
   'options/type': '@type'
 destination:
   plugin: component_entity_form_display
+  provider: file
 migration_dependencies:
   required:
     - d6_upload_field_instance
diff --git a/core/modules/file/migration_templates/d6_upload_field.yml b/core/modules/file/migration_templates/d6_upload_field.yml
index a919f91..6628869 100644
--- a/core/modules/file/migration_templates/d6_upload_field.yml
+++ b/core/modules/file/migration_templates/d6_upload_field.yml
@@ -13,6 +13,7 @@ source:
     name: upload
     cardinality: -1
     display_field: true
+  provider: upload
 process:
   entity_type: 'constants/entity_type'
   field_name: 'constants/name'
@@ -21,6 +22,7 @@ process:
   'settings/display_field': 'constants/display_field'
 destination:
   plugin: entity:field_storage_config
+  provider: file
   dependencies:
     module:
       - file
diff --git a/core/modules/file/migration_templates/d6_upload_field_instance.yml b/core/modules/file/migration_templates/d6_upload_field_instance.yml
index 5bd7c9a..367f52c 100644
--- a/core/modules/file/migration_templates/d6_upload_field_instance.yml
+++ b/core/modules/file/migration_templates/d6_upload_field_instance.yml
@@ -25,6 +25,7 @@ process:
   'settings/max_filesize': max_filesize
 destination:
   plugin: entity:field_config
+  provider: file
 migration_dependencies:
   required:
     - d6_upload_field
diff --git a/core/modules/file/migration_templates/d7_file.yml b/core/modules/file/migration_templates/d7_file.yml
index 7ebf83b..dbd7ef6 100644
--- a/core/modules/file/migration_templates/d7_file.yml
+++ b/core/modules/file/migration_templates/d7_file.yml
@@ -12,6 +12,7 @@ source:
     # table are specified, and must end with a /. See source_full_path
     # configuration in this migration's process pipeline as an example.
     source_base_path: ''
+  provider: file
 process:
   # If you are using this file to build a custom migration consider removing
   # the fid field to allow incremental migrations.
@@ -43,3 +44,4 @@ process:
   uid: uid
 destination:
   plugin: entity:file
+  provider: file
diff --git a/core/modules/file/migration_templates/file_settings.yml b/core/modules/file/migration_templates/file_settings.yml
index 36584cc..422af6d 100644
--- a/core/modules/file/migration_templates/file_settings.yml
+++ b/core/modules/file/migration_templates/file_settings.yml
@@ -9,6 +9,7 @@ source:
     - file_description_type
     - file_description_length
     - file_icon_directory
+  provider: system
 process:
   'description/type': file_description_type
   'description/length': file_description_length
@@ -16,3 +17,4 @@ process:
 destination:
   plugin: config
   config_name: file.settings
+  provider: file
diff --git a/core/modules/filter/migration_templates/d6_filter_format.yml b/core/modules/filter/migration_templates/d6_filter_format.yml
index a5f4388..fd3af7f 100644
--- a/core/modules/filter/migration_templates/d6_filter_format.yml
+++ b/core/modules/filter/migration_templates/d6_filter_format.yml
@@ -4,6 +4,7 @@ migration_tags:
   - Drupal 6
 source:
   plugin: d6_filter_format
+  provider: filter
 process:
   format:
     plugin: machine_name
@@ -42,3 +43,5 @@ process:
 destination:
   plugin: entity:filter_format
   no_stub: true
+  provider: filter
+
diff --git a/core/modules/filter/migration_templates/d7_filter_format.yml b/core/modules/filter/migration_templates/d7_filter_format.yml
index c0710b5..d76b9d6 100644
--- a/core/modules/filter/migration_templates/d7_filter_format.yml
+++ b/core/modules/filter/migration_templates/d7_filter_format.yml
@@ -4,6 +4,7 @@ migration_tags:
   - Drupal 7
 source:
   plugin: d7_filter_format
+  provider: filter
 process:
   format: format
   name: name
@@ -34,3 +35,5 @@ process:
       weight: weight
 destination:
   plugin: entity:filter_format
+  provider: filter
+
diff --git a/core/modules/forum/migration_templates/d6_forum_settings.yml b/core/modules/forum/migration_templates/d6_forum_settings.yml
index 5516848..dfb8be4 100644
--- a/core/modules/forum/migration_templates/d6_forum_settings.yml
+++ b/core/modules/forum/migration_templates/d6_forum_settings.yml
@@ -11,6 +11,7 @@ source:
     - forum_block_num_0
     - forum_block_num_1
     - forum_nav_vocabulary
+  provider: forum
 process:
   'block/active/limit': forum_block_num_0
   'block/new/limit': forum_block_num_1
diff --git a/core/modules/forum/migration_templates/d7_forum_settings.yml b/core/modules/forum/migration_templates/d7_forum_settings.yml
index b84d485..1656420 100644
--- a/core/modules/forum/migration_templates/d7_forum_settings.yml
+++ b/core/modules/forum/migration_templates/d7_forum_settings.yml
@@ -11,6 +11,7 @@ source:
     - forum_block_num_active
     - forum_block_num_new
     - forum_nav_vocabulary
+  provider: forum
 process:
   'block/active/limit': forum_block_num_active
   'block/new/limit': forum_block_num_new
diff --git a/core/modules/image/migration_templates/d6_imagecache_presets.yml b/core/modules/image/migration_templates/d6_imagecache_presets.yml
index e4780a9..f4055bf 100644
--- a/core/modules/image/migration_templates/d6_imagecache_presets.yml
+++ b/core/modules/image/migration_templates/d6_imagecache_presets.yml
@@ -22,3 +22,4 @@ process:
       - data
 destination:
   plugin: entity:image_style
+  provider: image
diff --git a/core/modules/image/migration_templates/d7_image_settings.yml b/core/modules/image/migration_templates/d7_image_settings.yml
index bfae4d5..d2223fe 100644
--- a/core/modules/image/migration_templates/d7_image_settings.yml
+++ b/core/modules/image/migration_templates/d7_image_settings.yml
@@ -8,6 +8,7 @@ source:
     - allow_insecure_derivatives
     - suppress_itok_output
     - image_style_preview_image
+  provider: image
 process:
   suppress_itok_output: suppress_itok_output
   allow_insecure_derivatives: allow_insecure_derivatives
diff --git a/core/modules/image/migration_templates/d7_image_styles.yml b/core/modules/image/migration_templates/d7_image_styles.yml
index 7dd8977..92fbc3b 100644
--- a/core/modules/image/migration_templates/d7_image_styles.yml
+++ b/core/modules/image/migration_templates/d7_image_styles.yml
@@ -16,3 +16,4 @@ process:
       data: data
 destination:
   plugin: entity:image_style
+  provider: image
diff --git a/core/modules/language/migration_templates/d6_language_content_settings.yml b/core/modules/language/migration_templates/d6_language_content_settings.yml
index 3bf9078..67e6b57 100644
--- a/core/modules/language/migration_templates/d6_language_content_settings.yml
+++ b/core/modules/language/migration_templates/d6_language_content_settings.yml
@@ -7,6 +7,7 @@ source:
   plugin: d6_language_content_settings
   constants:
     target_type: 'node'
+  provider: locale
 process:
 # Ignore i18n_node_options_[node_type] options not available in Drupal 8,
 # i18n_required_node and i18n_newnode_current
@@ -42,6 +43,7 @@ destination:
   plugin: entity:language_content_settings
   content_translation_update_definitions:
     - node
+  provider: language
 migration_dependencies:
   required:
     - d6_node_type
diff --git a/core/modules/language/migration_templates/d7_language_content_settings.yml b/core/modules/language/migration_templates/d7_language_content_settings.yml
index 09437fa..f17f280 100644
--- a/core/modules/language/migration_templates/d7_language_content_settings.yml
+++ b/core/modules/language/migration_templates/d7_language_content_settings.yml
@@ -6,6 +6,7 @@ source:
   plugin: d7_language_content_settings
   constants:
     target_type: 'node'
+  provider: locale
 process:
 # Ignore i18n_node_options_[node_type] options not available in Drupal 8,
 # i18n_required_node and i18n_newnode_current
@@ -41,6 +42,7 @@ destination:
   plugin: entity:language_content_settings
   content_translation_update_definitions:
     - node
+  provider: language
 migration_dependencies:
   required:
     - d7_node_type
diff --git a/core/modules/language/migration_templates/d7_language_negotiation_settings.yml b/core/modules/language/migration_templates/d7_language_negotiation_settings.yml
index 7759965..7b6c52f 100644
--- a/core/modules/language/migration_templates/d7_language_negotiation_settings.yml
+++ b/core/modules/language/migration_templates/d7_language_negotiation_settings.yml
@@ -7,6 +7,7 @@ source:
   variables:
     - locale_language_negotiation_session_param
     - locale_language_negotiation_url_part
+  provider: locale
 process:
   session/parameter:
     plugin: default_value
@@ -27,6 +28,7 @@ process:
 destination:
   plugin: config
   config_name: language.negotiation
+  provider: language
 migration_dependencies:
   required:
     - language
diff --git a/core/modules/language/migration_templates/default_language.yml b/core/modules/language/migration_templates/default_language.yml
index 6d7604d..2200691 100644
--- a/core/modules/language/migration_templates/default_language.yml
+++ b/core/modules/language/migration_templates/default_language.yml
@@ -7,6 +7,7 @@ source:
   plugin: variable
   variables:
     - language_default
+  provider: locale
 process:
   default_langcode:
     -
@@ -33,6 +34,7 @@ process:
 destination:
   plugin: default_langcode
   config_name: system.site
+  provider: language
 migration_dependencies:
   required:
     - language
diff --git a/core/modules/language/migration_templates/language.yml b/core/modules/language/migration_templates/language.yml
index 6ca9c6d..7a432f7 100644
--- a/core/modules/language/migration_templates/language.yml
+++ b/core/modules/language/migration_templates/language.yml
@@ -17,3 +17,4 @@ process:
   weight: weight
 destination:
   plugin: entity:configurable_language
+  provider: language
diff --git a/core/modules/locale/migration_templates/locale_settings.yml b/core/modules/locale/migration_templates/locale_settings.yml
index 6eebe20..f61b8a1 100644
--- a/core/modules/locale/migration_templates/locale_settings.yml
+++ b/core/modules/locale/migration_templates/locale_settings.yml
@@ -8,6 +8,7 @@ source:
   variables:
     - locale_cache_strings
     - locale_js_directory
+  provider: locale
 process:
   cache_strings: locale_cache_strings
   'javascript/directory': locale_js_directory
diff --git a/core/modules/menu_link_content/migration_templates/d6_menu_links.yml b/core/modules/menu_link_content/migration_templates/d6_menu_links.yml
index c418bfe..340b567 100644
--- a/core/modules/menu_link_content/migration_templates/d6_menu_links.yml
+++ b/core/modules/menu_link_content/migration_templates/d6_menu_links.yml
@@ -51,6 +51,7 @@ destination:
   plugin: entity:menu_link_content
   default_bundle: menu_link_content
   no_stub: true
+  provider: menu_link_content
 migration_dependencies:
   required:
     - d6_menu
diff --git a/core/modules/menu_link_content/migration_templates/d7_menu_links.yml b/core/modules/menu_link_content/migration_templates/d7_menu_links.yml
index 8581e2c..a45aa82 100644
--- a/core/modules/menu_link_content/migration_templates/d7_menu_links.yml
+++ b/core/modules/menu_link_content/migration_templates/d7_menu_links.yml
@@ -47,6 +47,7 @@ process:
 destination:
   plugin: entity:menu_link_content
   no_stub: true
+  provider: menu_link_content
 migration_dependencies:
   required:
     - d7_menu
diff --git a/core/modules/menu_link_content/src/Plugin/migrate/source/MenuLink.php b/core/modules/menu_link_content/src/Plugin/migrate/source/MenuLink.php
index 067b133..c91284a 100644
--- a/core/modules/menu_link_content/src/Plugin/migrate/source/MenuLink.php
+++ b/core/modules/menu_link_content/src/Plugin/migrate/source/MenuLink.php
@@ -11,6 +11,7 @@
  *
  * @MigrateSource(
  *   id = "menu_link",
+ *   source_provider = "menu"
  * )
  */
 class MenuLink extends DrupalSqlBase {
diff --git a/core/modules/menu_ui/migration_templates/menu_settings.yml b/core/modules/menu_ui/migration_templates/menu_settings.yml
index dee5f9e..70d2ca4 100644
--- a/core/modules/menu_ui/migration_templates/menu_settings.yml
+++ b/core/modules/menu_ui/migration_templates/menu_settings.yml
@@ -8,8 +8,10 @@ source:
   plugin: variable
   variables:
     - menu_override_parent_selector
+  provider: menu
 process:
   override_parent_selector: menu_override_parent_selector
 destination:
   plugin: config
   config_name: menu_ui.settings
+  provider: menu_ui
diff --git a/core/modules/migrate_drupal_ui/src/Form/MigrateUpgradeForm.php b/core/modules/migrate_drupal_ui/src/Form/MigrateUpgradeForm.php
index 0b98237..bedbdef 100644
--- a/core/modules/migrate_drupal_ui/src/Form/MigrateUpgradeForm.php
+++ b/core/modules/migrate_drupal_ui/src/Form/MigrateUpgradeForm.php
@@ -23,630 +23,9 @@ class MigrateUpgradeForm extends ConfirmFormBase {
   /**
    * Mapping of known migrations and their source and destination modules.
    *
-   * @todo https://www.drupal.org/node/2569805 Hardcoding this information is
-   *   not robust - the migrations themselves should hold the necessary
-   *   information.
-   *
    * @var array[]
    */
-  protected $moduleUpgradePaths = [
-    'action_settings' => [
-      'source_module' => 'system',
-      'destination_module' => 'action',
-    ],
-    'd6_aggregator_feed' => [
-      'source_module' => 'aggregator',
-      'destination_module' => 'aggregator',
-    ],
-    'd6_aggregator_item' => [
-      'source_module' => 'aggregator',
-      'destination_module' => 'aggregator',
-    ],
-    'd6_aggregator_settings' => [
-      'source_module' => 'aggregator',
-      'destination_module' => 'aggregator',
-    ],
-    'd7_aggregator_feed' => [
-      'source_module' => 'aggregator',
-      'destination_module' => 'aggregator',
-    ],
-    'd7_aggregator_item' => [
-      'source_module' => 'aggregator',
-      'destination_module' => 'aggregator',
-    ],
-    'd7_aggregator_settings' => [
-      'source_module' => 'aggregator',
-      'destination_module' => 'aggregator',
-    ],
-    'd7_blocked_ips' => [
-      'source_module' => 'system',
-      'destination_module' => 'ban',
-    ],
-    'd6_block' => [
-      'source_module' => 'block',
-      'destination_module' => 'block',
-    ],
-    'd7_block' => [
-      'source_module' => 'block',
-      'destination_module' => 'block',
-    ],
-    'block_content_body_field' => [
-      'source_module' => 'block',
-      'destination_module' => 'block_content',
-    ],
-    'block_content_type' => [
-      'source_module' => 'block',
-      'destination_module' => 'block_content',
-    ],
-    'd6_custom_block' => [
-      'source_module' => 'block',
-      'destination_module' => 'block_content',
-    ],
-    'd7_custom_block' => [
-      'source_module' => 'block',
-      'destination_module' => 'block_content',
-    ],
-    'd6_book' => [
-      'source_module' => 'book',
-      'destination_module' => 'book',
-    ],
-    'd6_book_settings' => [
-      'source_module' => 'book',
-      'destination_module' => 'book',
-    ],
-    'd6_comment' => [
-      'source_module' => 'comment',
-      'destination_module' => 'comment',
-    ],
-    'd6_comment_entity_display' => [
-      'source_module' => 'comment',
-      'destination_module' => 'comment',
-    ],
-    'd6_comment_entity_form_display' => [
-      'source_module' => 'comment',
-      'destination_module' => 'comment',
-    ],
-    'd6_comment_entity_form_display_subject' => [
-      'source_module' => 'comment',
-      'destination_module' => 'comment',
-    ],
-    'd6_comment_field' => [
-      'source_module' => 'comment',
-      'destination_module' => 'comment',
-    ],
-    'd6_comment_field_instance' => [
-      'source_module' => 'comment',
-      'destination_module' => 'comment',
-    ],
-    'd6_comment_type' => [
-      'source_module' => 'comment',
-      'destination_module' => 'comment',
-    ],
-    'd7_comment' => [
-      'source_module' => 'comment',
-      'destination_module' => 'comment',
-    ],
-    'd7_comment_entity_display' => [
-      'source_module' => 'comment',
-      'destination_module' => 'comment',
-    ],
-    'd7_comment_entity_form_display' => [
-      'source_module' => 'comment',
-      'destination_module' => 'comment',
-    ],
-    'd7_comment_entity_form_display_subject' => [
-      'source_module' => 'comment',
-      'destination_module' => 'comment',
-    ],
-    'd7_comment_field' => [
-      'source_module' => 'comment',
-      'destination_module' => 'comment',
-    ],
-    'd7_comment_field_instance' => [
-      'source_module' => 'comment',
-      'destination_module' => 'comment',
-    ],
-    'd7_comment_type' => [
-      'source_module' => 'comment',
-      'destination_module' => 'comment',
-    ],
-    'contact_category' => [
-      'source_module' => 'contact',
-      'destination_module' => 'contact',
-    ],
-    'd6_contact_settings' => [
-      'source_module' => 'contact',
-      'destination_module' => 'contact',
-    ],
-    'd7_contact_settings' => [
-      'source_module' => 'contact',
-      'destination_module' => 'contact',
-    ],
-    'd6_dblog_settings' => [
-      'source_module' => 'dblog',
-      'destination_module' => 'dblog',
-    ],
-    'd7_dblog_settings' => [
-      'source_module' => 'dblog',
-      'destination_module' => 'dblog',
-    ],
-    'default_language' => [
-      'source_module' => 'locale',
-      'destination_module' => 'language',
-    ],
-    'd6_field' => [
-      'source_module' => 'content',
-      'destination_module' => 'field',
-    ],
-    'd6_field_formatter_settings' => [
-      'source_module' => 'content',
-      'destination_module' => 'field',
-    ],
-    'd6_field_instance' => [
-      'source_module' => 'content',
-      'destination_module' => 'field',
-    ],
-    'd6_field_instance_widget_settings' => [
-      'source_module' => 'content',
-      'destination_module' => 'field',
-    ],
-    'd7_field' => [
-      'source_module' => 'field',
-      'destination_module' => 'field',
-    ],
-    'd7_field_formatter_settings' => [
-      'source_module' => 'field',
-      'destination_module' => 'field',
-    ],
-    'd7_field_instance' => [
-      'source_module' => 'field',
-      'destination_module' => 'field',
-    ],
-    'd7_field_instance_widget_settings' => [
-      'source_module' => 'field',
-      'destination_module' => 'field',
-    ],
-    'd7_view_modes' => [
-      'source_module' => 'field',
-      'destination_module' => 'field',
-    ],
-    'd6_file' => [
-      'source_module' => 'system',
-      'destination_module' => 'file',
-    ],
-    'file_settings' => [
-      'source_module' => 'system',
-      'destination_module' => 'file',
-    ],
-    'd6_upload' => [
-      'source_module' => 'upload',
-      'destination_module' => 'file',
-    ],
-    'd6_upload_entity_display' => [
-      'source_module' => 'upload',
-      'destination_module' => 'file',
-    ],
-    'd6_upload_entity_form_display' => [
-      'source_module' => 'upload',
-      'destination_module' => 'file',
-    ],
-    'd6_upload_field' => [
-      'source_module' => 'upload',
-      'destination_module' => 'file',
-    ],
-    'd6_upload_field_instance' => [
-      'source_module' => 'upload',
-      'destination_module' => 'file',
-    ],
-    'd7_file' => [
-      'source_module' => 'file',
-      'destination_module' => 'file',
-    ],
-    'd6_filter_format' => [
-      'source_module' => 'filter',
-      'destination_module' => 'filter',
-    ],
-    'd7_filter_format' => [
-      'source_module' => 'filter',
-      'destination_module' => 'filter',
-    ],
-    'd6_forum_settings' => [
-      'source_module' => 'forum',
-      'destination_module' => 'forum',
-    ],
-    'd7_forum_settings' => [
-      'source_module' => 'forum',
-      'destination_module' => 'forum',
-    ],
-    'd7_global_theme_settings' => [
-      'source_module' => 'system',
-      'destination_module' => 'system',
-    ],
-    'd6_imagecache_presets' => [
-      'source_module' => 'imagecache',
-      'destination_module' => 'image',
-    ],
-    'd7_image_settings' => [
-      'source_module' => 'image',
-      'destination_module' => 'image',
-    ],
-    'd7_image_styles' => [
-      'source_module' => 'image',
-      'destination_module' => 'image',
-    ],
-    'd6_language_content_settings' => [
-      'source_module' => 'locale',
-      'destination_module' => 'language',
-    ],
-    'd7_language_content_settings' => [
-      'source_module' => 'locale',
-      'destination_module' => 'language',
-    ],
-    'd6_language_negotiation_settings' => [
-      'source_module' => 'locale',
-      'destination_module' => 'language',
-    ],
-    'd7_language_negotiation_settings' => [
-      'source_module' => 'locale',
-      'destination_module' => 'language',
-    ],
-    'language_prefixes_and_domains' => [
-      'source_module' => 'locale',
-      'destination_module' => 'language',
-    ],
-    'd6_language_types' => [
-      'source_module' => 'locale',
-      'destination_module' => 'language',
-    ],
-    'language' => [
-      'source_module' => 'locale',
-      'destination_module' => 'language',
-    ],
-    'd7_language_types' => [
-      'source_module' => 'locale',
-      'destination_module' => 'language',
-    ],
-    'locale_settings' => [
-      'source_module' => 'locale',
-      'destination_module' => 'locale',
-    ],
-    'd6_menu_links' => [
-      'source_module' => 'menu',
-      'destination_module' => 'menu_link_content',
-    ],
-    'menu_settings' => [
-      'source_module' => 'menu',
-      'destination_module' => 'menu_ui',
-    ],
-    'd7_menu_links' => [
-      'source_module' => 'menu',
-      'destination_module' => 'menu_link_content',
-    ],
-    'd6_node' => [
-      'source_module' => 'node',
-      'destination_module' => 'node',
-    ],
-    'd6_node_translation' => [
-      'source_module' => 'translation',
-      'destination_module' => 'content_translation',
-    ],
-    'd6_node_revision' => [
-      'source_module' => 'node',
-      'destination_module' => 'node',
-    ],
-    'd6_node_setting_promote' => [
-      'source_module' => 'node',
-      'destination_module' => 'node',
-    ],
-    'd6_node_setting_status' => [
-      'source_module' => 'node',
-      'destination_module' => 'node',
-    ],
-    'd6_node_setting_sticky' => [
-      'source_module' => 'node',
-      'destination_module' => 'node',
-    ],
-    'd6_node_settings' => [
-      'source_module' => 'node',
-      'destination_module' => 'node',
-    ],
-    'd6_node_type' => [
-      'source_module' => 'node',
-      'destination_module' => 'node',
-    ],
-    'd6_view_modes' => [
-      'source_module' => 'node',
-      'destination_module' => 'node',
-    ],
-    'd7_node' => [
-      'source_module' => 'node',
-      'destination_module' => 'node',
-    ],
-    'd7_node_revision' => [
-      'source_module' => 'node',
-      'destination_module' => 'node',
-    ],
-    'd7_node_settings' => [
-      'source_module' => 'node',
-      'destination_module' => 'node',
-    ],
-    'd7_node_title_label' => [
-      'source_module' => 'node',
-      'destination_module' => 'node',
-    ],
-    'd7_node_type' => [
-      'source_module' => 'node',
-      'destination_module' => 'node',
-    ],
-    'd6_url_alias' => [
-      'source_module' => 'path',
-      'destination_module' => 'path',
-    ],
-    'd7_url_alias' => [
-      'source_module' => 'path',
-      'destination_module' => 'path',
-    ],
-    'search_page' => [
-      'source_module' => 'search',
-      'destination_module' => 'search',
-    ],
-    'd6_search_settings' => [
-      'source_module' => 'search',
-      'destination_module' => 'search',
-    ],
-    'd7_search_settings' => [
-      'source_module' => 'search',
-      'destination_module' => 'search',
-    ],
-    'd7_shortcut' => [
-      'source_module' => 'shortcut',
-      'destination_module' => 'shortcut',
-    ],
-    'd7_shortcut_set' => [
-      'source_module' => 'shortcut',
-      'destination_module' => 'shortcut',
-    ],
-    'd7_shortcut_set_users' => [
-      'source_module' => 'shortcut',
-      'destination_module' => 'shortcut',
-    ],
-    'd6_simpletest_settings' => [
-      'source_module' => 'simpletest',
-      'destination_module' => 'simpletest',
-    ],
-    'd7_simpletest_settings' => [
-      'source_module' => 'simpletest',
-      'destination_module' => 'simpletest',
-    ],
-    'd6_statistics_settings' => [
-      'source_module' => 'statistics',
-      'destination_module' => 'statistics',
-    ],
-    'd6_syslog_settings' => [
-      'source_module' => 'syslog',
-      'destination_module' => 'syslog',
-    ],
-    'd7_syslog_settings' => [
-      'source_module' => 'syslog',
-      'destination_module' => 'syslog',
-    ],
-    'd6_date_formats' => [
-      'source_module' => 'system',
-      'destination_module' => 'system',
-    ],
-    'd6_system_cron' => [
-      'source_module' => 'system',
-      'destination_module' => 'system',
-    ],
-    'd6_system_date' => [
-      'source_module' => 'system',
-      'destination_module' => 'system',
-    ],
-    'd6_system_file' => [
-      'source_module' => 'system',
-      'destination_module' => 'system',
-    ],
-    'system_image' => [
-      'source_module' => 'system',
-      'destination_module' => 'system',
-    ],
-    'system_image_gd' => [
-      'source_module' => 'system',
-      'destination_module' => 'system',
-    ],
-    'system_logging' => [
-      'source_module' => 'system',
-      'destination_module' => 'system',
-    ],
-    'system_maintenance' => [
-      'source_module' => 'system',
-      'destination_module' => 'system',
-    ],
-    'd6_system_performance' => [
-      'source_module' => 'system',
-      'destination_module' => 'system',
-    ],
-    'system_rss' => [
-      'source_module' => 'system',
-      'destination_module' => 'system',
-    ],
-    'system_site' => [
-      'source_module' => 'system',
-      'destination_module' => 'system',
-    ],
-    'd7_system_authorize' => [
-      'source_module' => 'system',
-      'destination_module' => 'system',
-    ],
-    'd7_system_cron' => [
-      'source_module' => 'system',
-      'destination_module' => 'system',
-    ],
-    'd7_system_date' => [
-      'source_module' => 'system',
-      'destination_module' => 'system',
-    ],
-    'd7_system_file' => [
-      'source_module' => 'system',
-      'destination_module' => 'system',
-    ],
-    'd7_system_mail' => [
-      'source_module' => 'system',
-      'destination_module' => 'system',
-    ],
-    'd7_system_performance' => [
-      'source_module' => 'system',
-      'destination_module' => 'system',
-    ],
-    'd6_menu' => [
-      'source_module' => 'menu',
-      'destination_module' => 'system',
-    ],
-    'd7_menu' => [
-      'source_module' => 'menu',
-      'destination_module' => 'system',
-    ],
-    'taxonomy_settings' => [
-      'source_module' => 'taxonomy',
-      'destination_module' => 'taxonomy',
-    ],
-    'd6_taxonomy_term' => [
-      'source_module' => 'taxonomy',
-      'destination_module' => 'taxonomy',
-    ],
-    'd6_taxonomy_vocabulary' => [
-      'source_module' => 'taxonomy',
-      'destination_module' => 'taxonomy',
-    ],
-    'd6_term_node' => [
-      'source_module' => 'taxonomy',
-      'destination_module' => 'taxonomy',
-    ],
-    'd6_term_node_revision' => [
-      'source_module' => 'taxonomy',
-      'destination_module' => 'taxonomy',
-    ],
-    'd6_vocabulary_entity_display' => [
-      'source_module' => 'taxonomy',
-      'destination_module' => 'taxonomy',
-    ],
-    'd6_vocabulary_entity_form_display' => [
-      'source_module' => 'taxonomy',
-      'destination_module' => 'taxonomy',
-    ],
-    'd6_vocabulary_field' => [
-      'source_module' => 'taxonomy',
-      'destination_module' => 'taxonomy',
-    ],
-    'd6_vocabulary_field_instance' => [
-      'source_module' => 'taxonomy',
-      'destination_module' => 'taxonomy',
-    ],
-    'd7_taxonomy_term' => [
-      'source_module' => 'taxonomy',
-      'destination_module' => 'taxonomy',
-    ],
-    'd7_taxonomy_vocabulary' => [
-      'source_module' => 'taxonomy',
-      'destination_module' => 'taxonomy',
-    ],
-    'text_settings' => [
-      'source_module' => 'text',
-      'destination_module' => 'text',
-    ],
-    'd7_tracker_node' => [
-      'source_module' => 'tracker',
-      'destination_module' => 'tracker',
-    ],
-    'd7_tracker_settings' => [
-      'source_module' => 'tracker',
-      'destination_module' => 'tracker',
-    ],
-    'd7_tracker_user' => [
-      'source_module' => 'tracker',
-      'destination_module' => 'tracker',
-    ],
-    'update_settings' => [
-      'source_module' => 'update',
-      'destination_module' => 'update',
-    ],
-    'd6_profile_values' => [
-      'source_module' => 'profile',
-      'destination_module' => 'user',
-    ],
-    'd6_user' => [
-      'source_module' => 'user',
-      'destination_module' => 'user',
-    ],
-    'd6_user_contact_settings' => [
-      'source_module' => 'user',
-      'destination_module' => 'user',
-    ],
-    'd6_user_mail' => [
-      'source_module' => 'user',
-      'destination_module' => 'user',
-    ],
-    'd6_user_picture_file' => [
-      'source_module' => 'user',
-      'destination_module' => 'user',
-    ],
-    'd6_user_role' => [
-      'source_module' => 'user',
-      'destination_module' => 'user',
-    ],
-    'd6_user_settings' => [
-      'source_module' => 'user',
-      'destination_module' => 'user',
-    ],
-    'd7_user' => [
-      'source_module' => 'user',
-      'destination_module' => 'user',
-    ],
-    'd7_user_flood' => [
-      'source_module' => 'user',
-      'destination_module' => 'user',
-    ],
-    'd7_user_mail' => [
-      'source_module' => 'user',
-      'destination_module' => 'user',
-    ],
-    'd7_user_role' => [
-      'source_module' => 'user',
-      'destination_module' => 'user',
-    ],
-    'user_picture_entity_display' => [
-      'source_module' => 'user',
-      'destination_module' => 'user',
-    ],
-    'user_picture_entity_form_display' => [
-      'source_module' => 'user',
-      'destination_module' => 'user',
-    ],
-    'user_picture_field' => [
-      'source_module' => 'user',
-      'destination_module' => 'user',
-    ],
-    'user_picture_field_instance' => [
-      'source_module' => 'user',
-      'destination_module' => 'user',
-    ],
-    'user_profile_entity_display' => [
-      'source_module' => 'profile',
-      'destination_module' => 'user',
-    ],
-    'user_profile_entity_form_display' => [
-      'source_module' => 'profile',
-      'destination_module' => 'user',
-    ],
-    'user_profile_field' => [
-      'source_module' => 'profile',
-      'destination_module' => 'user',
-    ],
-    'user_profile_field_instance' => [
-      'source_module' => 'profile',
-      'destination_module' => 'user',
-    ],
-  ];
+  protected $moduleUpgradePaths = [];
 
   /**
    * The state service.
@@ -972,6 +351,7 @@ public function validateCredentialForm(array &$form, FormStateInterface $form_st
         }
 
         // Store the retrieved migration IDs in form storage.
+        $form_state->set('version', $version);
         $form_state->set('migrations', $migration_array);
         $form_state->set('source_base_path', $form_state->getValue('source_base_path'));
 
@@ -1020,26 +400,57 @@ public function buildConfirmForm(array $form, FormStateInterface $form_state) {
 
     $form['actions']['submit']['#value'] = $this->t('Perform upgrade');
 
+    $version = $form_state->get('version');
+    $migrations = $this->getMigrations('migrate_drupal_' . $version, $version);
+
     $table_data = [];
-    $system_data = [];
-    foreach ($form_state->get('migrations') as $migration_id => $migration_label) {
-      // Fetch the system data at the first opportunity.
-      if (empty($system_data)) {
-        $system_data = $form_state->get('system_data');
+    foreach ($migrations as $migration) {
+      $migration_id = $migration->getPluginId();
+
+      // Determine the source provider, looking at configuration first.
+      $source_module = (!empty($migration->getSourceConfiguration()['provider'])) ? $migration->getSourceConfiguration()['provider'] : NULL;
+      if (!$source_module) {
+        $source_module = (!empty($migration->getSourcePlugin()
+          ->getPluginDefinition()['source_provider'])) ? $migration->getSourcePlugin()
+          ->getPluginDefinition()['source_provider'] : NULL;
+      }
+      if (!$source_module) {
+        drupal_set_message(t('Source provider not found for @migration_id.', ['@migration_id' => $migration_id]), 'error');
       }
 
-      // Handle derivatives.
-      list($migration_id,) = explode(':', $migration_id, 2);
-      $source_module = $this->moduleUpgradePaths[$migration_id]['source_module'];
-      $destination_module = $this->moduleUpgradePaths[$migration_id]['destination_module'];
-      $table_data[$source_module][$destination_module][$migration_id] = $migration_label;
+      // Determine the destination provider.
+      $destination_module = (!empty($migration->getDestinationConfiguration()['provider'])) ? $migration->getDestinationConfiguration()['provider'] : NULL;
+      if (!$destination_module) {
+        if ($migration->getDestinationPlugin()->getPluginId() == 'config') {
+          $configuration_destination = (!empty($migration->getDestinationConfiguration()['config_name'])) ? $migration->getDestinationConfiguration()['config_name'] : NULL;
+          if ($configuration_destination) {
+            $destination_module = explode('.', $configuration_destination, 2)[0];
+          }
+        }
+      }
+      if (!$destination_module) {
+        drupal_set_message(t('Destination provider not found for @migration_id.', ['@migration_id' => $migration_id]), 'error');
+      }
+
+      if ($source_module && $destination_module) {
+        $this->moduleUpgradePaths[$migration_id]['source_module'] = $source_module;
+        $this->moduleUpgradePaths[$migration_id]['destination_module'] = $destination_module;
+        $table_data[$source_module][$destination_module][$migration_id] = $migration->label();
+      }
     }
+
     // Sort the table by source module names and within that destination
     // module names.
     ksort($table_data);
     foreach ($table_data as $source_module => $destination_module_info) {
       ksort($table_data[$source_module]);
     }
+
+    $system_data = [];
+    // Fetch the system data at the first opportunity.
+    if (empty($system_data)) {
+      $system_data = $form_state->get('system_data');
+    }
     $unmigrated_source_modules = array_diff_key($system_data['module'], $table_data);
 
     // Missing migrations.
diff --git a/core/modules/node/migration_templates/d6_node.yml b/core/modules/node/migration_templates/d6_node.yml
index 4e19bb4..167e9e3 100644
--- a/core/modules/node/migration_templates/d6_node.yml
+++ b/core/modules/node/migration_templates/d6_node.yml
@@ -42,6 +42,7 @@ process:
 
 destination:
   plugin: entity:node
+  provider: node
 migration_dependencies:
   required:
     - d6_user
diff --git a/core/modules/node/migration_templates/d6_node_revision.yml b/core/modules/node/migration_templates/d6_node_revision.yml
index 046e9bb..ca06f7f 100644
--- a/core/modules/node/migration_templates/d6_node_revision.yml
+++ b/core/modules/node/migration_templates/d6_node_revision.yml
@@ -39,3 +39,5 @@ process:
 
 destination:
   plugin: entity_revision:node
+  provider: node
+
diff --git a/core/modules/node/migration_templates/d6_node_setting_promote.yml b/core/modules/node/migration_templates/d6_node_setting_promote.yml
index 469083d..7dc9e17 100644
--- a/core/modules/node/migration_templates/d6_node_setting_promote.yml
+++ b/core/modules/node/migration_templates/d6_node_setting_promote.yml
@@ -17,6 +17,7 @@ process:
   'default_value/0/value': 'options/promote'
 destination:
   plugin: entity:base_field_override
+  provider: node
 migration_dependencies:
   required:
     - d6_node_type
diff --git a/core/modules/node/migration_templates/d6_node_setting_status.yml b/core/modules/node/migration_templates/d6_node_setting_status.yml
index 7c5a8de..64a810e 100644
--- a/core/modules/node/migration_templates/d6_node_setting_status.yml
+++ b/core/modules/node/migration_templates/d6_node_setting_status.yml
@@ -17,6 +17,7 @@ process:
   'default_value/0/value': 'options/status'
 destination:
   plugin: entity:base_field_override
+  provider: node
 migration_dependencies:
   required:
     - d6_node_type
diff --git a/core/modules/node/migration_templates/d6_node_setting_sticky.yml b/core/modules/node/migration_templates/d6_node_setting_sticky.yml
index 77ad6cd..8f8807b 100644
--- a/core/modules/node/migration_templates/d6_node_setting_sticky.yml
+++ b/core/modules/node/migration_templates/d6_node_setting_sticky.yml
@@ -17,6 +17,7 @@ process:
   'default_value/0/value': 'options/sticky'
 destination:
   plugin: entity:base_field_override
+  provider: node
 migration_dependencies:
   required:
     - d6_node_type
diff --git a/core/modules/node/migration_templates/d6_node_settings.yml b/core/modules/node/migration_templates/d6_node_settings.yml
index 17b0857..19c680d 100644
--- a/core/modules/node/migration_templates/d6_node_settings.yml
+++ b/core/modules/node/migration_templates/d6_node_settings.yml
@@ -6,6 +6,7 @@ source:
   plugin: variable
   variables:
     - node_admin_theme
+  provider: node
 process:
   use_admin_theme: node_admin_theme
 destination:
diff --git a/core/modules/node/migration_templates/d6_node_translation.yml b/core/modules/node/migration_templates/d6_node_translation.yml
index 3b923d1..82ebfcc 100644
--- a/core/modules/node/migration_templates/d6_node_translation.yml
+++ b/core/modules/node/migration_templates/d6_node_translation.yml
@@ -41,6 +41,7 @@ process:
 destination:
   plugin: entity:node
   translations: true
+  provider: node
 migration_dependencies:
   required:
     - d6_user
diff --git a/core/modules/node/migration_templates/d6_node_type.yml b/core/modules/node/migration_templates/d6_node_type.yml
index 4c76f66..61fbe27 100644
--- a/core/modules/node/migration_templates/d6_node_type.yml
+++ b/core/modules/node/migration_templates/d6_node_type.yml
@@ -22,3 +22,4 @@ process:
   create_body_label: body_label
 destination:
   plugin: entity:node_type
+  provider: node
diff --git a/core/modules/node/migration_templates/d6_view_modes.yml b/core/modules/node/migration_templates/d6_view_modes.yml
index 815709b..f917bdd 100644
--- a/core/modules/node/migration_templates/d6_view_modes.yml
+++ b/core/modules/node/migration_templates/d6_view_modes.yml
@@ -36,3 +36,4 @@ process:
   status: 'constants/status'
 destination:
   plugin: entity:entity_view_mode
+  provider: node
diff --git a/core/modules/node/migration_templates/d7_node.yml b/core/modules/node/migration_templates/d7_node.yml
index 381f7ce..9b7be77 100644
--- a/core/modules/node/migration_templates/d7_node.yml
+++ b/core/modules/node/migration_templates/d7_node.yml
@@ -26,6 +26,7 @@ process:
   revision_timestamp: timestamp
 destination:
   plugin: entity:node
+  provider: node
 migration_dependencies:
   required:
     - d7_user
diff --git a/core/modules/node/migration_templates/d7_node_revision.yml b/core/modules/node/migration_templates/d7_node_revision.yml
index c6081ef..ccd4802 100644
--- a/core/modules/node/migration_templates/d7_node_revision.yml
+++ b/core/modules/node/migration_templates/d7_node_revision.yml
@@ -26,6 +26,7 @@ process:
   revision_timestamp: timestamp
 destination:
   plugin: entity_revision:node
+  provider: node
 migration_dependencies:
   required:
     - d7_node
diff --git a/core/modules/node/migration_templates/d7_node_settings.yml b/core/modules/node/migration_templates/d7_node_settings.yml
index 0461754..0cf40f8 100644
--- a/core/modules/node/migration_templates/d7_node_settings.yml
+++ b/core/modules/node/migration_templates/d7_node_settings.yml
@@ -6,6 +6,7 @@ source:
   plugin: variable
   variables:
     - node_admin_theme
+  provider: node
 process:
   use_admin_theme: node_admin_theme
 destination:
diff --git a/core/modules/node/migration_templates/d7_node_title_label.yml b/core/modules/node/migration_templates/d7_node_title_label.yml
index 53ae6ea..3309650 100644
--- a/core/modules/node/migration_templates/d7_node_title_label.yml
+++ b/core/modules/node/migration_templates/d7_node_title_label.yml
@@ -14,6 +14,7 @@ process:
   label: title_label
 destination:
   plugin: entity:base_field_override
+  provider: node
 migration_dependencies:
   required:
     - d7_node_type
diff --git a/core/modules/node/migration_templates/d7_node_type.yml b/core/modules/node/migration_templates/d7_node_type.yml
index 6cf8e78..6068942 100644
--- a/core/modules/node/migration_templates/d7_node_type.yml
+++ b/core/modules/node/migration_templates/d7_node_type.yml
@@ -19,3 +19,4 @@ process:
   create_body_label: body_label
 destination:
   plugin: entity:node_type
+  provider: node
diff --git a/core/modules/node/src/Plugin/migrate/source/d6/Node.php b/core/modules/node/src/Plugin/migrate/source/d6/Node.php
index 2e4d1a6..cc84452 100644
--- a/core/modules/node/src/Plugin/migrate/source/d6/Node.php
+++ b/core/modules/node/src/Plugin/migrate/source/d6/Node.php
@@ -15,7 +15,9 @@
  * Drupal 6 node source from database.
  *
  * @MigrateSource(
- *   id = "d6_node"
+ *   id = "d6_node",
+ *   source_provider = "node"
+ *
  * )
  */
 class Node extends DrupalSqlBase {
diff --git a/core/modules/node/src/Plugin/migrate/source/d6/NodeRevision.php b/core/modules/node/src/Plugin/migrate/source/d6/NodeRevision.php
index 3f9a580..8625dc3 100644
--- a/core/modules/node/src/Plugin/migrate/source/d6/NodeRevision.php
+++ b/core/modules/node/src/Plugin/migrate/source/d6/NodeRevision.php
@@ -7,7 +7,8 @@
  * Drupal 6 node revision source from database.
  *
  * @MigrateSource(
- *   id = "d6_node_revision"
+ *   id = "d6_node_revision",
+ *   source_provider = "node"
  * )
  */
 class NodeRevision extends Node {
diff --git a/core/modules/node/src/Plugin/migrate/source/d6/NodeType.php b/core/modules/node/src/Plugin/migrate/source/d6/NodeType.php
index 0653d59..32dc383 100644
--- a/core/modules/node/src/Plugin/migrate/source/d6/NodeType.php
+++ b/core/modules/node/src/Plugin/migrate/source/d6/NodeType.php
@@ -9,7 +9,8 @@
  * Drupal 6 Node types source from database.
  *
  * @MigrateSource(
- *   id = "d6_node_type"
+ *   id = "d6_node_type",
+ *   source_provider = "node"
  * )
  */
 class NodeType extends DrupalSqlBase {
diff --git a/core/modules/path/migration_templates/d6_url_alias.yml b/core/modules/path/migration_templates/d6_url_alias.yml
index 4ca48fe..335e769 100644
--- a/core/modules/path/migration_templates/d6_url_alias.yml
+++ b/core/modules/path/migration_templates/d6_url_alias.yml
@@ -22,3 +22,4 @@ process:
     source: language
 destination:
   plugin: url_alias
+  provider: path
diff --git a/core/modules/path/migration_templates/d7_url_alias.yml b/core/modules/path/migration_templates/d7_url_alias.yml
index a3ddec1..1584511 100644
--- a/core/modules/path/migration_templates/d7_url_alias.yml
+++ b/core/modules/path/migration_templates/d7_url_alias.yml
@@ -20,3 +20,4 @@ process:
   langcode: language
 destination:
   plugin: url_alias
+  provider: path
diff --git a/core/modules/search/migration_templates/d6_search_settings.yml b/core/modules/search/migration_templates/d6_search_settings.yml
index 28f8600..cb192b9 100644
--- a/core/modules/search/migration_templates/d6_search_settings.yml
+++ b/core/modules/search/migration_templates/d6_search_settings.yml
@@ -10,6 +10,7 @@ source:
     - minimum_word_size
     - overlap_cjk
     - search_cron_limit
+  provider: search
 process:
   'index/minimum_word_size': minimum_word_size
   'index/overlap_cjk': overlap_cjk
diff --git a/core/modules/search/migration_templates/d7_search_settings.yml b/core/modules/search/migration_templates/d7_search_settings.yml
index 57db8b9..7fe2688 100644
--- a/core/modules/search/migration_templates/d7_search_settings.yml
+++ b/core/modules/search/migration_templates/d7_search_settings.yml
@@ -13,6 +13,7 @@ source:
     - search_tag_weights
     - search_and_or_limit
     - search_default_module
+  provider: search
 process:
   'index/minimum_word_size': minimum_word_size
   'index/overlap_cjk': overlap_cjk
diff --git a/core/modules/search/migration_templates/search_page.yml b/core/modules/search/migration_templates/search_page.yml
index 8ddc02a..ac432e0 100644
--- a/core/modules/search/migration_templates/search_page.yml
+++ b/core/modules/search/migration_templates/search_page.yml
@@ -16,6 +16,7 @@ source:
     id: node_search
     path: node
     plugin: node_search
+  provider: search
 process:
   id: 'constants/id'
   path: 'constants/path'
@@ -24,3 +25,4 @@ process:
     plugin: search_configuration_rankings
 destination:
   plugin: entity:search_page
+  provider: search
diff --git a/core/modules/shortcut/migration_templates/d7_shortcut.yml b/core/modules/shortcut/migration_templates/d7_shortcut.yml
index da3d894..011e83a 100644
--- a/core/modules/shortcut/migration_templates/d7_shortcut.yml
+++ b/core/modules/shortcut/migration_templates/d7_shortcut.yml
@@ -20,6 +20,7 @@ process:
       - link_path
 destination:
   plugin: entity:shortcut
+  provider: shortcut
 migration_dependencies:
   required:
     - d7_shortcut_set
diff --git a/core/modules/shortcut/migration_templates/d7_shortcut_set.yml b/core/modules/shortcut/migration_templates/d7_shortcut_set.yml
index 784178e..1ee5bd5 100644
--- a/core/modules/shortcut/migration_templates/d7_shortcut_set.yml
+++ b/core/modules/shortcut/migration_templates/d7_shortcut_set.yml
@@ -18,3 +18,5 @@ process:
   label: title
 destination:
   plugin: entity:shortcut_set
+  provider: shortcut
+
diff --git a/core/modules/shortcut/migration_templates/d7_shortcut_set_users.yml b/core/modules/shortcut/migration_templates/d7_shortcut_set_users.yml
index a93c4bb..7eaffa9 100644
--- a/core/modules/shortcut/migration_templates/d7_shortcut_set_users.yml
+++ b/core/modules/shortcut/migration_templates/d7_shortcut_set_users.yml
@@ -19,6 +19,7 @@ process:
     source: set_name
 destination:
   plugin: shortcut_set_users
+  provider: shortcut
 migration_dependencies:
   required:
     - d7_shortcut_set
diff --git a/core/modules/simpletest/migration_templates/d6_simpletest_settings.yml b/core/modules/simpletest/migration_templates/d6_simpletest_settings.yml
index c9eedbb..e9aad31 100644
--- a/core/modules/simpletest/migration_templates/d6_simpletest_settings.yml
+++ b/core/modules/simpletest/migration_templates/d6_simpletest_settings.yml
@@ -10,6 +10,7 @@ source:
     - simpletest_httpauth_password
     - simpletest_httpauth_username
     - simpletest_verbose
+  provider: simpletest
 process:
   clear_results: simpletest_clear_results
   'httpauth/method': simpletest_httpauth_method
diff --git a/core/modules/simpletest/migration_templates/d7_simpletest_settings.yml b/core/modules/simpletest/migration_templates/d7_simpletest_settings.yml
index b77f76a..7e185b5 100644
--- a/core/modules/simpletest/migration_templates/d7_simpletest_settings.yml
+++ b/core/modules/simpletest/migration_templates/d7_simpletest_settings.yml
@@ -10,6 +10,7 @@ source:
     - simpletest_httpauth_password
     - simpletest_httpauth_username
     - simpletest_verbose
+  provider: simpletest
 process:
   clear_results: simpletest_clear_results
   'httpauth/method': simpletest_httpauth_method
diff --git a/core/modules/statistics/migration_templates/statistics_settings.yml b/core/modules/statistics/migration_templates/statistics_settings.yml
index 62c2c06..fffc26a 100644
--- a/core/modules/statistics/migration_templates/statistics_settings.yml
+++ b/core/modules/statistics/migration_templates/statistics_settings.yml
@@ -9,6 +9,7 @@ source:
     - statistics_enable_access_log
     - statistics_flush_accesslog_timer
     - statistics_count_content_views
+  provider: statistics
 process:
   'access_log/enabled': statistics_enable_access_log
   'access_log/max_lifetime': statistics_flush_accesslog_timer
diff --git a/core/modules/syslog/migration_templates/d6_syslog_settings.yml b/core/modules/syslog/migration_templates/d6_syslog_settings.yml
index 86a7017..8b0ea22 100644
--- a/core/modules/syslog/migration_templates/d6_syslog_settings.yml
+++ b/core/modules/syslog/migration_templates/d6_syslog_settings.yml
@@ -7,6 +7,7 @@ source:
   variables:
     - syslog_identity
     - syslog_facility
+  provider: syslog
 process:
   identity: syslog_identity
   facility: syslog_facility
diff --git a/core/modules/syslog/migration_templates/d7_syslog_settings.yml b/core/modules/syslog/migration_templates/d7_syslog_settings.yml
index 4000572..5b60d73 100644
--- a/core/modules/syslog/migration_templates/d7_syslog_settings.yml
+++ b/core/modules/syslog/migration_templates/d7_syslog_settings.yml
@@ -8,6 +8,7 @@ source:
     - syslog_facility
     - syslog_format
     - syslog_identity
+  provider: syslog
 process:
   facility: syslog_facility
   format: syslog_format
diff --git a/core/modules/system/migration_templates/d6_date_formats.yml b/core/modules/system/migration_templates/d6_date_formats.yml
index 71257d4..af4526d 100644
--- a/core/modules/system/migration_templates/d6_date_formats.yml
+++ b/core/modules/system/migration_templates/d6_date_formats.yml
@@ -8,6 +8,7 @@ source:
     - date_format_long
     - date_format_medium
     - date_format_short
+  provider: system
 process:
   id:
     plugin: static_map
@@ -19,3 +20,4 @@ process:
   pattern: value
 destination:
   plugin: entity:date_format
+  provider: system
diff --git a/core/modules/system/migration_templates/d6_menu.yml b/core/modules/system/migration_templates/d6_menu.yml
index 25ad0af..ea4a3f9 100644
--- a/core/modules/system/migration_templates/d6_menu.yml
+++ b/core/modules/system/migration_templates/d6_menu.yml
@@ -11,3 +11,4 @@ process:
   description: description
 destination:
   plugin: entity:menu
+  provider: system
diff --git a/core/modules/system/migration_templates/d6_system_cron.yml b/core/modules/system/migration_templates/d6_system_cron.yml
index 7dd3a2b..840d932 100644
--- a/core/modules/system/migration_templates/d6_system_cron.yml
+++ b/core/modules/system/migration_templates/d6_system_cron.yml
@@ -8,6 +8,7 @@ source:
     - cron_threshold_warning
     - cron_threshold_error
     - cron_last
+  provider: system
 process:
   'threshold/requirements_warning': cron_threshold_warning
   'threshold/requirements_error': cron_threshold_error
diff --git a/core/modules/system/migration_templates/d6_system_date.yml b/core/modules/system/migration_templates/d6_system_date.yml
index 25f6728..5240716 100644
--- a/core/modules/system/migration_templates/d6_system_date.yml
+++ b/core/modules/system/migration_templates/d6_system_date.yml
@@ -8,6 +8,7 @@ source:
     - configurable_timezones
     - date_first_day
     - date_default_timezone
+  provider: system
 process:
   'timezone/user/configurable': configurable_timezones
   first_day: date_first_day
diff --git a/core/modules/system/migration_templates/d6_system_file.yml b/core/modules/system/migration_templates/d6_system_file.yml
index 60cd616..fc0b8d5 100644
--- a/core/modules/system/migration_templates/d6_system_file.yml
+++ b/core/modules/system/migration_templates/d6_system_file.yml
@@ -7,6 +7,7 @@ source:
   variables:
     - file_directory_temp
     - allow_insecure_uploads
+  provider: system
 process:
   'path/temporary': file_directory_temp
   allow_insecure_uploads:
diff --git a/core/modules/system/migration_templates/d6_system_performance.yml b/core/modules/system/migration_templates/d6_system_performance.yml
index 6f9666e..f1d81c6 100644
--- a/core/modules/system/migration_templates/d6_system_performance.yml
+++ b/core/modules/system/migration_templates/d6_system_performance.yml
@@ -10,6 +10,7 @@ source:
     - cache_lifetime
     - cache
     - page_compression
+  provider: system
 process:
   'css/preprocess': preprocess_css
   'js/preprocess': preprocess_js
diff --git a/core/modules/system/migration_templates/d7_menu.yml b/core/modules/system/migration_templates/d7_menu.yml
index da47b36..f7edd58 100644
--- a/core/modules/system/migration_templates/d7_menu.yml
+++ b/core/modules/system/migration_templates/d7_menu.yml
@@ -18,3 +18,4 @@ process:
   description: description
 destination:
   plugin: entity:menu
+  provider: system
diff --git a/core/modules/system/migration_templates/d7_system_authorize.yml b/core/modules/system/migration_templates/d7_system_authorize.yml
index 420497b..a0ef270 100644
--- a/core/modules/system/migration_templates/d7_system_authorize.yml
+++ b/core/modules/system/migration_templates/d7_system_authorize.yml
@@ -5,6 +5,7 @@ source:
   plugin: variable
   variables:
     - authorize_filetransfer_default
+  provider: system
 process:
    filetransfer_default: authorize_filetransfer_default
 destination:
diff --git a/core/modules/system/migration_templates/d7_system_cron.yml b/core/modules/system/migration_templates/d7_system_cron.yml
index a603af3..4f820ea 100644
--- a/core/modules/system/migration_templates/d7_system_cron.yml
+++ b/core/modules/system/migration_templates/d7_system_cron.yml
@@ -7,6 +7,7 @@ source:
   variables:
     - cron_threshold_warning
     - cron_threshold_error
+  provider: system
 process:
   'threshold/requirements_warning': cron_threshold_warning
   'threshold/requirements_error': cron_threshold_error
diff --git a/core/modules/system/migration_templates/d7_system_date.yml b/core/modules/system/migration_templates/d7_system_date.yml
index b380c89..382e054 100644
--- a/core/modules/system/migration_templates/d7_system_date.yml
+++ b/core/modules/system/migration_templates/d7_system_date.yml
@@ -10,6 +10,7 @@ source:
     - configurable_timezones
     - empty_timezone_message
     - user_default_timezone
+  provider: system
 process:
   'country/default': site_default_country
   first_day: date_first_day
diff --git a/core/modules/system/migration_templates/d7_system_file.yml b/core/modules/system/migration_templates/d7_system_file.yml
index 2295e0e..3e6cb59 100644
--- a/core/modules/system/migration_templates/d7_system_file.yml
+++ b/core/modules/system/migration_templates/d7_system_file.yml
@@ -7,6 +7,7 @@ source:
   variables:
     - allow_insecure_uploads
     - file_temporary_path
+  provider: system
 process:
   allow_insecure_uploads:
     plugin: static_map
diff --git a/core/modules/system/migration_templates/d7_system_mail.yml b/core/modules/system/migration_templates/d7_system_mail.yml
index d4a569c..c6d46b4 100644
--- a/core/modules/system/migration_templates/d7_system_mail.yml
+++ b/core/modules/system/migration_templates/d7_system_mail.yml
@@ -5,6 +5,7 @@ source:
   plugin: variable
   variables:
     - mail_system
+  provider: system
 process:
   'interface/default':
     plugin: static_map
diff --git a/core/modules/system/migration_templates/d7_system_performance.yml b/core/modules/system/migration_templates/d7_system_performance.yml
index b41d75e..e658172 100644
--- a/core/modules/system/migration_templates/d7_system_performance.yml
+++ b/core/modules/system/migration_templates/d7_system_performance.yml
@@ -9,6 +9,7 @@ source:
     - preprocess_js
     - cache_lifetime
     - page_compression
+  provider: system
 process:
   'css/preprocess': preprocess_css
   'js/preprocess': preprocess_js
diff --git a/core/modules/system/migration_templates/system_image.yml b/core/modules/system/migration_templates/system_image.yml
index 7bb16b1..4ab33fb 100644
--- a/core/modules/system/migration_templates/system_image.yml
+++ b/core/modules/system/migration_templates/system_image.yml
@@ -7,6 +7,7 @@ source:
   plugin: variable
   variables:
     - image_toolkit
+  provider: system
 process:
   toolkit: image_toolkit
 destination:
diff --git a/core/modules/system/migration_templates/system_image_gd.yml b/core/modules/system/migration_templates/system_image_gd.yml
index 685116e..4c433a2 100644
--- a/core/modules/system/migration_templates/system_image_gd.yml
+++ b/core/modules/system/migration_templates/system_image_gd.yml
@@ -7,6 +7,7 @@ source:
   plugin: variable
   variables:
     - image_jpeg_quality
+  provider: system
 process:
   jpeg_quality: image_jpeg_quality
 destination:
diff --git a/core/modules/system/migration_templates/system_logging.yml b/core/modules/system/migration_templates/system_logging.yml
index c1e8114..5bacd44 100644
--- a/core/modules/system/migration_templates/system_logging.yml
+++ b/core/modules/system/migration_templates/system_logging.yml
@@ -7,6 +7,7 @@ source:
   plugin: variable
   variables:
     - error_level
+  provider: system
 process:
   error_level:
     plugin: static_map
diff --git a/core/modules/system/migration_templates/system_maintenance.yml b/core/modules/system/migration_templates/system_maintenance.yml
index b9f6c34..5e5a11c 100644
--- a/core/modules/system/migration_templates/system_maintenance.yml
+++ b/core/modules/system/migration_templates/system_maintenance.yml
@@ -7,6 +7,7 @@ source:
   plugin: variable
   variables:
     - site_offline_message
+  provider: system
 process:
   message: site_offline_message
 destination:
diff --git a/core/modules/system/migration_templates/system_rss.yml b/core/modules/system/migration_templates/system_rss.yml
index 92ce45a..20d15aa 100644
--- a/core/modules/system/migration_templates/system_rss.yml
+++ b/core/modules/system/migration_templates/system_rss.yml
@@ -8,6 +8,7 @@ source:
   variables:
     - feed_default_items
     - feed_item_length
+  provider: system
 process:
   'items/limit': feed_default_items
   'items/view_mode': feed_item_length
diff --git a/core/modules/system/migration_templates/system_site.yml b/core/modules/system/migration_templates/system_site.yml
index c8fd849..e314ecb 100644
--- a/core/modules/system/migration_templates/system_site.yml
+++ b/core/modules/system/migration_templates/system_site.yml
@@ -16,6 +16,7 @@ source:
     - site_404
     - drupal_weight_select_max
     - admin_compact_mode
+  provider: system
 process:
   name: site_name
   mail: site_mail
diff --git a/core/modules/taxonomy/migration_templates/d6_taxonomy_term.yml b/core/modules/taxonomy/migration_templates/d6_taxonomy_term.yml
index 909fb4c..b7328fd 100644
--- a/core/modules/taxonomy/migration_templates/d6_taxonomy_term.yml
+++ b/core/modules/taxonomy/migration_templates/d6_taxonomy_term.yml
@@ -31,6 +31,7 @@ process:
   changed: timestamp
 destination:
   plugin: entity:taxonomy_term
+  provider: taxonomy
 migration_dependencies:
   required:
     - d6_taxonomy_vocabulary
diff --git a/core/modules/taxonomy/migration_templates/d6_taxonomy_vocabulary.yml b/core/modules/taxonomy/migration_templates/d6_taxonomy_vocabulary.yml
index f7f5884..6d08cb3 100644
--- a/core/modules/taxonomy/migration_templates/d6_taxonomy_vocabulary.yml
+++ b/core/modules/taxonomy/migration_templates/d6_taxonomy_vocabulary.yml
@@ -22,3 +22,5 @@ process:
   weight: weight
 destination:
   plugin: entity:taxonomy_vocabulary
+  provider: taxonomy
+
diff --git a/core/modules/taxonomy/migration_templates/d6_term_node.yml b/core/modules/taxonomy/migration_templates/d6_term_node.yml
index 63aec85..35b0341 100644
--- a/core/modules/taxonomy/migration_templates/d6_term_node.yml
+++ b/core/modules/taxonomy/migration_templates/d6_term_node.yml
@@ -18,6 +18,7 @@ process:
   # The actual field name is dynamic and will be added by the builder.
 destination:
   plugin: entity:node
+  provider: taxonomy
 migration_dependencies:
   required:
     - d6_vocabulary_entity_display
diff --git a/core/modules/taxonomy/migration_templates/d6_term_node_revision.yml b/core/modules/taxonomy/migration_templates/d6_term_node_revision.yml
index cf1c682..c4c505a 100644
--- a/core/modules/taxonomy/migration_templates/d6_term_node_revision.yml
+++ b/core/modules/taxonomy/migration_templates/d6_term_node_revision.yml
@@ -18,6 +18,7 @@ process:
   # The actual field name is dynamic and will be added by the builder.
 destination:
   plugin: entity_revision:node
+  provider: taxonomy
 migration_dependencies:
   required:
     - d6_term_node
diff --git a/core/modules/taxonomy/migration_templates/d6_vocabulary_entity_display.yml b/core/modules/taxonomy/migration_templates/d6_vocabulary_entity_display.yml
index e8d04c0..56639aa 100644
--- a/core/modules/taxonomy/migration_templates/d6_vocabulary_entity_display.yml
+++ b/core/modules/taxonomy/migration_templates/d6_vocabulary_entity_display.yml
@@ -22,6 +22,7 @@ process:
     source: vid
 destination:
   plugin: component_entity_display
+  provider: taxonomy
 migration_dependencies:
   required:
     - d6_vocabulary_field_instance
diff --git a/core/modules/taxonomy/migration_templates/d6_vocabulary_entity_form_display.yml b/core/modules/taxonomy/migration_templates/d6_vocabulary_entity_form_display.yml
index 2608877..a7731f9 100644
--- a/core/modules/taxonomy/migration_templates/d6_vocabulary_entity_form_display.yml
+++ b/core/modules/taxonomy/migration_templates/d6_vocabulary_entity_form_display.yml
@@ -26,6 +26,7 @@ process:
     source: vid
 destination:
   plugin: component_entity_form_display
+  provider: taxonomy
 migration_dependencies:
   required:
     - d6_vocabulary_field_instance
diff --git a/core/modules/taxonomy/migration_templates/d6_vocabulary_field.yml b/core/modules/taxonomy/migration_templates/d6_vocabulary_field.yml
index 0e1a487..487c1ae 100644
--- a/core/modules/taxonomy/migration_templates/d6_vocabulary_field.yml
+++ b/core/modules/taxonomy/migration_templates/d6_vocabulary_field.yml
@@ -23,6 +23,7 @@ process:
   cardinality: cardinality
 destination:
   plugin: entity:field_storage_config
+  provider: taxonomy
   dependencies:
     module:
       - entity_reference
diff --git a/core/modules/taxonomy/migration_templates/d6_vocabulary_field_instance.yml b/core/modules/taxonomy/migration_templates/d6_vocabulary_field_instance.yml
index a7bbbbb..431872d 100644
--- a/core/modules/taxonomy/migration_templates/d6_vocabulary_field_instance.yml
+++ b/core/modules/taxonomy/migration_templates/d6_vocabulary_field_instance.yml
@@ -26,6 +26,7 @@ process:
   required: required
 destination:
   plugin: entity:field_config
+  provider: taxonomy
 migration_dependencies:
   required:
     - d6_node_type
diff --git a/core/modules/taxonomy/migration_templates/d7_taxonomy_term.yml b/core/modules/taxonomy/migration_templates/d7_taxonomy_term.yml
index a47ab46..e03310d 100644
--- a/core/modules/taxonomy/migration_templates/d7_taxonomy_term.yml
+++ b/core/modules/taxonomy/migration_templates/d7_taxonomy_term.yml
@@ -32,6 +32,7 @@ process:
   changed: timestamp
 destination:
   plugin: entity:taxonomy_term
+  provider: taxonomy
 migration_dependencies:
   required:
     - d7_taxonomy_vocabulary
diff --git a/core/modules/taxonomy/migration_templates/d7_taxonomy_vocabulary.yml b/core/modules/taxonomy/migration_templates/d7_taxonomy_vocabulary.yml
index 80c38a7..ff51c35 100644
--- a/core/modules/taxonomy/migration_templates/d7_taxonomy_vocabulary.yml
+++ b/core/modules/taxonomy/migration_templates/d7_taxonomy_vocabulary.yml
@@ -13,3 +13,4 @@ process:
   weight: weight
 destination:
   plugin: entity:taxonomy_vocabulary
+  provider: taxonomy
diff --git a/core/modules/taxonomy/migration_templates/taxonomy_settings.yml b/core/modules/taxonomy/migration_templates/taxonomy_settings.yml
index c20372c..cab3669 100644
--- a/core/modules/taxonomy/migration_templates/taxonomy_settings.yml
+++ b/core/modules/taxonomy/migration_templates/taxonomy_settings.yml
@@ -8,6 +8,7 @@ source:
   variables:
     - taxonomy_override_selector
     - taxonomy_terms_per_page_admin
+  provider: taxonomy
 process:
   override_selector: taxonomy_override_selector
   terms_per_page_admin: taxonomy_terms_per_page_admin
diff --git a/core/modules/taxonomy/src/Plugin/migrate/source/d6/TermNodeRevision.php b/core/modules/taxonomy/src/Plugin/migrate/source/d6/TermNodeRevision.php
index 91c133b..9c4669f 100644
--- a/core/modules/taxonomy/src/Plugin/migrate/source/d6/TermNodeRevision.php
+++ b/core/modules/taxonomy/src/Plugin/migrate/source/d6/TermNodeRevision.php
@@ -6,7 +6,8 @@
  * Source returning tids from the term_node table for the non-current revision.
  *
  * @MigrateSource(
- *   id = "d6_term_node_revision"
+ *   id = "d6_term_node_revision",
+ *   source_provider = "taxonomy"
  * )
  */
 class TermNodeRevision extends TermNode {
diff --git a/core/modules/text/migration_templates/text_settings.yml b/core/modules/text/migration_templates/text_settings.yml
index 45d426d..e17c4d6 100644
--- a/core/modules/text/migration_templates/text_settings.yml
+++ b/core/modules/text/migration_templates/text_settings.yml
@@ -7,6 +7,7 @@ source:
   plugin: variable
   variables:
     - teaser_length
+  provider: text
 process:
   default_summary_length: teaser_length
 destination:
diff --git a/core/modules/tracker/migration_templates/d7_tracker_node.yml b/core/modules/tracker/migration_templates/d7_tracker_node.yml
index 02645d7..cfe7d19 100644
--- a/core/modules/tracker/migration_templates/d7_tracker_node.yml
+++ b/core/modules/tracker/migration_templates/d7_tracker_node.yml
@@ -10,6 +10,7 @@ process:
   changed: changed
 destination:
   plugin: entity:node
+  provider: node
 migration_dependencies:
   required:
     - d7_user
diff --git a/core/modules/tracker/migration_templates/d7_tracker_settings.yml b/core/modules/tracker/migration_templates/d7_tracker_settings.yml
index ce06cbd..beb0143 100644
--- a/core/modules/tracker/migration_templates/d7_tracker_settings.yml
+++ b/core/modules/tracker/migration_templates/d7_tracker_settings.yml
@@ -6,6 +6,7 @@ source:
   plugin: variable
   variables:
     - tracker_batch_size
+  provider: tracker
 process:
   cron_index_limit: tracker_batch_size
 destination:
diff --git a/core/modules/tracker/migration_templates/d7_tracker_user.yml b/core/modules/tracker/migration_templates/d7_tracker_user.yml
index ae3c51d..ad2c107 100644
--- a/core/modules/tracker/migration_templates/d7_tracker_user.yml
+++ b/core/modules/tracker/migration_templates/d7_tracker_user.yml
@@ -11,6 +11,7 @@ process:
   changed: changed
 destination:
   plugin: entity:user
+  provider: user
 migration_dependencies:
   required:
     - d7_user
diff --git a/core/modules/update/migration_templates/update_settings.yml b/core/modules/update/migration_templates/update_settings.yml
index ad22472..ae9e8f1 100644
--- a/core/modules/update/migration_templates/update_settings.yml
+++ b/core/modules/update/migration_templates/update_settings.yml
@@ -11,6 +11,7 @@ source:
     - update_notification_threshold
     - update_notify_emails
     - update_check_frequency
+  provider: update
 process:
   'fetch/max_attempts': update_max_fetch_attempts
   'fetch/url': update_fetch_url
diff --git a/core/modules/user/migration_templates/d6_profile_values.yml b/core/modules/user/migration_templates/d6_profile_values.yml
index 7d4fbdd..4ccc0e8 100644
--- a/core/modules/user/migration_templates/d6_profile_values.yml
+++ b/core/modules/user/migration_templates/d6_profile_values.yml
@@ -13,6 +13,7 @@ process:
   uid: uid
 destination:
   plugin: entity:user
+  provider: user
 migration_dependencies:
   required:
     - d6_user
diff --git a/core/modules/user/migration_templates/d6_user.yml b/core/modules/user/migration_templates/d6_user.yml
index c82c657..c6e1248 100644
--- a/core/modules/user/migration_templates/d6_user.yml
+++ b/core/modules/user/migration_templates/d6_user.yml
@@ -43,6 +43,7 @@ process:
 destination:
   plugin: entity:user
   md5_passwords: true
+  provider: user
 migration_dependencies:
   required:
     - d6_user_role
diff --git a/core/modules/user/migration_templates/d6_user_contact_settings.yml b/core/modules/user/migration_templates/d6_user_contact_settings.yml
index 0d9a228..bc284d0 100644
--- a/core/modules/user/migration_templates/d6_user_contact_settings.yml
+++ b/core/modules/user/migration_templates/d6_user_contact_settings.yml
@@ -18,6 +18,7 @@ process:
 
 destination:
   plugin: user_data
+  provider: user
 migration_dependencies:
   required:
     - d6_user
diff --git a/core/modules/user/migration_templates/d6_user_mail.yml b/core/modules/user/migration_templates/d6_user_mail.yml
index b06b6ea..2c15e96 100644
--- a/core/modules/user/migration_templates/d6_user_mail.yml
+++ b/core/modules/user/migration_templates/d6_user_mail.yml
@@ -19,6 +19,7 @@ source:
     - user_mail_register_pending_approval_body
     - user_mail_status_blocked_subject
     - user_mail_status_blocked_body
+  provider: user
 process:
   'status_activated/subject':
     plugin: convert_tokens
diff --git a/core/modules/user/migration_templates/d6_user_picture_file.yml b/core/modules/user/migration_templates/d6_user_picture_file.yml
index d367f33..9a19801 100644
--- a/core/modules/user/migration_templates/d6_user_picture_file.yml
+++ b/core/modules/user/migration_templates/d6_user_picture_file.yml
@@ -39,6 +39,7 @@ process:
       - '@destination_full_path'
 destination:
   plugin: entity:file
+  provider: user
 migration_dependencies:
   # Every migration that references a file by Drupal 6 fid should specify d6_file as an
   # optional dependency.
diff --git a/core/modules/user/migration_templates/d6_user_role.yml b/core/modules/user/migration_templates/d6_user_role.yml
index 1d224f4..d8342b2 100644
--- a/core/modules/user/migration_templates/d6_user_role.yml
+++ b/core/modules/user/migration_templates/d6_user_role.yml
@@ -36,6 +36,7 @@ process:
     - plugin: filter_format_permission
 destination:
   plugin: entity:user_role
+  provider: user
 migration_dependencies:
   required:
     - d6_filter_format
diff --git a/core/modules/user/migration_templates/d6_user_settings.yml b/core/modules/user/migration_templates/d6_user_settings.yml
index 6e25ece..b85deb3 100644
--- a/core/modules/user/migration_templates/d6_user_settings.yml
+++ b/core/modules/user/migration_templates/d6_user_settings.yml
@@ -10,6 +10,7 @@ source:
     - user_email_verification
     - user_register
     - anonymous
+  provider: user
 process:
   'notify/status_blocked': user_mail_status_blocked_notify
   'notify/status_activated': user_mail_status_activated_notify
diff --git a/core/modules/user/migration_templates/d7_user.yml b/core/modules/user/migration_templates/d7_user.yml
index 3910659..4b1b466 100644
--- a/core/modules/user/migration_templates/d7_user.yml
+++ b/core/modules/user/migration_templates/d7_user.yml
@@ -44,6 +44,7 @@ process:
       migration: d7_file
 destination:
   plugin: entity:user
+  provider: user
 migration_dependencies:
   required:
     - d7_user_role
diff --git a/core/modules/user/migration_templates/d7_user_flood.yml b/core/modules/user/migration_templates/d7_user_flood.yml
index ae00ce0..8c62e26 100644
--- a/core/modules/user/migration_templates/d7_user_flood.yml
+++ b/core/modules/user/migration_templates/d7_user_flood.yml
@@ -10,6 +10,7 @@ source:
     - user_failed_login_ip_window
     - user_failed_login_user_window
     - user_failed_login_user_limit
+  provider: user
 process:
   uid_only: user_failed_login_identifier_uid_only
   ip_limit: user_failed_login_ip_limit
diff --git a/core/modules/user/migration_templates/d7_user_mail.yml b/core/modules/user/migration_templates/d7_user_mail.yml
index 0c5e74c..b52626c 100644
--- a/core/modules/user/migration_templates/d7_user_mail.yml
+++ b/core/modules/user/migration_templates/d7_user_mail.yml
@@ -19,6 +19,7 @@ source:
     - user_mail_register_pending_approval_body
     - user_mail_status_blocked_subject
     - user_mail_status_blocked_body
+  provider: user
 process:
    'status_activated/subject': user_mail_status_activated_subject
    'status_activated/body': user_mail_status_activated_body
diff --git a/core/modules/user/migration_templates/d7_user_role.yml b/core/modules/user/migration_templates/d7_user_role.yml
index 5f88757..5e53753 100644
--- a/core/modules/user/migration_templates/d7_user_role.yml
+++ b/core/modules/user/migration_templates/d7_user_role.yml
@@ -4,6 +4,7 @@ migration_tags:
   - Drupal 7
 source:
   plugin: d7_user_role
+  provider: user
 process:
   id:
     -
@@ -34,6 +35,7 @@ process:
   weight: weight
 destination:
   plugin: entity:user_role
+  provider: role
 migration_dependencies:
   optional:
     - d7_filter_format
diff --git a/core/modules/user/migration_templates/user_picture_entity_display.yml b/core/modules/user/migration_templates/user_picture_entity_display.yml
index 3f404d6..27d542d 100644
--- a/core/modules/user/migration_templates/user_picture_entity_display.yml
+++ b/core/modules/user/migration_templates/user_picture_entity_display.yml
@@ -16,6 +16,7 @@ source:
       settings:
         image_style: ''
         image_link: content
+  provider: user
 process:
   entity_type: 'constants/entity_type'
   bundle: 'constants/bundle'
@@ -26,6 +27,7 @@ process:
   'options/type': '@type'
 destination:
   plugin: component_entity_display
+  provider: user
 migration_dependencies:
   required:
     - user_picture_field_instance
diff --git a/core/modules/user/migration_templates/user_picture_entity_form_display.yml b/core/modules/user/migration_templates/user_picture_entity_form_display.yml
index 4d0f8bc..966277b 100644
--- a/core/modules/user/migration_templates/user_picture_entity_form_display.yml
+++ b/core/modules/user/migration_templates/user_picture_entity_form_display.yml
@@ -15,6 +15,7 @@ source:
       settings:
         progress_indicator: throbber
         preview_image_style: thumbnail
+  provider: user
 process:
   entity_type: 'constants/entity_type'
   bundle: 'constants/bundle'
@@ -25,6 +26,7 @@ process:
   'options/type': '@type'
 destination:
   plugin: component_entity_form_display
+  provider: user
 migration_dependencies:
   required:
     - user_picture_field_instance
diff --git a/core/modules/user/migration_templates/user_picture_field.yml b/core/modules/user/migration_templates/user_picture_field.yml
index ff8bd82..7177985 100644
--- a/core/modules/user/migration_templates/user_picture_field.yml
+++ b/core/modules/user/migration_templates/user_picture_field.yml
@@ -12,6 +12,7 @@ source:
     type: image
     name: user_picture
     cardinality: 1
+  provider: user
 process:
   entity_type: 'constants/entity_type'
   field_name: 'constants/name'
@@ -19,6 +20,7 @@ process:
   cardinality: 'constants/cardinality'
 destination:
   plugin: entity:field_storage_config
+  provider: user
   dependencies:
     module:
       - image
diff --git a/core/modules/user/migration_templates/user_picture_field_instance.yml b/core/modules/user/migration_templates/user_picture_field_instance.yml
index 4332e09..0953112 100644
--- a/core/modules/user/migration_templates/user_picture_field_instance.yml
+++ b/core/modules/user/migration_templates/user_picture_field_instance.yml
@@ -16,6 +16,7 @@ source:
       min_resolution: ''
       alt_field_required: false
       title_field_required: false
+  provider: user
 process:
   entity_type: 'constants/entity_type'
   bundle: 'constants/bundle'
@@ -26,6 +27,7 @@ process:
   'settings/max_resolution': max_resolution
 destination:
   plugin: entity:field_config
+  provider: user
 migration_dependencies:
   required:
     - user_picture_field
diff --git a/core/modules/user/migration_templates/user_profile_entity_display.yml b/core/modules/user/migration_templates/user_profile_entity_display.yml
index f4353dd..160b990 100644
--- a/core/modules/user/migration_templates/user_profile_entity_display.yml
+++ b/core/modules/user/migration_templates/user_profile_entity_display.yml
@@ -39,6 +39,7 @@ process:
       4: true # PROFILE_HIDDEN
 destination:
   plugin: component_entity_display
+  provider: user
 migration_dependencies:
   required:
     - user_profile_field_instance
diff --git a/core/modules/user/migration_templates/user_profile_entity_form_display.yml b/core/modules/user/migration_templates/user_profile_entity_form_display.yml
index cfabd76..1bf8521 100644
--- a/core/modules/user/migration_templates/user_profile_entity_form_display.yml
+++ b/core/modules/user/migration_templates/user_profile_entity_form_display.yml
@@ -48,6 +48,8 @@ process:
       4: true # PROFILE_HIDDEN
 destination:
   plugin: component_entity_form_display
+  provider: user
 migration_dependencies:
   required:
     - user_profile_field_instance
+
diff --git a/core/modules/user/migration_templates/user_profile_field.yml b/core/modules/user/migration_templates/user_profile_field.yml
index 3ba0eee..7edf4bc 100644
--- a/core/modules/user/migration_templates/user_profile_field.yml
+++ b/core/modules/user/migration_templates/user_profile_field.yml
@@ -33,3 +33,4 @@ process:
       list: -1
 destination:
   plugin: entity:field_storage_config
+  provider: user
diff --git a/core/modules/user/migration_templates/user_profile_field_instance.yml b/core/modules/user/migration_templates/user_profile_field_instance.yml
index b9f213b..fe8a504 100644
--- a/core/modules/user/migration_templates/user_profile_field_instance.yml
+++ b/core/modules/user/migration_templates/user_profile_field_instance.yml
@@ -17,6 +17,7 @@ process:
   required: required
 destination:
   plugin: entity:field_config
+  provider: user
 migration_dependencies:
   required:
     - user_profile_field
diff --git a/core/modules/user/src/Plugin/migrate/source/d6/Role.php b/core/modules/user/src/Plugin/migrate/source/d6/Role.php
index 2357c5c..a0d7934 100644
--- a/core/modules/user/src/Plugin/migrate/source/d6/Role.php
+++ b/core/modules/user/src/Plugin/migrate/source/d6/Role.php
@@ -9,7 +9,8 @@
  * Drupal 6 role source from database.
  *
  * @MigrateSource(
- *   id = "d6_user_role"
+ *   id = "d6_user_role",
+ *   source_provider = "user"
  * )
  */
 class Role extends DrupalSqlBase {
diff --git a/core/modules/user/src/Plugin/migrate/source/d6/User.php b/core/modules/user/src/Plugin/migrate/source/d6/User.php
index 56f68bf..be249fb 100644
--- a/core/modules/user/src/Plugin/migrate/source/d6/User.php
+++ b/core/modules/user/src/Plugin/migrate/source/d6/User.php
@@ -9,7 +9,8 @@
  * Drupal 6 user source from database.
  *
  * @MigrateSource(
- *   id = "d6_user"
+ *   id = "d6_user",
+ *   source_provider = "user"
  * )
  */
 class User extends DrupalSqlBase {
diff --git a/core/modules/user/src/Plugin/migrate/source/d6/UserPicture.php b/core/modules/user/src/Plugin/migrate/source/d6/UserPicture.php
index 13ae4f3..9a6d45f 100644
--- a/core/modules/user/src/Plugin/migrate/source/d6/UserPicture.php
+++ b/core/modules/user/src/Plugin/migrate/source/d6/UserPicture.php
@@ -10,7 +10,8 @@
  * @todo Support default picture?
  *
  * @MigrateSource(
- *   id = "d6_user_picture"
+ *   id = "d6_user_picture",
+ *   source_provider = "user"
  * )
  */
 class UserPicture extends DrupalSqlBase {
diff --git a/core/modules/user/src/Plugin/migrate/source/d6/UserPictureFile.php b/core/modules/user/src/Plugin/migrate/source/d6/UserPictureFile.php
index d394e9c..5f7b641 100644
--- a/core/modules/user/src/Plugin/migrate/source/d6/UserPictureFile.php
+++ b/core/modules/user/src/Plugin/migrate/source/d6/UserPictureFile.php
@@ -9,7 +9,8 @@
  * Drupal 6 user picture source from database.
  *
  * @MigrateSource(
- *   id = "d6_user_picture_file"
+ *   id = "d6_user_picture_file",
+ *   source_provider = "user"
  * )
  */
 class UserPictureFile extends DrupalSqlBase {
diff --git a/core/modules/user/src/Plugin/migrate/source/d7/User.php b/core/modules/user/src/Plugin/migrate/source/d7/User.php
index 717e120..066fc93 100644
--- a/core/modules/user/src/Plugin/migrate/source/d7/User.php
+++ b/core/modules/user/src/Plugin/migrate/source/d7/User.php
@@ -9,7 +9,8 @@
  * Drupal 7 user source from database.
  *
  * @MigrateSource(
- *   id = "d7_user"
+ *   id = "d7_user",
+ *   source_provider = "user"
  * )
  */
 class User extends FieldableEntity {
