public PlotData getRecord(String snp, String collection, String coordSystem) throws IOException{
        /**if (collection.equals("ALL")){
            return getRecord(snp);
        }**/
        String chrom = md.getChrom(snp);
        if (chrom != null){
        	
        	// time how long this takes to get a benchmark for improving compressed file response
        	long start = System.currentTimeMillis();
                
                // get the previously made changes and apply them.
                ArrayList record = genotypeDataByCollectionChrom.get(collection).get(chrom).getRecord(snp);
                SampleData samples = samplesByCollection.get(collection);
                
                if(changesByCollection.containsKey(collection)){
                    if(changesByCollection.get(collection).containsKey(chrom)){
                        if(changesByCollection.get(collection).get(chrom).containsKey(snp)){
                        HashMap<String, Byte> changes = changesByCollection.get(collection).get(chrom).get(snp);
                            for(String s : changes.keySet()){
                                record.set(samples.inds.indexOf(s), changes.get(s));
                            }
                        }
                    }
                }
                
        	PlotData pd = new PlotData(
                    record,
                    intensityDataByCollectionChrom.get(collection).get(chrom).getRecord(snp),
                    samples,
                    qcList(),
                    md.getAlleles(snp),
                    coordSystem);
        	double time = ((double)(System.currentTimeMillis() - start))/1000;
            Genoplot.ld.log(snp +" for "+ collection +" was fetched in "+ time + "s.");
            return pd;
        	
        }else{
            return new PlotData(null,null,null,null,null,"null");
        }
    }