diff --git a/migrate_example/config/install/migrate.migration.beer_comment.yml b/migrate_example/config/install/migrate.migration.beer_comment.yml
index e011d1b..687a519 100644
--- a/migrate_example/config/install/migrate.migration.beer_comment.yml
+++ b/migrate_example/config/install/migrate.migration.beer_comment.yml
@@ -1,7 +1,6 @@
 id: beer_comment
 label: Beers of the world
-migration_groups:
-  - beer
+active_group: beer
 source:
   plugin: beer_comment
   constants:
diff --git a/migrate_example/config/install/migrate.migration.beer_node.yml b/migrate_example/config/install/migrate.migration.beer_node.yml
index f377f40..916aab2 100644
--- a/migrate_example/config/install/migrate.migration.beer_node.yml
+++ b/migrate_example/config/install/migrate.migration.beer_node.yml
@@ -1,7 +1,6 @@
 id: beer_node
 label: Beers of the world
-migration_groups:
-  - beer
+active_group: beer
 source:
   plugin: beer_node
 destination:
diff --git a/migrate_example/config/install/migrate.migration.beer_term.yml b/migrate_example/config/install/migrate.migration.beer_term.yml
index 0c8481d..566833f 100644
--- a/migrate_example/config/install/migrate.migration.beer_term.yml
+++ b/migrate_example/config/install/migrate.migration.beer_term.yml
@@ -1,7 +1,6 @@
 id: beer_term
 label: Migrate styles from the source database to taxonomy terms
-migration_groups:
-  - beer
+active_group: beer
 source:
   plugin: beer_term
 destination:
diff --git a/migrate_example/config/install/migrate.migration.beer_user.yml b/migrate_example/config/install/migrate.migration.beer_user.yml
index c750ba3..7e3986c 100644
--- a/migrate_example/config/install/migrate.migration.beer_user.yml
+++ b/migrate_example/config/install/migrate.migration.beer_user.yml
@@ -1,7 +1,6 @@
 id: beer_user
 label: Beer Drinkers of the world
-migration_groups:
-  - beer
+active_group: beer
 source:
   plugin: beer_user
 destination:
diff --git a/migrate_example/config/install/migrate.migration_group.beer.yml b/migrate_example/config/install/migrate.migration_group.beer.yml
index 5a54607..bcc5f2b 100644
--- a/migrate_example/config/install/migrate.migration_group.beer.yml
+++ b/migrate_example/config/install/migrate.migration_group.beer.yml
@@ -1,2 +1,12 @@
+# The machine name of the group, by which it is referenced in individual
+# migrations.
 id: beer
+
+# A human-friendly label of the group, displayed in the UI.
 label: Beer Imports
+
+# Here we add any default configuration settings to be shared among all
+# migrations in the group.
+shared_configuration:
+  source:
+    key: default
diff --git a/migrate_example/src/Plugin/migrate/source/MigrateExampleSqlBase.php b/migrate_example/src/Plugin/migrate/source/MigrateExampleSqlBase.php
index 12944ac..595fcaf 100644
--- a/migrate_example/src/Plugin/migrate/source/MigrateExampleSqlBase.php
+++ b/migrate_example/src/Plugin/migrate/source/MigrateExampleSqlBase.php
@@ -10,13 +10,10 @@ namespace Drupal\migrate_example\Plugin\migrate\source;
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
 use Drupal\migrate\Entity\MigrationInterface;
 use Drupal\migrate\Plugin\migrate\source\SqlBase;
-use Drupal\migrate\Plugin\RequirementsInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
  * A base source class for beer tables.
- *
- *
  */
 abstract class MigrateExampleSqlBase extends SqlBase implements ContainerFactoryPluginInterface {
 
@@ -24,7 +21,6 @@ abstract class MigrateExampleSqlBase extends SqlBase implements ContainerFactory
    * {@inheritdoc}
    */
   public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration = NULL) {
-    $configuration['key'] = 'default';
     return new static(
       $configuration,
       $plugin_id,
diff --git a/migrate_plus.drush.inc b/migrate_plus.drush.inc
index f587e19..3821083 100644
--- a/migrate_plus.drush.inc
+++ b/migrate_plus.drush.inc
@@ -82,14 +82,12 @@ function drush_migrate_plus_migrate_status($migration_names = '') {
       $map = $migration->getIdMap();
       $imported = $map->importedCount();
       $source_plugin = $migration->getSourcePlugin();
-      // We can't get counts from an EmptySource plugin, or one without a query.
-      // @todo: Is there a more general approach? Are there other edge cases?
       try {
-        if (is_a($source_plugin, 'Drupal\migrate\Plugin\migrate\source\EmptySource')) {
+        if (!method_exists($source_plugin, 'count')) {
           $source_rows = dt('N/A');
           $unprocessed = dt('N/A');
         }
-        elseif (!$source_plugin->query()) {
+        elseif (method_exists($source_plugin, 'query') && !$source_plugin->query()) {
           $source_rows = dt('N/A');
           $unprocessed = dt('N/A');
         }
@@ -155,7 +153,7 @@ function drush_migrate_plus_migrate_import($migration_names = '') {
 function drush_migrate_plus_migration_list($group_id = '', $migration_ids = '') {
   $query = \Drupal::entityQuery('migration');
   if ($group_id) {
-    $query->condition('migration_groups.*', $group_id);
+    $query->condition('active_group', $group_id);
   }
   $names = $query->execute();
 
@@ -175,12 +173,10 @@ function drush_migrate_plus_migration_list($group_id = '', $migration_ids = '')
   $return = array();
   foreach ($migrations as $migration_id => $migration) {
     if (empty($migration_ids) || in_array(Unicode::strtolower($migration_id), $migration_ids)) {
-      $group_id = reset($migration->migration_groups);
-      // @todo: Temporary - ignore incomplete migrate_drupal migrations.
-      if (substr($group_id, 0, 7) == 'Drupal ' && !$migration->get('source.key')) {
-        continue;
+      $group_id = $migration->get('active_group');
+      if (!empty($group_id)) {
+        $return[$group_id][$migration_id] = $migration;
       }
-      $return[$group_id][$migration_id] = $migration;
     }
   }
   return $return;
