diff --git a/_test/tests/inc/ixr_library_date.test.php b/_test/tests/inc/ixr_library_date.test.php
index f384869258abf341aee97fb885b7222409c7ce21..0c81e674196ca7a038affe6710d069e860eb0ad9 100644
--- a/_test/tests/inc/ixr_library_date.test.php
+++ b/_test/tests/inc/ixr_library_date.test.php
@@ -2,6 +2,9 @@
 
 require_once DOKU_INC.'inc/IXR_Library.php';
 
+/**
+ * Class ixr_library_date_test
+ */
 class ixr_library_date_test extends DokuWikiTest {
 
 
@@ -16,18 +19,24 @@ class ixr_library_date_test extends DokuWikiTest {
             array('2010-08-17T09:23:14Z', 1282036994),
             array('20100817T09:23:14Z',   1282036994),
 
+            // with timezone
+            array('2010-08-17 09:23:14+0000',  1282036994),
+            array('2010-08-17 09:23:14+00:00',  1282036994),
+            array('2010-08-17 12:23:14+03:00',  1282036994),
+
             // no seconds
             array('2010-08-17T09:23',     1282036980),
             array('20100817T09:23',       1282036980),
 
             // no time
             array('2010-08-17',           1282003200),
-            //array('20100817',             1282003200), #this will NOT be parsed, but is assumed to be timestamp
+            array(1282036980,             1282036980),
+//            array('20100817',             1282003200), #this will NOT be parsed, but is assumed to be timestamp
         );
 
         foreach($tests as $test){
             $dt = new IXR_Date($test[0]);
-            $this->assertEquals($dt->getTimeStamp(),$test[1]);
+            $this->assertEquals($test[1], $dt->getTimeStamp());
         }
     }
 
diff --git a/inc/IXR_Library.php b/inc/IXR_Library.php
index 301a8d9e1db6c24d09cb79b5ea5b90eb30e2d56f..5ae1402b955120d24867c2aaa3986db891d41690 100644
--- a/inc/IXR_Library.php
+++ b/inc/IXR_Library.php
@@ -297,6 +297,7 @@ class IXR_Message {
      * @param $tag
      */
     function tag_close($parser, $tag) {
+        $value = null;
         $valueFlag = false;
         switch($tag) {
             case 'int':
@@ -818,18 +819,14 @@ EOD;
  * @since 1.5
  */
 class IXR_Date {
-    var $year;
-    var $month;
-    var $day;
-    var $hour;
-    var $minute;
-    var $second;
-    var $timezone;
+
+    /** @var DateTime */
+    protected $date;
 
     /**
      * @param int|string $time
      */
-    function __construct($time) {
+    public function __construct($time) {
         // $time can be a PHP timestamp or an ISO one
         if(is_numeric($time)) {
             $this->parseTimestamp($time);
@@ -839,51 +836,48 @@ class IXR_Date {
     }
 
     /**
+     * Parse unix timestamp
+     *
      * @param int $timestamp
      */
-    function parseTimestamp($timestamp) {
-        $this->year = gmdate('Y', $timestamp);
-        $this->month = gmdate('m', $timestamp);
-        $this->day = gmdate('d', $timestamp);
-        $this->hour = gmdate('H', $timestamp);
-        $this->minute = gmdate('i', $timestamp);
-        $this->second = gmdate('s', $timestamp);
-        $this->timezone = '';
+    protected function parseTimestamp($timestamp) {
+        $this->date = new DateTime('@' . $timestamp);
     }
 
     /**
+     * Parses less or more complete iso dates and much more, if no timezone given assumes UTC
+     *
      * @param string $iso
      */
-    function parseIso($iso) {
-        if(preg_match('/^(\d\d\d\d)-?(\d\d)-?(\d\d)([T ](\d\d):(\d\d)(:(\d\d))?)?/', $iso, $match)) {
-            $this->year = (int) $match[1];
-            $this->month = (int) $match[2];
-            $this->day = (int) $match[3];
-            $this->hour = (int) $match[5];
-            $this->minute = (int) $match[6];
-            $this->second = (int) $match[8];
-        }
+    protected function parseIso($iso) {
+        $this->date = new DateTime($iso, new DateTimeZone("UTC"));
     }
 
     /**
+     * Returns date in ISO 8601 format
+     *
      * @return string
      */
-    function getIso() {
-        return $this->year . $this->month . $this->day . 'T' . $this->hour . ':' . $this->minute . ':' . $this->second . $this->timezone;
+    public function getIso() {
+        return $this->date->format(DateTime::ISO8601);
     }
 
     /**
+     * Returns date in valid xml
+     *
      * @return string
      */
-    function getXml() {
+    public function getXml() {
         return '<dateTime.iso8601>' . $this->getIso() . '</dateTime.iso8601>';
     }
 
     /**
+     * Returns Unix timestamp
+     *
      * @return int
      */
     function getTimestamp() {
-        return gmmktime($this->hour, $this->minute, $this->second, $this->month, $this->day, $this->year);
+        return $this->date->getTimestamp();
     }
 }
 
@@ -923,6 +917,9 @@ class IXR_IntrospectionServer extends IXR_Server {
     /** @var string[] */
     var $help;
 
+    /**
+     * Constructor
+     */
     function __construct() {
         $this->setCallbacks();
         $this->setCapabilities();
@@ -1107,7 +1104,7 @@ class IXR_ClientMulticall extends IXR_Client {
      * @param int $port
      */
     function __construct($server, $path = false, $port = 80) {
-        parent::IXR_Client($server, $path, $port);
+        parent::__construct($server, $path, $port);
         //$this->useragent = 'The Incutio XML-RPC PHP Library (multicall client)';
     }