The TCPN designed by K. Jensen are described using functional programing language. This solves the previously mentioned problems by natural means of this paradigm: the tokens are immutable, as are symbols in functional programming. To emulate this behavior in Java, we decided that the following requirements are crucial: (1) TCPN simulator can be trusted to deal with the tokens respecting Petri net principles. (2) By design we must ensure that the user will not be able to breach the rules of TCPN simulation, despite his or her lack of knowledge concerning these principles. (3) For efficiency reasons objects should be copied as rarely as possible. In order to meet the above requirements, we clone token values (using deep cloning described in [4]) when they enter simulator structures and when they are about to leave these structures. Thus, the compromise ensures correct simulation, regardless of how the token values are processed outside of the TCPN structures, concurrently preserving reasonable efficiency overhead.