implementation based on TNC