public boolean equals(Object o) {
    		if (this == o)
    			return true;
    		if (!(o instanceof State))
    			return false;
    
    		final State state = (State) o;
    
    		if (position != state.position)
    			return false;
    		if (previousPreviousTag != null ? !previousPreviousTag
    				.equals(state.previousPreviousTag)
    				: state.previousPreviousTag != null)
    			return false;
    		if (previousTag != null ? !previousTag.equals(state.previousTag)
    				: state.previousTag != null)
    			return false;
    
    		return true;
    	}