allow MDC have callable param - unit tests
diff --git a/src/main/php/pattern/LoggerPatternConverter.php b/src/main/php/pattern/LoggerPatternConverter.php
index f4d868e..0e236ad 100644
--- a/src/main/php/pattern/LoggerPatternConverter.php
+++ b/src/main/php/pattern/LoggerPatternConverter.php
@@ -101,8 +101,10 @@
 			return;

 		}

 		

-		if ($string instanceof Closure) {

-			$string = ($string)();

+		if (version_compare(phpversion(), '5.3.0', '>=')) {

+			if ($string instanceof Closure) {

+				$string = $string();

+			}

 		}

 		

 		$len = strlen($string);

diff --git a/src/test/php/LoggerIdGenerator.php b/src/test/php/LoggerIdGenerator.php
new file mode 100644
index 0000000..2587422
--- /dev/null
+++ b/src/test/php/LoggerIdGenerator.php
@@ -0,0 +1,42 @@
+<?php
+/**
+ * That's a singletone class
+ */
+
+class LoggerIdGenerator
+{
+	private static $instance;
+	private $requestId;
+	private $sequence = 1;
+
+	protected function __construct() {/* you can't create me */
+	}
+
+	public function getId() {
+		if($this->requestId == null) {
+			$dateTime = new DateTime();
+			$this->requestId = $dateTime->getTimestamp() . rand(1000, 9999);
+		}
+		return $this->requestId;
+	}
+
+	public function getSeq() {
+		return $this->sequence++;
+	}
+
+	public static function me() {
+		return self::getInstance();
+	}
+
+	final public static function getInstance() {
+
+		if(!isset(self::$instance)) {
+			self::$instance = new self;
+		}
+
+		return self::$instance;
+	}
+
+	final private function __clone() {/* do not clone me */
+	}
+}
diff --git a/src/test/php/LoggerMDCTest.php b/src/test/php/LoggerMDCTest.php
index 8d2b610..f2aebc5 100644
--- a/src/test/php/LoggerMDCTest.php
+++ b/src/test/php/LoggerMDCTest.php
@@ -42,7 +42,10 @@
 	

 	/** A pattern without a key. */

 	private $pattern5 = "%-5p %c: %X %m";

-	

+

+	/** Pattern for closure */

+	private $pattern6 = "%m - sequence: %X{requestSequence}";

+

 	protected function setUp() {

 		LoggerMDC::clear();

 	}

@@ -50,7 +53,38 @@
 	protected function tearDown() {

 		LoggerMDC::clear();

 	}

-	

+

+	public function testClosure() {

+		if (version_compare(phpversion(), '5.3.0', '>=')) {

+			LoggerMDC::put("requestSequence",

+				function() {

+					return sprintf("%02d", LoggerIdGenerator::me()->getSeq());

+				}

+			);

+			// Test in a cycle

+			for($i=1; $i <= 10; $i++) {

+				$event = LoggerTestHelper::getInfoEvent(sprintf('Iteration %02d', $i));

+				$actual = $this->formatEvent($event, $this->pattern6);

+				$expected = sprintf("Iteration %02d - sequence: %02d", $i, $i);

+				self::assertEquals($expected, $actual);

+			}

+			// Increment outside of MDC

+			self::assertEquals($i, LoggerIdGenerator::me()->getSeq());

+			$i++;

+

+			// Recheck MDC has correct sequence

+			$event = LoggerTestHelper::getDebugEvent(sprintf('Debug %02d', $i));

+			$actual = $this->formatEvent($event, $this->pattern6);

+			$expected = sprintf("Debug %02d - sequence: %02d", $i, $i);

+

+			self::assertEquals($expected, $actual);

+

+		} else {

+			// Closures available Since 5.3.0

+			self::assertSame(1, 1);

+		}

+	}

+

 	public function testPatterns() {

 

 		// Create some data to test with