def combine_duplicate_businesses(businesses):
    """
    Averages ratings of the same business from different sources

    :param businesses: Full list of businesses
    :returns: Filtered list with combined sources
    """

    seen_addresses = set()
    filtered_list = []
    for business in businesses:
        if business.address not in seen_addresses:
            filtered_list.append(business)
            seen_addresses.add(business.address)
        else:
            # Find duplicate in list
            for b in filtered_list:
                if b.address == business.address:
                    # Average bayesian ratings and update source count
                    new_rating = (b.bayesian + business.bayesian) / 2.0
                    b.bayesian = new_rating
                    b.source_count = b.source_count + 1

    return filtered_list