diff --git platform/backup.provision.inc platform/backup.provision.inc
index f482840..559cf3a 100644
--- platform/backup.provision.inc
+++ platform/backup.provision.inc
@@ -54,12 +54,16 @@ function drush_provision_drupal_provision_backup($url) {
   $backup_file = drush_get_option('backup_file');
   // Adds the site directory into the backup file
   drush_log(dt("Adding sites directory to !backup_file", array('!backup_file' => $backup_file)), 'backup');
+  // the weird pipe and argument order voodoo here is required for SunOS compatibility, which doesn't support gzip and is anal about argument order
+  $olddir = getcwd();
+  chdir(drush_get_option('sites_path') . "/$url");
   if (substr($backup_file, -2) == 'gz') {
-    $command = "tar -C %s -p -c -z -f %s .";
+    $command = "tar cpf - . | gzip -c > %s";
   } else {
-    $command = "tar -C %s -p -c -f %s .";
+    $command = "tar cpf - . > %s";
   }
-  $result = provision_shell_exec($command, drush_get_option('sites_path') . "/$url",  $backup_file);
+  $result = provision_shell_exec($command,  $backup_file);
+  chdir($olddir);
 
   if (!$result && !drush_get_option('force', false)) {
     drush_set_error('PROVISION_BACKUP_FAILED', dt("Could not back up sites directory for drupal"));
diff --git provision.path.inc provision.path.inc
index 2832325..12a08de 100644
--- provision.path.inc
+++ provision.path.inc
@@ -255,8 +255,14 @@ function provision_path_extract($path, &$target, &$reason) {
   if (file_exists($path) && is_readable($path)) {
     if (is_writeable(dirname($target)) && !file_exists($target) && !is_dir($target)) {
       mkdir($target);
-      drush_log(sprintf("Running: tar -zpxf %s -C %s", $path, $target));
-      $result = provision_shell_exec("tar -zpxf %s -C %s", $path, $target);
+      $oldcwd = getcwd();
+      // we need to do this because some retarded implementations of tar (e.g. SunOS) don't support -C
+      chdir($target);
+      // same here: some do not support -z
+      $command = 'gunzip -c %s | tar pxf -';
+      drush_log(dt('Running: %comand in %target', array('%command' => sprintf($command, $path), '%target' => $target)));
+      $result = provision_shell_exec($command, $path);
+      chdir($oldcwd);
 
       if ($result && is_writeable(dirname($target)) && is_readable(dirname($target)) && is_dir($target)) {
         $target = TRUE;
