diff --git a/domain.drush.inc b/domain.drush.inc
index 2d9db58..71ec263 100644
--- a/domain.drush.inc
+++ b/domain.drush.inc
@@ -97,6 +97,17 @@ function domain_drush_command() {
       'drush domain-repair',
     ),
   );
+  $items['domain-command'] = array(
+    'description' => 'Execute a command on each domain.',
+    'examples' => array(
+      'drush domain-command cc all' => 'Clears the cache for all domains',
+      'drush domain-command cron' => 'Executes cron on all domains',
+    ),
+    'arguments' => array(
+      'command' => 'The drush command to execute',
+    ),
+  );
+
   return $items;
 }

@@ -454,3 +465,41 @@ function drush_domain_repair() {
     }
   }
 }
+
+/**
+ * Execute a command on all domains.
+ */
+function drush_domain_command() {
+  // As domain configuration can only be initialized during the Drush bootstrap
+  // we need to assemble and execute a new Drush shell command on each domain.
+  // First get the name of the current Drush executable
+  global $argv;
+  $command = array($argv[0]);
+
+  // Remove first argument - this is the domain-command Drush command.
+  $arguments = array_slice(drush_get_arguments(), 1);
+
+  // Escape all arguments to support special characters e.g. "theme registry"
+  foreach($arguments as &$arg) {
+    $arg = escapeshellarg($arg);
+  }
+  // Add the arguments
+  $command = array_merge($command, $arguments);
+
+  // Execute the command for each domain
+  foreach (domain_domains() as $domain) {
+    // Skip inactive domains
+    if (!$domain['valid']) {
+      continue;
+    }
+    // Add domain option to the current command
+    $domain_command = array_merge($command, array('--uri=' . $domain['scheme'] . '://' . $domain['subdomain']));
+
+    // Log the executed command is a readable format:
+    // - The path to the drush executable is replaced by 'drush'
+    // - Domain name is moved to front and palced in brackets
+    $print_command = array_merge(array('drush'), array_slice($command, 1));
+    drush_print('[' . $domain['subdomain'] . '] ' . implode(' ', $print_command));
+
+    // Execute the command.
+    // Use interactive execution to allow the user to respond to any prompts
+    // etc. raised by the command
+    drush_shell_exec_interactive(implode(' ', $domain_command));
+  }
+}
