def METHOD_NAME(self, syncher, address_obj):
    # addresses have no static ids, just format the address cleanly
    origin_id = (
        str(address_obj)
        .replace(" - ", "-")
        .replace(",", "")
        .replace(" ", "_")
        .replace(".", "_")
        .lower()
    )
    obj = syncher.get(origin_id)
    obj_id = "osoite:" + origin_id
    if not obj:
        obj = Place(data_source=self.data_source, origin_id=origin_id)
        obj._changed = True
        obj._created = True
        obj.id = obj_id
    else:
        assert obj.id == obj_id
        obj._created = False
    obj._changed_fields = []
    # we must construct the names and street addresses from the address object
    info = {}
    for lang in self.supported_languages:
        info["name_" + lang] = self.get_whole_address(address_obj, lang)
        info["street_address_" + lang] = self.get_street_address(address_obj, lang)
        address_obj.street.municipality.set_current_language(lang)
        info["municipality_" + lang] = address_obj.street.municipality.name
    self._save_translated_field(obj, "name", info, "name")
    self._save_translated_field(obj, "street_address", info, "street_address")
    self._save_translated_field(obj, "address_locality", info, "municipality")
    position = address_obj.location
    if position and obj.position:
        # If the distance is less than 10cm, assume the location
        # hasn't changed.
        assert obj.position.srid == settings.PROJECTION_SRID
        if position.distance(obj.position) < 0.10:
            position = obj.position
    if position != obj.position:
        obj._changed = True
        obj._changed_fields.append("position")
        obj.position = position
    if obj.publisher_id != self.organization.id:
        obj.publisher = self.organization
        obj._changed_fields.append("publisher")
        obj._changed = True
    if obj.deleted:
        obj.deleted = False
        # address has been reinstated, hip hip hooray!
        # there's no way we can find any events from other addresses that should now be in this address
        # so we cannot do address replace here (the way we do with tprek units)
        obj._changed_fields.append("deleted")
        obj._changed = True
    if obj._changed:
        if obj._created:
            verb = "created"
        else:
            verb = "changed (fields: %s)" % ", ".join(obj._changed_fields)
        logger.info("%s %s" % (obj, verb))
        obj.save()
    syncher.mark(obj)