code: private Statement mergeStatements(Statement statement1, Statement statement2) {
  		if (!equivalentClaims(statement1.getClaim(), statement2.getClaim())) {
  			return null;
  		}
  
  		StatementRank newRank = statement1.getRank();
  		if (newRank == StatementRank.NORMAL) {
  			newRank = statement2.getRank();
  		} else if (statement2.getRank() != StatementRank.NORMAL
  				&& newRank != statement2.getRank()) {
  			return null;
  		}
  
  		String newStatementId = statement1.getStatementId();
  		if ("".equals(newStatementId)) {
  			newStatementId = statement2.getStatementId();
  		}
  
  		List<Reference> newReferences = mergeReferences(
  				statement1.getReferences(), statement2.getReferences());
  
  		return Datamodel.makeStatement(statement1.getClaim(), newReferences,
  				newRank, newStatementId);
  	}
docs: Returns a statement obtained by merging two given statements, if
  possible, or null if the statements cannot be merged. Statements are
  merged if they contain the same claim, but possibly with qualifiers in a
  different order. The statements may have different ids, ranks, and
  references. References will be merged. Different ranks are supported if
  one of the statement uses {@link StatementRank#NORMAL}, and the rank of
  the other (non-normal) statement is used in this case; otherwise the
  statements will not merge. The first statement takes precedence for
  determining inessential details of the merger, such as the order of
  qualifiers.
  
  @param statement1
  first statement
  @param statement2
  second statement
  @return merged statement or null if merging is not possible