diff --git a/etc/auv/transports.ini b/etc/auv/transports.ini
index d011845309..303de28689 100644
--- a/etc/auv/transports.ini
+++ b/etc/auv/transports.ini
@@ -131,6 +131,7 @@ Communication Range                     = 0
 Underwater Communications               = true
 Always Transmitted Messages             = Abort,
                                           SimulatedState
+Loopback Internal Messages              = true
 
 [Transports.Logging]
 Enabled                                 = Always
@@ -294,6 +295,7 @@ Transports                              = Abort,
                                           WaterDensity,
                                           WaterVelocity,
                                           YoYo
+Loopback Internal Messages              = true
 
 [Transports.TCP.Server/Console]
 Enabled                                 = Never
@@ -345,6 +347,7 @@ Transports                              = EntityParameters,
                                           VehicleMedium,
                                           LogBookEntry,
                                           ManeuverDone
+Loopback Internal Messages              = true
 
 [Transports.TCP.Server/BackSeat]
 Enabled                                 = Always
@@ -384,6 +387,7 @@ Transports                              = Announce,
                                           VehicleMedium,
                                           VehicleState
 Filtered Entities                       = Temperature:CTD+OEMX+Water Quality Sensor+CTD Simulator
+Loopback Internal Messages              = true
 
 [Transports.CommManager]
 Enabled                                 = Always
diff --git a/etc/common/transports.ini b/etc/common/transports.ini
index 4203f25bae..c98e37d75d 100644
--- a/etc/common/transports.ini
+++ b/etc/common/transports.ini
@@ -65,6 +65,8 @@ Transports                              = Chlorophyll,
                                           Voltage,
                                           PH,
                                           Redox
+Loopback Internal Messages              = true
+
 [Transports.Cache]
 Enabled                                 = Always
 Entity Label                            = Cache
diff --git a/etc/lauv-noptilus-2-cpu-cam.ini b/etc/lauv-noptilus-2-cpu-cam.ini
index dc85996572..c34d93883b 100644
--- a/etc/lauv-noptilus-2-cpu-cam.ini
+++ b/etc/lauv-noptilus-2-cpu-cam.ini
@@ -88,6 +88,7 @@ Transports                              = EntityState,
                                           LogBookEntry,
                                           LoggingControl,
                                           Temperature
+Loopback Internal Messages              = true
 
 [Transports.HTTP]
 Enabled                                 = Always
diff --git a/etc/lauv-noptilus-3-cpu-cam.ini b/etc/lauv-noptilus-3-cpu-cam.ini
index 1fc650b906..1f42bbc253 100644
--- a/etc/lauv-noptilus-3-cpu-cam.ini
+++ b/etc/lauv-noptilus-3-cpu-cam.ini
@@ -37,3 +37,4 @@ Camera IPv4 Address                     = 10.0.10.106
 
 [Transports.TCP.Client]
 Server - Address                        = 10.0.10.100
+Loopback Internal Messages              = true
diff --git a/etc/lauv-seacon-1-aux.ini b/etc/lauv-seacon-1-aux.ini
index 018ab7b45b..d8e8b9eeb0 100644
--- a/etc/lauv-seacon-1-aux.ini
+++ b/etc/lauv-seacon-1-aux.ini
@@ -63,6 +63,7 @@ Transports                              = Heartbeat,
                                           EntityState,
                                           EntityActivationState,
                                           EntityInfo
+Loopback Internal Messages              = true
 
 [Transports.FTP]
 Enabled                                 = Always
diff --git a/etc/lauv-seacon-2-aux.ini b/etc/lauv-seacon-2-aux.ini
index 773941abb9..b5544d358a 100644
--- a/etc/lauv-seacon-2-aux.ini
+++ b/etc/lauv-seacon-2-aux.ini
@@ -67,6 +67,7 @@ Transports                              = DevDataText,
                                           PulseDetectionControl,
                                           SonarData,
                                           Temperature
+Loopback Internal Messages              = true
 
 [Sensors.DeepVisionOSM2]
 Output Data Format                      = IMC+DVS
diff --git a/etc/lauv-seacon-2-cpu-cam.ini b/etc/lauv-seacon-2-cpu-cam.ini
index 5faa56d82f..0283c42557 100644
--- a/etc/lauv-seacon-2-cpu-cam.ini
+++ b/etc/lauv-seacon-2-cpu-cam.ini
@@ -89,6 +89,7 @@ Transports                              = EntityState,
                                           LogBookEntry,
                                           LoggingControl,
                                           Temperature
+Loopback Internal Messages              = true
 
 [Transports.HTTP]
 Enabled                                 = Always
diff --git a/etc/lauv-seacon-3-aux.ini b/etc/lauv-seacon-3-aux.ini
index 2bb4f7c456..3796f076c6 100644
--- a/etc/lauv-seacon-3-aux.ini
+++ b/etc/lauv-seacon-3-aux.ini
@@ -67,6 +67,7 @@ Transports                              = DevDataText,
                                           PulseDetectionControl,
                                           SonarData,
                                           Temperature
+Loopback Internal Messages              = true
 
 [Sensors.Klein3500]
 Debug Level                             = None
diff --git a/etc/lauv-seacon-3-cpu-cam.ini b/etc/lauv-seacon-3-cpu-cam.ini
index bddbae05c1..7490ae3825 100644
--- a/etc/lauv-seacon-3-cpu-cam.ini
+++ b/etc/lauv-seacon-3-cpu-cam.ini
@@ -89,6 +89,7 @@ Transports                              = EntityState,
                                           LogBookEntry,
                                           LoggingControl,
                                           Temperature
+Loopback Internal Messages              = true
 
 [Transports.HTTP]
 Enabled                                 = Always
diff --git a/etc/lauv-xplore-4-aux.ini b/etc/lauv-xplore-4-aux.ini
index 6fbddba9d7..bc9cd8d07e 100644
--- a/etc/lauv-xplore-4-aux.ini
+++ b/etc/lauv-xplore-4-aux.ini
@@ -44,6 +44,7 @@ Entity Label                            = TCP to Master
 Server - Address                        = 10.0.10.150
 Server - Port                           = 9999
 Transports                              = RSSI
+Loopback Internal Messages              = true
 
 [Sensors.WifiRSSI]
 Enabled                                 = Hardware
diff --git a/etc/lauv-xtreme-2-aux.ini b/etc/lauv-xtreme-2-aux.ini
index f2846bbfcb..7928acbe8a 100644
--- a/etc/lauv-xtreme-2-aux.ini
+++ b/etc/lauv-xtreme-2-aux.ini
@@ -61,6 +61,7 @@ Transports                              = EntityState,
                                           PulseDetectionControl,
                                           SonarData,
                                           Temperature
+Loopback Internal Messages              = true
 
 [Sensors.Klein3500]
 Debug Level                             = None
diff --git a/etc/lauv-xtreme-2-cpu-cam.ini b/etc/lauv-xtreme-2-cpu-cam.ini
index 9c129c409e..f61c39d440 100644
--- a/etc/lauv-xtreme-2-cpu-cam.ini
+++ b/etc/lauv-xtreme-2-cpu-cam.ini
@@ -88,6 +88,7 @@ Transports                              = EntityState,
                                           LogBookEntry,
                                           LoggingControl,
                                           Temperature
+Loopback Internal Messages              = true
 
 [Transports.HTTP]
 Enabled                                 = Always
diff --git a/etc/otter-aux.ini b/etc/otter-aux.ini
index a0d48f7435..c576c4bd03 100644
--- a/etc/otter-aux.ini
+++ b/etc/otter-aux.ini
@@ -54,6 +54,7 @@ Transports                              = EntityState,
                                           PowerChannelState,
                                           Temperature,
                                           VehicleState
+Loopback Internal Messages              = true
 
 [Transports.FTP]
 Enabled                                 = Always
diff --git a/src/DUNE/Entities/BasicEntity.cpp b/src/DUNE/Entities/BasicEntity.cpp
index 494128df06..382ef97e75 100644
--- a/src/DUNE/Entities/BasicEntity.cpp
+++ b/src/DUNE/Entities/BasicEntity.cpp
@@ -77,10 +77,10 @@ namespace DUNE
       if ((flags & DF_KEEP_TIME) == 0)
         msg->setTimeStamp();
 
-      if ((flags & DF_LOOP_BACK) == 0)
-        m_ctx.mbus.dispatch(msg, m_owner);
-      else
+      if ((flags & DF_LOOP_BACK) || m_loopback)
         m_ctx.mbus.dispatch(msg);
+      else
+        m_ctx.mbus.dispatch(msg, m_owner);
     }
 
   }
diff --git a/src/DUNE/Entities/BasicEntity.hpp b/src/DUNE/Entities/BasicEntity.hpp
index 1e9ad76e13..a767797655 100644
--- a/src/DUNE/Entities/BasicEntity.hpp
+++ b/src/DUNE/Entities/BasicEntity.hpp
@@ -68,13 +68,20 @@ namespace DUNE
       BasicEntity(Tasks::AbstractTask* owner, Tasks::Context& context):
         m_owner(owner),
         m_ctx(context),
-        m_id(DUNE_IMC_CONST_UNK_EID)
+        m_id(DUNE_IMC_CONST_UNK_EID),
+        m_loopback(false)
       { }
 
       //! Destructor.
       virtual ~BasicEntity()
       { }
 
+      void
+      setLoopback(bool loopback)
+      {
+        m_loopback = loopback;
+      }
+
       //! Set the IMC bindings using the provided recipient object.
       //! @param[in] recipient pointer to the recipient object to use for binding to IMC messages.
       virtual void
@@ -192,6 +199,8 @@ namespace DUNE
       unsigned int m_id;
       //! Entity Label.
       std::string m_label;
+      //! Set loopback flag for EntityState report
+      bool m_loopback;
     };
   }
 }
diff --git a/src/DUNE/Tasks/SimpleTransport.cpp b/src/DUNE/Tasks/SimpleTransport.cpp
index 8be8474a5d..a809bc3bb2 100644
--- a/src/DUNE/Tasks/SimpleTransport.cpp
+++ b/src/DUNE/Tasks/SimpleTransport.cpp
@@ -66,6 +66,9 @@ namespace DUNE
     void
     SimpleTransport::consume(const IMC::Message* msg)
     {
+      if (msg->getSource() != getSystemId())
+        return;
+      
       if (m_rl.filter(msg))
         return;
 
@@ -86,7 +89,7 @@ namespace DUNE
       }
 
       if (m_gargs.trace_out)
-        inf(DTR("outgoing: %s"), msg->getName());
+        DUNE_MSG(getName(), "outgoing: " + std::string(msg->getName()));
 
       onDataTransmission(p, n);
     }
@@ -118,8 +121,8 @@ namespace DUNE
           dispatch(m, DF_KEEP_TIME | DF_KEEP_SRC_EID);
 
           if (m_gargs.trace_in)
-            inf(DTR("incoming: %s"), m->getName());
-
+            DUNE_MSG(getName(), "incoming: " + std::string(m->getName()));
+          
           delete m;
         }
       }
diff --git a/src/DUNE/Tasks/Task.cpp b/src/DUNE/Tasks/Task.cpp
index dfd3788a5c..d21b77bd25 100644
--- a/src/DUNE/Tasks/Task.cpp
+++ b/src/DUNE/Tasks/Task.cpp
@@ -88,6 +88,11 @@ namespace DUNE
       .defaultValue("None")
       .values("None, Debug, Trace, Spew");
 
+      param(DTR_RT("Loopback Internal Messages"), m_args.loopback)
+      .defaultValue("false")
+      .description("Loopback internal messages, such as EntityState"
+                   " and EntityParameters");
+
       m_recipient = new Recipient(this, ctx);
       m_entity = new Entities::StatefulEntity(this, m_ctx);
       m_entities.push_back(m_entity);
@@ -228,6 +233,7 @@ namespace DUNE
       if (m_args.elabel != m_entity->getLabel())
         m_params.set(DTR_RT("Entity Label"), m_entity->getLabel());
       m_entity->setActTimes(m_args.act_time, m_args.deact_time);
+      m_entity->setLoopback(m_args.loopback);
       m_entity->reportInfo();
 
       if (m_debug_level_string == "Debug")
@@ -446,10 +452,12 @@ namespace DUNE
           msg->setSourceEntity(getEntityId());
       }
 
-      if ((flags & DF_LOOP_BACK) == 0)
-        m_ctx.mbus.dispatch(msg, this);
-      else
+      if ((flags & DF_LOOP_BACK) ||
+          m_args.loopback ||
+          msg->getSource() != getSystemId())
         m_ctx.mbus.dispatch(msg);
+      else
+        m_ctx.mbus.dispatch(msg, this);
     }
 
     void
diff --git a/src/DUNE/Tasks/Task.hpp b/src/DUNE/Tasks/Task.hpp
index c538b02eb4..b393dd9adc 100644
--- a/src/DUNE/Tasks/Task.hpp
+++ b/src/DUNE/Tasks/Task.hpp
@@ -785,6 +785,8 @@ namespace DUNE
         std::string active_scope;
         //! Visibility of 'Active' parameter.
         std::string active_visibility;
+        //! Loopback internal messages
+        bool loopback;
       };
 
       //! Message recipient (queue).
diff --git a/src/Transports/UDP/Listener.hpp b/src/Transports/UDP/Listener.hpp
index c540977a5b..0db14b4da6 100644
--- a/src/Transports/UDP/Listener.hpp
+++ b/src/Transports/UDP/Listener.hpp
@@ -57,7 +57,13 @@ namespace Transports
         m_trace(trace),
         m_contacts(contact_timeout),
         m_lcomms(lcomms)
-      {  }
+      { }
+
+      void
+      setTrace(bool trace)
+      {
+        m_trace = trace;
+      }
 
       void
       getContacts(std::vector<Contact>& list)
@@ -133,7 +139,7 @@ namespace Transports
             m_task.dispatch(msg, DF_KEEP_TIME | DF_KEEP_SRC_EID);
 
             if (m_trace)
-              msg->toText(std::cerr);
+              DUNE_MSG(m_task.getName(), "incoming: " + std::string(msg->getName()));
 
             delete msg;
           }
diff --git a/src/Transports/UDP/Task.cpp b/src/Transports/UDP/Task.cpp
index f27f26bf8e..14b6ca4ebe 100644
--- a/src/Transports/UDP/Task.cpp
+++ b/src/Transports/UDP/Task.cpp
@@ -229,6 +229,9 @@ namespace Transports
           debug("limited communications simulation is not active");
           m_comm_limitations = false;
         }
+
+        if (m_listener != NULL)
+          m_listener->setTrace(m_args.trace_in);
       }
 
       void
@@ -321,6 +324,9 @@ namespace Transports
       void
       consume(const IMC::Message* msg)
       {
+        if (msg->getSource() != getSystemId())
+          return;
+
         if (m_lcomms->isActive())
         {
           if (msg->getId() == DUNE_IMC_ESTIMATEDSTATE)
@@ -337,7 +343,7 @@ namespace Transports
           return;
 
         if (m_args.trace_out)
-          msg->toText(std::cerr);
+          DUNE_MSG(getName(), "outgoing: " + std::string(msg->getName()));
 
         uint16_t rv;
         try