diff --git a/vendor/studip_ws/xmlrpc_dispatcher.php b/vendor/studip_ws/xmlrpc_dispatcher.php
index 396543c8f7c4493a51ad87149f560a9143412a04..37913ea941b5a947498b5d5e012725195b71d80f 100644
--- a/vendor/studip_ws/xmlrpc_dispatcher.php
+++ b/vendor/studip_ws/xmlrpc_dispatcher.php
@@ -36,19 +36,21 @@ class Studip_Ws_XmlrpcDispatcher extends Studip_Ws_Dispatcher {
   function dispatch($msg = NULL) {
 
     # ensure correct invocation
-    if (is_null($msg) || !is_a($msg, 'xmlrpcmsg'))
+    if (is_null($msg) || !is_a($msg, 'PhpXmlrpc\Request'))
       return $this->throw_exception('functions_parameters_type must not be '.
                                     'phpvals.');
 
+    $encoder = new PhpXmlRpc\Encoder();
+
     # get decoded parameters
     $len = $msg->getNumParams();
     $argument_array = array();
     for ($i = 0; $i < $len; ++$i)
-      $argument_array[] = php_xmlrpc_decode($msg->getParam($i));
+      $argument_array[] = $encoder->decode($msg->getParam($i));
 
     # return result
     return new xmlrpcresp(
-      php_xmlrpc_encode($this->invoke($msg->method(), $argument_array)));
+      $encoder->encode($this->invoke($msg->method(), $argument_array)));
   }