diff --git a/composer.json b/composer.json
index c9e0a7a9c2d73659ccaf266c4a044d37dcb8c840..722f1faa6194115f988e388f41234ad7ab41e78e 100644
--- a/composer.json
+++ b/composer.json
@@ -25,7 +25,7 @@
     "easyrdf/easyrdf": "0.9.*",
     "phpunit/phpunit": "4.1.*",
     "phpunit/phpunit-mock-objects": "dev-master#e60bb929c50ae4237aaf680a4f6773f4ee17f0a2",
-    "zendframework/zend-feed": "2.2.*",
+    "zendframework/zend-feed": "2.3.*",
     "mikey179/vfsStream": "1.*",
     "stack/builder": "1.0.*",
     "egulias/email-validator": "1.2.*"
diff --git a/composer.lock b/composer.lock
index 193d7e184b5ab61e6ed01510a77f8d0859c20a4c..fe5dc0ae4b94bad6234a348bcb9f401ddda5092e 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
         "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
         "This file is @generated automatically"
     ],
-    "hash": "9f93d739d3134a5fb76d650043b3ba89",
+    "hash": "461047a83f0f5554064bfe97e2a673fb",
     "packages": [
         {
             "name": "doctrine/annotations",
@@ -2440,27 +2440,27 @@
         },
         {
             "name": "zendframework/zend-escaper",
-            "version": "2.2.6",
+            "version": "2.3.3",
             "target-dir": "Zend/Escaper",
             "source": {
                 "type": "git",
                 "url": "https://github.com/zendframework/Component_ZendEscaper.git",
-                "reference": "80abc4bc1f48b9fe8ed603aaa9eebd6e6f30fd0f"
+                "reference": "c24949840766a544489bfc303714e1f332341010"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/Component_ZendEscaper/zipball/80abc4bc1f48b9fe8ed603aaa9eebd6e6f30fd0f",
-                "reference": "80abc4bc1f48b9fe8ed603aaa9eebd6e6f30fd0f",
+                "url": "https://api.github.com/repos/zendframework/Component_ZendEscaper/zipball/c24949840766a544489bfc303714e1f332341010",
+                "reference": "c24949840766a544489bfc303714e1f332341010",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3"
+                "php": ">=5.3.23"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.2-dev",
-                    "dev-develop": "2.3-dev"
+                    "dev-master": "2.3-dev",
+                    "dev-develop": "2.4-dev"
                 }
             },
             "autoload": {
@@ -2472,33 +2472,43 @@
             "license": [
                 "BSD-3-Clause"
             ],
+            "homepage": "https://github.com/zendframework/zf2",
             "keywords": [
                 "escaper",
                 "zf2"
             ],
-            "time": "2014-01-04 13:00:13"
+            "time": "2014-09-16 22:58:11"
         },
         {
             "name": "zendframework/zend-feed",
-            "version": "2.2.6",
+            "version": "2.3.3",
             "target-dir": "Zend/Feed",
             "source": {
                 "type": "git",
                 "url": "https://github.com/zendframework/Component_ZendFeed.git",
-                "reference": "8acb562d99dd0786d25c990530980d2d92b67b35"
+                "reference": "a89550818b56ae9607a97a63c7d2728a9eb6c6a9"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/Component_ZendFeed/zipball/8acb562d99dd0786d25c990530980d2d92b67b35",
-                "reference": "8acb562d99dd0786d25c990530980d2d92b67b35",
+                "url": "https://api.github.com/repos/zendframework/Component_ZendFeed/zipball/a89550818b56ae9607a97a63c7d2728a9eb6c6a9",
+                "reference": "a89550818b56ae9607a97a63c7d2728a9eb6c6a9",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3",
+                "php": ">=5.3.23",
                 "zendframework/zend-escaper": "self.version",
                 "zendframework/zend-stdlib": "self.version"
             },
+            "require-dev": {
+                "zendframework/zend-cache": "self.version",
+                "zendframework/zend-db": "self.version",
+                "zendframework/zend-http": "self.version",
+                "zendframework/zend-servicemanager": "self.version",
+                "zendframework/zend-validator": "self.version"
+            },
             "suggest": {
+                "zendframework/zend-cache": "Zend\\Cache component",
+                "zendframework/zend-db": "Zend\\Db component",
                 "zendframework/zend-http": "Zend\\Http for PubSubHubbub, and optionally for use with Zend\\Feed\\Reader",
                 "zendframework/zend-servicemanager": "Zend\\ServiceManager component, for default/recommended ExtensionManager implementations",
                 "zendframework/zend-validator": "Zend\\Validator component"
@@ -2506,8 +2516,8 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.2-dev",
-                    "dev-develop": "2.3-dev"
+                    "dev-master": "2.3-dev",
+                    "dev-develop": "2.4-dev"
                 }
             },
             "autoload": {
@@ -2520,39 +2530,46 @@
                 "BSD-3-Clause"
             ],
             "description": "provides functionality for consuming RSS and Atom feeds",
+            "homepage": "https://github.com/zendframework/zf2",
             "keywords": [
                 "feed",
                 "zf2"
             ],
-            "time": "2014-01-04 13:00:14"
+            "time": "2014-09-16 22:58:11"
         },
         {
             "name": "zendframework/zend-stdlib",
-            "version": "2.2.6",
+            "version": "2.3.3",
             "target-dir": "Zend/Stdlib",
             "source": {
                 "type": "git",
                 "url": "https://github.com/zendframework/Component_ZendStdlib.git",
-                "reference": "e646729f2274f4552b6a92e38d8e458efe08ebc5"
+                "reference": "fa33e6647f830d0d2a1cb451efcdfe1bb9a66c33"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/Component_ZendStdlib/zipball/e646729f2274f4552b6a92e38d8e458efe08ebc5",
-                "reference": "e646729f2274f4552b6a92e38d8e458efe08ebc5",
+                "url": "https://api.github.com/repos/zendframework/Component_ZendStdlib/zipball/fa33e6647f830d0d2a1cb451efcdfe1bb9a66c33",
+                "reference": "fa33e6647f830d0d2a1cb451efcdfe1bb9a66c33",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3"
+                "php": ">=5.3.23"
+            },
+            "require-dev": {
+                "zendframework/zend-eventmanager": "self.version",
+                "zendframework/zend-serializer": "self.version",
+                "zendframework/zend-servicemanager": "self.version"
             },
             "suggest": {
                 "zendframework/zend-eventmanager": "To support aggregate hydrator usage",
+                "zendframework/zend-serializer": "Zend\\Serializer component",
                 "zendframework/zend-servicemanager": "To support hydrator plugin manager usage"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.2-dev",
-                    "dev-develop": "2.3-dev"
+                    "dev-master": "2.3-dev",
+                    "dev-develop": "2.4-dev"
                 }
             },
             "autoload": {
@@ -2564,11 +2581,12 @@
             "license": [
                 "BSD-3-Clause"
             ],
+            "homepage": "https://github.com/zendframework/zf2",
             "keywords": [
                 "stdlib",
                 "zf2"
             ],
-            "time": "2014-01-04 13:00:28"
+            "time": "2014-09-16 22:58:11"
         }
     ],
     "packages-dev": [],
diff --git a/core/modules/aggregator/src/Plugin/aggregator/fetcher/DefaultFetcher.php b/core/modules/aggregator/src/Plugin/aggregator/fetcher/DefaultFetcher.php
index 8695d25db36c320a8b09fc593567da6003963b5c..ab7bcc5d5bee01e6fbc6e2f382be64aa621e82fc 100644
--- a/core/modules/aggregator/src/Plugin/aggregator/fetcher/DefaultFetcher.php
+++ b/core/modules/aggregator/src/Plugin/aggregator/fetcher/DefaultFetcher.php
@@ -90,7 +90,7 @@ public function fetch(FeedInterface $feed) {
         return FALSE;
       }
 
-      $feed->source_string = $response->getBody(TRUE);
+      $feed->source_string = (string) $response->getBody();
       $feed->setEtag($response->getHeader('ETag'));
       $feed->setLastModified(strtotime($response->getHeader('Last-Modified')));
       $feed->http_headers = $response->getHeaders();
diff --git a/core/vendor/composer/installed.json b/core/vendor/composer/installed.json
index e3366f47622874d7d01e3d6444b9f1e4477b85ad..6104e35036b1b0fb801c3807338abdda85f40ff0 100644
--- a/core/vendor/composer/installed.json
+++ b/core/vendor/composer/installed.json
@@ -1477,144 +1477,6 @@
             "templating"
         ]
     },
-    {
-        "name": "zendframework/zend-stdlib",
-        "version": "2.2.6",
-        "version_normalized": "2.2.6.0",
-        "target-dir": "Zend/Stdlib",
-        "source": {
-            "type": "git",
-            "url": "https://github.com/zendframework/Component_ZendStdlib.git",
-            "reference": "e646729f2274f4552b6a92e38d8e458efe08ebc5"
-        },
-        "dist": {
-            "type": "zip",
-            "url": "https://api.github.com/repos/zendframework/Component_ZendStdlib/zipball/e646729f2274f4552b6a92e38d8e458efe08ebc5",
-            "reference": "e646729f2274f4552b6a92e38d8e458efe08ebc5",
-            "shasum": ""
-        },
-        "require": {
-            "php": ">=5.3.3"
-        },
-        "suggest": {
-            "zendframework/zend-eventmanager": "To support aggregate hydrator usage",
-            "zendframework/zend-servicemanager": "To support hydrator plugin manager usage"
-        },
-        "time": "2014-01-04 13:00:28",
-        "type": "library",
-        "extra": {
-            "branch-alias": {
-                "dev-master": "2.2-dev",
-                "dev-develop": "2.3-dev"
-            }
-        },
-        "installation-source": "dist",
-        "autoload": {
-            "psr-0": {
-                "Zend\\Stdlib\\": ""
-            }
-        },
-        "notification-url": "https://packagist.org/downloads/",
-        "license": [
-            "BSD-3-Clause"
-        ],
-        "keywords": [
-            "stdlib",
-            "zf2"
-        ]
-    },
-    {
-        "name": "zendframework/zend-escaper",
-        "version": "2.2.6",
-        "version_normalized": "2.2.6.0",
-        "target-dir": "Zend/Escaper",
-        "source": {
-            "type": "git",
-            "url": "https://github.com/zendframework/Component_ZendEscaper.git",
-            "reference": "80abc4bc1f48b9fe8ed603aaa9eebd6e6f30fd0f"
-        },
-        "dist": {
-            "type": "zip",
-            "url": "https://api.github.com/repos/zendframework/Component_ZendEscaper/zipball/80abc4bc1f48b9fe8ed603aaa9eebd6e6f30fd0f",
-            "reference": "80abc4bc1f48b9fe8ed603aaa9eebd6e6f30fd0f",
-            "shasum": ""
-        },
-        "require": {
-            "php": ">=5.3.3"
-        },
-        "time": "2014-01-04 13:00:13",
-        "type": "library",
-        "extra": {
-            "branch-alias": {
-                "dev-master": "2.2-dev",
-                "dev-develop": "2.3-dev"
-            }
-        },
-        "installation-source": "dist",
-        "autoload": {
-            "psr-0": {
-                "Zend\\Escaper\\": ""
-            }
-        },
-        "notification-url": "https://packagist.org/downloads/",
-        "license": [
-            "BSD-3-Clause"
-        ],
-        "keywords": [
-            "escaper",
-            "zf2"
-        ]
-    },
-    {
-        "name": "zendframework/zend-feed",
-        "version": "2.2.6",
-        "version_normalized": "2.2.6.0",
-        "target-dir": "Zend/Feed",
-        "source": {
-            "type": "git",
-            "url": "https://github.com/zendframework/Component_ZendFeed.git",
-            "reference": "8acb562d99dd0786d25c990530980d2d92b67b35"
-        },
-        "dist": {
-            "type": "zip",
-            "url": "https://api.github.com/repos/zendframework/Component_ZendFeed/zipball/8acb562d99dd0786d25c990530980d2d92b67b35",
-            "reference": "8acb562d99dd0786d25c990530980d2d92b67b35",
-            "shasum": ""
-        },
-        "require": {
-            "php": ">=5.3.3",
-            "zendframework/zend-escaper": "self.version",
-            "zendframework/zend-stdlib": "self.version"
-        },
-        "suggest": {
-            "zendframework/zend-http": "Zend\\Http for PubSubHubbub, and optionally for use with Zend\\Feed\\Reader",
-            "zendframework/zend-servicemanager": "Zend\\ServiceManager component, for default/recommended ExtensionManager implementations",
-            "zendframework/zend-validator": "Zend\\Validator component"
-        },
-        "time": "2014-01-04 13:00:14",
-        "type": "library",
-        "extra": {
-            "branch-alias": {
-                "dev-master": "2.2-dev",
-                "dev-develop": "2.3-dev"
-            }
-        },
-        "installation-source": "dist",
-        "autoload": {
-            "psr-0": {
-                "Zend\\Feed\\": ""
-            }
-        },
-        "notification-url": "https://packagist.org/downloads/",
-        "license": [
-            "BSD-3-Clause"
-        ],
-        "description": "provides functionality for consuming RSS and Atom feeds",
-        "keywords": [
-            "feed",
-            "zf2"
-        ]
-    },
     {
         "name": "guzzlehttp/guzzle",
         "version": "5.0.3",
@@ -2656,5 +2518,161 @@
             "rdfa",
             "sparql"
         ]
+    },
+    {
+        "name": "zendframework/zend-stdlib",
+        "version": "2.3.3",
+        "version_normalized": "2.3.3.0",
+        "target-dir": "Zend/Stdlib",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/zendframework/Component_ZendStdlib.git",
+            "reference": "fa33e6647f830d0d2a1cb451efcdfe1bb9a66c33"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/zendframework/Component_ZendStdlib/zipball/fa33e6647f830d0d2a1cb451efcdfe1bb9a66c33",
+            "reference": "fa33e6647f830d0d2a1cb451efcdfe1bb9a66c33",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.3.23"
+        },
+        "require-dev": {
+            "zendframework/zend-eventmanager": "self.version",
+            "zendframework/zend-serializer": "self.version",
+            "zendframework/zend-servicemanager": "self.version"
+        },
+        "suggest": {
+            "zendframework/zend-eventmanager": "To support aggregate hydrator usage",
+            "zendframework/zend-serializer": "Zend\\Serializer component",
+            "zendframework/zend-servicemanager": "To support hydrator plugin manager usage"
+        },
+        "time": "2014-09-16 22:58:11",
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "2.3-dev",
+                "dev-develop": "2.4-dev"
+            }
+        },
+        "installation-source": "dist",
+        "autoload": {
+            "psr-0": {
+                "Zend\\Stdlib\\": ""
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "BSD-3-Clause"
+        ],
+        "homepage": "https://github.com/zendframework/zf2",
+        "keywords": [
+            "stdlib",
+            "zf2"
+        ]
+    },
+    {
+        "name": "zendframework/zend-escaper",
+        "version": "2.3.3",
+        "version_normalized": "2.3.3.0",
+        "target-dir": "Zend/Escaper",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/zendframework/Component_ZendEscaper.git",
+            "reference": "c24949840766a544489bfc303714e1f332341010"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/zendframework/Component_ZendEscaper/zipball/c24949840766a544489bfc303714e1f332341010",
+            "reference": "c24949840766a544489bfc303714e1f332341010",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.3.23"
+        },
+        "time": "2014-09-16 22:58:11",
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "2.3-dev",
+                "dev-develop": "2.4-dev"
+            }
+        },
+        "installation-source": "dist",
+        "autoload": {
+            "psr-0": {
+                "Zend\\Escaper\\": ""
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "BSD-3-Clause"
+        ],
+        "homepage": "https://github.com/zendframework/zf2",
+        "keywords": [
+            "escaper",
+            "zf2"
+        ]
+    },
+    {
+        "name": "zendframework/zend-feed",
+        "version": "2.3.3",
+        "version_normalized": "2.3.3.0",
+        "target-dir": "Zend/Feed",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/zendframework/Component_ZendFeed.git",
+            "reference": "a89550818b56ae9607a97a63c7d2728a9eb6c6a9"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/zendframework/Component_ZendFeed/zipball/a89550818b56ae9607a97a63c7d2728a9eb6c6a9",
+            "reference": "a89550818b56ae9607a97a63c7d2728a9eb6c6a9",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.3.23",
+            "zendframework/zend-escaper": "self.version",
+            "zendframework/zend-stdlib": "self.version"
+        },
+        "require-dev": {
+            "zendframework/zend-cache": "self.version",
+            "zendframework/zend-db": "self.version",
+            "zendframework/zend-http": "self.version",
+            "zendframework/zend-servicemanager": "self.version",
+            "zendframework/zend-validator": "self.version"
+        },
+        "suggest": {
+            "zendframework/zend-cache": "Zend\\Cache component",
+            "zendframework/zend-db": "Zend\\Db component",
+            "zendframework/zend-http": "Zend\\Http for PubSubHubbub, and optionally for use with Zend\\Feed\\Reader",
+            "zendframework/zend-servicemanager": "Zend\\ServiceManager component, for default/recommended ExtensionManager implementations",
+            "zendframework/zend-validator": "Zend\\Validator component"
+        },
+        "time": "2014-09-16 22:58:11",
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "2.3-dev",
+                "dev-develop": "2.4-dev"
+            }
+        },
+        "installation-source": "dist",
+        "autoload": {
+            "psr-0": {
+                "Zend\\Feed\\": ""
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "BSD-3-Clause"
+        ],
+        "description": "provides functionality for consuming RSS and Atom feeds",
+        "homepage": "https://github.com/zendframework/zf2",
+        "keywords": [
+            "feed",
+            "zf2"
+        ]
     }
 ]
diff --git a/core/vendor/zendframework/zend-escaper/Zend/Escaper/CONTRIBUTING.md b/core/vendor/zendframework/zend-escaper/Zend/Escaper/CONTRIBUTING.md
new file mode 100644
index 0000000000000000000000000000000000000000..e77f5d2d5b37809160135bc2c6b6a51b6637d794
--- /dev/null
+++ b/core/vendor/zendframework/zend-escaper/Zend/Escaper/CONTRIBUTING.md
@@ -0,0 +1,3 @@
+# CONTRIBUTING
+
+Please don't open pull requests against this repository, please use https://github.com/zendframework/zf2.
\ No newline at end of file
diff --git a/core/vendor/zendframework/zend-escaper/Zend/Escaper/Escaper.php b/core/vendor/zendframework/zend-escaper/Zend/Escaper/Escaper.php
index 28acfe052243dec9a8f6d2cb8a03f9ed627067ec..c7f81ba7d3011c5c015e243397525356bba71e8f 100644
--- a/core/vendor/zendframework/zend-escaper/Zend/Escaper/Escaper.php
+++ b/core/vendor/zendframework/zend-escaper/Zend/Escaper/Escaper.php
@@ -368,7 +368,6 @@ protected function isUtf8($string)
      */
     protected function convertEncoding($string, $to, $from)
     {
-        $result = '';
         if (function_exists('iconv')) {
             $result = iconv($from, $to, $string);
         } elseif (function_exists('mb_convert_encoding')) {
diff --git a/core/vendor/zendframework/zend-escaper/Zend/Escaper/composer.json b/core/vendor/zendframework/zend-escaper/Zend/Escaper/composer.json
index 3b2f2b602d4f490938dea11dd065c99bc3216268..5f81793f37eaa6fa0993e42f5bfc1bb2afb90099 100644
--- a/core/vendor/zendframework/zend-escaper/Zend/Escaper/composer.json
+++ b/core/vendor/zendframework/zend-escaper/Zend/Escaper/composer.json
@@ -6,6 +6,7 @@
         "zf2",
         "escaper"
     ],
+    "homepage": "https://github.com/zendframework/zf2",
     "autoload": {
         "psr-0": {
             "Zend\\Escaper\\": ""
@@ -13,12 +14,12 @@
     },
     "target-dir": "Zend/Escaper",
     "require": {
-        "php": ">=5.3.3"
+        "php": ">=5.3.23"
     },
     "extra": {
         "branch-alias": {
-            "dev-master": "2.2-dev",
-            "dev-develop": "2.3-dev"
+            "dev-master": "2.3-dev",
+            "dev-develop": "2.4-dev"
         }
     }
 }
diff --git a/core/vendor/zendframework/zend-feed/Zend/Feed/CONTRIBUTING.md b/core/vendor/zendframework/zend-feed/Zend/Feed/CONTRIBUTING.md
new file mode 100644
index 0000000000000000000000000000000000000000..e77f5d2d5b37809160135bc2c6b6a51b6637d794
--- /dev/null
+++ b/core/vendor/zendframework/zend-feed/Zend/Feed/CONTRIBUTING.md
@@ -0,0 +1,3 @@
+# CONTRIBUTING
+
+Please don't open pull requests against this repository, please use https://github.com/zendframework/zf2.
\ No newline at end of file
diff --git a/core/vendor/zendframework/zend-feed/Zend/Feed/PubSubHubbub/PubSubHubbub.php b/core/vendor/zendframework/zend-feed/Zend/Feed/PubSubHubbub/PubSubHubbub.php
index f96236c9b30ada39262eeef8823167d6738581aa..585be54d1b054742ab0150128db527ff87f73679 100644
--- a/core/vendor/zendframework/zend-feed/Zend/Feed/PubSubHubbub/PubSubHubbub.php
+++ b/core/vendor/zendframework/zend-feed/Zend/Feed/PubSubHubbub/PubSubHubbub.php
@@ -95,7 +95,7 @@ public static function getHttpClient()
 
     /**
      * Simple mechanism to delete the entire singleton HTTP Client instance
-     * which forces an new instantiation for subsequent requests.
+     * which forces a new instantiation for subsequent requests.
      *
      * @return void
      */
diff --git a/core/vendor/zendframework/zend-feed/Zend/Feed/Reader/Extension/Syndication/Feed.php b/core/vendor/zendframework/zend-feed/Zend/Feed/Reader/Extension/Syndication/Feed.php
index 429c7bfd0a71f58ea31d65f9f3bf3fee856870f8..db1724c14c256ae78615e804af2544f44af00706 100644
--- a/core/vendor/zendframework/zend-feed/Zend/Feed/Reader/Extension/Syndication/Feed.php
+++ b/core/vendor/zendframework/zend-feed/Zend/Feed/Reader/Extension/Syndication/Feed.php
@@ -24,7 +24,7 @@ class Feed extends Extension\AbstractFeed
     public function getUpdatePeriod()
     {
         $name = 'updatePeriod';
-        $period = $this->_getData($name);
+        $period = $this->getData($name);
 
         if ($period === null) {
             $this->data[$name] = 'daily';
@@ -52,7 +52,7 @@ public function getUpdatePeriod()
     public function getUpdateFrequency()
     {
         $name = 'updateFrequency';
-        $freq = $this->_getData($name, 'number');
+        $freq = $this->getData($name, 'number');
 
         if (!$freq || $freq < 1) {
             $this->data[$name] = 1;
@@ -70,7 +70,7 @@ public function getUpdateFrequency()
     public function getUpdateFrequencyAsTicks()
     {
         $name = 'updateFrequency';
-        $freq = $this->_getData($name, 'number');
+        $freq = $this->getData($name, 'number');
 
         if (!$freq || $freq < 1) {
             $this->data[$name] = 1;
@@ -107,7 +107,7 @@ public function getUpdateFrequencyAsTicks()
      */
     public function getUpdateBase()
     {
-        $updateBase = $this->_getData('updateBase');
+        $updateBase = $this->getData('updateBase');
         $date = null;
         if ($updateBase) {
             $date = DateTime::createFromFormat(DateTime::W3C, $updateBase);
@@ -122,7 +122,7 @@ public function getUpdateBase()
      * @param string $type
      * @return mixed|null
      */
-    private function _getData($name, $type = 'string')
+    private function getData($name, $type = 'string')
     {
         if (array_key_exists($name, $this->data)) {
             return $this->data[$name];
diff --git a/core/vendor/zendframework/zend-feed/Zend/Feed/Reader/Feed/Atom.php b/core/vendor/zendframework/zend-feed/Zend/Feed/Reader/Feed/Atom.php
index 02a8f6244dbc9acc5994819b17a1a508fcccb3aa..251ad03ceac1f1885f73de12b072e18ea0381b41 100644
--- a/core/vendor/zendframework/zend-feed/Zend/Feed/Reader/Feed/Atom.php
+++ b/core/vendor/zendframework/zend-feed/Zend/Feed/Reader/Feed/Atom.php
@@ -383,7 +383,6 @@ protected function indexEntries()
     {
         if ($this->getType() == Reader\Reader::TYPE_ATOM_10 ||
             $this->getType() == Reader\Reader::TYPE_ATOM_03) {
-            $entries = array();
             $entries = $this->xpath->evaluate('//atom:entry');
 
             foreach ($entries as $index => $entry) {
diff --git a/core/vendor/zendframework/zend-feed/Zend/Feed/Reader/Feed/Rss.php b/core/vendor/zendframework/zend-feed/Zend/Feed/Reader/Feed/Rss.php
index 0237a531c22e80ae2ad7ea8f31e39d33c2201eb8..fc7baa131e4892c7d6d5dd4b01277b3898cc2861 100644
--- a/core/vendor/zendframework/zend-feed/Zend/Feed/Reader/Feed/Rss.php
+++ b/core/vendor/zendframework/zend-feed/Zend/Feed/Reader/Feed/Rss.php
@@ -675,8 +675,6 @@ public function getCategories()
      */
     protected function indexEntries()
     {
-        $entries = array();
-
         if ($this->getType() !== Reader\Reader::TYPE_RSS_10 && $this->getType() !== Reader\Reader::TYPE_RSS_090) {
             $entries = $this->xpath->evaluate('//item');
         } else {
diff --git a/core/vendor/zendframework/zend-feed/Zend/Feed/Reader/Reader.php b/core/vendor/zendframework/zend-feed/Zend/Feed/Reader/Reader.php
index 6c222bb52811fccd6a83da51f4fd35db0fc98bce..bcd387ad29788729e149d5487c149f8cc042f67b 100644
--- a/core/vendor/zendframework/zend-feed/Zend/Feed/Reader/Reader.php
+++ b/core/vendor/zendframework/zend-feed/Zend/Feed/Reader/Reader.php
@@ -192,7 +192,6 @@ public static function import($uri, $etag = null, $lastModified = null)
     {
         $cache       = self::getCache();
         $feed        = null;
-        $responseXml = '';
         $client      = self::getHttpClient();
         $client->resetParameters();
         $headers = new ZendHttp\Headers();
@@ -266,7 +265,7 @@ public static function import($uri, $etag = null, $lastModified = null)
      * HTTP client implementations.
      *
      * @param  string $uri
-     * @param  Http\Client $client
+     * @param  Http\ClientInterface $client
      * @return self
      * @throws Exception\RuntimeException if response is not an Http\ResponseInterface
      */
@@ -299,6 +298,11 @@ public static function importRemoteFeed($uri, Http\ClientInterface $client)
      */
     public static function importString($string)
     {
+        $trimmed = trim($string);
+        if (!is_string($string) || empty($trimmed)) {
+            throw new Exception\InvalidArgumentException('Only non empty strings are allowed as input');
+        }
+
         $libxmlErrflag = libxml_use_internal_errors(true);
         $oldValue = libxml_disable_entity_loader(true);
         $dom = new DOMDocument;
diff --git a/core/vendor/zendframework/zend-feed/Zend/Feed/Writer/AbstractFeed.php b/core/vendor/zendframework/zend-feed/Zend/Feed/Writer/AbstractFeed.php
index b96a5302dcebd03aaef31ec5b6c57729a8b54d89..5165904f71ef1867cc25bd73bee69a6238395404 100644
--- a/core/vendor/zendframework/zend-feed/Zend/Feed/Writer/AbstractFeed.php
+++ b/core/vendor/zendframework/zend-feed/Zend/Feed/Writer/AbstractFeed.php
@@ -287,7 +287,6 @@ protected function _validateTagUri($id)
     {
         if (preg_match('/^tag:(?P<name>.*),(?P<date>\d{4}-?\d{0,2}-?\d{0,2}):(?P<specific>.*)(.*:)*$/', $id, $matches)) {
             $dvalid = false;
-            $nvalid = false;
             $date = $matches['date'];
             $d6 = strtotime($date);
             if ((strlen($date) == 4) && $date <= date('Y')) {
diff --git a/core/vendor/zendframework/zend-feed/Zend/Feed/Writer/Entry.php b/core/vendor/zendframework/zend-feed/Zend/Feed/Writer/Entry.php
index 797f4bcd0f59ea032aad77c99bc7cf49fd58c49a..af8cf7a102cfeb7d01f092db53921a5fbb6a224f 100644
--- a/core/vendor/zendframework/zend-feed/Zend/Feed/Writer/Entry.php
+++ b/core/vendor/zendframework/zend-feed/Zend/Feed/Writer/Entry.php
@@ -530,7 +530,7 @@ public function getCommentFeedLinks()
     }
 
     /**
-     * Add a entry category
+     * Add an entry category
      *
      * @param array $category
      * @throws Exception\InvalidArgumentException
diff --git a/core/vendor/zendframework/zend-feed/Zend/Feed/Writer/ExtensionManager.php b/core/vendor/zendframework/zend-feed/Zend/Feed/Writer/ExtensionManager.php
index 5310050a0d27cbef65b87ac26f0c053ce767aedc..77d49a0dc317af3e583f1a79109c4df71e77c578 100644
--- a/core/vendor/zendframework/zend-feed/Zend/Feed/Writer/ExtensionManager.php
+++ b/core/vendor/zendframework/zend-feed/Zend/Feed/Writer/ExtensionManager.php
@@ -60,7 +60,7 @@ public function __call($method, $args)
      * Get the named extension
      *
      * @param  string $name
-     * @return Extension\AbstractEntry|Extension\AbstractFeed
+     * @return Extension\AbstractRenderer
      */
     public function get($name)
     {
diff --git a/core/vendor/zendframework/zend-feed/Zend/Feed/Writer/Renderer/Entry/Atom.php b/core/vendor/zendframework/zend-feed/Zend/Feed/Writer/Renderer/Entry/Atom.php
index 28b325d40c0ca93b085ad1798252cc4a997783e5..c7fc4be22d247ae71dd1f13995b3a1af73b16b30 100644
--- a/core/vendor/zendframework/zend-feed/Zend/Feed/Writer/Renderer/Entry/Atom.php
+++ b/core/vendor/zendframework/zend-feed/Zend/Feed/Writer/Renderer/Entry/Atom.php
@@ -291,7 +291,6 @@ protected function _validateTagUri($id)
     {
         if (preg_match('/^tag:(?P<name>.*),(?P<date>\d{4}-?\d{0,2}-?\d{0,2}):(?P<specific>.*)(.*:)*$/', $id, $matches)) {
             $dvalid = false;
-            $nvalid = false;
             $date = $matches['date'];
             $d6 = strtotime($date);
             if ((strlen($date) == 4) && $date <= date('Y')) {
@@ -353,7 +352,6 @@ protected function _setContent(DOMDocument $dom, DOMElement $root)
      */
     protected function _loadXhtml($content)
     {
-        $xhtml = '';
         if (class_exists('tidy', false)) {
             $tidy = new \tidy;
             $config = array(
diff --git a/core/vendor/zendframework/zend-feed/Zend/Feed/composer.json b/core/vendor/zendframework/zend-feed/Zend/Feed/composer.json
index d55068f011fd990e370dbceb6b939e3168a3fc20..0c4d7dc18184236ffff0835c639bdb0ef5a4b0fd 100644
--- a/core/vendor/zendframework/zend-feed/Zend/Feed/composer.json
+++ b/core/vendor/zendframework/zend-feed/Zend/Feed/composer.json
@@ -6,6 +6,7 @@
         "zf2",
         "feed"
     ],
+    "homepage": "https://github.com/zendframework/zf2",
     "autoload": {
         "psr-0": {
             "Zend\\Feed\\": ""
@@ -13,19 +14,28 @@
     },
     "target-dir": "Zend/Feed",
     "require": {
-        "php": ">=5.3.3",
+        "php": ">=5.3.23",
         "zendframework/zend-escaper": "self.version",
         "zendframework/zend-stdlib": "self.version"
     },
+    "require-dev": {
+        "zendframework/zend-db": "self.version",
+        "zendframework/zend-cache": "self.version",
+        "zendframework/zend-http": "self.version",
+        "zendframework/zend-servicemanager": "self.version",
+        "zendframework/zend-validator": "self.version"
+    },
     "suggest": {
+        "zendframework/zend-cache": "Zend\\Cache component",
+        "zendframework/zend-db": "Zend\\Db component",
         "zendframework/zend-http": "Zend\\Http for PubSubHubbub, and optionally for use with Zend\\Feed\\Reader",
         "zendframework/zend-servicemanager": "Zend\\ServiceManager component, for default/recommended ExtensionManager implementations",
         "zendframework/zend-validator": "Zend\\Validator component"
     },
     "extra": {
         "branch-alias": {
-            "dev-master": "2.2-dev",
-            "dev-develop": "2.3-dev"
+            "dev-master": "2.3-dev",
+            "dev-develop": "2.4-dev"
         }
     }
 }
diff --git a/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/ArrayObject.php b/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/ArrayObject.php
index 2bebaf8dd93bf2cd514da75164c7dec3e1d62ae4..b4d9eb79d7c7e75412743401d2f92941c8e0abb3 100644
--- a/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/ArrayObject.php
+++ b/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/ArrayObject.php
@@ -9,26 +9,424 @@
 
 namespace Zend\Stdlib;
 
-/**
- * If the version is less than 5.3.4, we'll use Zend\Stdlib\ArrayObject\PhpLegacyCompatibility
- * which extends the native PHP ArrayObject implementation. For versions greater than or equal
- * to 5.3.4, we'll use Zend\Stdlib\ArrayObject\PhpReferenceCompatibility, which corrects
- * issues with how PHP handles references inside ArrayObject.
- *
- * class_alias is a global construct, so we can alias either one to Zend\Stdlib\ArrayObject,
- * and from this point forward, that alias will be used.
- */
-if (version_compare(PHP_VERSION, '5.3.4', 'lt')) {
-    class_alias('Zend\Stdlib\ArrayObject\PhpLegacyCompatibility', 'Zend\Stdlib\AbstractArrayObject');
-} else {
-    class_alias('Zend\Stdlib\ArrayObject\PhpReferenceCompatibility', 'Zend\Stdlib\AbstractArrayObject');
-}
+use ArrayAccess;
+use Countable;
+use IteratorAggregate;
+use Serializable;
 
 /**
  * Custom framework ArrayObject implementation
  *
  * Extends version-specific "abstract" implementation.
  */
-class ArrayObject extends AbstractArrayObject
+class ArrayObject implements IteratorAggregate, ArrayAccess, Serializable, Countable
 {
+    /**
+     * Properties of the object have their normal functionality
+     * when accessed as list (var_dump, foreach, etc.).
+     */
+    const STD_PROP_LIST = 1;
+
+    /**
+     * Entries can be accessed as properties (read and write).
+     */
+    const ARRAY_AS_PROPS = 2;
+
+    /**
+     * @var array
+     */
+    protected $storage;
+
+    /**
+     * @var int
+     */
+    protected $flag;
+
+    /**
+     * @var string
+     */
+    protected $iteratorClass;
+
+    /**
+     * @var array
+     */
+    protected $protectedProperties;
+
+    /**
+     * Constructor
+     *
+     * @param array  $input
+     * @param int    $flags
+     * @param string $iteratorClass
+     */
+    public function __construct($input = array(), $flags = self::STD_PROP_LIST, $iteratorClass = 'ArrayIterator')
+    {
+        $this->setFlags($flags);
+        $this->storage = $input;
+        $this->setIteratorClass($iteratorClass);
+        $this->protectedProperties = array_keys(get_object_vars($this));
+    }
+
+    /**
+     * Returns whether the requested key exists
+     *
+     * @param  mixed $key
+     * @return bool
+     */
+    public function __isset($key)
+    {
+        if ($this->flag == self::ARRAY_AS_PROPS) {
+            return $this->offsetExists($key);
+        }
+        if (in_array($key, $this->protectedProperties)) {
+            throw new Exception\InvalidArgumentException('$key is a protected property, use a different key');
+        }
+
+        return isset($this->$key);
+    }
+
+    /**
+     * Sets the value at the specified key to value
+     *
+     * @param  mixed $key
+     * @param  mixed $value
+     * @return void
+     */
+    public function __set($key, $value)
+    {
+        if ($this->flag == self::ARRAY_AS_PROPS) {
+            return $this->offsetSet($key, $value);
+        }
+        if (in_array($key, $this->protectedProperties)) {
+            throw new Exception\InvalidArgumentException('$key is a protected property, use a different key');
+        }
+        $this->$key = $value;
+    }
+
+    /**
+     * Unsets the value at the specified key
+     *
+     * @param  mixed $key
+     * @return void
+     */
+    public function __unset($key)
+    {
+        if ($this->flag == self::ARRAY_AS_PROPS) {
+            return $this->offsetUnset($key);
+        }
+        if (in_array($key, $this->protectedProperties)) {
+            throw new Exception\InvalidArgumentException('$key is a protected property, use a different key');
+        }
+        unset($this->$key);
+    }
+
+    /**
+     * Returns the value at the specified key by reference
+     *
+     * @param  mixed $key
+     * @return mixed
+     */
+    public function &__get($key)
+    {
+        $ret = null;
+        if ($this->flag == self::ARRAY_AS_PROPS) {
+            $ret =& $this->offsetGet($key);
+
+            return $ret;
+        }
+        if (in_array($key, $this->protectedProperties)) {
+            throw new Exception\InvalidArgumentException('$key is a protected property, use a different key');
+        }
+
+        return $this->$key;
+    }
+
+    /**
+     * Appends the value
+     *
+     * @param  mixed $value
+     * @return void
+     */
+    public function append($value)
+    {
+        $this->storage[] = $value;
+    }
+
+    /**
+     * Sort the entries by value
+     *
+     * @return void
+     */
+    public function asort()
+    {
+        asort($this->storage);
+    }
+
+    /**
+     * Get the number of public properties in the ArrayObject
+     *
+     * @return int
+     */
+    public function count()
+    {
+        return count($this->storage);
+    }
+
+    /**
+     * Exchange the array for another one.
+     *
+     * @param  array|ArrayObject $data
+     * @return array
+     */
+    public function exchangeArray($data)
+    {
+        if (!is_array($data) && !is_object($data)) {
+            throw new Exception\InvalidArgumentException('Passed variable is not an array or object, using empty array instead');
+        }
+
+        if (is_object($data) && ($data instanceof self || $data instanceof \ArrayObject)) {
+            $data = $data->getArrayCopy();
+        }
+        if (!is_array($data)) {
+            $data = (array) $data;
+        }
+
+        $storage = $this->storage;
+
+        $this->storage = $data;
+
+        return $storage;
+    }
+
+    /**
+     * Creates a copy of the ArrayObject.
+     *
+     * @return array
+     */
+    public function getArrayCopy()
+    {
+        return $this->storage;
+    }
+
+    /**
+     * Gets the behavior flags.
+     *
+     * @return int
+     */
+    public function getFlags()
+    {
+        return $this->flag;
+    }
+
+    /**
+     * Create a new iterator from an ArrayObject instance
+     *
+     * @return \Iterator
+     */
+    public function getIterator()
+    {
+        $class = $this->iteratorClass;
+
+        return new $class($this->storage);
+    }
+
+    /**
+     * Gets the iterator classname for the ArrayObject.
+     *
+     * @return string
+     */
+    public function getIteratorClass()
+    {
+        return $this->iteratorClass;
+    }
+
+    /**
+     * Sort the entries by key
+     *
+     * @return void
+     */
+    public function ksort()
+    {
+        ksort($this->storage);
+    }
+
+    /**
+     * Sort an array using a case insensitive "natural order" algorithm
+     *
+     * @return void
+     */
+    public function natcasesort()
+    {
+        natcasesort($this->storage);
+    }
+
+    /**
+     * Sort entries using a "natural order" algorithm
+     *
+     * @return void
+     */
+    public function natsort()
+    {
+        natsort($this->storage);
+    }
+
+    /**
+     * Returns whether the requested key exists
+     *
+     * @param  mixed $key
+     * @return bool
+     */
+    public function offsetExists($key)
+    {
+        return isset($this->storage[$key]);
+    }
+
+    /**
+     * Returns the value at the specified key
+     *
+     * @param  mixed $key
+     * @return mixed
+     */
+    public function &offsetGet($key)
+    {
+        $ret = null;
+        if (!$this->offsetExists($key)) {
+            return $ret;
+        }
+        $ret =& $this->storage[$key];
+
+        return $ret;
+    }
+
+    /**
+     * Sets the value at the specified key to value
+     *
+     * @param  mixed $key
+     * @param  mixed $value
+     * @return void
+     */
+    public function offsetSet($key, $value)
+    {
+        $this->storage[$key] = $value;
+    }
+
+    /**
+     * Unsets the value at the specified key
+     *
+     * @param  mixed $key
+     * @return void
+     */
+    public function offsetUnset($key)
+    {
+        if ($this->offsetExists($key)) {
+            unset($this->storage[$key]);
+        }
+    }
+
+    /**
+     * Serialize an ArrayObject
+     *
+     * @return string
+     */
+    public function serialize()
+    {
+        return serialize(get_object_vars($this));
+    }
+
+    /**
+     * Sets the behavior flags
+     *
+     * @param  int  $flags
+     * @return void
+     */
+    public function setFlags($flags)
+    {
+        $this->flag = $flags;
+    }
+
+    /**
+     * Sets the iterator classname for the ArrayObject
+     *
+     * @param  string $class
+     * @return void
+     */
+    public function setIteratorClass($class)
+    {
+        if (class_exists($class)) {
+            $this->iteratorClass = $class;
+
+            return ;
+        }
+
+        if (strpos($class, '\\') === 0) {
+            $class = '\\' . $class;
+            if (class_exists($class)) {
+                $this->iteratorClass = $class;
+
+                return ;
+            }
+        }
+
+        throw new Exception\InvalidArgumentException('The iterator class does not exist');
+    }
+
+    /**
+     * Sort the entries with a user-defined comparison function and maintain key association
+     *
+     * @param  callable $function
+     * @return void
+     */
+    public function uasort($function)
+    {
+        if (is_callable($function)) {
+            uasort($this->storage, $function);
+        }
+    }
+
+    /**
+     * Sort the entries by keys using a user-defined comparison function
+     *
+     * @param  callable $function
+     * @return void
+     */
+    public function uksort($function)
+    {
+        if (is_callable($function)) {
+            uksort($this->storage, $function);
+        }
+    }
+
+    /**
+     * Unserialize an ArrayObject
+     *
+     * @param  string $data
+     * @return void
+     */
+    public function unserialize($data)
+    {
+        $ar                        = unserialize($data);
+        $this->protectedProperties = array_keys(get_object_vars($this));
+
+        $this->setFlags($ar['flag']);
+        $this->exchangeArray($ar['storage']);
+        $this->setIteratorClass($ar['iteratorClass']);
+
+        foreach ($ar as $k => $v) {
+            switch ($k) {
+                case 'flag':
+                    $this->setFlags($v);
+                    break;
+                case 'storage':
+                    $this->exchangeArray($v);
+                    break;
+                case 'iteratorClass':
+                    $this->setIteratorClass($v);
+                    break;
+                case 'protectedProperties':
+                    continue;
+                default:
+                    $this->__set($k, $v);
+            }
+        }
+    }
 }
diff --git a/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/ArrayObject/PhpLegacyCompatibility.php b/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/ArrayObject/PhpLegacyCompatibility.php
deleted file mode 100644
index b34f21cb74c51c6f355d1771c6e9fe761d44fdc4..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/ArrayObject/PhpLegacyCompatibility.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\ArrayObject;
-
-use ArrayObject as PhpArrayObject;
-
-/**
- * ArrayObject
- *
- * Since we need to substitute an alternate ArrayObject implementation for
- * versions > 5.3.3, we need to provide a stub for 5.3.3. This stub
- * simply extends the PHP ArrayObject implementation, and provides default
- * behavior in the constructor.
- */
-abstract class PhpLegacyCompatibility extends PhpArrayObject
-{
-    /**
-     * Constructor
-     *
-     * @param array  $input
-     * @param int    $flags
-     * @param string $iteratorClass
-     */
-    public function __construct($input = array(), $flags = self::STD_PROP_LIST, $iteratorClass = 'ArrayIterator')
-    {
-        parent::__construct($input, $flags, $iteratorClass);
-    }
-}
diff --git a/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/ArrayObject/PhpReferenceCompatibility.php b/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/ArrayObject/PhpReferenceCompatibility.php
deleted file mode 100644
index a6d7b9abba447db93776fbcc68e10e8fc87073f5..0000000000000000000000000000000000000000
--- a/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/ArrayObject/PhpReferenceCompatibility.php
+++ /dev/null
@@ -1,433 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\ArrayObject;
-
-use ArrayAccess;
-use Countable;
-use IteratorAggregate;
-use Serializable;
-use Zend\Stdlib\Exception;
-
-/**
- * ArrayObject
- *
- * This ArrayObject is a rewrite of the implementation to fix
- * issues with php's implementation of ArrayObject where you
- * are unable to unset multi-dimensional arrays because you
- * need to fetch the properties / lists as references.
- */
-abstract class PhpReferenceCompatibility implements IteratorAggregate, ArrayAccess, Serializable, Countable
-{
-    /**
-     * Properties of the object have their normal functionality
-     * when accessed as list (var_dump, foreach, etc.).
-     */
-    const STD_PROP_LIST = 1;
-
-    /**
-     * Entries can be accessed as properties (read and write).
-     */
-    const ARRAY_AS_PROPS = 2;
-
-    /**
-     * @var array
-     */
-    protected $storage;
-
-    /**
-     * @var int
-     */
-    protected $flag;
-
-    /**
-     * @var string
-     */
-    protected $iteratorClass;
-
-    /**
-     * @var array
-     */
-    protected $protectedProperties;
-
-    /**
-     * Constructor
-     *
-     * @param array  $input
-     * @param int    $flags
-     * @param string $iteratorClass
-     */
-    public function __construct($input = array(), $flags = self::STD_PROP_LIST, $iteratorClass = 'ArrayIterator')
-    {
-        $this->setFlags($flags);
-        $this->storage = $input;
-        $this->setIteratorClass($iteratorClass);
-        $this->protectedProperties = array_keys(get_object_vars($this));
-    }
-
-    /**
-     * Returns whether the requested key exists
-     *
-     * @param  mixed $key
-     * @return bool
-     */
-    public function __isset($key)
-    {
-        if ($this->flag == self::ARRAY_AS_PROPS) {
-            return $this->offsetExists($key);
-        }
-        if (in_array($key, $this->protectedProperties)) {
-            throw new Exception\InvalidArgumentException('$key is a protected property, use a different key');
-        }
-
-        return isset($this->$key);
-    }
-
-    /**
-     * Sets the value at the specified key to value
-     *
-     * @param  mixed $key
-     * @param  mixed $value
-     * @return void
-     */
-    public function __set($key, $value)
-    {
-        if ($this->flag == self::ARRAY_AS_PROPS) {
-            return $this->offsetSet($key, $value);
-        }
-        if (in_array($key, $this->protectedProperties)) {
-            throw new Exception\InvalidArgumentException('$key is a protected property, use a different key');
-        }
-        $this->$key = $value;
-    }
-
-    /**
-     * Unsets the value at the specified key
-     *
-     * @param  mixed $key
-     * @return void
-     */
-    public function __unset($key)
-    {
-        if ($this->flag == self::ARRAY_AS_PROPS) {
-            return $this->offsetUnset($key);
-        }
-        if (in_array($key, $this->protectedProperties)) {
-            throw new Exception\InvalidArgumentException('$key is a protected property, use a different key');
-        }
-        unset($this->$key);
-    }
-
-    /**
-     * Returns the value at the specified key by reference
-     *
-     * @param  mixed $key
-     * @return mixed
-     */
-    public function &__get($key)
-    {
-        $ret = null;
-        if ($this->flag == self::ARRAY_AS_PROPS) {
-            $ret =& $this->offsetGet($key);
-
-            return $ret;
-        }
-        if (in_array($key, $this->protectedProperties)) {
-            throw new Exception\InvalidArgumentException('$key is a protected property, use a different key');
-        }
-
-        return $this->$key;
-    }
-
-    /**
-     * Appends the value
-     *
-     * @param  mixed $value
-     * @return void
-     */
-    public function append($value)
-    {
-        $this->storage[] = $value;
-    }
-
-    /**
-     * Sort the entries by value
-     *
-     * @return void
-     */
-    public function asort()
-    {
-        asort($this->storage);
-    }
-
-    /**
-     * Get the number of public properties in the ArrayObject
-     *
-     * @return int
-     */
-    public function count()
-    {
-        return count($this->storage);
-    }
-
-    /**
-     * Exchange the array for another one.
-     *
-     * @param  array|ArrayObject $data
-     * @return array
-     */
-    public function exchangeArray($data)
-    {
-        if (!is_array($data) && !is_object($data)) {
-            throw new Exception\InvalidArgumentException('Passed variable is not an array or object, using empty array instead');
-        }
-
-        if (is_object($data) && ($data instanceof self || $data instanceof \ArrayObject)) {
-            $data = $data->getArrayCopy();
-        }
-        if (!is_array($data)) {
-            $data = (array) $data;
-        }
-
-        $storage = $this->storage;
-
-        $this->storage = $data;
-
-        return $storage;
-    }
-
-    /**
-     * Creates a copy of the ArrayObject.
-     *
-     * @return array
-     */
-    public function getArrayCopy()
-    {
-        return $this->storage;
-    }
-
-    /**
-     * Gets the behavior flags.
-     *
-     * @return int
-     */
-    public function getFlags()
-    {
-        return $this->flag;
-    }
-
-    /**
-     * Create a new iterator from an ArrayObject instance
-     *
-     * @return \Iterator
-     */
-    public function getIterator()
-    {
-        $class = $this->iteratorClass;
-
-        return new $class($this->storage);
-    }
-
-    /**
-     * Gets the iterator classname for the ArrayObject.
-     *
-     * @return string
-     */
-    public function getIteratorClass()
-    {
-        return $this->iteratorClass;
-    }
-
-    /**
-     * Sort the entries by key
-     *
-     * @return void
-     */
-    public function ksort()
-    {
-        ksort($this->storage);
-    }
-
-    /**
-     * Sort an array using a case insensitive "natural order" algorithm
-     *
-     * @return void
-     */
-    public function natcasesort()
-    {
-        natcasesort($this->storage);
-    }
-
-    /**
-     * Sort entries using a "natural order" algorithm
-     *
-     * @return void
-     */
-    public function natsort()
-    {
-        natsort($this->storage);
-    }
-
-    /**
-     * Returns whether the requested key exists
-     *
-     * @param  mixed $key
-     * @return bool
-     */
-    public function offsetExists($key)
-    {
-        return isset($this->storage[$key]);
-    }
-
-    /**
-     * Returns the value at the specified key
-     *
-     * @param  mixed $key
-     * @return mixed
-     */
-    public function &offsetGet($key)
-    {
-        $ret = null;
-        if (!$this->offsetExists($key)) {
-            return $ret;
-        }
-        $ret =& $this->storage[$key];
-
-        return $ret;
-    }
-
-    /**
-     * Sets the value at the specified key to value
-     *
-     * @param  mixed $key
-     * @param  mixed $value
-     * @return void
-     */
-    public function offsetSet($key, $value)
-    {
-        $this->storage[$key] = $value;
-    }
-
-    /**
-     * Unsets the value at the specified key
-     *
-     * @param  mixed $key
-     * @return void
-     */
-    public function offsetUnset($key)
-    {
-        if ($this->offsetExists($key)) {
-            unset($this->storage[$key]);
-        }
-    }
-
-    /**
-     * Serialize an ArrayObject
-     *
-     * @return string
-     */
-    public function serialize()
-    {
-        return serialize(get_object_vars($this));
-    }
-
-    /**
-     * Sets the behavior flags
-     *
-     * @param  int  $flags
-     * @return void
-     */
-    public function setFlags($flags)
-    {
-        $this->flag = $flags;
-    }
-
-    /**
-     * Sets the iterator classname for the ArrayObject
-     *
-     * @param  string $class
-     * @return void
-     */
-    public function setIteratorClass($class)
-    {
-        if (class_exists($class)) {
-            $this->iteratorClass = $class;
-
-            return ;
-        }
-
-        if (strpos($class, '\\') === 0) {
-            $class = '\\' . $class;
-            if (class_exists($class)) {
-                $this->iteratorClass = $class;
-
-                return ;
-            }
-        }
-
-        throw new Exception\InvalidArgumentException('The iterator class does not exist');
-    }
-
-    /**
-     * Sort the entries with a user-defined comparison function and maintain key association
-     *
-     * @param  callable $function
-     * @return void
-     */
-    public function uasort($function)
-    {
-        if (is_callable($function)) {
-            uasort($this->storage, $function);
-        }
-    }
-
-    /**
-     * Sort the entries by keys using a user-defined comparison function
-     *
-     * @param  callable $function
-     * @return void
-     */
-    public function uksort($function)
-    {
-        if (is_callable($function)) {
-            uksort($this->storage, $function);
-        }
-    }
-
-    /**
-     * Unserialize an ArrayObject
-     *
-     * @param  string $data
-     * @return void
-     */
-    public function unserialize($data)
-    {
-        $ar = unserialize($data);
-        $this->setFlags($ar['flag']);
-        $this->exchangeArray($ar['storage']);
-        $this->setIteratorClass($ar['iteratorClass']);
-        foreach ($ar as $k => $v) {
-            switch ($k) {
-                case 'flag':
-                    $this->setFlags($v);
-                    break;
-                case 'storage':
-                    $this->exchangeArray($v);
-                    break;
-                case 'iteratorClass':
-                    $this->setIteratorClass($v);
-                    break;
-                case 'protectedProperties':
-                    continue;
-                default:
-                    $this->__set($k, $v);
-            }
-        }
-    }
-}
diff --git a/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/ArrayUtils.php b/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/ArrayUtils.php
index 1518e22e809139cbaba90c4b2d578d53e6f4cce2..8da7a9cdb8e9aad293989198746036c9e55595fe 100644
--- a/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/ArrayUtils.php
+++ b/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/ArrayUtils.php
@@ -245,23 +245,23 @@ public static function iteratorToArray($iterator, $recursive = true)
     /**
      * Merge two arrays together.
      *
-     * If an integer key exists in both arrays, the value from the second array
-     * will be appended the the first array. If both values are arrays, they
-     * are merged together, else the value of the second array overwrites the
-     * one of the first array.
+     * If an integer key exists in both arrays and preserveNumericKeys is false, the value
+     * from the second array will be appended to the first array. If both values are arrays, they
+     * are merged together, else the value of the second array overwrites the one of the first array.
      *
      * @param  array $a
      * @param  array $b
+     * @param  bool  $preserveNumericKeys
      * @return array
      */
-    public static function merge(array $a, array $b)
+    public static function merge(array $a, array $b, $preserveNumericKeys = false)
     {
         foreach ($b as $key => $value) {
             if (array_key_exists($key, $a)) {
-                if (is_int($key)) {
+                if (is_int($key) && !$preserveNumericKeys) {
                     $a[] = $value;
                 } elseif (is_array($value) && is_array($a[$key])) {
-                    $a[$key] = static::merge($a[$key], $value);
+                    $a[$key] = static::merge($a[$key], $value, $preserveNumericKeys);
                 } else {
                     $a[$key] = $value;
                 }
diff --git a/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/CONTRIBUTING.md b/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/CONTRIBUTING.md
new file mode 100644
index 0000000000000000000000000000000000000000..e77f5d2d5b37809160135bc2c6b6a51b6637d794
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/CONTRIBUTING.md
@@ -0,0 +1,3 @@
+# CONTRIBUTING
+
+Please don't open pull requests against this repository, please use https://github.com/zendframework/zf2.
\ No newline at end of file
diff --git a/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/CallbackHandler.php b/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/CallbackHandler.php
index 303558adfe2208466e10bff12631e62841105fba..fd74974ed73dfee6a658d42b18c601c7066c1612 100644
--- a/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/CallbackHandler.php
+++ b/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/CallbackHandler.php
@@ -14,7 +14,7 @@
 /**
  * CallbackHandler
  *
- * A handler for a event, event, filterchain, etc. Abstracts PHP callbacks,
+ * A handler for an event, event, filterchain, etc. Abstracts PHP callbacks,
  * primarily to allow for lazy-loading and ensuring availability of default
  * arguments (currying).
  */
diff --git a/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/ErrorHandler.php b/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/ErrorHandler.php
index 6a63ee22fc178ac90f1cefd56ca613dd1c585a51..d3255843c609764e82a13bf17bf66e48b4df6383 100644
--- a/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/ErrorHandler.php
+++ b/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/ErrorHandler.php
@@ -13,7 +13,7 @@
 
 /**
  * ErrorHandler that can be used to catch internal PHP errors
- * and convert to a ErrorException instance.
+ * and convert to an ErrorException instance.
  */
 abstract class ErrorHandler
 {
diff --git a/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Extractor/ExtractionInterface.php b/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Extractor/ExtractionInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..8913b099685bea87a507d98f6c272595be5e9f75
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Extractor/ExtractionInterface.php
@@ -0,0 +1,21 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\Extractor;
+
+interface ExtractionInterface
+{
+    /**
+     * Extract values from an object
+     *
+     * @param  object $object
+     * @return array
+     */
+    public function extract($object);
+}
diff --git a/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Guard/AllGuardsTrait.php b/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Guard/AllGuardsTrait.php
new file mode 100644
index 0000000000000000000000000000000000000000..60b341288a857afd7a7baf4064b5b809608d029e
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Guard/AllGuardsTrait.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\Guard;
+
+/**
+ * An aggregate for all guard traits
+ */
+trait AllGuardsTrait
+{
+    use ArrayOrTraversableGuardTrait;
+    use EmptyGuardTrait;
+    use NullGuardTrait;
+}
diff --git a/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Guard/ArrayOrTraversableGuardTrait.php b/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Guard/ArrayOrTraversableGuardTrait.php
new file mode 100644
index 0000000000000000000000000000000000000000..84e846ea3db50b786cdda48f845e9dda456418c9
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Guard/ArrayOrTraversableGuardTrait.php
@@ -0,0 +1,41 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\Guard;
+
+use Traversable;
+
+/**
+ * Provide a guard method for array or Traversable data
+ */
+trait ArrayOrTraversableGuardTrait
+{
+    /**
+     * Verifies that the data is an array or Traversable
+     *
+     * @param  mixed  $data           the data to verify
+     * @param  string $dataName       the data name
+     * @param  string $exceptionClass FQCN for the exception
+     * @throws \Exception
+     */
+    protected function guardForArrayOrTraversable(
+        $data,
+        $dataName = 'Argument',
+        $exceptionClass = 'Zend\Stdlib\Exception\InvalidArgumentException'
+    ) {
+        if (!is_array($data) && !($data instanceof Traversable)) {
+            $message = sprintf(
+                "%s must be an array or Traversable, [%s] given",
+                $dataName,
+                is_object($data) ? get_class($data) : gettype($data)
+            );
+            throw new $exceptionClass($message);
+        }
+    }
+}
diff --git a/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Guard/EmptyGuardTrait.php b/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Guard/EmptyGuardTrait.php
new file mode 100644
index 0000000000000000000000000000000000000000..72f5b3459e0da8f23489dfb9726bcf9426a82a99
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Guard/EmptyGuardTrait.php
@@ -0,0 +1,35 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\Guard;
+
+/**
+ * Provide a guard method against empty data
+ */
+trait EmptyGuardTrait
+{
+    /**
+     * Verify that the data is not empty
+     *
+     * @param  mixed  $data           the data to verify
+     * @param  string $dataName       the data name
+     * @param  string $exceptionClass FQCN for the exception
+     * @throws \Exception
+     */
+    protected function guardAgainstEmpty(
+        $data,
+        $dataName = 'Argument',
+        $exceptionClass = 'Zend\Stdlib\Exception\InvalidArgumentException'
+    ) {
+        if (empty($data)) {
+            $message = sprintf('%s cannot be empty', $dataName);
+            throw new $exceptionClass($message);
+        }
+    }
+}
diff --git a/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Guard/GuardUtils.php b/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Guard/GuardUtils.php
new file mode 100644
index 0000000000000000000000000000000000000000..31c44641023a071a9db1f3423ca08f1fd805dcc0
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Guard/GuardUtils.php
@@ -0,0 +1,85 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\Guard;
+
+use Traversable;
+
+/**
+ * Static guard helper class
+ *
+ * Bridges the gap for allowing refactoring until traits can be used by default.
+ *
+ * @deprecated
+ */
+abstract class GuardUtils
+{
+    const DEFAULT_EXCEPTION_CLASS = 'Zend\Stdlib\Exception\InvalidArgumentException';
+
+    /**
+     * Verifies that the data is an array or Traversable
+     *
+     * @param  mixed  $data           the data to verify
+     * @param  string $dataName       the data name
+     * @param  string $exceptionClass FQCN for the exception
+     * @throws \Exception
+     */
+    public static function guardForArrayOrTraversable(
+        $data,
+        $dataName = 'Argument',
+        $exceptionClass = self::DEFAULT_EXCEPTION_CLASS
+    ) {
+        if (!is_array($data) && !($data instanceof Traversable)) {
+            $message = sprintf(
+                '%s must be an array or Traversable, [%s] given',
+                $dataName,
+                is_object($data) ? get_class($data) : gettype($data)
+            );
+            throw new $exceptionClass($message);
+        }
+    }
+
+    /**
+     * Verify that the data is not empty
+     *
+     * @param  mixed  $data           the data to verify
+     * @param  string $dataName       the data name
+     * @param  string $exceptionClass FQCN for the exception
+     * @throws \Exception
+     */
+    public static function guardAgainstEmpty(
+        $data,
+        $dataName = 'Argument',
+        $exceptionClass = self::DEFAULT_EXCEPTION_CLASS
+    ) {
+        if (empty($data)) {
+            $message = sprintf('%s cannot be empty', $dataName);
+            throw new $exceptionClass($message);
+        }
+    }
+
+    /**
+     * Verify that the data is not null
+     *
+     * @param  mixed  $data           the data to verify
+     * @param  string $dataName       the data name
+     * @param  string $exceptionClass FQCN for the exception
+     * @throws \Exception
+     */
+    public static function guardAgainstNull(
+        $data,
+        $dataName = 'Argument',
+        $exceptionClass = self::DEFAULT_EXCEPTION_CLASS
+    ) {
+        if (null === $data) {
+            $message = sprintf('%s cannot be null', $dataName);
+            throw new $exceptionClass($message);
+        }
+    }
+}
diff --git a/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Guard/NullGuardTrait.php b/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Guard/NullGuardTrait.php
new file mode 100644
index 0000000000000000000000000000000000000000..e7aadb150b2ee255b5fe305cdc0d893e05bc96f8
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Guard/NullGuardTrait.php
@@ -0,0 +1,35 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\Guard;
+
+/**
+ * Provide a guard method against null data
+ */
+trait NullGuardTrait
+{
+    /**
+     * Verify that the data is not null
+     *
+     * @param  mixed  $data           the data to verify
+     * @param  string $dataName       the data name
+     * @param  string $exceptionClass FQCN for the exception
+     * @throws \Exception
+     */
+    protected function guardAgainstNull(
+        $data,
+        $dataName = 'Argument',
+        $exceptionClass = 'Zend\Stdlib\Exception\InvalidArgumentException'
+    ) {
+        if (null === $data) {
+            $message = sprintf('%s cannot be null', $dataName);
+            throw new $exceptionClass($message);
+        }
+    }
+}
diff --git a/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Hydrator/AbstractHydrator.php b/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Hydrator/AbstractHydrator.php
index 6397a86a017dced81a8b4250d98ad2dc0d91cd59..fc07ae4daa914c0472b78afee6b5e401d8adbbfa 100644
--- a/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Hydrator/AbstractHydrator.php
+++ b/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Hydrator/AbstractHydrator.php
@@ -12,9 +12,14 @@
 use ArrayObject;
 use Zend\Stdlib\Exception;
 use Zend\Stdlib\Hydrator\Filter\FilterComposite;
+use Zend\Stdlib\Hydrator\NamingStrategy\NamingStrategyInterface;
 use Zend\Stdlib\Hydrator\Strategy\StrategyInterface;
 
-abstract class AbstractHydrator implements HydratorInterface, StrategyEnabledInterface
+abstract class AbstractHydrator implements
+    HydratorInterface,
+    StrategyEnabledInterface,
+    FilterEnabledInterface,
+    NamingStrategyEnabledInterface
 {
     /**
      * The list with strategies that this hydrator has.
@@ -23,8 +28,16 @@ abstract class AbstractHydrator implements HydratorInterface, StrategyEnabledInt
      */
     protected $strategies;
 
+    /**
+     * An instance of NamingStrategyInterface
+     *
+     * @var NamingStrategyInterface
+     */
+    protected $namingStrategy;
+
     /**
      * Composite to filter the methods, that need to be hydrated
+     *
      * @var Filter\FilterComposite
      */
     protected $filterComposite;
@@ -42,6 +55,8 @@ public function __construct()
      * Gets the strategy with the given name.
      *
      * @param string $name The name of the strategy to get.
+     *
+     * @throws \Zend\Stdlib\Exception\InvalidArgumentException
      * @return StrategyInterface
      */
     public function getStrategy($name)
@@ -103,7 +118,7 @@ public function removeStrategy($name)
      *
      * @param  string $name  The name of the strategy to use.
      * @param  mixed  $value  The value that should be converted.
-     * @param  array  $object The object is optionally provided as context.
+     * @param  mixed  $object The object is optionally provided as context.
      * @return mixed
      */
     public function extractValue($name, $value, $object = null)
@@ -132,6 +147,36 @@ public function hydrateValue($name, $value, $data = null)
         return $value;
     }
 
+    /**
+     * Convert a name for extraction. If no naming strategy exists, the plain value is returned.
+     *
+     * @param string $name    The name to convert.
+     * @param null   $object  The object is optionally provided as context.
+     * @return mixed
+     */
+    public function extractName($name, $object = null)
+    {
+        if ($this->hasNamingStrategy()) {
+            $name = $this->getNamingStrategy()->extract($name, $object);
+        }
+        return $name;
+    }
+
+    /**
+     * Converts a value for hydration. If no naming strategy exists, the plain value is returned.
+     *
+     * @param string $name  The name to convert.
+     * @param array  $data  The whole data is optionally provided as context.
+     * @return mixed
+     */
+    public function hydrateName($name, $data = null)
+    {
+        if ($this->hasNamingStrategy()) {
+            $name = $this->getNamingStrategy()->hydrate($name, $data);
+        }
+        return $name;
+    }
+
     /**
      * Get the filter instance
      *
@@ -194,4 +239,49 @@ public function removeFilter($name)
     {
         return $this->filterComposite->removeFilter($name);
     }
+
+    /**
+     * Adds the given naming strategy
+     *
+     * @param NamingStrategyInterface $strategy The naming to register.
+     * @return self
+     */
+    public function setNamingStrategy(NamingStrategyInterface $strategy)
+    {
+        $this->namingStrategy = $strategy;
+
+        return $this;
+    }
+
+    /**
+     * Gets the naming strategy.
+     *
+     * @return NamingStrategyInterface
+     */
+    public function getNamingStrategy()
+    {
+        return $this->namingStrategy;
+    }
+
+    /**
+     * Checks if a naming strategy exists.
+     *
+     * @return bool
+     */
+    public function hasNamingStrategy()
+    {
+        return isset($this->namingStrategy);
+    }
+
+    /**
+     * Removes the naming strategy
+     *
+     * @return self
+     */
+    public function removeNamingStrategy()
+    {
+        $this->namingStrategy = null;
+
+        return $this;
+    }
 }
diff --git a/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Hydrator/ArraySerializable.php b/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Hydrator/ArraySerializable.php
index 6331af0087fcff7a88144e112b5f276ddb864c7c..7a3581107d3e21dca78a7873087787bcb6e6f756 100644
--- a/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Hydrator/ArraySerializable.php
+++ b/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Hydrator/ArraySerializable.php
@@ -32,14 +32,20 @@ public function extract($object)
         }
 
         $data = $object->getArrayCopy();
+        $filter = $this->getFilter();
 
         foreach ($data as $name => $value) {
-            if (!$this->getFilter()->filter($name)) {
+            if (!$filter->filter($name)) {
                 unset($data[$name]);
                 continue;
             }
-
-            $data[$name] = $this->extractValue($name, $value);
+            $extractedName = $this->extractName($name, $object);
+            // replace the original key with extracted, if differ
+            if ($extractedName !== $name) {
+                unset($data[$name]);
+                $name = $extractedName;
+            }
+            $data[$name] = $this->extractValue($name, $value, $object);
         }
 
         return $data;
@@ -58,15 +64,16 @@ public function extract($object)
      */
     public function hydrate(array $data, $object)
     {
-        $self = $this;
-        array_walk($data, function (&$value, $name) use ($self) {
-            $value = $self->hydrateValue($name, $value);
-        });
+        $replacement = array();
+        foreach ($data as $key => $value) {
+            $name = $this->hydrateName($key, $data);
+            $replacement[$name] = $this->hydrateValue($name, $value, $data);
+        }
 
         if (is_callable(array($object, 'exchangeArray'))) {
-            $object->exchangeArray($data);
+            $object->exchangeArray($replacement);
         } elseif (is_callable(array($object, 'populate'))) {
-            $object->populate($data);
+            $object->populate($replacement);
         } else {
             throw new Exception\BadMethodCallException(sprintf(
                 '%s expects the provided object to implement exchangeArray() or populate()', __METHOD__
diff --git a/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Hydrator/ClassMethods.php b/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Hydrator/ClassMethods.php
index ec3fc6ffb9fdcc72ff6844eb21bdad006f030bf9..7ea4a248b95ed95cd043c74a7aa8b3e8ebdb0600 100644
--- a/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Hydrator/ClassMethods.php
+++ b/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Hydrator/ClassMethods.php
@@ -19,6 +19,7 @@
 use Zend\Stdlib\Hydrator\Filter\IsFilter;
 use Zend\Stdlib\Hydrator\Filter\MethodMatchFilter;
 use Zend\Stdlib\Hydrator\Filter\OptionalParametersFilter;
+use Zend\Stdlib\Hydrator\NamingStrategy\UnderscoreNamingStrategy;
 
 class ClassMethods extends AbstractHydrator implements HydratorOptionsInterface
 {
@@ -77,7 +78,13 @@ public function setOptions($options)
      */
     public function setUnderscoreSeparatedKeys($underscoreSeparatedKeys)
     {
-        $this->underscoreSeparatedKeys = $underscoreSeparatedKeys;
+        $this->underscoreSeparatedKeys = (bool) $underscoreSeparatedKeys;
+
+        if ($this->underscoreSeparatedKeys) {
+            $this->setNamingStrategy(new UnderscoreNamingStrategy);
+        } elseif ($this->getNamingStrategy() instanceof UnderscoreNamingStrategy) {
+            $this->removeNamingStrategy();
+        }
 
         return $this;
     }
@@ -117,11 +124,6 @@ public function extract($object)
             $filter = $this->filterComposite;
         }
 
-        $transform = function ($letters) {
-            $letter = array_shift($letters);
-
-            return '_' . strtolower($letter);
-        };
         $attributes = array();
         $methods = get_class_methods($object);
 
@@ -146,9 +148,7 @@ public function extract($object)
                 }
             }
 
-            if ($this->underscoreSeparatedKeys) {
-                $attribute = preg_replace_callback('/([A-Z])/', $transform, $attribute);
-            }
+            $attribute = $this->extractName($attribute, $object);
             $attributes[$attribute] = $this->extractValue($attribute, $object->$method(), $object);
         }
 
@@ -173,17 +173,8 @@ public function hydrate(array $data, $object)
             ));
         }
 
-        $transform = function ($letters) {
-            $letter = substr(array_shift($letters), 1, 1);
-
-            return ucfirst($letter);
-        };
-
         foreach ($data as $property => $value) {
-            $method = 'set' . ucfirst($property);
-            if ($this->underscoreSeparatedKeys) {
-                $method = preg_replace_callback('/(_[a-z])/i', $transform, $method);
-            }
+            $method = 'set' . ucfirst($this->hydrateName($property, $data));
             if (is_callable(array($object, $method))) {
                 $value = $this->hydrateValue($property, $value, $data);
                 $object->$method($value);
diff --git a/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Hydrator/Filter/NumberOfParameterFilter.php b/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Hydrator/Filter/NumberOfParameterFilter.php
index 25ed587dbd988690ad7d2755fd5250f36f11212e..3d153e3adb90830d75509661a060a4a22e423d61 100644
--- a/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Hydrator/Filter/NumberOfParameterFilter.php
+++ b/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Hydrator/Filter/NumberOfParameterFilter.php
@@ -26,7 +26,7 @@ class NumberOfParameterFilter implements FilterInterface
      */
     public function __construct($numberOfParameters = 0)
     {
-        $this->numberOfParameters = 0;
+        $this->numberOfParameters = (int) $numberOfParameters;
     }
 
     /**
@@ -44,10 +44,6 @@ public function filter($property)
             );
         }
 
-        if ($reflectionMethod->getNumberOfParameters() !== $this->numberOfParameters) {
-            return false;
-        }
-
-        return true;
+        return $reflectionMethod->getNumberOfParameters() === $this->numberOfParameters;
     }
 }
diff --git a/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Hydrator/Filter/OptionalParametersFilter.php b/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Hydrator/Filter/OptionalParametersFilter.php
index b78a21b1d25f2b46117dc2f8496f2353f439a4a8..46401590506c5622b1a81a921960541ae3a6bc80 100644
--- a/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Hydrator/Filter/OptionalParametersFilter.php
+++ b/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Hydrator/Filter/OptionalParametersFilter.php
@@ -25,7 +25,7 @@ class OptionalParametersFilter implements FilterInterface
      *
      * @var bool[]
      */
-    private static $propertiesCache = array();
+    protected static $propertiesCache = array();
 
     /**
      * {@inheritDoc}
diff --git a/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Hydrator/FilterEnabledInterface.php b/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Hydrator/FilterEnabledInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..04505bb2cb8c72a242fb092b057a732c5517997f
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Hydrator/FilterEnabledInterface.php
@@ -0,0 +1,63 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\Hydrator;
+
+use Zend\Stdlib\Hydrator\Filter\FilterInterface;
+use Zend\Stdlib\Hydrator\Filter\FilterComposite;
+use Zend\Stdlib\Hydrator\Filter\FilterProviderInterface;
+
+interface FilterEnabledInterface extends FilterProviderInterface
+{
+    /**
+     * Add a new filter to take care of what needs to be hydrated.
+     * To exclude e.g. the method getServiceLocator:
+     *
+     * <code>
+     * $composite->addFilter(
+     *     "servicelocator",
+     *     function ($property) {
+     *         list($class, $method) = explode('::', $property);
+     *         if ($method === 'getServiceLocator') {
+     *             return false;
+     *         }
+     *         return true;
+     *     },
+     *     FilterComposite::CONDITION_AND
+     * );
+     * </code>
+     *
+     * @param string $name Index in the composite
+     * @param callable|FilterInterface $filter
+     * @param int $condition
+     * @return FilterComposite
+     */
+    public function addFilter($name, $filter, $condition = FilterComposite::CONDITION_OR);
+
+    /**
+     * Check whether a specific filter exists at key $name or not
+     *
+     * @param string $name Index in the composite
+     * @return bool
+     */
+    public function hasFilter($name);
+
+    /**
+     * Remove a filter from the composition.
+     * To not extract "has" methods, you simply need to unregister it
+     *
+     * <code>
+     * $filterComposite->removeFilter('has');
+     * </code>
+     *
+     * @param $name
+     * @return FilterComposite
+     */
+    public function removeFilter($name);
+}
diff --git a/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Hydrator/HydrationInterface.php b/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Hydrator/HydrationInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..340a7663b9f52f1084274b0fcf97e6e488f2e6e6
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Hydrator/HydrationInterface.php
@@ -0,0 +1,22 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\Hydrator;
+
+interface HydrationInterface
+{
+    /**
+     * Hydrate $object with the provided $data.
+     *
+     * @param  array $data
+     * @param  object $object
+     * @return object
+     */
+    public function hydrate(array $data, $object);
+}
diff --git a/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Hydrator/HydratorAwareTrait.php b/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Hydrator/HydratorAwareTrait.php
new file mode 100644
index 0000000000000000000000000000000000000000..94df73070c2c6302ce7766cec9f6eeeef5832a9c
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Hydrator/HydratorAwareTrait.php
@@ -0,0 +1,47 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\Hydrator;
+
+trait HydratorAwareTrait
+{
+    /**
+     * Hydrator instance
+     *
+     * @var HydratorInterface
+     * @access protected
+     */
+    protected $hydrator = null;
+
+    /**
+     * Set hydrator
+     *
+     * @param  HydratorInterface $hydrator
+     * @return self
+     * @access public
+     */
+    public function setHydrator(HydratorInterface $hydrator)
+    {
+        $this->hydrator = $hydrator;
+
+        return $this;
+    }
+
+    /**
+     * Retrieve hydrator
+     *
+     * @param void
+     * @return null|HydratorInterface
+     * @access public
+     */
+    public function getHydrator()
+    {
+        return $this->hydrator;
+    }
+}
diff --git a/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Hydrator/HydratorInterface.php b/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Hydrator/HydratorInterface.php
index 7d65bb085104fafe585a11713bffb100881bcae7..8596143dab52b0a4121fd2b1a8876c48fff7c034 100644
--- a/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Hydrator/HydratorInterface.php
+++ b/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Hydrator/HydratorInterface.php
@@ -9,22 +9,9 @@
 
 namespace Zend\Stdlib\Hydrator;
 
-interface HydratorInterface
+use Zend\Stdlib\Extractor\ExtractionInterface;
+
+interface HydratorInterface extends HydrationInterface, ExtractionInterface
 {
-    /**
-     * Extract values from an object
-     *
-     * @param  object $object
-     * @return array
-     */
-    public function extract($object);
 
-    /**
-     * Hydrate $object with the provided $data.
-     *
-     * @param  array $data
-     * @param  object $object
-     * @return object
-     */
-    public function hydrate(array $data, $object);
 }
diff --git a/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Hydrator/NamingStrategy/NamingStrategyInterface.php b/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Hydrator/NamingStrategy/NamingStrategyInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..dacca1197c5a413cf3271e8f8665ab2d59a09a11
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Hydrator/NamingStrategy/NamingStrategyInterface.php
@@ -0,0 +1,37 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\Hydrator\NamingStrategy;
+
+/**
+ * Allow property extraction / hydration for hydrator
+ *
+ * Interface PropertyStrategyInterface
+ * @package Zend\Stdlib\Hydrator\NamingStrategy
+ */
+interface NamingStrategyInterface
+{
+    /**
+     * Converts the given name so that it can be extracted by the hydrator.
+     *
+     * @param string $name   The original name
+     * @param object $object (optional) The original object for context.
+     * @return mixed         The hydrated name
+     */
+    public function hydrate($name);
+
+    /**
+     * Converts the given name so that it can be hydrated by the hydrator.
+     *
+     * @param string $name The original name
+     * @param array  $data (optional) The original data for context.
+     * @return mixed The extracted name
+     */
+    public function extract($name);
+}
diff --git a/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Hydrator/NamingStrategy/UnderscoreNamingStrategy.php b/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Hydrator/NamingStrategy/UnderscoreNamingStrategy.php
new file mode 100644
index 0000000000000000000000000000000000000000..c6eceb5316a21f1ecc5ee9bb6e6c6a34a7d25c4a
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Hydrator/NamingStrategy/UnderscoreNamingStrategy.php
@@ -0,0 +1,72 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\Hydrator\NamingStrategy;
+
+use Zend\Filter\FilterChain;
+
+class UnderscoreNamingStrategy implements NamingStrategyInterface
+{
+    protected static $camelCaseToUnderscoreFilter;
+
+    protected static $underscoreToCamelCaseFilter;
+
+    /**
+     * Remove underscores and capitalize letters
+     *
+     * @param  string $name
+     * @return string
+     */
+    public function hydrate($name)
+    {
+        return lcfirst($this->getUnderscoreToCamelCaseFilter()->filter($name));
+    }
+
+    /**
+     * Remove capitalized letters and prepend underscores.
+     *
+     * @param  string $name
+     * @return string
+     */
+    public function extract($name)
+    {
+        return $this->getCamelCaseToUnderscoreFilter()->filter($name);
+    }
+
+    /**
+     * @return FilterChain
+     */
+    protected function getUnderscoreToCamelCaseFilter()
+    {
+        if (static::$underscoreToCamelCaseFilter instanceof FilterChain) {
+            return static::$underscoreToCamelCaseFilter;
+        }
+
+        $filter = new FilterChain();
+        $filter->attachByName('WordUnderscoreToCamelCase');
+        static::$underscoreToCamelCaseFilter = $filter;
+        return $filter;
+    }
+
+    /**
+     * @return FilterChain
+     */
+    protected function getCamelCaseToUnderscoreFilter()
+    {
+        if (static::$camelCaseToUnderscoreFilter instanceof FilterChain) {
+            return static::$camelCaseToUnderscoreFilter;
+        }
+
+        $filter = new FilterChain();
+        $filter->attachByName('WordCamelCaseToUnderscore');
+        $filter->attachByName('StringToLower');
+        static::$camelCaseToUnderscoreFilter = $filter;
+        return $filter;
+    }
+}
diff --git a/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Hydrator/NamingStrategyEnabledInterface.php b/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Hydrator/NamingStrategyEnabledInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..ab1ce7f1c069a6a3f841a7f9ee8318e453b5ccdf
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Hydrator/NamingStrategyEnabledInterface.php
@@ -0,0 +1,44 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\Hydrator;
+
+use Zend\Stdlib\Hydrator\NamingStrategy\NamingStrategyInterface;
+
+interface NamingStrategyEnabledInterface
+{
+    /**
+     * Adds the given naming strategy
+     *
+     * @param NamingStrategyInterface $strategy The naming to register.
+     * @return NamingStrategyEnabledInterface
+     */
+    public function setNamingStrategy(NamingStrategyInterface $strategy);
+
+    /**
+     * Gets the naming strategy.
+     *
+     * @return NamingStrategyInterface
+     */
+    public function getNamingStrategy();
+
+    /**
+     * Checks if a naming strategy exists.
+     *
+     * @return bool
+     */
+    public function hasNamingStrategy();
+
+    /**
+     * Removes the naming with the given name.
+     *
+     * @return NamingStrategyEnabledInterface
+     */
+    public function removeNamingStrategy();
+}
diff --git a/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Hydrator/ObjectProperty.php b/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Hydrator/ObjectProperty.php
index c53dafb156a87e55f8cb096bd7976d90cb07810e..20c97c4a24996f9f07c64d22defeae7e930a7f21 100644
--- a/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Hydrator/ObjectProperty.php
+++ b/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Hydrator/ObjectProperty.php
@@ -39,8 +39,13 @@ public function extract($object)
                 unset($data[$name]);
                 continue;
             }
-            // Extract data
-            $data[$name] = $this->extractValue($name, $value);
+            // Replace name if extracted differ
+            $extracted = $this->extractName($name, $object);
+            if ($extracted !== $name) {
+                unset($data[$name]);
+                $name = $extracted;
+            }
+            $data[$name] = $this->extractValue($name, $value, $object);
         }
 
         return $data;
@@ -63,7 +68,8 @@ public function hydrate(array $data, $object)
                 '%s expects the provided $object to be a PHP object)', __METHOD__
             ));
         }
-        foreach ($data as $property => $value) {
+        foreach ($data as $name => $value) {
+            $property = $this->hydrateName($name, $data);
             $object->$property = $this->hydrateValue($property, $value, $data);
         }
         return $object;
diff --git a/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Hydrator/Reflection.php b/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Hydrator/Reflection.php
index 3e9cfd0cc2231f54a543dd5d47efd2e729620ef4..3c066e9634e01dcea98c38dd24d82c7e70ed322f 100644
--- a/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Hydrator/Reflection.php
+++ b/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Hydrator/Reflection.php
@@ -30,7 +30,7 @@ public function extract($object)
     {
         $result = array();
         foreach (self::getReflProperties($object) as $property) {
-            $propertyName = $property->getName();
+            $propertyName = $this->extractName($property->getName(), $object);
             if (!$this->filterComposite->filter($propertyName)) {
                 continue;
             }
@@ -53,8 +53,9 @@ public function hydrate(array $data, $object)
     {
         $reflProperties = self::getReflProperties($object);
         foreach ($data as $key => $value) {
-            if (isset($reflProperties[$key])) {
-                $reflProperties[$key]->setValue($object, $this->hydrateValue($key, $value, $data));
+            $name = $this->hydrateName($key, $data);
+            if (isset($reflProperties[$name])) {
+                $reflProperties[$name]->setValue($object, $this->hydrateValue($name, $value, $data));
             }
         }
         return $object;
diff --git a/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Hydrator/Strategy/ClosureStrategy.php b/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Hydrator/Strategy/ClosureStrategy.php
index a5cb3413a4bb017b1b156dcd8802184847dd5df8..6360c868ded05077aacc6c99b0193e2266f31fdf 100644
--- a/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Hydrator/Strategy/ClosureStrategy.php
+++ b/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Hydrator/Strategy/ClosureStrategy.php
@@ -75,26 +75,28 @@ public function __construct($extractFunc = null, $hydrateFunc = null)
     /**
      * Converts the given value so that it can be extracted by the hydrator.
      *
-     * @param mixed $value The original value.
+     * @param  mixed $value  The original value.
+     * @param  array $object The object is optionally provided as context.
      * @return mixed Returns the value that should be extracted.
      */
-    public function extract($value)
+    public function extract($value, $object = null)
     {
         $func = $this->extractFunc;
 
-        return $func($value);
+        return $func($value, $object);
     }
 
     /**
      * Converts the given value so that it can be hydrated by the hydrator.
      *
-     * @param mixed $value The original value.
+     * @param  mixed $value The original value.
+     * @param  array $data  The whole data is optionally provided as context.
      * @return mixed Returns the value that should be hydrated.
      */
-    public function hydrate($value)
+    public function hydrate($value, $data = null)
     {
         $func = $this->hydrateFunc;
 
-        return $func($value);
+        return $func($value, $data);
     }
 }
diff --git a/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/JsonSerializable.php b/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/JsonSerializable.php
new file mode 100644
index 0000000000000000000000000000000000000000..9d00b3560d5ca614c66366125398d51c098c9a34
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/JsonSerializable.php
@@ -0,0 +1,28 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib;
+
+if (PHP_VERSION_ID < 50400) {
+    class_alias(
+        'Zend\Stdlib\JsonSerializable\PhpLegacyCompatibility',
+        'JsonSerializable'
+    );
+}
+
+/**
+ * Polyfill for JsonSerializable
+ *
+ * JsonSerializable was introduced in PHP 5.4.0.
+ *
+ * @see http://php.net/manual/class.jsonserializable.php
+ */
+interface JsonSerializable extends \JsonSerializable
+{
+}
diff --git a/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/JsonSerializable/PhpLegacyCompatibility.php b/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/JsonSerializable/PhpLegacyCompatibility.php
new file mode 100644
index 0000000000000000000000000000000000000000..a590cab677e684e554e2d892d0f43f00cffd9bd8
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/JsonSerializable/PhpLegacyCompatibility.php
@@ -0,0 +1,28 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib\JsonSerializable;
+
+/**
+ * Interface compatible with the built-in JsonSerializable interface
+ *
+ * JsonSerializable was introduced in PHP 5.4.0.
+ *
+ * @see http://php.net/manual/class.jsonserializable.php
+ */
+interface PhpLegacyCompatibility
+{
+    /**
+     * Returns data which can be serialized by json_encode().
+     *
+     * @return mixed
+     * @see    http://php.net/manual/jsonserializable.jsonserialize.php
+     */
+    public function jsonSerialize();
+}
diff --git a/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Parameters.php b/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Parameters.php
index e33e4e482c2579fc91eb74f7d85fa5fc62c579ac..8347553f97491d56c81b0d802269a4f6758a0157 100644
--- a/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Parameters.php
+++ b/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/Parameters.php
@@ -83,7 +83,7 @@ public function toString()
      */
     public function offsetGet($name)
     {
-        if (isset($this[$name])) {
+          if ($this->offsetExists($name)) {
             return parent::offsetGet($name);
         }
         return null;
@@ -96,7 +96,7 @@ public function offsetGet($name)
      */
     public function get($name, $default = null)
     {
-        if (isset($this[$name])) {
+        if ($this->offsetExists($name)) {
             return parent::offsetGet($name);
         }
         return $default;
diff --git a/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/PriorityList.php b/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/PriorityList.php
new file mode 100644
index 0000000000000000000000000000000000000000..1664e193280df9cdb9ac30d2575ddde6846ad5d9
--- /dev/null
+++ b/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/PriorityList.php
@@ -0,0 +1,263 @@
+<?php
+/**
+ * Zend Framework (http://framework.zend.com/)
+ *
+ * @link      http://github.com/zendframework/zf2 for the canonical source repository
+ * @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd New BSD License
+ */
+
+namespace Zend\Stdlib;
+
+use Countable;
+use Iterator;
+
+/**
+ * Priority list
+ */
+class PriorityList implements Iterator, Countable
+{
+    const EXTR_DATA     = 0x00000001;
+    const EXTR_PRIORITY = 0x00000002;
+    const EXTR_BOTH     = 0x00000003;
+    /**
+     * Internal list of all items.
+     *
+     * @var array
+     */
+    protected $items = array();
+
+    /**
+     * Serial assigned to items to preserve LIFO.
+     *
+     * @var int
+     */
+    protected $serial = 0;
+
+    /**
+     * Serial order mode
+     * @var integer
+     */
+    protected $isLIFO = 1;
+
+    /**
+     * Internal counter to avoid usage of count().
+     *
+     * @var int
+     */
+    protected $count = 0;
+
+    /**
+     * Whether the list was already sorted.
+     *
+     * @var bool
+     */
+    protected $sorted = false;
+
+    /**
+     * Insert a new item.
+     *
+     * @param  string  $name
+     * @param  mixed $value
+     * @param  int $priority
+     * @return void
+     */
+    public function insert($name, $value, $priority = 0)
+    {
+        $this->sorted = false;
+        $this->count++;
+
+        $this->items[$name] = array(
+            'data'     => $value,
+            'priority' => (int) $priority,
+            'serial'   => $this->serial++,
+        );
+    }
+
+    public function setPriority($name, $priority)
+    {
+        if (!isset($this->items[$name])) {
+            throw new \Exception("item $name not found");
+        }
+        $this->items[$name]['priority'] = (int) $priority;
+        $this->sorted = false;
+        return $this;
+    }
+
+    /**
+     * Remove a item.
+     *
+     * @param  string $name
+     * @return void
+     */
+    public function remove($name)
+    {
+        if (!isset($this->items[$name])) {
+            return;
+        }
+
+        $this->count--;
+        unset($this->items[$name]);
+    }
+
+    /**
+     * Remove all items.
+     *
+     * @return void
+     */
+    public function clear()
+    {
+        $this->items = array();
+        $this->serial = 0;
+        $this->count  = 0;
+        $this->sorted = false;
+    }
+
+    /**
+     * Get a item.
+     *
+     * @param  string $name
+     * @return mixed
+     */
+    public function get($name)
+    {
+        if (!isset($this->items[$name])) {
+            return null;
+        }
+
+        return $this->items[$name]['data'];
+    }
+
+    /**
+     * Sort all items.
+     *
+     * @return void
+     */
+    protected function sort()
+    {
+        if (!$this->sorted) {
+            uasort($this->items, array($this, 'compare'));
+            $this->sorted = true;
+        }
+    }
+
+    /**
+     * Compare the priority of two items.
+     *
+     * @param  array $item1,
+     * @param  array $item2
+     * @return int
+     */
+    protected function compare(array $item1, array $item2)
+    {
+        return ($item1['priority'] === $item2['priority'])
+            ? ($item1['serial']   > $item2['serial']   ? -1 : 1) * $this->isLIFO
+            : ($item1['priority'] > $item2['priority'] ? -1 : 1);
+    }
+
+    /**
+     * Get/Set serial order mode
+     *
+     * @param bool $flag
+     * @return bool
+     */
+    public function isLIFO($flag = null)
+    {
+        if ($flag !== null) {
+            if (($flag = ($flag === true ? 1 : -1)) !== $this->isLIFO) {
+                $this->isLIFO = $flag;
+                $this->sorted = false;
+            }
+        }
+        return $this->isLIFO === 1;
+    }
+
+    /**
+     * rewind(): defined by Iterator interface.
+     *
+     * @see    Iterator::rewind()
+     * @return void
+     */
+    public function rewind()
+    {
+        $this->sort();
+        reset($this->items);
+    }
+
+    /**
+     * current(): defined by Iterator interface.
+     *
+     * @see    Iterator::current()
+     * @return mixed
+     */
+    public function current()
+    {
+        $node = current($this->items);
+        return ($node !== false ? $node['data'] : false);
+    }
+
+    /**
+     * key(): defined by Iterator interface.
+     *
+     * @see    Iterator::key()
+     * @return string
+     */
+    public function key()
+    {
+        return key($this->items);
+    }
+
+    /**
+     * next(): defined by Iterator interface.
+     *
+     * @see    Iterator::next()
+     * @return mixed
+     */
+    public function next()
+    {
+        $node = next($this->items);
+        return ($node !== false ? $node['data'] : false);
+    }
+
+    /**
+     * valid(): defined by Iterator interface.
+     *
+     * @see    Iterator::valid()
+     * @return bool
+     */
+    public function valid()
+    {
+        return ($this->current() !== false);
+    }
+
+    /**
+     * count(): defined by Countable interface.
+     *
+     * @see    Countable::count()
+     * @return int
+     */
+    public function count()
+    {
+        return $this->count;
+    }
+
+    /**
+     * Return list as array
+     *
+     * @param int $flag
+     * @return array
+     */
+    public function toArray($flag = self::EXTR_DATA)
+    {
+        $this->sort();
+        if ($flag == self::EXTR_BOTH) {
+            return $this->items;
+        }
+        return array_map(
+            ($flag == self::EXTR_PRIORITY)
+                ? function ($item) { return $item['priority']; }
+                : function ($item) { return $item['data']; },
+            $this->items
+        );
+    }
+}
diff --git a/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/StringWrapper/AbstractStringWrapper.php b/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/StringWrapper/AbstractStringWrapper.php
index d3e8830d6541e6ab02435c19ac35c2c6a6abd335..74d0c55f1909cecc02d886c367ea4ed8d523462e 100644
--- a/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/StringWrapper/AbstractStringWrapper.php
+++ b/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/StringWrapper/AbstractStringWrapper.php
@@ -245,8 +245,6 @@ public function strPad($input, $padLength, $padString = ' ', $padType = STR_PAD_
         $repeatCount = floor($lengthOfPadding / $padStringLength);
 
         if ($padType === STR_PAD_BOTH) {
-            $lastStringLeft  = '';
-            $lastStringRight = '';
             $repeatCountLeft = $repeatCountRight = ($repeatCount - $repeatCount % 2) / 2;
 
             $lastStringLength       = $lengthOfPadding - 2 * $repeatCountLeft * $padStringLength;
diff --git a/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/composer.json b/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/composer.json
index 217c5eaa40ead6da3d90d99430c3998d1f10851f..cc7492ed6c4d319c47c663cda7a4aa199f945706 100644
--- a/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/composer.json
+++ b/core/vendor/zendframework/zend-stdlib/Zend/Stdlib/composer.json
@@ -6,23 +6,30 @@
         "zf2",
         "stdlib"
     ],
+    "homepage": "https://github.com/zendframework/zf2",
     "autoload": {
         "psr-0": {
             "Zend\\Stdlib\\": ""
         }
     },
     "target-dir": "Zend/Stdlib",
-    "suggest": {
-        "zendframework/zend-servicemanager": "To support hydrator plugin manager usage",
-        "zendframework/zend-eventmanager":   "To support aggregate hydrator usage"
-    },
     "require": {
-        "php": ">=5.3.3"
+        "php": ">=5.3.23"
+    },
+    "require-dev": {
+        "zendframework/zend-eventmanager": "self.version",
+        "zendframework/zend-serializer": "self.version",
+        "zendframework/zend-servicemanager": "self.version"
+    },
+    "suggest": {
+        "zendframework/zend-eventmanager": "To support aggregate hydrator usage",
+        "zendframework/zend-serializer": "Zend\\Serializer component",
+        "zendframework/zend-servicemanager": "To support hydrator plugin manager usage"
     },
     "extra": {
         "branch-alias": {
-            "dev-master": "2.2-dev",
-            "dev-develop": "2.3-dev"
+            "dev-master": "2.3-dev",
+            "dev-develop": "2.4-dev"
         }
     }
 }