public function makeCall(array $input)
    {
        $input = array_replace_recursive(array(
            'function' => null,
        ), $input, array(
            'arguments' => array(),
            'options'   => array(),
            'headers'   => array(),
        ));

        if (empty($input['function'])) {
            throw new EssenceException('The SOAP function is not set');
        }

        try {
            $this->client->__soapCall(
                $input['function'],
                array($input['arguments']),
                $input['options'],
                $input['headers'],
                $this->lastResponseHeaders
            );

            $this->lastRequest = $this->client->__getLastRequest();
            $this->lastResponse = $this->client->__getLastResponse();

            return $this->lastResponse;
        } catch (SoapFault $e) {
            $this->lastRequest = $this->client->__getLastRequest();
            $this->lastResponse = $this->client->__getLastResponse();

            throw new EssenceException($e->getMessage(), $e->getCode(), $e);
        }
    }