diff --git a/modules/patternbuilder_importer/patternbuilder_importer.drush.inc b/modules/patternbuilder_importer/patternbuilder_importer.drush.inc
index 70fad23..9498dca 100644
--- a/modules/patternbuilder_importer/patternbuilder_importer.drush.inc
+++ b/modules/patternbuilder_importer/patternbuilder_importer.drush.inc
@@ -19,11 +19,13 @@ function patternbuilder_importer_drush_command() {
     ),
     'options' => array(
       'all' => 'Forces the import of all schemas and ignores any name arguments',
+      'changed' => 'Import schemas that are changed and ignores any name arguments',
       'type' => 'Imports schemas for a specific pattern type.',
     ),
     'examples' => array(
       'drush pbi' => 'Import all schemas.',
       'drush pbi --all' => 'Force the import of all schemas even if specific schemas are defined.',
+      'drush pbi --changed' => 'Force the import schemas that are changed even if specific schemas are defined.',
       'drush pbi band card' => 'Import only the "band" and "card" schemas.',
       'drush pbi --type=layout' => 'Import only the schemas for the "layout" pattern type.',
     ),
@@ -55,10 +57,14 @@ function patternbuilder_importer_drush_command() {
  */
 function drush_patternbuilder_importer_pbi() {
   $is_all = drush_get_option('all');
+  $is_changed = drush_get_option('changed');
 
   if ($is_all) {
     patternbuilder_importer_import_schemas();
   }
+  elseif ($is_changed) {
+    patternbuilder_importer_import_schemas(array(), array(), TRUE);
+  }
   else {
     $schema_names = func_get_args();
     $schema_names = !empty($schema_names) ? $schema_names : array();
diff --git a/modules/patternbuilder_importer/patternbuilder_importer.module b/modules/patternbuilder_importer/patternbuilder_importer.module
index dcbf77b..5bf1801 100644
--- a/modules/patternbuilder_importer/patternbuilder_importer.module
+++ b/modules/patternbuilder_importer/patternbuilder_importer.module
@@ -107,12 +107,28 @@ function _patternbuilder_importer_print($message, $type = NULL, $append_newline
  * @return bool
  *   TRUE if schemas were imported, else FALSE.
  */
-function patternbuilder_importer_import_schemas(array $schema_names = array(), array $pattern_types = array()) {
+function patternbuilder_importer_import_schemas(array $schema_names = array(), array $pattern_types = array(), $only_changed = FALSE) {
   patternbuilder_importer_invalidate_cache();
   $all_schema_files = patternbuilder_get_schemas(TRUE);
   $schema_files = $all_schema_files;
 
-  if (empty($all_schema_files)) {
+
+  // If only changed.
+  if ($only_changed) {
+    $existing_schemas = patternbuilder_components_load(NULL, TRUE);
+    foreach($all_schema_files as $machine_name => $file) {
+      $file_hash = patternbuilder_generate_file_hash($file);
+      if (!empty($existing_schemas[$machine_name]) && $file_hash == $existing_schemas[$machine_name]->pattern_hash) {
+        unset($schema_files[$machine_name]);
+      }
+    }
+    // Log the message when no schema file changed.
+    if (empty($schema_files)) {
+      watchdog('patternbuilder_importer', 'There were no schema files changes to improt.', array(), WATCHDOG_WARNING);
+      return FALSE;
+    }
+  }
+  elseif (empty($all_schema_files)) {
     watchdog('patternbuilder_importer', 'There were no schema files found to import.', WATCHDOG_WARNING);
     return FALSE;
   }
diff --git a/patternbuilder.install b/patternbuilder.install
index d47077a..16b5cd6 100644
--- a/patternbuilder.install
+++ b/patternbuilder.install
@@ -48,6 +48,12 @@ function patternbuilder_schema() {
         'length' => 32,
         'not null' => FALSE,
       ),
+      'pattern_hash' => array(
+        'description' => 'Pattern hash to compare when changed.',
+        'type' => 'varchar',
+        'length' => 64,
+        'not null' => TRUE,
+      ),
     ),
     'primary key' => array('id'),
     'unique keys' => array(
@@ -473,3 +479,15 @@ function patternbuilder_update_7104() {
 function patternbuilder_update_7105() {
   _patternbuilder_install_add_patternbuilder_dirs();
 }
+
+/**
+ * Add file hash to compare for changed schema.
+ */
+function patternbuilder_update_7106() {
+  db_add_field('patternbuilder_components', 'pattern_hash', array(
+    'description' => 'Pattern hash to compare when changed.',
+    'type' => 'varchar',
+    'length' => 64,
+    'not null' => TRUE,
+  ));
+}
\ No newline at end of file
diff --git a/patternbuilder.module b/patternbuilder.module
index b84dee9..971d516 100644
--- a/patternbuilder.module
+++ b/patternbuilder.module
@@ -896,6 +896,13 @@ function patternbuilder_component_save(&$component) {
     $record['status'] = $default_status_key;
   }
 
+  $schemas = patternbuilder_get_schemas();
+  if (!empty($schemas[$record['machine_name']])) {
+    $schema_path = $schemas[$record['machine_name']];
+  }
+
+  $record['pattern_hash'] = patternbuilder_generate_file_hash($schema_path);
+
   // Ensure only allowed fields to update.
   $record = array_intersect_key($record, array(
     'machine_name' => 1,
@@ -903,6 +910,7 @@ function patternbuilder_component_save(&$component) {
     'status' => 1,
     'bundle_name' => 1,
     'field_name' => 1,
+    'pattern_hash' => 1,
   ));
 
   // Update record.
@@ -930,6 +938,13 @@ function patternbuilder_component_save(&$component) {
 }
 
 /**
+ * Pattern builder generate hash for the given file content.
+ */
+function patternbuilder_generate_file_hash($file_path) {
+  return hash_file('md5', $file_path);
+}
+
+/**
  * Returns an array of some or all of the order statuses keyed by name.
  *
  * @param array $conditions
