private void fixTransitions() {
        HashSet<SinglePair> actToDiscard = new HashSet<SinglePair>();
        HashSet<SinglePair> obsToDiscard = new HashSet<SinglePair>();

        for ( SinglePair sa : transitions[0].keySet() ) {
            if ( rMatrix.get( sa ) == null ) {
                actToDiscard.add( sa );
            }
        }

        for ( SinglePair sa : actToDiscard ) {
            RFs[0].unseat( transitions[0].get( sa ), sa.symbol() );
            transitions[0].remove( sa );
        }

        for ( SinglePair so : transitions[1].keySet() ) {
            int[] oCounts = oMatrix.get( so.state() );
            if ( oCounts == null || oCounts[so.symbol(0)] == 0 ) {
                obsToDiscard.add( so );
            }
        }

        for ( SinglePair so : obsToDiscard ) {
            RFs[1].unseat( transitions[1].get( so ), so.symbol() );
            transitions[1].remove( so );
        }
    }