diff --git a/composer.json b/composer.json
index 17e8e2ed99bca4994c2598e05078566dcabb06cf..e783004bcccd00f0c03fb3411a37cb3885ad8afc 100644
--- a/composer.json
+++ b/composer.json
@@ -30,7 +30,7 @@
     },
     "require": {
         "composer-plugin-api": "^1.0.0",
-        "lakedrops/composer-json-utils": "^1.0.0"
+        "lakedrops/composer-json-utils": "^1.1.0"
     },
     "require-dev": {
         "composer/composer": "^1.5.0",
diff --git a/src/Handler.php b/src/Handler.php
index 7f36c7f8e8b5f265472956190273c0e8c9fb1390..5e0c4370cb53a99a22c869cb8f917dbd0b4e9be4 100644
--- a/src/Handler.php
+++ b/src/Handler.php
@@ -2,57 +2,16 @@
 
 namespace LakeDrops\ComposerScripts;
 
-use Composer\Composer;
-use Composer\IO\IOInterface;
 use Composer\Script\Event;
+use LakeDrops\Component\Composer\BaseHandler;
 use LakeDrops\Component\Composer\Utils;
 
 /**
  * Class Handler.
  *
- * @package LakeDrops\Drupal8Scaffold
+ * @package LakeDrops\ComposerScripts
  */
-class Handler {
-
-  /**
-   * The composer object running this session.
-   *
-   * @var \Composer\Composer
-   */
-  protected $composer;
-
-  /**
-   * The input-output object for the composer session.
-   *
-   * @var \Composer\IO\IOInterface
-   */
-  protected $io;
-
-  /**
-   * Handler constructor.
-   *
-   * @param \Composer\Composer $composer
-   *   The composer object.
-   * @param \Composer\IO\IOInterface $io
-   *   The input-output object.
-   */
-  public function __construct(Composer $composer, IOInterface $io) {
-    $this->composer = $composer;
-    $this->io = $io;
-  }
-
-  /**
-   * Retrieve a package from the current composer process.
-   *
-   * @param string $name
-   *   Name of the package to get from the current composer installation.
-   *
-   * @return \Composer\Package\PackageInterface
-   *   The package.
-   */
-  protected function getPackage($name) {
-    return $this->composer->getRepositoryManager()->getLocalRepository()->findPackage($name, '*');
-  }
+class Handler extends BaseHandler {
 
   /**
    * Update scripts of all LakeDrops plugins.
diff --git a/src/Plugin.php b/src/Plugin.php
index cd9dff4c938b6ac7101b5b6e538f06d4e6c0b196..30cccdb03b47c13a0a25439a3614e33a273c5776 100644
--- a/src/Plugin.php
+++ b/src/Plugin.php
@@ -2,30 +2,20 @@
 
 namespace LakeDrops\ComposerScripts;
 
-use Composer\Composer;
-use Composer\EventDispatcher\EventSubscriberInterface;
-use Composer\IO\IOInterface;
-use Composer\Plugin\PluginInterface;
 use Composer\Script\Event;
 use Composer\Script\ScriptEvents;
+use LakeDrops\Component\Composer\BasePlugin;
 
 /**
  * Composer plugin for handling drupal scaffold.
  */
-class Plugin implements PluginInterface, EventSubscriberInterface {
-
-  /**
-   * The handler object for events.
-   *
-   * @var \LakeDrops\ComposerScripts\Handler
-   */
-  protected $handler;
+class Plugin extends BasePlugin {
 
   /**
    * {@inheritdoc}
    */
-  public function activate(Composer $composer, IOInterface $io) {
-    $this->handler = new Handler($composer, $io);
+  public function getHandlerClass() {
+    return Handler::class;
   }
 
   /**