def fetch(self, is_dl_forced=True):
        """
        Fetches data from udp collaboration server,
        see top level comments for class for more information
        :return:
        """

        username = config.get_config()['dbauth']['udp']['user']
        password = config.get_config()['dbauth']['udp']['password']

        credentials = (username, password)

        # Get patient map file:
        patient_id_map = self.open_and_parse_yaml(self.map_files['patient_ids'])
        udp_internal_ids = patient_id_map.keys()

        phenotype_fields = ['Patient', 'HPID', 'Present']

        # Get phenotype ids for each patient
        phenotype_params = {
            'method': 'search_subjects',
            'subject_type': 'Phenotype',
            'search_mode': 'DEEP',
            'fields': 'Patient',
            'conditions': 'equals',
            'values': ','.join(udp_internal_ids),
            'user_fields': ','.join(phenotype_fields)
        }

        prioritized_variants = [
            'Patient', 'Gene', 'Chromosome Position', 'Variant Allele', 'Transcript']

        prioritized_params = {
            'method': 'search_subjects',
            'subject_type': 'Variant Prioritization',
            'search_mode': 'DEEP',
            'fields': 'Patient',
            'conditions': 'equals',
            'values': ','.join(udp_internal_ids),
            'user_fields': ','.join(prioritized_variants),
            'format': 'json'}

        variant_fields = [
            'Patient', 'Family', 'Chr', 'Build', 'Chromosome Position',
            'Reference Allele', 'Variant Allele', 'Parent of origin',
            'Allele Type', 'Mutation Type', 'Gene', 'Transcript', 'Original Amino Acid',
            'Variant Amino Acid', 'Amino Acid Change', 'Segregates with',
            'Position', 'Exon', 'Inheritance model', 'Zygosity', 'dbSNP ID',
            '1K Frequency', 'Number of Alleles']

        variant_params = {
            'method': 'search_subjects',
            'subject_type': 'Exome Analysis Results',
            'search_mode': 'DEEP',
            'fields': 'Patient',
            'conditions': 'equals',
            'user_fields': ','.join(variant_fields),
            'format': 'json'}

        pheno_file = open(
            '/'.join((self.rawdir, self.files['patient_phenotypes']['file'])), 'w')
        variant_file = open(
            '/'.join((self.rawdir, self.files['patient_variants']['file'])), 'w')

        pheno_file.write('{0}\n'.format('\t'.join(phenotype_fields)))
        variant_file.write('{0}\n'.format('\t'.join(variant_fields)))

        variant_gene = self._fetch_data_from_udp(
            udp_internal_ids, prioritized_params, prioritized_variants, credentials)

        variant_gene_map = dict()
        for line in variant_gene:
            variant_gene_map.setdefault(line[0], []).append(
                # Try to make a unique value based on gene-pos-variantAlele-transcript
                # TODO make this a dict for readability purposes
                "{0}-{1}-{2}-{3}".format(line[1], line[2], line[3], line[4]))

        variant_info = self._fetch_data_from_udp(
            udp_internal_ids, variant_params, variant_fields, credentials)

        for line in variant_info:
            variant = "{0}-{1}-{2}-{3}".format(line[10], line[4], line[6], line[11])
            if variant in variant_gene_map[line[0]]:
                line[0] = patient_id_map[line[0]]
                line[4] = re.sub(r'\.0$', '', line[4])
                variant_file.write('{0}\n'.format('\t'.join(line)))

        phenotype_info = self._fetch_data_from_udp(
            udp_internal_ids, phenotype_params, phenotype_fields, credentials)

        for line in phenotype_info:
            line[0] = patient_id_map[line[0]]
            pheno_file.write('{0}\n'.format('\t'.join(line)))

        variant_file.close()
        pheno_file.close()

        return