docs: private void handleIncomingResponseMessage(SerialMessage incomingMessage) {
  		logger.debug("Message type = RESPONSE");
  		switch (incomingMessage.getMessageClass()) {
  			case GetVersion:
  				handleGetVersionResponse(incomingMessage);
  				if (incomingMessage.getMessageClass() == this.lastSentMessage.getExpectedReply() && !incomingMessage.isTransActionCanceled()) {
  					notifyEventListeners(new ZWaveEvent(ZWaveEventType.TRANSACTION_COMPLETED_EVENT, this.lastSentMessage.getMessageNode(), 1, this.lastSentMessage));
  					transactionCompleted.release();
  					logger.trace("Released. Transaction completed permit count -> {}", transactionCompleted.availablePermits());
  				}
  				break;
  			case MemoryGetId:
  				handleMemoryGetId(incomingMessage);
  				if (incomingMessage.getMessageClass() == this.lastSentMessage.getExpectedReply() && !incomingMessage.isTransActionCanceled()) {
  					notifyEventListeners(new ZWaveEvent(ZWaveEventType.TRANSACTION_COMPLETED_EVENT, this.lastSentMessage.getMessageNode(), 1, this.lastSentMessage));
  					transactionCompleted.release();
  					logger.trace("Released. Transaction completed permit count -> {}", transactionCompleted.availablePermits());
  				}
  				break;
  			case SerialApiGetInitData:
  				handleSerialApiGetInitDataResponse(incomingMessage);
  				if (incomingMessage.getMessageClass() == this.lastSentMessage.getExpectedReply() && !incomingMessage.isTransActionCanceled()) {
  					notifyEventListeners(new ZWaveEvent(ZWaveEventType.TRANSACTION_COMPLETED_EVENT, this.lastSentMessage.getMessageNode(), 1, this.lastSentMessage));
  					transactionCompleted.release();
  					logger.trace("Released. Transaction completed permit count -> {}", transactionCompleted.availablePermits());
  				}
  				break;
  			case IdentifyNode:
  				handleIdentifyNodeResponse(incomingMessage);
  				if (incomingMessage.getMessageClass() == this.lastSentMessage.getExpectedReply() && !incomingMessage.isTransActionCanceled()) {
  					notifyEventListeners(new ZWaveEvent(ZWaveEventType.TRANSACTION_COMPLETED_EVENT, this.lastSentMessage.getMessageNode(), 1, this.lastSentMessage));
  					transactionCompleted.release();
  					logger.trace("Released. Transaction completed permit count -> {}", transactionCompleted.availablePermits());
  				}
  				break;
  			case RequestNodeInfo:
  				handleRequestNodeInfoResponse(incomingMessage);
  				break;
  			case SerialApiGetCapabilities:
  				handleSerialAPIGetCapabilitiesResponse(incomingMessage);
  				if (incomingMessage.getMessageClass() == this.lastSentMessage.getExpectedReply() && !incomingMessage.isTransActionCanceled()) {
  					notifyEventListeners(new ZWaveEvent(ZWaveEventType.TRANSACTION_COMPLETED_EVENT, this.lastSentMessage.getMessageNode(), 1, this.lastSentMessage));
  					transactionCompleted.release();
  					logger.trace("Released. Transaction completed permit count -> {}", transactionCompleted.availablePermits());
  				}
  				break;
  			case SendData:
  				handleSendDataResponse(incomingMessage);
  				break;
  			default:
  				logger.warn(String.format("TODO: Implement processing of Response Message = %s (0x%02X)",
  						incomingMessage.getMessageClass().getLabel(),
  						incomingMessage.getMessageClass().getKey()));
  				break;				
  		}
  	}