def edit(self, name=None, description=None, version=None, **kwargs):
        update_dict = {'id': self.id}
        if name:
            if not isinstance(name, str):
                raise IllegalArgumentError("name should be provided as a string")
            update_dict.update({'name': name})
        if description:
            if not isinstance(description, str):
                raise IllegalArgumentError("description should be provided as a string")
            update_dict.update({'description': description})
        if version:
            if not isinstance(version, str):
                raise IllegalArgumentError("description should be provided as a string")
            update_dict.update({'script_version': version})
        if kwargs:
            update_dict.update(**kwargs)
        response = self._client._request('PUT',
                                         self._client._build_url('service', service_id=self.id), json=update_dict)
        if response.status_code != requests.codes.ok:
            raise APIError("Could not update Service ({})".format(response))
        if name:
            self.name = name
        if version:
            self.version = version