def explode(self, contactgroups, notificationways):
        self.apply_partial_inheritance('contactgroups')
        for prop in Contact.special_properties:
            if prop == 'contact_name':
                continue
            self.apply_partial_inheritance(prop)
        for contact in self:
            if not (hasattr(contact, 'contact_name') and hasattr(contact, 'contactgroups')):
                continue
            for contactgroup in contact.contactgroups:
                contactgroups.add_member(contact.contact_name, contactgroup.strip())
        for contact in self:
            need_notificationway = False
            params = {}
            for param in Contact.simple_way_parameters:
                if hasattr(contact, param):
                    need_notificationway = True
                    params[param] = getattr(contact, param)
                elif contact.properties[param].has_default:
                    setattr(contact, param, contact.properties[param].default)
            if need_notificationway:
                cname = getattr(contact, 'contact_name', getattr(contact, 'alias', ''))
                nw_name = cname + '_inner_nw'
                notificationways.new_inner_member(nw_name, params)
                if not hasattr(contact, 'notificationways'):
                    contact.notificationways = [nw_name]
                else:
                    contact.notificationways = list(contact.notificationways)
                    contact.notificationways.append(nw_name)