private StateSequence<Double> createScaledBackward() {
		ArrayList<Double> scales = new ArrayList<Double>();
		StateSequence<Double>  stateProbs = new StateSequence<Double>(hmm.getStates());

		for (String state : hmm.getStates()) {
			for (int i = 0; i < hmm.getEmissionSequence().size(); i++) {
				stateProbs.add(state, i, 0.0);
			}
		}
		
		for (int i = hmm.getEmissionSequence().size() - 1; i >= 0; i--) {
			//1) Get the backward probability for each state.
			for (String state : hmm.getStates()) {
				Double totalProb = 0.0;
				for (String summingState : hmm.getStates()) {
					//If we are at the end...
					if (i == hmm.getEmissionSequence().size() - 1) {
						//1.a) Get the next probability from the end state.
						Double nextProb = hmm.getEndState().get(state);
						//1.b) Get the transition probability from the current state to the summing state.
						Double transitionProb = hmm.getStateTransitionProbability(state, summingState);
						//1.c) Get the emission probability for the next state from the summing state.
						String emission = hmm.getEmissionSequence().get(i);
						Double emissionProb = hmm.getEmissionProbability(summingState, emission);

						//1.c) Aggregate the total for the current state.
						totalProb += nextProb * transitionProb * emissionProb;

					} 
					// otherwise
					else {
						//1.a) Get the next probability from the next state.
						Double nextProb = stateProbs.get(summingState, i+1);
						//1.b) Get the transition probability from the current state to the summing state.
						Double transitionProb = hmm.getStateTransitionProbability(state, summingState);
						//1.c) Get the emission probability for the next state from the summing state.
						String emission = hmm.getEmissionSequence().get(i);
						Double emissionProb = hmm.getEmissionProbability(summingState, emission);
						//1.d) Aggregate the total for the current state.
						totalProb += transitionProb * emissionProb * nextProb;
					}
				}
				stateProbs.set(state, i, totalProb);
			}
			
			//2) Identify scaling coefficient = the sum over all states.
			Double indexTotal = 0.0;
			for (String state: hmm.getStates()) {
				indexTotal += stateProbs.get(state, i);
			}
			scales.add(indexTotal);
			
			//3) Apply scaling coefficent to each state's probability
			//   and save it as the new probability for that state at i.
			for (String state : hmm.getStates()) {
				Double total = stateProbs.get(state, i);
				stateProbs.set(state, i, total / indexTotal);
			}				
		}		
		return stateProbs;
	}