diff --git a/server/pifr_server.environment.inc b/server/pifr_server.environment.inc
index bafa3d3..ac0635b 100644
--- a/server/pifr_server.environment.inc
+++ b/server/pifr_server.environment.inc
@@ -546,8 +546,19 @@ function pifr_server_environment_plugins(array $test) {
  * @param integer $client_id Client ID.
  */
 function pifr_server_environment_status_reserve($environment_id, $test_id, $client_id) {
-  db_query('INSERT INTO {pifr_environment_status} (environment_id, test_id, client_id)
-            VALUES (%d, %d, %d)', $environment_id, $test_id, $client_id);
+  $exists = db_result(db_query('SELECT COUNT($test_id)
+                                FROM {pifr_environment_status}
+                                WHERE environment_id = %d AND test_id = %d',
+                                $environment_id, $test_id));
+  if (!$exists) {
+    return db_query('INSERT INTO {pifr_environment_status}
+                     (environment_id, test_id, client_id)
+                     VALUES (%d, %d, %d)',
+                     $environment_id, $test_id, $client_id);
+  }
+  else {
+    return FALSE;
+  }
 }
 
 /**
diff --git a/server/pifr_server.test.inc b/server/pifr_server.test.inc
index e1b1af4..da5a30b 100644
--- a/server/pifr_server.test.inc
+++ b/server/pifr_server.test.inc
@@ -117,8 +117,10 @@ function pifr_server_test_get_next(array $client) {
     // Return the next stage of the client testing process.
     $test = pifr_server_test_get($client['test_id']);
     list($next, $environment) = pifr_server_client_confirmation_next($client);
-    pifr_server_test_sent($test, $client, $environment['environment_id']);
-    return $next;
+    $res = pifr_server_test_sent($test, $client, $environment['environment_id']);
+    if ($res !== FALSE) {
+      return $next;
+    }
   }
   else if ($client['status'] == PIFR_SERVER_CLIENT_STATUS_ENABLED) {
     // If the client currently has a test out, reset the test.
@@ -131,10 +133,11 @@ function pifr_server_test_get_next(array $client) {
       pifr_debug('Next eligible=%next', array('%next' => print_r($next, TRUE)));
       $test = $next[0];
       $environment = $next[1];
-      pifr_server_test_sent($test, $client, $environment['environment_id']);
-
-      // Prepare test XML-RPC response.
-      return pifr_server_test_xmlrpc($test, $environment);
+      $res = pifr_server_test_sent($test, $client, $environment['environment_id']);
+      if ($res !== FALSE) {
+        // Prepare test XML-RPC response.
+        return pifr_server_test_xmlrpc($test, $environment);
+      }
     }
   }
 
@@ -306,14 +309,17 @@ function pifr_server_test_queue(array $test) {
  */
 function pifr_server_test_sent(array $test, array $client, $environment_id) {
   // Reserver the client's environment for the test.
-  pifr_server_environment_status_reserve($environment_id, $test['test_id'], $client['client_id']);
-
+  $res = pifr_server_environment_status_reserve($environment_id, $test['test_id'], $client['client_id']);
+  if ($res === FALSE) {
+    return FALSE;
+  }
   // Update the last requested timestamp.
   $test['last_requested'] = time();
   pifr_server_test_save($test);
 
   // Log the event.
   pifr_server_log($test['test_id'], $client['client_id'], PIFR_SERVER_LOG_CLIENT_REQUEST);
+  return TRUE;
 }
 
 /**
