diff --git a/regression_test/realtime/Makefile b/regression_test/realtime/Makefile
index ae33679d11629f8f9a360c10e3c47a0590441743..dc08e16ac25439d1598d9ac2263e365ae314ee0d 100644
--- a/regression_test/realtime/Makefile
+++ b/regression_test/realtime/Makefile
@@ -15,13 +15,14 @@ include $(TOPDIR)/Makefile.regression
 .SUFFIXES: .ttcn .hh
 .PHONY: all clean dep run
 
+# activate real-time testing features
 COMPILER_FLAGS += -I
 
 TTCN3_LIB = ttcn3$(RT2_SUFFIX)-parallel$(DYNAMIC_SUFFIX)
 
-TTCN3_MODULES = realtimeNow.ttcn realtimeTimestamp.ttcn
+TTCN3_MODULES = realtimeNow.ttcn realtimeTimestamp.ttcn realtimeTimestampPortTranslation.ttcn realtimeTimestampAnyFrom.ttcn
 
-USER_SOURCES = PortMsg.cc PortProc.cc
+USER_SOURCES = PortMsg.cc PortProc.cc PortProvBasic.cc PortProvRT.cc PortTransBasic.cc PortTransRT.cc
 
 GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc)
 GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh)
@@ -52,7 +53,7 @@ compile: $(TTCN3_MODULES)
 
 clean distclean:
 	-rm -f $(TARGET) $(OBJECTS) $(GENERATED_HEADERS) \
-	$(GENERATED_SOURCES) *.log Makefile.bak compile
+	$(GENERATED_SOURCES) logs/*.log Makefile.bak compile
 
 dep: $(GENERATED_SOURCES)
 	makedepend $(CPPFLAGS) $(GENERATED_SOURCES)
diff --git a/regression_test/realtime/PortMsg.cc b/regression_test/realtime/PortMsg.cc
index 2ad6a9025acbd3cdc82cba8746a2fdfd16a3c2ca..e2db005946182d326a927e383145094b454c853c 100644
--- a/regression_test/realtime/PortMsg.cc
+++ b/regression_test/realtime/PortMsg.cc
@@ -11,13 +11,13 @@
 
 namespace realtimeTimestamp {
 
-void ef__incoming__message(const INTEGER& p__msg, const BOOLEAN& p__set__timestamp)
+void ef__incoming__message(PortMsg& p__pt, const INTEGER& p__msg, const BOOLEAN& p__set__timestamp)
 {
   if (p__set__timestamp) {
-    CT_component_ptMsg.incoming_message(p__msg, TTCN_Runtime::now());
+    p__pt.incoming_message(p__msg, TTCN_Runtime::now());
   }
   else {
-    CT_component_ptMsg.incoming_message(p__msg);
+    p__pt.incoming_message(p__msg);
   }
 }
 
diff --git a/regression_test/realtime/PortMsg.hh b/regression_test/realtime/PortMsg.hh
index 0ebda47303fe9c3e6d6a0280a58f635392c776bf..ecb7f937e3f88b3379a755c6178f6c6114b20284 100644
--- a/regression_test/realtime/PortMsg.hh
+++ b/regression_test/realtime/PortMsg.hh
@@ -15,7 +15,7 @@
 namespace realtimeTimestamp {
 
 class PortMsg : public PortMsg_BASE {
-  friend void ef__incoming__message(const INTEGER& p__msg, const BOOLEAN& p__set__timestamp);
+  friend void ef__incoming__message(PortMsg& p__pt, const INTEGER& p__msg, const BOOLEAN& p__set__timestamp);
 public:
 	PortMsg(const char *par_port_name = NULL);
 	~PortMsg();
diff --git a/regression_test/realtime/PortProc.cc b/regression_test/realtime/PortProc.cc
index 51cef686f7d1fe20d85a023a930a19ec7059357e..8e35b2c7ab19f0249a41f631595d15d7b31af40a 100644
--- a/regression_test/realtime/PortProc.cc
+++ b/regression_test/realtime/PortProc.cc
@@ -11,38 +11,38 @@
 
 namespace realtimeTimestamp {
 
-void ef__incoming__call(const INTEGER& p__par, const BOOLEAN& p__set__timestamp)
+void ef__incoming__call(PortProc& p__pt, const INTEGER& p__par, const BOOLEAN& p__set__timestamp)
 {
   Sig_call x;
   x.p() = p__par;
   if (p__set__timestamp) {
-    CT_component_ptProc.incoming_call(x, TTCN_Runtime::now());
+    p__pt.incoming_call(x, TTCN_Runtime::now());
   }
   else {
-    CT_component_ptProc.incoming_call(x);
+    p__pt.incoming_call(x);
   }
 }
 
-void ef__incoming__reply(const INTEGER& p__par, const CHARSTRING& p__ret, const BOOLEAN& p__set__timestamp)
+void ef__incoming__reply(PortProc& p__pt, const INTEGER& p__par, const CHARSTRING& p__ret, const BOOLEAN& p__set__timestamp)
 {
   Sig_reply x;
   x.p() = p__par;
   x.return_value() = p__ret;
   if (p__set__timestamp) {
-    CT_component_ptProc.incoming_reply(x, TTCN_Runtime::now());
+    p__pt.incoming_reply(x, TTCN_Runtime::now());
   }
   else {
-    CT_component_ptProc.incoming_reply(x);
+    p__pt.incoming_reply(x);
   }
 }
 
-void ef__incoming__exception(const BOOLEAN& p__ex, const BOOLEAN& p__set__timestamp)
+void ef__incoming__exception(PortProc& p__pt, const BOOLEAN& p__ex, const BOOLEAN& p__set__timestamp)
 {
   if (p__set__timestamp) {
-    CT_component_ptProc.incoming_exception(Sig_exception(p__ex), TTCN_Runtime::now());
+    p__pt.incoming_exception(Sig_exception(p__ex), TTCN_Runtime::now());
   }
   else {
-    CT_component_ptProc.incoming_exception(Sig_exception(p__ex));
+    p__pt.incoming_exception(Sig_exception(p__ex));
   }
 }
 
diff --git a/regression_test/realtime/PortProc.hh b/regression_test/realtime/PortProc.hh
index e3e9c8911fa33897530f63b454483f64710c0f5b..345e5893c94087ccee12cac43f01afe896a146ec 100644
--- a/regression_test/realtime/PortProc.hh
+++ b/regression_test/realtime/PortProc.hh
@@ -15,9 +15,9 @@
 namespace realtimeTimestamp {
 
 class PortProc : public PortProc_BASE {
-  friend void ef__incoming__call(const INTEGER& p__par, const BOOLEAN& p__set__timestamp);
-  friend void ef__incoming__reply(const INTEGER& p__par, const CHARSTRING& p__ret, const BOOLEAN& p__set__timestamp);
-  friend void ef__incoming__exception(const BOOLEAN& p__ex, const BOOLEAN& p__set__timestamp);
+  friend void ef__incoming__call(PortProc& p__pt, const INTEGER& p__par, const BOOLEAN& p__set__timestamp);
+  friend void ef__incoming__reply(PortProc& p__pt, const INTEGER& p__par, const CHARSTRING& p__ret, const BOOLEAN& p__set__timestamp);
+  friend void ef__incoming__exception(PortProc& p__pt, const BOOLEAN& p__ex, const BOOLEAN& p__set__timestamp);
 public:
 	PortProc(const char *par_port_name = NULL);
 	~PortProc();
diff --git a/regression_test/realtime/PortProvBasic.cc b/regression_test/realtime/PortProvBasic.cc
new file mode 100644
index 0000000000000000000000000000000000000000..f5e4e381113216629d7a96623fd55855b23fed06
--- /dev/null
+++ b/regression_test/realtime/PortProvBasic.cc
@@ -0,0 +1,79 @@
+// This Test Port skeleton source file was generated by the
+// TTCN-3 Compiler of the TTCN-3 Test Executor version CRL 113 200/6 R4C
+// for ebotbar (ebotbar@ebotbarVB) on Wed Nov 28 12:07:59 2018
+
+// Copyright (c) 2000-2018 Ericsson Telecom AB
+
+// You may modify this file. Complete the body of empty functions and
+// add your member functions here.
+
+#include "PortProvBasic.hh"
+#include "realtimeTimestampPortTranslation.hh"
+
+namespace realtimeTimestampPortTranslation {
+
+PortProvBasic_PROVIDER::PortProvBasic_PROVIDER(const char *par_port_name)
+	: PORT(par_port_name)
+{
+
+}
+
+PortProvBasic_PROVIDER::~PortProvBasic_PROVIDER()
+{
+
+}
+
+void PortProvBasic_PROVIDER::set_parameter(const char * /*parameter_name*/,
+	const char * /*parameter_value*/)
+{
+
+}
+
+/*void PortProvBasic_PROVIDER::Handle_Fd_Event(int fd, boolean is_readable,
+	boolean is_writable, boolean is_error) {}*/
+
+void PortProvBasic_PROVIDER::Handle_Fd_Event_Error(int /*fd*/)
+{
+
+}
+
+void PortProvBasic_PROVIDER::Handle_Fd_Event_Writable(int /*fd*/)
+{
+
+}
+
+void PortProvBasic_PROVIDER::Handle_Fd_Event_Readable(int /*fd*/)
+{
+
+}
+
+/*void PortProvBasic_PROVIDER::Handle_Timeout(double time_since_last_call) {}*/
+
+void PortProvBasic_PROVIDER::user_map(const char * /*system_port*/)
+{
+
+}
+
+void PortProvBasic_PROVIDER::user_unmap(const char * /*system_port*/)
+{
+
+}
+
+void PortProvBasic_PROVIDER::user_start()
+{
+
+}
+
+void PortProvBasic_PROVIDER::user_stop()
+{
+
+}
+
+void PortProvBasic_PROVIDER::outgoing_send(const INTEGER& send_par)
+{
+  // redirect the message to the port's input
+  incoming_message(send_par);
+}
+
+} /* end of namespace */
+
diff --git a/regression_test/realtime/PortProvBasic.hh b/regression_test/realtime/PortProvBasic.hh
new file mode 100644
index 0000000000000000000000000000000000000000..ea2299de3f867461fc77a502058cf2de5570e836
--- /dev/null
+++ b/regression_test/realtime/PortProvBasic.hh
@@ -0,0 +1,49 @@
+// This Test Port skeleton header file was generated by the
+// TTCN-3 Compiler of the TTCN-3 Test Executor version CRL 113 200/6 R4C
+// for ebotbar (ebotbar@ebotbarVB) on Wed Nov 28 12:07:59 2018
+
+// Copyright (c) 2000-2018 Ericsson Telecom AB
+
+// You may modify this file. Add your attributes and prototypes of your
+// member functions here.
+
+#ifndef PortProvBasic_HH
+#define PortProvBasic_HH
+
+#include <TTCN3.hh>
+
+// Note: Header file realtimeTimestampPortTranslation.hh must not be included into this file!
+// (because it includes this file)
+// Please add the declarations of message types manually.
+
+namespace realtimeTimestampPortTranslation {
+
+class PortProvBasic_PROVIDER : public PORT {
+public:
+	PortProvBasic_PROVIDER(const char *par_port_name);
+	~PortProvBasic_PROVIDER();
+
+	void set_parameter(const char *parameter_name,
+		const char *parameter_value);
+
+private:
+	/* void Handle_Fd_Event(int fd, boolean is_readable,
+		boolean is_writable, boolean is_error); */
+	void Handle_Fd_Event_Error(int fd);
+	void Handle_Fd_Event_Writable(int fd);
+	void Handle_Fd_Event_Readable(int fd);
+	/* void Handle_Timeout(double time_since_last_call); */
+protected:
+	void user_map(const char *system_port);
+	void user_unmap(const char *system_port);
+
+	void user_start();
+	void user_stop();
+
+	void outgoing_send(const INTEGER& send_par);
+	virtual void incoming_message(const INTEGER& incoming_par) = 0;
+};
+
+} /* end of namespace */
+
+#endif
diff --git a/regression_test/realtime/PortProvRT.cc b/regression_test/realtime/PortProvRT.cc
new file mode 100644
index 0000000000000000000000000000000000000000..a242278d53fe159a0b9336cd3c1a223da8d2ab6d
--- /dev/null
+++ b/regression_test/realtime/PortProvRT.cc
@@ -0,0 +1,82 @@
+// This Test Port skeleton source file was generated by the
+// TTCN-3 Compiler of the TTCN-3 Test Executor version CRL 113 200/6 R4C
+// for ebotbar (ebotbar@ebotbarVB) on Wed Nov 28 12:07:59 2018
+
+// Copyright (c) 2000-2018 Ericsson Telecom AB
+
+// You may modify this file. Complete the body of empty functions and
+// add your member functions here.
+
+#include "PortProvRT.hh"
+#include "realtimeTimestampPortTranslation.hh"
+
+namespace realtimeTimestampPortTranslation {
+
+PortProvRT_PROVIDER::PortProvRT_PROVIDER(const char *par_port_name)
+	: PORT(par_port_name)
+{
+
+}
+
+PortProvRT_PROVIDER::~PortProvRT_PROVIDER()
+{
+
+}
+
+void PortProvRT_PROVIDER::set_parameter(const char * /*parameter_name*/,
+	const char * /*parameter_value*/)
+{
+
+}
+
+/*void PortProvRT_PROVIDER::Handle_Fd_Event(int fd, boolean is_readable,
+	boolean is_writable, boolean is_error) {}*/
+
+void PortProvRT_PROVIDER::Handle_Fd_Event_Error(int /*fd*/)
+{
+
+}
+
+void PortProvRT_PROVIDER::Handle_Fd_Event_Writable(int /*fd*/)
+{
+
+}
+
+void PortProvRT_PROVIDER::Handle_Fd_Event_Readable(int /*fd*/)
+{
+
+}
+
+/*void PortProvRT_PROVIDER::Handle_Timeout(double time_since_last_call) {}*/
+
+void PortProvRT_PROVIDER::user_map(const char * /*system_port*/)
+{
+
+}
+
+void PortProvRT_PROVIDER::user_unmap(const char * /*system_port*/)
+{
+
+}
+
+void PortProvRT_PROVIDER::user_start()
+{
+
+}
+
+void PortProvRT_PROVIDER::user_stop()
+{
+
+}
+
+void PortProvRT_PROVIDER::outgoing_send(const INTEGER& send_par, FLOAT* timestamp_redirect)
+{
+  if (timestamp_redirect != NULL) {
+    *timestamp_redirect = TTCN_Runtime::now();
+  }
+  // redirect the message to the port's input
+  incoming_message(send_par, TTCN_Runtime::now());
+}
+
+} /* end of namespace */
+
diff --git a/regression_test/realtime/PortProvRT.hh b/regression_test/realtime/PortProvRT.hh
new file mode 100644
index 0000000000000000000000000000000000000000..35e6b04b969774bcc25392c1acb1109ed238739b
--- /dev/null
+++ b/regression_test/realtime/PortProvRT.hh
@@ -0,0 +1,49 @@
+// This Test Port skeleton header file was generated by the
+// TTCN-3 Compiler of the TTCN-3 Test Executor version CRL 113 200/6 R4C
+// for ebotbar (ebotbar@ebotbarVB) on Wed Nov 28 12:07:59 2018
+
+// Copyright (c) 2000-2018 Ericsson Telecom AB
+
+// You may modify this file. Add your attributes and prototypes of your
+// member functions here.
+
+#ifndef PortProvRT_HH
+#define PortProvRT_HH
+
+#include <TTCN3.hh>
+
+// Note: Header file realtimeTimestampPortTranslation.hh must not be included into this file!
+// (because it includes this file)
+// Please add the declarations of message types manually.
+
+namespace realtimeTimestampPortTranslation {
+
+class PortProvRT_PROVIDER : public PORT {
+public:
+	PortProvRT_PROVIDER(const char *par_port_name);
+	~PortProvRT_PROVIDER();
+
+	void set_parameter(const char *parameter_name,
+		const char *parameter_value);
+
+private:
+	/* void Handle_Fd_Event(int fd, boolean is_readable,
+		boolean is_writable, boolean is_error); */
+	void Handle_Fd_Event_Error(int fd);
+	void Handle_Fd_Event_Writable(int fd);
+	void Handle_Fd_Event_Readable(int fd);
+	/* void Handle_Timeout(double time_since_last_call); */
+protected:
+	void user_map(const char *system_port);
+	void user_unmap(const char *system_port);
+
+	void user_start();
+	void user_stop();
+
+	void outgoing_send(const INTEGER& send_par, FLOAT* timestamp_redirect);
+	virtual void incoming_message(const INTEGER& incoming_par, const FLOAT& timestamp = FLOAT()) = 0;
+};
+
+} /* end of namespace */
+
+#endif
diff --git a/regression_test/realtime/PortTransBasic.cc b/regression_test/realtime/PortTransBasic.cc
new file mode 100644
index 0000000000000000000000000000000000000000..a53edcb20550ca30368a116a9eb4869001b0fec3
--- /dev/null
+++ b/regression_test/realtime/PortTransBasic.cc
@@ -0,0 +1,77 @@
+// This Test Port skeleton source file was generated by the
+// TTCN-3 Compiler of the TTCN-3 Test Executor version CRL 113 200/6 R4C
+// for ebotbar (ebotbar@ebotbarVB) on Wed Nov 28 12:07:59 2018
+
+// Copyright (c) 2000-2018 Ericsson Telecom AB
+
+// You may modify this file. Complete the body of empty functions and
+// add your member functions here.
+
+#include "PortTransBasic.hh"
+
+namespace realtimeTimestampPortTranslation {
+
+PortTransBasic::PortTransBasic(const char *par_port_name)
+	: PortTransBasic_BASE(par_port_name)
+{
+
+}
+
+PortTransBasic::~PortTransBasic()
+{
+
+}
+
+void PortTransBasic::set_parameter(const char * /*parameter_name*/,
+	const char * /*parameter_value*/)
+{
+
+}
+
+/*void PortTransBasic::Handle_Fd_Event(int fd, boolean is_readable,
+	boolean is_writable, boolean is_error) {}*/
+
+void PortTransBasic::Handle_Fd_Event_Error(int /*fd*/)
+{
+
+}
+
+void PortTransBasic::Handle_Fd_Event_Writable(int /*fd*/)
+{
+
+}
+
+void PortTransBasic::Handle_Fd_Event_Readable(int /*fd*/)
+{
+
+}
+
+/*void PortTransBasic::Handle_Timeout(double time_since_last_call) {}*/
+
+void PortTransBasic::user_map(const char * /*system_port*/)
+{
+
+}
+
+void PortTransBasic::user_unmap(const char * /*system_port*/)
+{
+
+}
+
+void PortTransBasic::user_start()
+{
+
+}
+
+void PortTransBasic::user_stop()
+{
+
+}
+
+void PortTransBasic::outgoing_send(const OCTETSTRING& /*send_par*/)
+{
+
+}
+
+} /* end of namespace */
+
diff --git a/regression_test/realtime/PortTransBasic.hh b/regression_test/realtime/PortTransBasic.hh
new file mode 100644
index 0000000000000000000000000000000000000000..0b688fa30ff1660da2a9f5b0d6c13e286f0359b1
--- /dev/null
+++ b/regression_test/realtime/PortTransBasic.hh
@@ -0,0 +1,44 @@
+// This Test Port skeleton header file was generated by the
+// TTCN-3 Compiler of the TTCN-3 Test Executor version CRL 113 200/6 R4C
+// for ebotbar (ebotbar@ebotbarVB) on Wed Nov 28 12:07:59 2018
+
+// Copyright (c) 2000-2018 Ericsson Telecom AB
+
+// You may modify this file. Add your attributes and prototypes of your
+// member functions here.
+
+#ifndef PortTransBasic_HH
+#define PortTransBasic_HH
+
+#include "realtimeTimestampPortTranslation.hh"
+
+namespace realtimeTimestampPortTranslation {
+
+class PortTransBasic : public PortTransBasic_BASE {
+public:
+	PortTransBasic(const char *par_port_name = NULL);
+	~PortTransBasic();
+
+	void set_parameter(const char *parameter_name,
+		const char *parameter_value);
+
+private:
+	/* void Handle_Fd_Event(int fd, boolean is_readable,
+		boolean is_writable, boolean is_error); */
+	void Handle_Fd_Event_Error(int fd);
+	void Handle_Fd_Event_Writable(int fd);
+	void Handle_Fd_Event_Readable(int fd);
+	/* void Handle_Timeout(double time_since_last_call); */
+protected:
+	void user_map(const char *system_port);
+	void user_unmap(const char *system_port);
+
+	void user_start();
+	void user_stop();
+
+	void outgoing_send(const OCTETSTRING& send_par);
+};
+
+} /* end of namespace */
+
+#endif
diff --git a/regression_test/realtime/PortTransRT.cc b/regression_test/realtime/PortTransRT.cc
new file mode 100644
index 0000000000000000000000000000000000000000..d69a0f034f2c6fd9a227b5879136f2fdac50ccb9
--- /dev/null
+++ b/regression_test/realtime/PortTransRT.cc
@@ -0,0 +1,81 @@
+// This Test Port skeleton source file was generated by the
+// TTCN-3 Compiler of the TTCN-3 Test Executor version CRL 113 200/6 R4C
+// for ebotbar (ebotbar@ebotbarVB) on Wed Nov 28 12:07:59 2018
+
+// Copyright (c) 2000-2018 Ericsson Telecom AB
+
+// You may modify this file. Complete the body of empty functions and
+// add your member functions here.
+
+#include "PortTransRT.hh"
+
+namespace realtimeTimestampPortTranslation {
+
+PortTransRT::PortTransRT(const char *par_port_name)
+	: PortTransRT_BASE(par_port_name)
+{
+
+}
+
+PortTransRT::~PortTransRT()
+{
+
+}
+
+void PortTransRT::set_parameter(const char * /*parameter_name*/,
+	const char * /*parameter_value*/)
+{
+
+}
+
+/*void PortTransRT::Handle_Fd_Event(int fd, boolean is_readable,
+	boolean is_writable, boolean is_error) {}*/
+
+void PortTransRT::Handle_Fd_Event_Error(int /*fd*/)
+{
+
+}
+
+void PortTransRT::Handle_Fd_Event_Writable(int /*fd*/)
+{
+
+}
+
+void PortTransRT::Handle_Fd_Event_Readable(int /*fd*/)
+{
+
+}
+
+/*void PortTransRT::Handle_Timeout(double time_since_last_call) {}*/
+
+void PortTransRT::user_map(const char * /*system_port*/)
+{
+
+}
+
+void PortTransRT::user_unmap(const char * /*system_port*/)
+{
+
+}
+
+void PortTransRT::user_start()
+{
+
+}
+
+void PortTransRT::user_stop()
+{
+
+}
+
+void PortTransRT::outgoing_send(const OCTETSTRING& send_par, FLOAT* timestamp_redirect)
+{
+  if (timestamp_redirect != NULL) {
+    *timestamp_redirect = TTCN_Runtime::now();
+  }
+  // redirect the message to the port's input
+  incoming_message(oct2str(send_par), TTCN_Runtime::now());
+}
+
+} /* end of namespace */
+
diff --git a/regression_test/realtime/PortTransRT.hh b/regression_test/realtime/PortTransRT.hh
new file mode 100644
index 0000000000000000000000000000000000000000..08fdd3df065aefb694d0ac26ab5684259dfe3429
--- /dev/null
+++ b/regression_test/realtime/PortTransRT.hh
@@ -0,0 +1,44 @@
+// This Test Port skeleton header file was generated by the
+// TTCN-3 Compiler of the TTCN-3 Test Executor version CRL 113 200/6 R4C
+// for ebotbar (ebotbar@ebotbarVB) on Wed Nov 28 12:07:59 2018
+
+// Copyright (c) 2000-2018 Ericsson Telecom AB
+
+// You may modify this file. Add your attributes and prototypes of your
+// member functions here.
+
+#ifndef PortTransRT_HH
+#define PortTransRT_HH
+
+#include "realtimeTimestampPortTranslation.hh"
+
+namespace realtimeTimestampPortTranslation {
+
+class PortTransRT : public PortTransRT_BASE {
+public:
+	PortTransRT(const char *par_port_name = NULL);
+	~PortTransRT();
+
+	void set_parameter(const char *parameter_name,
+		const char *parameter_value);
+
+private:
+	/* void Handle_Fd_Event(int fd, boolean is_readable,
+		boolean is_writable, boolean is_error); */
+	void Handle_Fd_Event_Error(int fd);
+	void Handle_Fd_Event_Writable(int fd);
+	void Handle_Fd_Event_Readable(int fd);
+	/* void Handle_Timeout(double time_since_last_call); */
+protected:
+	void user_map(const char *system_port);
+	void user_unmap(const char *system_port);
+
+	void user_start();
+	void user_stop();
+
+	void outgoing_send(const OCTETSTRING& send_par, FLOAT* timestamp_redirect);
+};
+
+} /* end of namespace */
+
+#endif
diff --git a/regression_test/realtime/config.cfg b/regression_test/realtime/config.cfg
index 9228015fe28e53f8563f83a5b21de46986ae0e9f..1ff31230205e4a6c25d8c3e573daff1d5b78ee6a 100644
--- a/regression_test/realtime/config.cfg
+++ b/regression_test/realtime/config.cfg
@@ -10,10 +10,12 @@
 #
 ###############################################################################
 [LOGGING]
-LogFile := "realtime_%r.log"
+LogFile := "logs/realtime_%r.log"
 FileMask := LOG_ALL
 ConsoleMask := TTCN_ERROR | TTCN_TESTCASE | TTCN_STATISTICS
 
 [EXECUTE]
 realtimeNow
 realtimeTimestamp
+realtimeTimestampAnyFrom
+realtimeTimestampPortTranslation
diff --git a/regression_test/realtime/realtimeTimestamp.ttcn b/regression_test/realtime/realtimeTimestamp.ttcn
index e585bf0717ead9039264f0fd9d6c75e481e28f0c..66de4b957e3fc3d66ad8a2580e623a34092cde6b 100644
--- a/regression_test/realtime/realtimeTimestamp.ttcn
+++ b/regression_test/realtime/realtimeTimestamp.ttcn
@@ -37,10 +37,10 @@ type enumerated IncomingOperation {
 type enumerated OutgoingOperation {
   Send, Call, Reply, Raise }
 
-external function ef_incoming_message(in integer p_msg, in boolean p_set_timestamp);
-external function ef_incoming_call(in integer p_par, in boolean p_set_timestamp);
-external function ef_incoming_reply(in integer p_par, in charstring p_ret, in boolean p_set_timestamp);
-external function ef_incoming_exception(in boolean p_ex, in boolean p_set_timestamp);
+external function ef_incoming_message(PortMsg p_pt, in integer p_msg, in boolean p_set_timestamp);
+external function ef_incoming_call(PortProc p_pt, in integer p_par, in boolean p_set_timestamp);
+external function ef_incoming_reply(PortProc p_pt, in integer p_par, in charstring p_ret, in boolean p_set_timestamp);
+external function ef_incoming_exception(PortProc p_pt, in boolean p_ex, in boolean p_set_timestamp);
 
 /////////////////////////////////////////////////////////////////////////
 ///////////// Test function for all incoming operations /////////////////
@@ -54,16 +54,16 @@ function f_test_timestamp_inc_op(in IncomingOperation p_operation, in boolean p_
   // and either set or don't set the timestamp)
   select (p_operation) {
     case (Receive, CheckReceive, Trigger, Check) {
-      ef_incoming_message(5, p_set_timestamp);
+      ef_incoming_message(ptMsg, 5, p_set_timestamp);
     }
     case (Getcall, CheckGetcall) {
-      ef_incoming_call(5, p_set_timestamp);
+      ef_incoming_call(ptProc, 5, p_set_timestamp);
     }
     case (Getreply, CheckGetreply) {
-      ef_incoming_reply(5, "x", p_set_timestamp);
+      ef_incoming_reply(ptProc, 5, "x", p_set_timestamp);
     }
     case (Catch, CheckCatch) {
-      ef_incoming_exception(true, p_set_timestamp);
+      ef_incoming_exception(ptProc, true, p_set_timestamp);
     }
   }
   
@@ -106,7 +106,7 @@ function f_test_timestamp_inc_op(in IncomingOperation p_operation, in boolean p_
   time_after := now;
   if (p_set_timestamp) {
     if (time_before > time_operation or time_operation > time_after) {
-      setverdict(fail, "Incorrect times measured. Before: ", time_before, ", check-catch: ", time_operation, ", after: ", time_after, ".");
+      setverdict(fail, "Incorrect times measured. Before: ", time_before, ", operation: ", time_operation, ", after: ", time_after, ".");
     }
   }
   else if (isbound(time_operation)) {
@@ -147,7 +147,7 @@ function f_test_timestamp_outg_op(in OutgoingOperation p_operation, in boolean p
   time_after := now;
   if (p_set_timestamp) {
     if (time_before > time_operation or time_operation > time_after) {
-      setverdict(fail, "Incorrect times measured. Before: ", time_before, ", check-catch: ", time_operation, ", after: ", time_after, ".");
+      setverdict(fail, "Incorrect times measured. Before: ", time_before, ", operation: ", time_operation, ", after: ", time_after, ".");
     }
   }
   else if (isbound(time_operation)) {
diff --git a/regression_test/realtime/realtimeTimestampAnyFrom.ttcn b/regression_test/realtime/realtimeTimestampAnyFrom.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..c8d72d7ca47ff510c50358acf2ece8d97f67392d
--- /dev/null
+++ b/regression_test/realtime/realtimeTimestampAnyFrom.ttcn
@@ -0,0 +1,337 @@
+/******************************************************************************
+ * Copyright (c) 2000-2018 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Baranyi, Botond
+ *
+ ******************************************************************************/
+
+// This module tests timestamp redirects for real-time port operations in the 'any from' clause
+module realtimeTimestampAnyFrom {
+
+import from realtimeTimestamp all;
+
+type component CT2 {
+  port PortMsg ptaMsg[2][3];
+  port PortProc ptaProc[3];
+}
+
+function f_map_ports() runs on CT2 {
+  for (var integer i := 0; i < sizeof(ptaMsg); i := i + 1) {
+    for (var integer j := 0; j < sizeof(ptaMsg[i]); j := j + 1) {
+      map(self:ptaMsg[i][j], system:ptaMsg[i][j]);
+    }
+  }
+  for (var integer k := 0; k < sizeof(ptaProc); k := k + 1) {
+    map(self:ptaProc[k], system:ptaProc[k]);
+  }
+}
+
+/////////////////////////////////////////////////////////////////////////
+///////////// Test function for all incoming operations /////////////////
+/////////////////////////////////////////////////////////////////////////
+
+function f_test_timestamp_any_from(in IncomingOperation p_operation, in boolean p_set_timestamp) runs on CT2 {
+  f_map_ports();
+  var float time_before := now, time_operation, time_after;
+  
+  // initiate the specified operation through an external function
+  // (these simulate the arrival of a message/call/reply/exception from the system component,
+  // and either set or don't set the timestamp)
+  select (p_operation) {
+    case (Receive, CheckReceive, Trigger, Check) {
+      ef_incoming_message(ptaMsg[0][2], 5, p_set_timestamp);
+    }
+    case (Getcall, CheckGetcall) {
+      ef_incoming_call(ptaProc[1], 5, p_set_timestamp);
+    }
+    case (Getreply, CheckGetreply) {
+      ef_incoming_reply(ptaProc[1], 5, "x", p_set_timestamp);
+    }
+    case (Catch, CheckCatch) {
+      ef_incoming_exception(ptaProc[1], true, p_set_timestamp);
+    }
+  }
+  
+  // start a timer (just in case)
+  timer t := 0.5;
+  t.start;
+  alt {
+    [p_operation == Receive      ] any from ptaMsg.receive(integer: ?) -> timestamp time_operation { }
+    [p_operation == CheckReceive ] any from ptaMsg.check(receive(integer: ?) -> timestamp time_operation) { }
+    [p_operation == Trigger      ] any from ptaMsg.trigger(integer: ?) -> timestamp time_operation { }
+    [p_operation == Getcall      ] any from ptaProc.getcall(Sig: { ? }) -> timestamp time_operation { }
+    [p_operation == CheckGetcall ] any from ptaProc.check(getcall(Sig: { ? }) -> timestamp time_operation) { }
+    [p_operation == Getreply     ] any from ptaProc.getreply(Sig: { ? } value charstring: ?) -> timestamp time_operation { }
+    [p_operation == CheckGetreply] any from ptaProc.check(getreply(Sig: { ? } value charstring: ?) -> timestamp time_operation) { }
+    [p_operation == Catch        ] any from ptaProc.catch(Sig, boolean: ?) -> timestamp time_operation { }
+    [p_operation == CheckCatch   ] any from ptaProc.check(catch(Sig, boolean: ?) -> timestamp time_operation) { }
+    [p_operation == Check        ] any from ptaMsg.check(-> timestamp time_operation) { }
+    [] t.timeout { setverdict(fail, "Operation timed out."); }
+  }
+  
+  // check results
+  time_after := now;
+  if (p_set_timestamp) {
+    if (time_before > time_operation or time_operation > time_after) {
+      setverdict(fail, "Incorrect times measured. Before: ", time_before, ", operation: ", time_operation, ", after: ", time_after, ".");
+    }
+  }
+  else if (isbound(time_operation)) {
+    setverdict(fail, "Timestamp was supposed to be unset.");
+  }
+  setverdict(pass);
+}
+
+/////////////////////////////////////////////////////////////////////////
+////////////////////////// Test cases ///////////////////////////////////
+/////////////////////////////////////////////////////////////////////////
+
+testcase tc_timestamp_any_from_receive_mtc() runs on CT2 {
+  f_test_timestamp_any_from(Receive, true);
+}
+
+testcase tc_timestamp_any_from_receive_ptc() runs on CT2 {
+  var CT2 ct := CT2.create;
+  ct.start(f_test_timestamp_any_from(Receive, true));
+  ct.done;
+}
+
+testcase tc_timestamp_any_from_check_receive_mtc() runs on CT2 {
+  f_test_timestamp_any_from(CheckReceive, true);
+}
+
+testcase tc_timestamp_any_from_check_receive_ptc() runs on CT2 {
+  var CT2 ct := CT2.create;
+  ct.start(f_test_timestamp_any_from(CheckReceive, true));
+  ct.done;
+}
+
+testcase tc_timestamp_any_from_trigger_mtc() runs on CT2 {
+  f_test_timestamp_any_from(Trigger, true);
+}
+
+testcase tc_timestamp_any_from_trigger_ptc() runs on CT2 {
+  var CT2 ct := CT2.create;
+  ct.start(f_test_timestamp_any_from(Trigger, true));
+  ct.done;
+}
+
+testcase tc_timestamp_any_from_getcall_mtc() runs on CT2 {
+  f_test_timestamp_any_from(Getcall, true);
+}
+
+testcase tc_timestamp_any_from_getcall_ptc() runs on CT2 {
+  var CT2 ct := CT2.create;
+  ct.start(f_test_timestamp_any_from(Getcall, true));
+  ct.done;
+}
+
+testcase tc_timestamp_any_from_check_getcall_mtc() runs on CT2 {
+  f_test_timestamp_any_from(CheckGetcall, true);
+}
+
+testcase tc_timestamp_any_from_check_getcall_ptc() runs on CT2 {
+  var CT2 ct := CT2.create;
+  ct.start(f_test_timestamp_any_from(CheckGetcall, true));
+  ct.done;
+}
+
+testcase tc_timestamp_any_from_getreply_mtc() runs on CT2 {
+  f_test_timestamp_any_from(Getreply, true);
+}
+
+testcase tc_timestamp_any_from_getreply_ptc() runs on CT2 {
+  var CT2 ct := CT2.create;
+  ct.start(f_test_timestamp_any_from(Getreply, true));
+  ct.done;
+}
+
+testcase tc_timestamp_any_from_check_getreply_mtc() runs on CT2 {
+  f_test_timestamp_any_from(CheckGetreply, true);
+}
+
+testcase tc_timestamp_any_from_check_getreply_ptc() runs on CT2 {
+  var CT2 ct := CT2.create;
+  ct.start(f_test_timestamp_any_from(CheckGetreply, true));
+  ct.done;
+}
+
+testcase tc_timestamp_any_from_catch_mtc() runs on CT2 {
+  f_test_timestamp_any_from(Catch, true);
+}
+
+testcase tc_timestamp_any_from_catch_ptc() runs on CT2 {
+  var CT2 ct := CT2.create;
+  ct.start(f_test_timestamp_any_from(Catch, true));
+  ct.done;
+}
+
+testcase tc_timestamp_any_from_check_catch_mtc() runs on CT2 {
+  f_test_timestamp_any_from(CheckCatch, true);
+}
+
+testcase tc_timestamp_any_from_check_catch_ptc() runs on CT2 {
+  var CT2 ct := CT2.create;
+  ct.start(f_test_timestamp_any_from(CheckCatch, true));
+  ct.done;
+}
+
+testcase tc_timestamp_any_from_check_mtc() runs on CT2 {
+  f_test_timestamp_any_from(Check, true);
+}
+
+testcase tc_timestamp_any_from_check_ptc() runs on CT2 {
+  var CT2 ct := CT2.create;
+  ct.start(f_test_timestamp_any_from(Check, true));
+  ct.done;
+}
+
+testcase tc_no_timestamp_any_from_receive_mtc() runs on CT2 {
+  f_test_timestamp_any_from(Receive, false);
+}
+
+testcase tc_no_timestamp_any_from_receive_ptc() runs on CT2 {
+  var CT2 ct := CT2.create;
+  ct.start(f_test_timestamp_any_from(Receive, false));
+  ct.done;
+}
+
+testcase tc_no_timestamp_any_from_check_receive_mtc() runs on CT2 {
+  f_test_timestamp_any_from(CheckReceive, false);
+}
+
+testcase tc_no_timestamp_any_from_check_receive_ptc() runs on CT2 {
+  var CT2 ct := CT2.create;
+  ct.start(f_test_timestamp_any_from(CheckReceive, false));
+  ct.done;
+}
+
+testcase tc_no_timestamp_any_from_trigger_mtc() runs on CT2 {
+  f_test_timestamp_any_from(Trigger, false);
+}
+
+testcase tc_no_timestamp_any_from_trigger_ptc() runs on CT2 {
+  var CT2 ct := CT2.create;
+  ct.start(f_test_timestamp_any_from(Trigger, false));
+  ct.done;
+}
+
+testcase tc_no_timestamp_any_from_getcall_mtc() runs on CT2 {
+  f_test_timestamp_any_from(Getcall, false);
+}
+
+testcase tc_no_timestamp_any_from_getcall_ptc() runs on CT2 {
+  var CT2 ct := CT2.create;
+  ct.start(f_test_timestamp_any_from(Getcall, false));
+  ct.done;
+}
+
+testcase tc_no_timestamp_any_from_check_getcall_mtc() runs on CT2 {
+  f_test_timestamp_any_from(CheckGetcall, false);
+}
+
+testcase tc_no_timestamp_any_from_check_getcall_ptc() runs on CT2 {
+  var CT2 ct := CT2.create;
+  ct.start(f_test_timestamp_any_from(CheckGetcall, false));
+  ct.done;
+}
+
+testcase tc_no_timestamp_any_from_getreply_mtc() runs on CT2 {
+  f_test_timestamp_any_from(Getreply, false);
+}
+
+testcase tc_no_timestamp_any_from_getreply_ptc() runs on CT2 {
+  var CT2 ct := CT2.create;
+  ct.start(f_test_timestamp_any_from(Getreply, false));
+  ct.done;
+}
+
+testcase tc_no_timestamp_any_from_check_getreply_mtc() runs on CT2 {
+  f_test_timestamp_any_from(CheckGetreply, false);
+}
+
+testcase tc_no_timestamp_any_from_check_getreply_ptc() runs on CT2 {
+  var CT2 ct := CT2.create;
+  ct.start(f_test_timestamp_any_from(CheckGetreply, false));
+  ct.done;
+}
+
+testcase tc_no_timestamp_any_from_catch_mtc() runs on CT2 {
+  f_test_timestamp_any_from(Catch, false);
+}
+
+testcase tc_no_timestamp_any_from_catch_ptc() runs on CT2 {
+  var CT2 ct := CT2.create;
+  ct.start(f_test_timestamp_any_from(Catch, false));
+  ct.done;
+}
+
+testcase tc_no_timestamp_any_from_check_catch_mtc() runs on CT2 {
+  f_test_timestamp_any_from(CheckCatch, false);
+}
+
+testcase tc_no_timestamp_any_from_check_catch_ptc() runs on CT2 {
+  var CT2 ct := CT2.create;
+  ct.start(f_test_timestamp_any_from(CheckCatch, false));
+  ct.done;
+}
+
+testcase tc_no_timestamp_any_from_check_mtc() runs on CT2 {
+  f_test_timestamp_any_from(Check, false);
+}
+
+testcase tc_no_timestamp_any_from_check_ptc() runs on CT2 {
+  var CT2 ct := CT2.create;
+  ct.start(f_test_timestamp_any_from(Check, false));
+  ct.done;
+}
+
+control {
+  execute(tc_timestamp_any_from_receive_mtc());
+  execute(tc_timestamp_any_from_receive_ptc());
+  execute(tc_timestamp_any_from_check_receive_mtc());
+  execute(tc_timestamp_any_from_check_receive_ptc());
+  execute(tc_timestamp_any_from_trigger_mtc());
+  execute(tc_timestamp_any_from_trigger_ptc());
+  execute(tc_timestamp_any_from_getcall_mtc());
+  execute(tc_timestamp_any_from_getcall_ptc());
+  execute(tc_timestamp_any_from_check_getcall_mtc());
+  execute(tc_timestamp_any_from_check_getcall_ptc());
+  execute(tc_timestamp_any_from_getreply_mtc());
+  execute(tc_timestamp_any_from_getreply_ptc());
+  execute(tc_timestamp_any_from_check_getreply_mtc());
+  execute(tc_timestamp_any_from_check_getreply_ptc());
+  execute(tc_timestamp_any_from_catch_mtc());
+  execute(tc_timestamp_any_from_catch_ptc());
+  execute(tc_timestamp_any_from_check_catch_mtc());
+  execute(tc_timestamp_any_from_check_catch_ptc());
+  execute(tc_timestamp_any_from_check_mtc());
+  execute(tc_timestamp_any_from_check_ptc());
+  execute(tc_no_timestamp_any_from_receive_mtc());
+  execute(tc_no_timestamp_any_from_receive_ptc());
+  execute(tc_no_timestamp_any_from_check_receive_mtc());
+  execute(tc_no_timestamp_any_from_check_receive_ptc());
+  execute(tc_no_timestamp_any_from_trigger_mtc());
+  execute(tc_no_timestamp_any_from_trigger_ptc());
+  execute(tc_no_timestamp_any_from_getcall_mtc());
+  execute(tc_no_timestamp_any_from_getcall_ptc());
+  execute(tc_no_timestamp_any_from_check_getcall_mtc());
+  execute(tc_no_timestamp_any_from_check_getcall_ptc());
+  execute(tc_no_timestamp_any_from_getreply_mtc());
+  execute(tc_no_timestamp_any_from_getreply_ptc());
+  execute(tc_no_timestamp_any_from_check_getreply_mtc());
+  execute(tc_no_timestamp_any_from_check_getreply_ptc());
+  execute(tc_no_timestamp_any_from_catch_mtc());
+  execute(tc_no_timestamp_any_from_catch_ptc());
+  execute(tc_no_timestamp_any_from_check_catch_mtc());
+  execute(tc_no_timestamp_any_from_check_catch_ptc());
+  execute(tc_no_timestamp_any_from_check_mtc());
+  execute(tc_no_timestamp_any_from_check_ptc());
+}
+
+}
diff --git a/regression_test/realtime/realtimeTimestampPortTranslation.ttcn b/regression_test/realtime/realtimeTimestampPortTranslation.ttcn
new file mode 100644
index 0000000000000000000000000000000000000000..8a2fe596179eecc2b37855c238defbc74a9fbbab
--- /dev/null
+++ b/regression_test/realtime/realtimeTimestampPortTranslation.ttcn
@@ -0,0 +1,248 @@
+/******************************************************************************
+ * Copyright (c) 2000-2018 Ericsson Telecom AB
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * Contributors:
+ *   Baranyi, Botond
+ *
+ ******************************************************************************/
+
+// This module tests timestamp redirects for real-time port operations on translation ports
+module realtimeTimestampPortTranslation {
+
+/////////////////////////////////////////////////////////////////////////
+//////////////////// Port translation functions /////////////////////////
+/////////////////////////////////////////////////////////////////////////
+
+function int_2_char(in integer x, out charstring y) port PortTransRT {
+  y := int2str(x);
+  port.setstate(0);
+}
+with {
+  extension "prototype(fast)";
+}
+
+const octetstring SPECIAL_WITH_TIMESTAMP := 'DEADBEEF'O;
+const octetstring SPECIAL_WITH_NO_TIMESTAMP := '0123ABCD'O;
+
+function oct_2_int(in octetstring x, out integer y) port PortTransRT {
+  if (x == SPECIAL_WITH_TIMESTAMP or x == SPECIAL_WITH_NO_TIMESTAMP) {
+    // special case:
+    // test timestamp redirects in a translation function
+    var float time_before := now, time_send, time_receive, time_after;
+    
+    // the port's output is redirected to its input (so this will trigger an incoming message)
+    port.send('AB'O) -> timestamp time_send;
+    
+    alt {
+      [] port.receive(charstring: ?) -> timestamp time_receive { }
+    }
+    
+    // check results
+    time_after := now;
+    if (x == SPECIAL_WITH_TIMESTAMP) {
+      if (time_before > time_send or time_send > time_receive or time_receive > time_after) {
+        setverdict(fail, "Incorrect times measured. Before: ", time_before, ", send: ", time_send, ", receive: ", time_receive, ", after: ", time_after, ".");
+      }
+    }
+    else if (isbound(time_send) or isbound(time_receive)) {
+      setverdict(fail, "Timestamps were supposed to be unset.");
+    }
+    setverdict(pass);
+    y := 0;
+  }
+  else {
+    y := oct2int(x);
+  }
+  port.setstate(0);
+}
+with {
+  extension "prototype(fast)";
+}
+
+function int_2_char_dummy(in integer x, out charstring y) port PortTransBasic {
+  port.setstate(0);
+}
+with {
+  extension "prototype(fast)";
+}
+
+function oct_2_int_dummy(in octetstring x, out integer y) port PortTransBasic {
+  port.setstate(0);
+}
+with {
+  extension "prototype(fast)";
+}
+
+/////////////////////////////////////////////////////////////////////////
+////////////////////// Port and component types /////////////////////////
+/////////////////////////////////////////////////////////////////////////
+
+type port PortProvRT message realtime {
+  inout integer
+}
+with {
+  extension "provider";
+}
+
+type port PortProvBasic message {
+  inout integer
+}
+with {
+  extension "provider";
+}
+
+type port PortTransRT message realtime map to PortProvRT, PortProvBasic {
+  in charstring from integer with int_2_char()
+  out octetstring to integer with oct_2_int()
+}
+
+type port PortTransBasic message map to PortProvRT, PortProvBasic {
+  in charstring from integer with int_2_char_dummy()
+  out octetstring to integer with oct_2_int_dummy()
+}
+
+type component CT_Provider {
+  port PortProvRT ptProvRT;
+  port PortProvBasic ptProvB;
+}
+
+type component CT_User {
+  port PortTransRT ptTransRT;
+  port PortTransBasic ptTransB;
+}
+
+/////////////////////////////////////////////////////////////////////////
+/////////////////////////// Test functions //////////////////////////////
+/////////////////////////////////////////////////////////////////////////
+
+function f_test_timestamp_port_trans(in boolean p_set_timestamp) runs on CT_User {
+  var float time_before := now, time_send, time_receive, time_after;
+  
+  // the port's output is redirected to its input (so this will trigger an incoming message)
+  ptTransRT.send('03'O) -> timestamp time_send;
+  
+  alt {
+    [] ptTransRT.receive(charstring: ?) -> timestamp time_receive { }
+  }
+  
+  // check results
+  time_after := now;
+  if (p_set_timestamp) {
+    if (time_before > time_send or time_send > time_receive or time_receive > time_after) {
+      setverdict(fail, "Incorrect times measured. Before: ", time_before, ", send: ", time_send, ", receive: ", time_receive, ", after: ", time_after, ".");
+    }
+  }
+  else if (isbound(time_send) or isbound(time_receive)) {
+    setverdict(fail, "Timestamps were supposed to be unset.");
+  }
+  setverdict(pass);
+}
+
+function f_test_timestamp_in_trans_func(in boolean p_set_timestamp) runs on CT_User {
+  if (p_set_timestamp) {
+    ptTransRT.send(SPECIAL_WITH_TIMESTAMP);
+  }
+  else {
+    ptTransRT.send(SPECIAL_WITH_NO_TIMESTAMP);
+  }
+}
+
+/////////////////////////////////////////////////////////////////////////
+////////////////////////////// Testcases ////////////////////////////////
+/////////////////////////////////////////////////////////////////////////
+
+testcase tc_timestamp_port_trans_RT_provider_mtc() runs on CT_User system CT_Provider {
+  // mapped with runtime provider port => timestamps should be set
+  map(mtc:ptTransRT, system:ptProvRT);
+  f_test_timestamp_port_trans(true);
+}
+
+testcase tc_timestamp_port_trans_RT_provider_ptc() runs on CT_User system CT_Provider {
+  var CT_User ct := CT_User.create;
+  // mapped with runtime provider port => timestamps should be set
+  map(ct:ptTransRT, system:ptProvRT);
+  ct.start(f_test_timestamp_port_trans(true));
+  ct.done;
+}
+
+testcase tc_timestamp_port_trans_nonRT_provider_mtc() runs on CT_User system CT_Provider {
+  // mapped with non-runtime provider port => timestamps shouldn't be set
+  map(mtc:ptTransRT, system:ptProvB);
+  f_test_timestamp_port_trans(false);
+}
+
+testcase tc_timestamp_port_trans_nonRT_provider_ptc() runs on CT_User system CT_Provider {
+  var CT_User ct := CT_User.create;
+  // mapped with non-runtime provider port => timestamps shouldn't be set
+  map(ct:ptTransRT, system:ptProvB);
+  ct.start(f_test_timestamp_port_trans(false));
+  ct.done;
+}
+
+testcase tc_timestamp_port_trans_no_provider_mtc() runs on CT_User system CT_User {
+  // not mapped in translation mode => timestamps should be set
+  map(mtc:ptTransRT, system:ptTransRT);
+  f_test_timestamp_port_trans(true);
+}
+
+testcase tc_timestamp_port_trans_no_provider_ptc() runs on CT_User system CT_User {
+  var CT_User ct := CT_User.create;
+  // not mapped in translation mode => timestamps should be set
+  map(ct:ptTransRT, system:ptTransRT);
+  ct.start(f_test_timestamp_port_trans(true));
+  ct.done;
+}
+
+testcase tc_cross_map() runs on CT_User system CT_Provider {
+  // testing whether a non-realtime translation port can be mapped to a realtime provider port
+  map(mtc:ptTransB, system:ptProvRT);
+  setverdict(pass);
+}
+
+testcase tc_timestamp_in_port_trans_func_RT_provider_mtc() runs on CT_User system CT_Provider {
+  // mapped with runtime provider port => timestamps should be set
+  map(mtc:ptTransRT, system:ptProvRT);
+  f_test_timestamp_in_trans_func(true);
+}
+
+testcase tc_timestamp_in_port_trans_func_RT_provider_ptc() runs on CT_User system CT_Provider {
+  var CT_User ct := CT_User.create;
+  // mapped with runtime provider port => timestamps should be set
+  map(ct:ptTransRT, system:ptProvRT);
+  ct.start(f_test_timestamp_in_trans_func(true));
+  ct.done;
+}
+
+testcase tc_timestamp_in_port_trans_func_nonRT_provider_mtc() runs on CT_User system CT_Provider {
+  // mapped with non-runtime provider port => timestamps shouldn't be set
+  map(mtc:ptTransRT, system:ptProvB);
+  f_test_timestamp_in_trans_func(false);
+}
+
+testcase tc_timestamp_in_port_trans_func_nonRT_provider_ptc() runs on CT_User system CT_Provider {
+  var CT_User ct := CT_User.create;
+  // mapped with non-runtime provider port => timestamps shouldn't be set
+  map(ct:ptTransRT, system:ptProvB);
+  ct.start(f_test_timestamp_in_trans_func(false));
+  ct.done;
+}
+
+control {
+  execute(tc_timestamp_port_trans_RT_provider_mtc());
+  execute(tc_timestamp_port_trans_RT_provider_ptc());
+  execute(tc_timestamp_port_trans_nonRT_provider_mtc());
+  execute(tc_timestamp_port_trans_nonRT_provider_ptc());
+  execute(tc_timestamp_port_trans_no_provider_mtc());
+  execute(tc_timestamp_port_trans_no_provider_ptc());
+  execute(tc_cross_map());
+  execute(tc_timestamp_in_port_trans_func_RT_provider_mtc());
+  execute(tc_timestamp_in_port_trans_func_RT_provider_ptc());
+  execute(tc_timestamp_in_port_trans_func_nonRT_provider_mtc());
+  execute(tc_timestamp_in_port_trans_func_nonRT_provider_ptc());
+}
+
+}