diff --git a/client/pifr_client.xmlrpc.inc b/client/pifr_client.xmlrpc.inc
index 1492aae..f502eeb 100644
--- a/client/pifr_client.xmlrpc.inc
+++ b/client/pifr_client.xmlrpc.inc
@@ -92,7 +92,9 @@ function pifr_client_xmlrpc_request_next() {
  * @return boolean TRUE if succesful, otherwise FALSE.
  */
 function pifr_client_xmlrpc_send_result(array $result) {
-  $response = xmlrpc(PIFR_CLIENT_SERVER . 'xmlrpc.php', 'pifr.result', PIFR_CLIENT_KEY, $result);
+  $compressed_result = base64_encode(gzcompress(serialize($result), 9));
+
+  $response = xmlrpc(PIFR_CLIENT_SERVER . 'xmlrpc.php', 'pifr.result', PIFR_CLIENT_KEY, $compressed_result);
 
   if ($response === FALSE) {
     watchdog('pifr_client', 'Failed to send result: @message', array('@message' => xmlrpc_error_msg()), WATCHDOG_ERROR);
diff --git a/server/pifr_server.module b/server/pifr_server.module
index 639a90d..5e17f7f 100644
--- a/server/pifr_server.module
+++ b/server/pifr_server.module
@@ -123,7 +123,7 @@ function pifr_server_xmlrpc() {
            t('Queue a batch of files for testing. (Called by PIFT)')),
     array('pifr.next', 'pifr_server_xmlrpc_next', array('struct', 'string'),
            t('Request the next file for testing. (Called by PIFR client)')),
-    array('pifr.result', 'pifr_server_xmlrpc_result', array('int', 'string', 'struct'),
+    array('pifr.result', 'pifr_server_xmlrpc_result', array('int', 'string', 'string'),
            t('Report test results. (Called by PIFR client)')),
     array('pifr.status', 'pifr_server_xmlrpc_status', array('int', 'string', 'struct'),
            t('Report testing status. (Called by PIFR client)')),
diff --git a/server/pifr_server.xmlrpc.inc b/server/pifr_server.xmlrpc.inc
index ca3d4a0..183fc37 100644
--- a/server/pifr_server.xmlrpc.inc
+++ b/server/pifr_server.xmlrpc.inc
@@ -333,7 +333,9 @@ function pifr_server_xmlrpc_next($client_key) {
  * Report test results. (Called by PIFR client)
  *
  * @param string $client_key Client key sending test results.
- * @param array $result Test result.
+ * @param string $compressed_result Compressed test result.
+ *   The test result will be an array, matching the signature defined below,
+ *   which has been serialized, gzcompressed, and then base64 encoded.
  * <code>
  *   $result = array(
  *     'test_id', // Unique test ID.
@@ -364,7 +366,8 @@ function pifr_server_xmlrpc_next($client_key) {
  * </code>
  * @return Response code: PIFR_RESPONSE_*.
  */
-function pifr_server_xmlrpc_result($client_key, array $result) {
+function pifr_server_xmlrpc_result($client_key, $compressed_result) {
+  $result = unserialize(gzuncompress(base64_decode($compressed_result)));
   pifr_debug('Received result from testbot client: <pre>%result</pre>', array('%result' => print_r($result, TRUE)));
   // Check if valid test client.
   $client = pifr_server_client_check_key($client_key, PIFR_SERVER_CLIENT_TYPE_TEST);
