diff --git a/apps/openmw/mwmechanics/aipackage.hpp b/apps/openmw/mwmechanics/aipackage.hpp
index d9a7fa3869..829bbe8989 100644
--- a/apps/openmw/mwmechanics/aipackage.hpp
+++ b/apps/openmw/mwmechanics/aipackage.hpp
@@ -48,7 +48,8 @@ namespace MWMechanics
                 TypeIdPursue = 6,
                 TypeIdAvoidDoor = 7,
                 TypeIdFace = 8,
-                TypeIdBreathe = 9
+                TypeIdBreathe = 9,
+                TypeIdInternalTravel = 10
             };
 
             ///Default constructor
diff --git a/apps/openmw/mwmechanics/aitravel.cpp b/apps/openmw/mwmechanics/aitravel.cpp
index 36b96101f9..ea14407ca1 100644
--- a/apps/openmw/mwmechanics/aitravel.cpp
+++ b/apps/openmw/mwmechanics/aitravel.cpp
@@ -28,15 +28,14 @@ bool isWithinMaxRange(const osg::Vec3f& pos1, const osg::Vec3f& pos2)
 
 namespace MWMechanics
 {
-    AiTravel::AiTravel(float x, float y, float z)
-    : mX(x),mY(y),mZ(z)
+    AiTravel::AiTravel(float x, float y, float z, bool hidden)
+    : mX(x),mY(y),mZ(z),mHidden(hidden)
     {
     }
 
     AiTravel::AiTravel(const ESM::AiSequence::AiTravel *travel)
         : mX(travel->mData.mX), mY(travel->mData.mY), mZ(travel->mData.mZ)
     {
-
     }
 
     AiTravel *MWMechanics::AiTravel::clone() const
@@ -64,7 +63,8 @@ namespace MWMechanics
 
     int AiTravel::getTypeId() const
     {
-        return TypeIdTravel;
+        // TODO: store mHidden in the savegame?
+        return mHidden ? TypeIdInternalTravel : TypeIdTravel;
     }
 
     void AiTravel::fastForward(const MWWorld::Ptr& actor, AiState& state)
diff --git a/apps/openmw/mwmechanics/aitravel.hpp b/apps/openmw/mwmechanics/aitravel.hpp
index 8c75bded1f..c297771d07 100644
--- a/apps/openmw/mwmechanics/aitravel.hpp
+++ b/apps/openmw/mwmechanics/aitravel.hpp
@@ -20,7 +20,7 @@ namespace MWMechanics
     {
         public:
             /// Default constructor
-            AiTravel(float x, float y, float z);
+            AiTravel(float x, float y, float z, bool hidden = false);
             AiTravel(const ESM::AiSequence::AiTravel* travel);
 
             /// Simulates the passing of time
@@ -38,6 +38,8 @@ namespace MWMechanics
             float mX;
             float mY;
             float mZ;
+
+            bool mHidden;
     };
 }
 
diff --git a/apps/openmw/mwmechanics/mechanicsmanagerimp.cpp b/apps/openmw/mwmechanics/mechanicsmanagerimp.cpp
index 55aace8e74..dc36952390 100644
--- a/apps/openmw/mwmechanics/mechanicsmanagerimp.cpp
+++ b/apps/openmw/mwmechanics/mechanicsmanagerimp.cpp
@@ -1620,7 +1620,7 @@ namespace MWMechanics
                 dest = activePackage->getDestination(ptr);
             }
 
-            MWMechanics::AiTravel travelPackage(dest.x(), dest.y(), dest.z());
+            MWMechanics::AiTravel travelPackage(dest.x(), dest.y(), dest.z(), true);
             aiSequence.stack(travelPackage, ptr, false);
         }