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
