public void fillFeatureVectors(DependencyInstance instance,
				   FeatureVector[][][] fvs,
				   double[][][] probs,
				   FeatureVector[][][] fvs_trips,
				   double[][][] probs_trips,
				   FeatureVector[][][] fvs_sibs,
				   double[][][] probs_sibs,
				   FeatureVector[][][][] nt_fvs,
				   double[][][][] nt_probs, Parameters params) {

	fillFeatureVectors(instance, fvs, probs, nt_fvs, nt_probs, params);

	final int instanceLength = instance.length();

	for(int w1 = 0; w1 < instanceLength; w1++) {
	    for(int w2 = w1; w2 < instanceLength; w2++) {
		for(int w3 = w2+1; w3 < instanceLength; w3++) {
		    FeatureVector prodFV = new FeatureVector();
		    addTripFeatures(instance,w1,w2,w3,prodFV);
		    double prodProb = params.getScore(prodFV);
		    fvs_trips[w1][w2][w3] = prodFV;
		    probs_trips[w1][w2][w3] = prodProb;
		}
	    }
	    for(int w2 = w1; w2 >= 0; w2--) {
		for(int w3 = w2-1; w3 >= 0; w3--) {
		    FeatureVector prodFV = new FeatureVector();
		    addTripFeatures(instance,w1,w2,w3,prodFV);
		    double prodProb = params.getScore(prodFV);
		    fvs_trips[w1][w2][w3] = prodFV;
		    probs_trips[w1][w2][w3] = prodProb;
		}
	    }
	}
			
	for(int w1 = 0; w1 < instanceLength; w1++) {
	    for(int w2 = 0; w2 < instanceLength; w2++) {
		for(int wh = 0; wh < 2; wh++) {
		    if(w1 != w2) {
			FeatureVector prodFV = new FeatureVector();
			addSiblingFeatures(instance,w1,w2,wh == 0,prodFV);
			double prodProb = params.getScore(prodFV);
			fvs_sibs[w1][w2][wh] = prodFV;
			probs_sibs[w1][w2][wh] = prodProb;
		    }
		}
	    }
	}
    }