diff --git a/pts-core/commands/check_tests.php b/pts-core/commands/check_tests.php
index 0b6099f49a..29157d798c 100644
--- a/pts-core/commands/check_tests.php
+++ b/pts-core/commands/check_tests.php
@@ -244,11 +244,11 @@ public static function timeToString($time)
 			$secs = floor($secs);
 
 		if ($hours == 0 && $mins == 0)
-			return "${secs}s";
+			return $secs . 's';
 		else if ($hours == 0)
-			return "${mins}m ${secs}s";
+			return $mins . 'm ' . $secs . 's';
 		else
-			return "${hours}h ${mins}m ${secs}s";
+			return $hours . 'h ' . $mins . 'm ' . $secs . 's';
 	}
 
 	/**
diff --git a/pts-core/commands/debug_test_download_links.php b/pts-core/commands/debug_test_download_links.php
index 7e9ddd1069..93d80bd388 100644
--- a/pts-core/commands/debug_test_download_links.php
+++ b/pts-core/commands/debug_test_download_links.php
@@ -44,7 +44,6 @@ public static function run($r)
 				foreach($test_file_download->get_download_url_array() as $url)
 				{
 					$stream_context = pts_network::stream_context_create();
-					stream_context_set_params($stream_context, array('notification' => 'pts_stream_status_callback'));
 					$file_pointer = @fopen($url, 'r', false, $stream_context);
 					//fread($file_pointer, 1024);
 
diff --git a/pts-core/commands/upload_test_suite.php b/pts-core/commands/upload_test_suite.php
index 64525b3708..7a82042c91 100644
--- a/pts-core/commands/upload_test_suite.php
+++ b/pts-core/commands/upload_test_suite.php
@@ -56,7 +56,7 @@ public static function run($r)
 					return false;
 				}
 
-				$commit_description = pts_user_io::prompt_user_input('Enter a test commit description', false);
+				$commit_description = pts_user_io::prompt_user_input('Enter a suite commit description', false);
 
 				echo PHP_EOL;
 				$server_response = pts_openbenchmarking::make_openbenchmarking_request('upload_test_suite', array(
diff --git a/pts-core/objects/client/display_modes/pts_basic_display_mode.php b/pts-core/objects/client/display_modes/pts_basic_display_mode.php
index 56a636ba5d..d33218cf2b 100644
--- a/pts-core/objects/client/display_modes/pts_basic_display_mode.php
+++ b/pts-core/objects/client/display_modes/pts_basic_display_mode.php
@@ -115,7 +115,7 @@ public function test_run_start(&$test_run_manager, &$test_result)
 	public function test_run_instance_header(&$test_result)
 	{
 		$this->trial_run_count_current++;
-		echo self::string_header($test_result->test_profile->get_title() . ' (Run ' . $this->trial_run_count_current . ' of ' . $this->expected_trial_run_count . ')' . PHP_EOL . $test_result->get_arguments_description());
+		echo self::string_header($test_result->test_profile->get_title() . ' (Run ' . $this->trial_run_count_current . ' of ' . $this->expected_trial_run_count . ')' . ($test_result->get_arguments_description() != '' ? PHP_EOL . $test_result->get_arguments_description() : ''));
 	}
 	public function display_interrupt_message($message)
 	{
diff --git a/pts-core/objects/phodevi/components/phodevi_gpu.php b/pts-core/objects/phodevi/components/phodevi_gpu.php
index a6efef8822..dc9db38b4f 100644
--- a/pts-core/objects/phodevi/components/phodevi_gpu.php
+++ b/pts-core/objects/phodevi/components/phodevi_gpu.php
@@ -710,33 +710,6 @@ public static function gpu_memory_size()
 			}
 		}
 
-		// Disabling 27 Nov 2016 as seems to cause problems with AMDGPU-0PRO but falls back gracefully outside of this xorg-log parsing for correct amount
-		/*
-		if($video_ram == -1 && isset(phodevi::$vfs->xorg_log))
-		{
-			// Attempt Video RAM detection using X log
-			// fglrx driver reports video memory to: (--) fglrx(0): VideoRAM: XXXXXX kByte, Type: DDR
-			// xf86-video-ati, xf86-video-intel, and xf86-video-radeonhd also report their memory information in a similar format
-			$info = phodevi::$vfs->xorg_log;
-
-			if(($pos = stripos($info, 'RAM:') + 5) > 5 || ($pos = strpos($info, 'RAM=') + 4) > 4)
-			{
-				$info = substr($info, $pos);
-				$info = substr($info, 0, strpos($info, ' '));
-
-				if(!is_numeric($info) && ($cut = strpos($info, ',')))
-				{
-					$info = substr($info, 0, $cut);
-				}
-
-				if(is_numeric($info) && $info > 65535)
-				{
-					$video_ram = intval($info) / 1024;
-				}
-			}
-		}
-		*/
-
 		if($video_ram == -1 && isset(phodevi::$vfs->dmesg))
 		{
 			// Fallback to try to find vRAM from dmesg
@@ -1431,56 +1404,59 @@ public static function gpu_model()
 			}
 		}
 
-		if(($bracket_open = strpos($info, '[')) !== false)
+		if(!empty($info))
 		{
-			// Report only the information inside the brackets if it's more relevant...
-			// Mainly with Linux systems where the PCI information is reported like 'nVidia GF104 [GeForce GTX 460]'
-
-			if(($bracket_close = strpos($info, ']', ($bracket_open + 1))) !== false)
+			if(($bracket_open = strpos($info, '[')) !== false)
 			{
-				$inside_bracket = substr($info, ($bracket_open + 1), ($bracket_close - $bracket_open - 1));
+				// Report only the information inside the brackets if it's more relevant...
+				// Mainly with Linux systems where the PCI information is reported like 'nVidia GF104 [GeForce GTX 460]'
 
-				if(stripos($inside_bracket, 'Quadro') !== false || stripos($inside_bracket, 'GeForce') !== false)
+				if(($bracket_close = strpos($info, ']', ($bracket_open + 1))) !== false)
 				{
-					$info = $inside_bracket . ' ' . substr($info, ($bracket_close + 1));
-				}
-				else if(stripos($inside_bracket, 'Radeon') !== false || stripos($inside_bracket, 'Fire') !== false || stripos($inside_bracket, 'Fusion') !== false)
-				{
-					$info = $inside_bracket . ' ' . substr($info, ($bracket_close + 1));
+					$inside_bracket = substr($info, ($bracket_open + 1), ($bracket_close - $bracket_open - 1));
+
+					if(stripos($inside_bracket, 'Quadro') !== false || stripos($inside_bracket, 'GeForce') !== false)
+					{
+						$info = $inside_bracket . ' ' . substr($info, ($bracket_close + 1));
+					}
+					else if(stripos($inside_bracket, 'Radeon') !== false || stripos($inside_bracket, 'Fire') !== false || stripos($inside_bracket, 'Fusion') !== false)
+					{
+						$info = $inside_bracket . ' ' . substr($info, ($bracket_close + 1));
+					}
 				}
 			}
-		}
 
-		if(stripos($info, 'NVIDIA') === false && (stripos($info, 'Quadro') !== false || stripos($info, 'Titan ') !== false ||  stripos($info, ' Tesla') !== false || stripos($info, 'GeForce') !== false || substr($info, 0, 2) == 'NV'))
-		{
-			$info = 'NVIDIA' . ' ' . $info;
-		}
-		else if((stripos($info, 'ATI') === false && stripos($info, 'AMD') === false) && (stripos($info, 'Radeon') !== false || stripos($info, 'Fire') !== false || stripos($info, 'Fusion') !== false))
-		{
-			// Fire would be for FireGL or FirePro hardware
-			$info = 'AMD ' . $info;
-		}
-
-		if(phodevi::is_linux() && ($vendor = phodevi_linux_parser::read_pci_subsystem_value('VGA compatible controller')) != null && stripos($info, $vendor) === false && (stripos($info, 'AMD') !== false || stripos($info, 'NVIDIA') !== false || stripos($info, 'Intel') !== false))
-		{
-			$info = $vendor . ' ' . $info;
-		}
-
-		$clean_phrases = array('OpenGL Engine');
-		$info = str_replace($clean_phrases, '', $info);
+			if(stripos($info, 'NVIDIA') === false && (stripos($info, 'Quadro') !== false || stripos($info, 'Titan ') !== false ||  stripos($info, ' Tesla') !== false || stripos($info, 'GeForce') !== false || substr($info, 0, 2) == 'NV'))
+			{
+				$info = 'NVIDIA' . ' ' . $info;
+			}
+			else if((stripos($info, 'ATI') === false && stripos($info, 'AMD') === false) && (stripos($info, 'Radeon') !== false || stripos($info, 'Fire') !== false || stripos($info, 'Fusion') !== false))
+			{
+				// Fire would be for FireGL or FirePro hardware
+				$info = 'AMD ' . $info;
+			}
 
-		if(!empty($info) && $video_ram > 64 && strpos($info, $video_ram) == false && stripos($info, 'llvmpipe') === false) // assume more than 64MB of vRAM
-		{
-			if($video_ram < 1024)
+			if(phodevi::is_linux() && ($vendor = phodevi_linux_parser::read_pci_subsystem_value('VGA compatible controller')) != null && stripos($info, $vendor) === false && (stripos($info, 'AMD') !== false || stripos($info, 'NVIDIA') !== false || stripos($info, 'Intel') !== false))
 			{
-				$info .= ' ' . $video_ram . 'MB';
+				$info = $vendor . ' ' . $info;
 			}
-			else
+
+			$clean_phrases = array('OpenGL Engine');
+			$info = str_replace($clean_phrases, '', $info);
+
+			if(!empty($info) && $video_ram > 64 && strpos($info, $video_ram) == false && stripos($info, 'llvmpipe') === false) // assume more than 64MB of vRAM
 			{
-				$video_ram = round($video_ram / 1024) . 'GB';
-				if(strpos($info, $video_ram) == false)
+				if($video_ram < 1024)
 				{
-					$info .= ' ' . $video_ram;
+					$info .= ' ' . $video_ram . 'MB';
+				}
+				else
+				{
+					$video_ram = round($video_ram / 1024) . 'GB';
+					if(strpos($info, $video_ram) == false)
+					{
+						$info .= ' ' . $video_ram;
+					}
 				}
 			}
 		}
diff --git a/pts-core/objects/phodevi/components/phodevi_system.php b/pts-core/objects/phodevi/components/phodevi_system.php
index ab002fdcd3..f628b8dce3 100644
--- a/pts-core/objects/phodevi/components/phodevi_system.php
+++ b/pts-core/objects/phodevi/components/phodevi_system.php
@@ -805,7 +805,7 @@ public static function sw_compiler()
 		{
 			// Clang
 			$compiler_info = shell_exec(escapeshellarg($clang) . ' --version');
-			if(($cv_pos = stripos($compiler_info, 'clang version')) !== false)
+			if(!empty($compiler_info) && ($cv_pos = stripos($compiler_info, 'clang version')) !== false)
 			{
 				// With Clang 3.0 and prior, the --version produces output where the first line is:
 				// e.g. clang version 3.0 (branches/release_30 142590)
@@ -838,7 +838,7 @@ public static function sw_compiler()
 					$compiler_info = null;
 				}
 			}
-			else
+			else if(!empty($compiler_info))
 			{
 				$compiler_info = substr($compiler_info, 0, strpos($compiler_info, PHP_EOL));
 			}
diff --git a/pts-core/objects/phodevi/phodevi.php b/pts-core/objects/phodevi/phodevi.php
index fc00fb98c8..07267cabaa 100644
--- a/pts-core/objects/phodevi/phodevi.php
+++ b/pts-core/objects/phodevi/phodevi.php
@@ -409,7 +409,7 @@ public static function system_centralized_view($return_as_string = true)
 				}
 				else
 				{
-					if(($x = strpos($in, ' (')))
+					if(!empty($in) && ($x = strpos($in, ' (')))
 					{
 						$in = substr($in, 0, $x);
 					}
diff --git a/pts-core/objects/pts_result_viewer_embed.php b/pts-core/objects/pts_result_viewer_embed.php
index bda0aeb12f..a5e1e21efb 100644
--- a/pts-core/objects/pts_result_viewer_embed.php
+++ b/pts-core/objects/pts_result_viewer_embed.php
@@ -1458,7 +1458,7 @@ public static function process_request_to_attributes(&$request, &$result_file, &
 			$system_count = $result_file->get_system_count();
 			foreach($result_file->get_result_objects() as $i => $result_object)
 			{
-				if($result_object->test_result_buffer->get_count() < $system_count)
+				if($result_object->test_result_buffer->get_count() < $system_count || $result_object->test_result_buffer->has_incomplete_result())
 				{
 					$result_file->remove_result_object_by_id($i);
 				}
diff --git a/pts-core/objects/pts_validation.php b/pts-core/objects/pts_validation.php
index 4d53002ba0..8d005bad5e 100644
--- a/pts-core/objects/pts_validation.php
+++ b/pts-core/objects/pts_validation.php
@@ -199,7 +199,6 @@ public static function validate_test_profile(&$test_profile)
 				foreach($download->get_download_url_array() as $url)
 				{
 					$stream_context = pts_network::stream_context_create();
-					stream_context_set_params($stream_context, array('notification' => 'pts_stream_status_callback'));
 					$file_pointer = fopen($url, 'r', false, $stream_context);
 
 					if($file_pointer == false)
@@ -221,7 +220,6 @@ public static function validate_test_profile(&$test_profile)
 			}
 		}
 
-
 		// Validate the parser file
 		$parser_file = $test_profile->get_file_parser_spec();
 
