diff --git a/core/modules/migrate_drupal/config/schema/migrate_drupal.source.schema.yml b/core/modules/migrate_drupal/config/schema/migrate_drupal.source.schema.yml
index 9fdf6d8..1b47e86 100644
--- a/core/modules/migrate_drupal/config/schema/migrate_drupal.source.schema.yml
+++ b/core/modules/migrate_drupal/config/schema/migrate_drupal.source.schema.yml
@@ -278,6 +278,10 @@ migrate.source.d6_user_picture_instance:
       type: migrate_entity_constant
       label: 'Constants'
 
+migrate.source.d6_imagecache_presets:
+  type: migrate_source_sql
+  label: 'Drupal 6 ImageCache Presets'
+
 migrate_entity_constant:
   type: mapping
   mapping:
diff --git a/core/modules/migrate_drupal/migration_templates/d6_imagecache_presets.yml b/core/modules/migrate_drupal/migration_templates/d6_imagecache_presets.yml
new file mode 100644
index 0000000..91e1201
--- /dev/null
+++ b/core/modules/migrate_drupal/migration_templates/d6_imagecache_presets.yml
@@ -0,0 +1,24 @@
+id: d6_imagecache_presets
+label: Drupal 6 ImageCache Presets
+migration_tags:
+  - Drupal 6
+source:
+  plugin: d6_imagecache_presets
+process:
+  name:
+    -
+      plugin: machine_name
+      source: presetname
+    -
+      plugin: dedupe_entity
+      entity_type: image_style
+      field: name
+      length: 32
+  label: presetname
+  effects:
+    plugin: d6_imagecache_actions
+    source:
+      - @plugin
+      - data
+destination:
+  plugin: entity:image_style
diff --git a/core/modules/migrate_drupal/src/Plugin/migrate/destination/EntityImageStyle.php b/core/modules/migrate_drupal/src/Plugin/migrate/destination/EntityImageStyle.php
new file mode 100644
index 0000000..c88aedd
--- /dev/null
+++ b/core/modules/migrate_drupal/src/Plugin/migrate/destination/EntityImageStyle.php
@@ -0,0 +1,57 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\migrate\Plugin\migrate\destination\EntityImageStyle.
+ */
+
+namespace Drupal\migrate_drupal\Plugin\migrate\destination;
+
+use Drupal\Component\Plugin\Exception\PluginNotFoundException;
+use Drupal\migrate\MigrateException;
+use Drupal\migrate\Plugin\migrate\destination\EntityConfigBase;
+use Drupal\migrate\Row;
+
+/**
+ * Every migration that uses this destination must have an optional
+ * dependency on the d6_file migration to ensure it runs first.
+ *
+ * @MigrateDestination(
+ *   id = "entity:image_style"
+ * )
+ */
+class EntityImageStyle extends EntityConfigBase {
+
+  /**
+   * {@inheritdoc}
+   *
+   * @throws MigrateException
+   */
+  public function import (Row $row, array $old_destination_id_values = array()) {
+    $effects = array();
+
+    // Need to set the effects property to null on the row before the ImageStyle
+    // is created, this prevents improper effect plugin initialization.
+    if ($row->getDestinationProperty('effects')) {
+      $effects = $row->getDestinationProperty('effects');
+      $row->setDestinationProperty('effects', NULL);
+    }
+
+    $style = $this->getEntity($row, $old_destination_id_values);
+
+    // Iterate the effects array so each effect plugin can be initialized.
+    // Catch any missing plugin exceptions.
+    foreach ($effects as $effect) {
+      try {
+        $style->addImageEffect($effect);
+      }
+      catch (PluginNotFoundException $e) {
+        throw new MigrateException($e->getMessage());
+      }
+    }
+
+    $style->save();
+
+    return array($style->id);
+  }
+}
diff --git a/core/modules/migrate_drupal/src/Plugin/migrate/process/d6/ImageCacheActions.php b/core/modules/migrate_drupal/src/Plugin/migrate/process/d6/ImageCacheActions.php
new file mode 100644
index 0000000..d8c9315
--- /dev/null
+++ b/core/modules/migrate_drupal/src/Plugin/migrate/process/d6/ImageCacheActions.php
@@ -0,0 +1,37 @@
+<?php
+
+/**
+ * @file
+ * contains \Drupal\migrate_drupal\Plugin\migrate\process\d6\ImageCacheActions.
+ */
+
+namespace Drupal\migrate_drupal\Plugin\migrate\process\d6;
+
+use Drupal\migrate\MigrateExecutableInterface;
+use Drupal\migrate\ProcessPluginBase;
+use Drupal\migrate\Row;
+
+/**
+ * @MigrateProcessPlugin(
+ *   id = "d6_imagecache_actions"
+ * )
+ */
+class ImageCacheActions extends ProcessPluginBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function transform ($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) {
+    $effects = array();
+
+    foreach ($row->getSourceProperty('actions') as $action) {
+      $effects[] = array(
+        'id'     => str_replace('imagecache', 'image', $action['action']),
+        'weight' => $action['weight'],
+        'data'   => $action['data'],
+      );
+    }
+
+    return $effects;
+  }
+}
diff --git a/core/modules/migrate_drupal/src/Plugin/migrate/source/d6/ImageCachePreset.php b/core/modules/migrate_drupal/src/Plugin/migrate/source/d6/ImageCachePreset.php
new file mode 100644
index 0000000..a405709
--- /dev/null
+++ b/core/modules/migrate_drupal/src/Plugin/migrate/source/d6/ImageCachePreset.php
@@ -0,0 +1,74 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\migrate_drupal\Plugin\migrate\source\d6\ImageCachePreset.
+ */
+
+namespace Drupal\migrate_drupal\Plugin\migrate\source\d6;
+
+use Drupal\migrate_drupal\Plugin\migrate\source\DrupalSqlBase;
+use Drupal\migrate\Row;
+
+/**
+ * Drupal 6 imagecache presets source from database.
+ *
+ * @MigrateSource(
+ *   id = "d6_imagecache_presets"
+ * )
+ */
+
+class ImageCachePreset extends DrupalSqlBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function query() {
+    $query = $this->select('imagecache_preset', 'icp')
+      ->fields('icp', array(
+        'presetid',
+        'presetname',
+      )
+    );
+    return $query;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function fields() {
+    $fields = array(
+      'presetid' => $this->t('Preset ID'),
+      'presetname' => $this->t('Preset Name'),
+    );
+    return $fields;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getIds() {
+    $ids['presetid']['type'] = 'integer';
+    return $ids;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function prepareRow(Row $row) {
+    $actions = array();
+
+    $results = $this->select('imagecache_action', 'ica')
+      ->fields('ica')
+      ->condition('presetid', $row->getSourceProperty('presetid'))
+      ->execute();
+
+    foreach($results as $key => $result) {
+      $actions[$key] = $result;
+      $actions[$key]['data'] = unserialize($result['data']);
+    }
+
+    $row->setSourceProperty('actions', $actions);
+    return parent::prepareRow($row);
+  }
+}
