diff --git a/core/SSViewer.php b/core/SSViewer.php
index 371f1fc65..6ceb00688 100755
--- a/core/SSViewer.php
+++ b/core/SSViewer.php
@@ -507,17 +507,17 @@ class SSViewer {
 		$content = ereg_replace('<!-- +pc_end +-->', '<' . '% end_control %' . '>', $content);
 		
 		// < % control Foo % >
-		$content = ereg_replace('<' . '% +control +([A-Za-z0-9_]+) +%' . '>', '<? array_push($itemStack, $item); if($loop = $item->obj("\\1", null, false)) foreach($loop as $key => $item) { ?>', $content);
+		$content = ereg_replace('<' . '% +control +([A-Za-z0-9_]+) +%' . '>', '<? array_push($itemStack, $item); if($loop = $item->obj("\\1")) foreach($loop as $key => $item) { ?>', $content);
 		// < % control Foo.Bar % >
-		$content = ereg_replace('<' . '% +control +([A-Za-z0-9_]+)\\.([A-Za-z0-9_]+) +%' . '>', '<? array_push($itemStack, $item); if(($loop = $item->obj("\\1", null, false)) && ($loop = $loop->obj("\\2"))) foreach($loop as $key => $item) { ?>', $content);
+		$content = ereg_replace('<' . '% +control +([A-Za-z0-9_]+)\\.([A-Za-z0-9_]+) +%' . '>', '<? array_push($itemStack, $item); if(($loop = $item->obj("\\1")) && ($loop = $loop->obj("\\2"))) foreach($loop as $key => $item) { ?>', $content);
 		// < % control Foo.Bar(Baz) % >
-		$content = ereg_replace('<' . '% +control +([A-Za-z0-9_]+)\\.([A-Za-z0-9_]+)\\(([^),]+)\\) +%' . '>', '<? array_push($itemStack, $item); if(($loop = $item->obj("\\1", null, false)) && ($loop = $loop->obj("\\2", array("\\3")))) foreach($loop as $key => $item) { ?>', $content);
+		$content = ereg_replace('<' . '% +control +([A-Za-z0-9_]+)\\.([A-Za-z0-9_]+)\\(([^),]+)\\) +%' . '>', '<? array_push($itemStack, $item); if(($loop = $item->obj("\\1")) && ($loop = $loop->obj("\\2", array("\\3")))) foreach($loop as $key => $item) { ?>', $content);
 		// < % control Foo(Bar) % >
-		$content = ereg_replace('<' . '% +control +([A-Za-z0-9_]+)\\(([^),]+)\\) +%' . '>', '<? array_push($itemStack, $item); if($loop = $item->obj("\\1", array("\\2"), false)) foreach($loop as $key => $item) { ?>', $content);
+		$content = ereg_replace('<' . '% +control +([A-Za-z0-9_]+)\\(([^),]+)\\) +%' . '>', '<? array_push($itemStack, $item); if($loop = $item->obj("\\1", array("\\2"))) foreach($loop as $key => $item) { ?>', $content);
 		// < % control Foo(Bar, Baz) % >
-		$content = ereg_replace('<' . '% +control +([A-Za-z0-9_]+)\\(([^),]+), *([^),]+)\\) +%' . '>', '<? array_push($itemStack, $item); if($loop = $item->obj("\\1", array("\\2","\\3"), false)) foreach($loop as $key => $item) { ?>', $content);
+		$content = ereg_replace('<' . '% +control +([A-Za-z0-9_]+)\\(([^),]+), *([^),]+)\\) +%' . '>', '<? array_push($itemStack, $item); if($loop = $item->obj("\\1", array("\\2","\\3"))) foreach($loop as $key => $item) { ?>', $content);
 		// < % control Foo(Bar, Baz, Buz) % >
-		$content = ereg_replace('<' . '% +control +([A-Za-z0-9_]+)\\(([^),]+), *([^),]+), *([^),]+)\\) +%' . '>', '<? array_push($itemStack, $item); if($loop = $item->obj("\\1", array("\\2", "\\3", "\\4"), false)) foreach($loop as $key => $item) { ?>', $content);
+		$content = ereg_replace('<' . '% +control +([A-Za-z0-9_]+)\\(([^),]+), *([^),]+), *([^),]+)\\) +%' . '>', '<? array_push($itemStack, $item); if($loop = $item->obj("\\1", array("\\2", "\\3", "\\4"))) foreach($loop as $key => $item) { ?>', $content);
 		$content = ereg_replace('<' . '% +end_control +%' . '>', '<? } $item = array_pop($itemStack); ?>', $content);
 		$content = ereg_replace('<' . '% +debug +%' . '>', '<? Debug::show($item) ?>', $content);
 		$content = ereg_replace('<' . '% +debug +([A-Za-z0-9_]+) +%' . '>', '<? Debug::show($item->cachedCall("\\1")) ?>', $content);
diff --git a/dev/CSSContentParser.php b/dev/CSSContentParser.php
index 78ff67f0a..6bfe05a68 100644
--- a/dev/CSSContentParser.php
+++ b/dev/CSSContentParser.php
@@ -46,7 +46,10 @@ class CSSContentParser extends Object {
 			$tidy = $content;
 		}
 		
-		$this->simpleXML = simplexml_load_string($tidy, 'SimpleXMLElement', LIBXML_NOWARNING);
+		$this->simpleXML = @simplexml_load_string($tidy, 'SimpleXMLElement', LIBXML_NOWARNING);
+		if(!$this->simpleXML) {
+			throw new Exception('CSSContentParser::__construct(): Could not parse content. Please check the PHP extension tidy is installed.');
+		}
 		
 		parent::__construct();
 	}
diff --git a/tests/SSViewerTest.php b/tests/SSViewerTest.php
index 3f1e1db7b..ba3c33851 100644
--- a/tests/SSViewerTest.php
+++ b/tests/SSViewerTest.php
@@ -2,67 +2,6 @@
 
 class SSViewerTest extends SapphireTest {
 	
-	function testControlBlockDataObjectSet() {
-		$viewer = SSViewer::fromString(<<<SS
-		<% control TestSet %>
-			Test: \$TestValue
-		<% end_control %>
-SS
-);
-		$data = new ArrayData(array(
-			'TestSet' => new DataObjectSet(array(
-				new ArrayData(array(
-					'TestValue' => '1'
-				)),
-				new ArrayData(array(
-					'TestValue' => '2'
-				)),
-			))
-		));
-		$out = $viewer->process($data);
-		$this->assertEquals('Test:1Test:2', str_replace(array(' ', "\t", PHP_EOL), '', $out));
-	}
-	
-	function testControlBlockNullValueDoesntLoop() {
-		$viewer = SSViewer::fromString(<<<SS
-		<% control NullValue %>
-			notdisplayed
-		<% end_control %>
-SS
-);
-		$data = new ArrayData(array(
-			'NullValue' => null
-		));
-		$out = $viewer->process($data);
-		$this->assertNotContains('notdisplayed', str_replace(array(' ', "\t", PHP_EOL), '', $out));
-	}
-	
-	function testControlBlockFalseValueDoesntLoop() {
-		$viewer = SSViewer::fromString(<<<SS
-		<% control FalseValue %>
-			notdisplayed
-		<% end_control %>
-SS
-);
-		$data = new ArrayData(array(
-			'FalseValue' => null
-		));
-		$out = $viewer->process($data);
-		$this->assertNotContains('notdisplayed', str_replace(array(' ', "\t", PHP_EOL), '', $out));
-	}
-	
-	function testControlBlockMethodReturningNullDoesntLoop() {
-		$viewer = SSViewer::fromString(<<<SS
-		<% control methodNull %>
-			notdisplayed
-		<% end_control %>
-SS
-);
-		$data = new SSViewerTest_ViewableData();
-		$out = $viewer->process($data);
-		$this->assertNotContains('notdisplayed', str_replace(array(' ', "\t", PHP_EOL), '', $out));
-	}
-	
 	/**
 	 * Tests for {@link SSViewer::current_theme()} for different behaviour
 	 * of user defined themes via {@link SiteConfig} and default theme
@@ -455,8 +394,4 @@ class SSViewerTest_ViewableData extends ViewableData implements TestOnly {
 	function methodWithTwoArguments($arg1, $arg2) {
 		return "arg1:{$arg1},arg2:{$arg2}";
 	}
-	
-	function methodNull() {
-		return null;
-	}
 }