diff --git a/compiler2/ttcn3/Statement.cc b/compiler2/ttcn3/Statement.cc
index 38e9a8955bb581ad342d3730b16fbd8e77afe2c9..e6e4848e917eb30c79ddc8d351cf6e098eca0d03 100644
--- a/compiler2/ttcn3/Statement.cc
+++ b/compiler2/ttcn3/Statement.cc
@@ -1414,6 +1414,7 @@ namespace Ttcn {
       config_op.compref2=p_compref2;
       config_op.portref2=p_portref2;
       config_op.translate=false;
+      config_op.first_is_system = false;
       break;
     default:
       FATAL_ERROR("Statement::Statement()");
@@ -4958,14 +4959,21 @@ error:
         warning("Port type `%s' cannot send or receive from system port type `%s'.",
           pt2->get_typename().c_str(), pt1->get_typename().c_str());
       }
+      if (config_op.translate) {
+        config_op.first_is_system = true;
+      }
     } else {
       // we have no idea which one is the system port
-      config_op.translate = (!ptb1->is_legacy() && ptb1->is_translate(ptb2)) ||
-                            (!ptb2->is_legacy() && ptb2->is_translate(ptb1));
-      if (!config_op.translate && !ptb1->is_mappable(ptb1) && !ptb2->is_mappable(ptb1)) {
+      bool first_is_mapped_to_second = !ptb1->is_legacy() && ptb1->is_translate(ptb2);
+      bool second_is_mapped_to_first = !ptb2->is_legacy() && ptb2->is_translate(ptb1);
+      config_op.translate = first_is_mapped_to_second || second_is_mapped_to_first;
+      if (!config_op.translate && !ptb1->is_mappable(ptb2) && !ptb2->is_mappable(ptb1)) {
         error("The mapping between port types `%s' and `%s' is not consistent",
                 pt1->get_typename().c_str(), pt2->get_typename().c_str());
       }
+      if (config_op.translate) {
+        config_op.first_is_system = second_is_mapped_to_first;
+      }
     }
     if (!config_op.translate) {
       if (ptb1->is_internal()) {
@@ -7639,14 +7647,16 @@ error:
         config_op.portref1->generate_code_portref(&expr, my_sb);
         expr.expr = mputstr(expr.expr, ".port_is_started())) {\n");
         config_op.portref1->generate_code_portref(&expr, my_sb);
-        expr.expr = mputstr(expr.expr, ".activate_port(TRUE);\n");
+        expr.expr = mputprintf(expr.expr, ".activate_port(%s);\n",
+          config_op.first_is_system ? "TRUE" : "FALSE");
         config_op.portref1->generate_code_portref(&expr, my_sb);
         expr.expr = mputstr(expr.expr, ".start();\n}\n");
         expr.expr = mputstr(expr.expr, "if (!(");
         config_op.portref2->generate_code_portref(&expr, my_sb);
         expr.expr = mputstr(expr.expr, ".port_is_started())) {\n");
         config_op.portref2->generate_code_portref(&expr, my_sb);
-        expr.expr = mputstr(expr.expr, ".activate_port(TRUE);\n");
+        expr.expr = mputprintf(expr.expr, ".activate_port(%s);\n",
+          config_op.first_is_system ? "FALSE" : "TRUE");
         config_op.portref2->generate_code_portref(&expr, my_sb);
         expr.expr = mputstr(expr.expr, ".start();\n}\n");
       }
diff --git a/compiler2/ttcn3/Statement.hh b/compiler2/ttcn3/Statement.hh
index d77479586988c4ea97414d568faf1f5d22a55654..d5a3e111a6a73ff95064654007b12ff6a5ace798 100644
--- a/compiler2/ttcn3/Statement.hh
+++ b/compiler2/ttcn3/Statement.hh
@@ -348,6 +348,7 @@ namespace Ttcn {
         Value *compref2;
         Reference *portref2;
         bool translate; // true if a map statement enables translation mode
+        bool first_is_system; // true if the first operand is the system component (only used in translation mode)
       } config_op; ///< used by S_CONNECT, S_MAP, S_DISCONNECT, S_UNMAP
 
       struct {