def parse_event_xml(xml_event):
    result = {}
    tree = XML.fromstring(xml_event)
    properties = tree.findall(
        '{urn:schemas-upnp-org:event-1-0}property')
    for prop in properties:
        for variable in prop:
            if variable.tag == "LastChange":
                last_change_tree = XML.fromstring(
                    variable.text.encode('utf-8'))
                instance = last_change_tree.find(
                    "{urn:schemas-upnp-org:metadata-1-0/AVT/}InstanceID")
                if instance is None:
                    instance = last_change_tree.find(
                        "{urn:schemas-upnp-org:metadata-1-0/RCS/}InstanceID")
                if instance is None:
                    instance = last_change_tree.find(
                        "{urn:schemas-sonos-com:metadata-1-0/Queue/}QueueID")
                for last_change_var in instance:
                    tag = last_change_var.tag
                    if tag.startswith('{'):
                        tag = tag.split('}', 1)[1]
                    tag = camel_to_underscore(tag)
                    value = last_change_var.get('val')
                    if value is None:
                        value = last_change_var.text
                    if value.startswith('<DIDL-Lite'):
                        try:
                            didl = from_didl_string(value)
                            if not didl:
                                continue
                            value = didl[0]
                        except SoCoException as original_exception:
                            log.debug("Event contains illegal metadata"
                                      "for '%s'.\n"
                                      "Error message: '%s'\n"
                                      "The result will be a SoCoFault.",
                                      tag, str(original_exception))
                            event_parse_exception = EventParseException(
                                tag, value, original_exception
                            )
                            value = SoCoFault(event_parse_exception)
                    channel = last_change_var.get('channel')
                    if channel is not None:
                        if result.get(tag) is None:
                            result[tag] = {}
                        result[tag][channel] = value
                    else:
                        result[tag] = value
            else:
                result[camel_to_underscore(variable.tag)] = variable.text
    return result