#vulnerable code 
                                @Override
    public TestVector getNewMutation() {
	Random r = new Random();
	// chose a random trace from the list
	TestVector tempVector;
	WorkflowTrace trace = null;
	
	
	boolean modified = false;
	do {
	    if (ResultContainer.getInstance().getGoodVectors().isEmpty()) {
		tempVector = new TestVector(new WorkflowTrace(), certMutator.getServerCertificateStructure(),
			certMutator.getClientCertificateStructure(), config.getActionExecutorConfig()
				.getRandomExecutorType(), null);
		ResultContainer.getInstance().getGoodVectors().add(tempVector);
		modified = true;
	    } else {
		// Choose a random Trace to modify
		tempVector = ResultContainer.getInstance().getGoodVectors()
			.get(r.nextInt(ResultContainer.getInstance().getGoodVectors().size()));
                tempVector = (TestVector) UnoptimizedDeepCopy.copy(tempVector);
	    }
            for (TLSAction action : tempVector.getTrace().getTLSActions()) {
                action.reset();
            }
            tempVector.getModificationList().clear();
	    Modification modification = null;
	    if (r.nextInt(100) <= simpleConfig.getChangeServerCert()) {
                ServerCertificateStructure serverKeyCertPair = certMutator.getServerCertificateStructure();
		modification = new ChangeServerCertificateModification(serverKeyCertPair);
                tempVector.setServerKeyCert(serverKeyCertPair);
		modified = true;
	    }
	    if (r.nextInt(100) <= simpleConfig.getChangeClientCert()) {
		ClientCertificateStructure clientKeyCertPair = certMutator.getClientCertificateStructure();
		modification = new ChangeClientCertificateModification(clientKeyCertPair);
                tempVector.setClientKeyCert(clientKeyCertPair);
		modified = true;
	    }
	    if (modification != null) {
		tempVector.addModification(modification);
	    }
	    // perhaps add a flight
	    if (trace.getTLSActions().isEmpty() || r.nextInt(100) < simpleConfig.getAddFlightPercentage()) {
		tempVector.addModification(FuzzingHelper.addMessageFlight(trace));
		modified = true;
	    }
	    if (r.nextInt(100) < simpleConfig.getAddMessagePercentage()) {
		tempVector.addModification(FuzzingHelper.addRandomMessage(trace));
		modified = true;
	    }
	    // perhaps remove a message
	    if (r.nextInt(100) <= simpleConfig.getRemoveMessagePercentage()) {
		tempVector.addModification(FuzzingHelper.removeRandomMessage(trace));
		modified = true;
	    }
	    // perhaps toggle Encryption
	    if (r.nextInt(100) <= simpleConfig.getAddToggleEncrytionPercentage()) {
		tempVector.addModification(FuzzingHelper.addToggleEncrytionActionModification(trace));
		modified = true;
	    }
	    // perhaps add records
	    if (r.nextInt(100) <= simpleConfig.getAddRecordPercentage()) {
		tempVector.addModification(FuzzingHelper.addRecordAtRandom(trace));
		modified = true;
	    }
	    // Modify a random field:
	    if (r.nextInt(100) <= simpleConfig.getModifyVariablePercentage()) {
		List<ModifiableVariableField> variableList = getAllModifiableVariableFieldsRecursively(trace);
		// LOG.log(Level.INFO, ""+trace.getProtocolMessages().size());
		if (variableList.size() > 0) {
		    ModifiableVariableField field = variableList.get(r.nextInt(variableList.size()));
		    // String currentFieldName = field.getField().getName();
		    // String currentMessageName =
		    // field.getObject().getClass().getSimpleName();
		    // LOG.log(Level.INFO, "Fieldname:{0} Message:{1}", new
		    // Object[]{currentFieldName, currentMessageName});
		    tempVector.addModification(executeModifiableVariableModification(
			    (ModifiableVariableHolder) field.getObject(), field.getField()));
		    modified = true;
		}
	    }
	    if (r.nextInt(100) <= simpleConfig.getDuplicateMessagePercentage()) {
		tempVector.addModification(FuzzingHelper.duplicateRandomProtocolMessage(trace));
		modified = true;
	    }
	} while (!modified || r.nextInt(100) <= simpleConfig.getMultipleModifications());
	return tempVector;

    } 
                            #location 44 
                            #vulnerability type NULL_DEREFERENCE
#fixed code
                                @Override
    public TestVector getNewMutation() {
	Random r = new Random();
	// chose a random trace from the list
	TestVector tempVector;
	WorkflowTrace trace = null;
	
	
	boolean modified = false;
	do {
	    if (ResultContainer.getInstance().getGoodVectors().isEmpty()) {
		tempVector = new TestVector(new WorkflowTrace(), certMutator.getServerCertificateStructure(),
			certMutator.getClientCertificateStructure(), config.getActionExecutorConfig()
				.getRandomExecutorType(), null);
		ResultContainer.getInstance().getGoodVectors().add(tempVector);
		modified = true;
	    } else {
		// Choose a random Trace to modify
		tempVector = ResultContainer.getInstance().getGoodVectors()
			.get(r.nextInt(ResultContainer.getInstance().getGoodVectors().size()));
                tempVector = (TestVector) UnoptimizedDeepCopy.copy(tempVector);
	    }
            for (TLSAction action : tempVector.getTrace().getTLSActions()) {
                action.reset();
            }
            tempVector.getModificationList().clear();
	    Modification modification = null;
            trace = tempVector.getTrace();
	    if (r.nextInt(100) <= simpleConfig.getChangeServerCert()) {
                ServerCertificateStructure serverKeyCertPair = certMutator.getServerCertificateStructure();
		modification = new ChangeServerCertificateModification(serverKeyCertPair);
                tempVector.setServerKeyCert(serverKeyCertPair);
		modified = true;
	    }
	    if (r.nextInt(100) <= simpleConfig.getChangeClientCert()) {
		ClientCertificateStructure clientKeyCertPair = certMutator.getClientCertificateStructure();
		modification = new ChangeClientCertificateModification(clientKeyCertPair);
                tempVector.setClientKeyCert(clientKeyCertPair);
		modified = true;
	    }
	    if (modification != null) {
		tempVector.addModification(modification);
	    }
	    // perhaps add a flight
	    if (trace.getTLSActions().isEmpty() || r.nextInt(100) < simpleConfig.getAddFlightPercentage()) {
		tempVector.addModification(FuzzingHelper.addMessageFlight(trace));
		modified = true;
	    }
	    if (r.nextInt(100) < simpleConfig.getAddMessagePercentage()) {
		tempVector.addModification(FuzzingHelper.addRandomMessage(trace));
		modified = true;
	    }
	    // perhaps remove a message
	    if (r.nextInt(100) <= simpleConfig.getRemoveMessagePercentage()) {
		tempVector.addModification(FuzzingHelper.removeRandomMessage(trace));
		modified = true;
	    }
	    // perhaps toggle Encryption
	    if (r.nextInt(100) <= simpleConfig.getAddToggleEncrytionPercentage()) {
		tempVector.addModification(FuzzingHelper.addToggleEncrytionActionModification(trace));
		modified = true;
	    }
	    // perhaps add records
	    if (r.nextInt(100) <= simpleConfig.getAddRecordPercentage()) {
		tempVector.addModification(FuzzingHelper.addRecordAtRandom(trace));
		modified = true;
	    }
	    // Modify a random field:
	    if (r.nextInt(100) <= simpleConfig.getModifyVariablePercentage()) {
		List<ModifiableVariableField> variableList = getAllModifiableVariableFieldsRecursively(trace);
		// LOG.log(Level.INFO, ""+trace.getProtocolMessages().size());
		if (variableList.size() > 0) {
		    ModifiableVariableField field = variableList.get(r.nextInt(variableList.size()));
		    // String currentFieldName = field.getField().getName();
		    // String currentMessageName =
		    // field.getObject().getClass().getSimpleName();
		    // LOG.log(Level.INFO, "Fieldname:{0} Message:{1}", new
		    // Object[]{currentFieldName, currentMessageName});
		    tempVector.addModification(executeModifiableVariableModification(
			    (ModifiableVariableHolder) field.getObject(), field.getField()));
		    modified = true;
		}
	    }
	    if (r.nextInt(100) <= simpleConfig.getDuplicateMessagePercentage()) {
		tempVector.addModification(FuzzingHelper.duplicateRandomProtocolMessage(trace));
		modified = true;
	    }
	} while (!modified || r.nextInt(100) <= simpleConfig.getMultipleModifications());
	return tempVector;

    }