diff --git a/README.txt b/README.txt
index 4d4ffa0..437d958 100644
--- a/README.txt
+++ b/README.txt
@@ -8,6 +8,16 @@ INSTALLATION
 Extract the module in your sites/all/modules/ directory and enable
 
 
+INSTRUCTIONS
+------------
+Go to admin/people/duplicate-role and select the role to duplicate
+
+
+DRUSH INTEGRATION
+-----------------
+See 'drush help duplicate-role'
+
+
 AUTHORS
 -------
 * Alejandro Gonzalez (alexgon) - http://drupal.org/user/250587
diff --git a/duplicate_role.drush.inc b/duplicate_role.drush.inc
new file mode 100644
index 0000000..a948d23
--- /dev/null
+++ b/duplicate_role.drush.inc
@@ -0,0 +1,56 @@
+<?php
+
+/**
+ * Implements hook_drush_help().
+ */
+function duplicate_role_drush_help($command) {
+  switch ($command) {
+    case 'drush:duplicate-role':
+      return dt('Duplicate a role');
+  }
+}
+
+/**
+ * Implements hook_drush_command().
+ */
+function duplicate_role_drush_command() {
+
+  $items['duplicate-role'] = array(
+    'callback' => 'duplicate_role_command',
+    'description' => dt('Dupicate a role.'),
+    'aliases' => array('drol'),
+    'arguments' => array(
+      'role' => dt('The name of the role to clone'),
+      'new_role' => dt('New name of the role'),
+    ),
+    'required-arguments' => 2,
+    'examples' => array(
+      'drush duplicate-role administrator manager' => "Creates a new role called 'manager' with all the permissions of the 'administrator' role",
+    ),
+  );
+
+  return $items;
+}
+
+/**
+ * Callback function for 'drush duplicate-role' command. 
+ */
+function duplicate_role_command($base_role, $new_role) {
+
+  $roles = user_roles();
+  if (in_array($new_role, $roles)) {
+	return drush_set_error("The role $new_role already exists. Please choose a different name.");
+  }
+
+  // Get old role id.
+  $old_rid = db_query('SELECT rid FROM {role} WHERE name = :name', array(
+	':name' => $base_role,
+  ))->fetchField();
+
+  if (!$old_rid) {
+	return drush_set_error("The role $base_role does not exist. Please choose an existing role.");
+  }
+
+  duplicate_role_clone_role($old_rid, $new_role);
+  drush_print("New role $new_role added successfully.");
+}
diff --git a/duplicate_role.module b/duplicate_role.module
index 1961518..d778956 100644
--- a/duplicate_role.module
+++ b/duplicate_role.module
@@ -1,18 +1,19 @@
 ﻿<?php
+
+
 /**
  * Implements hook_help().
  */
 function duplicate_role_help($path, $arg) {
   $output = '';
-  switch($path) {
-    case "admin/people/duplicate-role":
-    $output = '<p>' . t("Duplicate an existing role with the same permissions for modules and taxonomies as the original ones") . '</p>';
-    break;
+  switch ($path) {
+    case 'admin/people/duplicate-role':
+      $output = '<p>' . t('Duplicate an existing role with the same permissions for modules and taxonomies as the original ones') . '</p>';
+      break;
   }
   return $output;
 }
 
-
 /**
  * Implements hook_permission().
  */
@@ -24,7 +25,6 @@ function duplicate_role_permission() {
   );
 }
 
-
 /**
  * Implements hook_menu().
  */
@@ -42,45 +42,15 @@ function duplicate_role_menu() {
   return $items;
 }
 
-
 /**
  * Form submit. Insert records into database.
  */
 function duplicate_role_form_submit($form, &$form_state) {
-  
-  $base_role  = filter_xss($form_state['values']['base_role']);
+
+  $base_role = filter_xss($form_state['values']['base_role']);
   $new_role_name = filter_xss($form_state['values']['new_role_name']);
-  
-  if(db_table_exists('role')) {
-    
-    // Create new role
-    $new_role = db_insert('role');
-    $new_role->fields(array('name' => $new_role_name));
-    $new_role->execute();
-    
-    // Capture new role id
-    $new_role_rid = db_select('role', 'r')
-    ->fields('r', array('rid'))
-    ->condition('name', $new_role_name, '=')
-    ->execute()
-    ->fetchAssoc();
-  }
 
-  //Permission for old role in table "permission"  
-  if(db_table_exists('role_permission')) {
-    
-    $old_perms = db_select('role_permission', 'rp')
-    ->fields('rp', array('permission', 'module'))
-    ->condition('rid', $base_role, '=')
-    ->execute();
-    
-    while($data = $old_perms->fetchAssoc()) {
-      // Insert permissions on new role
-      $new_role_perms = db_insert('role_permission');
-      $new_role_perms->fields(array('rid' =>$new_role_rid , 'permission' => $data['permission'], 'module' => $data['module']));
-      $new_role_perms->execute(); 
-    }
-  }
+  duplicate_role_clone_role($base_role, $new_role_name);
 
   drupal_set_message(t('New role %role_name added successfully.', array('%role_name' => $new_role_name)));
 }
@@ -91,8 +61,8 @@ function duplicate_role_form_submit($form, &$form_state) {
 function duplicate_role_form_validate($form, &$form_state) {
   $new_role_name = filter_xss($form_state['values']['new_role_name']);
   $roles = user_roles();
-  if(in_array($new_role_name, $roles)) {
-    form_set_error('new_role_name', t('This role %role_name already exists. Please try a different name.', array('%role_name' => $new_role_name)));
+  if (in_array($new_role_name, $roles)) {
+    form_set_error('new_role_name', t('The role %role_name already exists. Please choose a different name.', array('%role_name' => $new_role_name)));
   }
 }
 
@@ -100,14 +70,14 @@ function duplicate_role_form_validate($form, &$form_state) {
  * Module selection interface.
  */
 function duplicate_role_form() {
-   
+
   $form = array();
   $u_roles = user_roles();
   asort($u_roles);
-  
+
   $options = array();
   $options[] = t('-- Please select one role --');
-  
+
   foreach ($u_roles as $key => $value) {
     $options[$key] = $value;
   }
@@ -127,13 +97,42 @@ function duplicate_role_form() {
     '#required' => TRUE,
     '#size' => 40,
     '#maxlength' => 40,
-    '#description' => t("New role name"),
+    '#description' => t('New role name'),
   );   
 
   $form['submit'] = array(
-    '#type' => 'submit', 
+    '#type' => 'submit',
     '#value' => t('Create new role')
   );
-  
+
   return $form;
-} 
\ No newline at end of file
+}
+
+/**
+ * Duplicate a role.
+ */
+function duplicate_role_clone_role($base_rid, $new_role_name) {
+
+  // Create the new role.
+  $new_role = db_insert('role');
+  $new_role->fields(array('name' => $new_role_name));
+  $new_role->execute();
+
+  // Get permissions of the old role.
+  $old_perms = db_query('SELECT permission, module FROM {role_permission} WHERE rid = :rid', array(
+    ':rid' => $base_rid,
+  ));
+
+  // Get new role id.
+  $new_role_rid = db_query('SELECT rid FROM {role} WHERE name = :name', array(
+	':name' => $new_role_name,
+  ))->fetchField();
+
+  while ($data = $old_perms->fetchAssoc()) {
+
+    // Add permissions to the new role.
+    $new_role_perms = db_insert('role_permission');
+    $new_role_perms->fields(array('rid' => $new_role_rid , 'permission' => $data['permission'], 'module' => $data['module']));
+    $new_role_perms->execute();
+  }
+}
