diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeNozzleInjection/ConeNozzleInjection.C b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeNozzleInjection/ConeNozzleInjection.C
index 4e9e3b3002dc073a2e8a8d0095b29d611dc7869d..245bb27f85b7092cbb76b3f9481eb7dddbb43de7 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeNozzleInjection/ConeNozzleInjection.C
+++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeNozzleInjection/ConeNozzleInjection.C
@@ -3,7 +3,7 @@
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
     \\  /    A nd           | Copyright (C) 2011-2016 OpenFOAM Foundation
-     \\/     M anipulation  | Copyright (C) 2015 OpenCFD Ltd.
+     \\/     M anipulation  | Copyright (C) 2015-2018 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -30,35 +30,57 @@ License
 
 using namespace Foam::constant;
 
+
+template<class CloudType>
+const Foam::Enum
+<
+    typename Foam::ConeNozzleInjection<CloudType>::injectionMethod
+>
+Foam::ConeNozzleInjection<CloudType>::injectionMethodNames
+{
+    { injectionMethod::imPoint, "point" },
+    { injectionMethod::imDisc, "disc" },
+    { injectionMethod::imMovingPoint, "movingPoint" }
+};
+
+template<class CloudType>
+const Foam::Enum
+<
+    typename Foam::ConeNozzleInjection<CloudType>::flowType
+>
+Foam::ConeNozzleInjection<CloudType>::flowTypeNames
+{
+    { flowType::ftConstantVelocity, "constantVelocity" },
+    { flowType::ftPressureDrivenVelocity, "pressureDrivenVelocity" },
+    { flowType::ftFlowRateAndDischarge, "flowRateAndDischarge" }
+};
+
+
 // * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * * * //
 
 template<class CloudType>
 void Foam::ConeNozzleInjection<CloudType>::setInjectionMethod()
 {
-    word injectionMethodType = this->coeffDict().lookup("injectionMethod");
-    if (injectionMethodType == "disc")
-    {
-        injectionMethod_ = imDisc;
-    }
-    else if (injectionMethodType == "point")
-    {
-        injectionMethod_ = imPoint;
-
-        // Set/cache the injector cell
-        this->findCellAtPosition
-        (
-            injectorCell_,
-            tetFacei_,
-            tetPti_,
-            position_,
-            false
-        );
-    }
-    else
+    switch (injectionMethod_)
     {
-        FatalErrorInFunction
-            << "injectionMethod must be either 'point' or 'disc'"
-            << exit(FatalError);
+        case injectionMethod::imPoint:
+        case injectionMethod::imDisc:
+        {
+            position_ = this->coeffDict().lookup("position");
+            break;
+        }
+        case injectionMethod::imMovingPoint:
+        {
+            positionVsTime_.reset(this->coeffDict());
+            break;
+        }
+        default:
+        {
+            FatalErrorInFunction
+                << "Unhandled injection method "
+                << injectionMethodNames[injectionMethod_]
+                << exit(FatalError);
+        }
     }
 }
 
@@ -66,28 +88,30 @@ void Foam::ConeNozzleInjection<CloudType>::setInjectionMethod()
 template<class CloudType>
 void Foam::ConeNozzleInjection<CloudType>::setFlowType()
 {
-    word flowType = this->coeffDict().lookup("flowType");
-    if (flowType == "constantVelocity")
-    {
-        this->coeffDict().lookup("UMag") >> UMag_;
-        flowType_ = ftConstantVelocity;
-    }
-    else if (flowType == "pressureDrivenVelocity")
-    {
-        Pinj_.reset(this->coeffDict());
-        flowType_ = ftPressureDrivenVelocity;
-    }
-    else if (flowType == "flowRateAndDischarge")
-    {
-        Cd_.reset(this->coeffDict());
-        flowType_ = ftFlowRateAndDischarge;
-    }
-    else
+    switch (flowType_)
     {
-        FatalErrorInFunction
-            << "flowType must be either 'constantVelocity', "
-            <<"'pressureDrivenVelocity' or 'flowRateAndDischarge'"
-            << exit(FatalError);
+        case flowType::ftConstantVelocity:
+        {
+            this->coeffDict().lookup("UMag") >> UMag_;
+            break;
+        }
+        case flowType::ftPressureDrivenVelocity:
+        {
+            Pinj_.reset(this->coeffDict());
+            break;
+        }
+        case flowType::ftFlowRateAndDischarge:
+        {
+            Cd_.reset(this->coeffDict());
+            break;
+        }
+        default:
+        {
+            FatalErrorInFunction
+                << "Unhandled flow type "
+                << flowTypeNames[flowType_]
+                << exit(FatalError);
+        }
     }
 }
 
@@ -103,12 +127,16 @@ Foam::ConeNozzleInjection<CloudType>::ConeNozzleInjection
 )
 :
     InjectionModel<CloudType>(dict, owner, modelName, typeName),
-    injectionMethod_(imPoint),
-    flowType_(ftConstantVelocity),
+    injectionMethod_
+    (
+        injectionMethodNames.lookup("injectionMethod", this->coeffDict())
+    ),
+    flowType_(flowTypeNames.lookup("flowType", this->coeffDict())),
     outerDiameter_(readScalar(this->coeffDict().lookup("outerDiameter"))),
     innerDiameter_(readScalar(this->coeffDict().lookup("innerDiameter"))),
     duration_(readScalar(this->coeffDict().lookup("duration"))),
-    position_(this->coeffDict().lookup("position")),
+    positionVsTime_(owner.db().time(), "position"),
+    position_(vector::zero),
     injectorCell_(-1),
     tetFacei_(-1),
     tetPti_(-1),
@@ -214,6 +242,7 @@ Foam::ConeNozzleInjection<CloudType>::ConeNozzleInjection
     outerDiameter_(im.outerDiameter_),
     innerDiameter_(im.innerDiameter_),
     duration_(im.duration_),
+    positionVsTime_(im.positionVsTime_),
     position_(im.position_),
     injectorCell_(im.injectorCell_),
     tetFacei_(im.tetFacei_),
@@ -245,10 +274,11 @@ Foam::ConeNozzleInjection<CloudType>::~ConeNozzleInjection()
 template<class CloudType>
 void Foam::ConeNozzleInjection<CloudType>::updateMesh()
 {
-    // Set/cache the injector cells
+    // Set/cache the injector cell info for static methods
+
     switch (injectionMethod_)
     {
-        case imPoint:
+        case injectionMethod::imPoint:
         {
             this->findCellAtPosition
             (
@@ -257,10 +287,11 @@ void Foam::ConeNozzleInjection<CloudType>::updateMesh()
                 tetPti_,
                 position_
             );
+            break;
         }
         default:
         {
-            // Do nothing
+            // Do nothing for the other methods
         }
     }
 }
@@ -314,7 +345,7 @@ void Foam::ConeNozzleInjection<CloudType>::setPositionAndCell
 (
     const label,
     const label,
-    const scalar,
+    const scalar time,
     vector& position,
     label& cellOwner,
     label& tetFacei,
@@ -328,7 +359,7 @@ void Foam::ConeNozzleInjection<CloudType>::setPositionAndCell
 
     switch (injectionMethod_)
     {
-        case imPoint:
+        case injectionMethod::imPoint:
         {
             position = position_;
             cellOwner = injectorCell_;
@@ -337,7 +368,21 @@ void Foam::ConeNozzleInjection<CloudType>::setPositionAndCell
 
             break;
         }
-        case imDisc:
+        case injectionMethod::imMovingPoint:
+        {
+            position = positionVsTime_.value(time - this->SOI_);
+
+            this->findCellAtPosition
+            (
+                cellOwner,
+                tetFacei,
+                tetPti,
+                position
+            );
+
+            break;
+        }
+        case injectionMethod::imDisc:
         {
             scalar frac = rndGen.globalSample01<scalar>();
             scalar dr = outerDiameter_ - innerDiameter_;
@@ -357,8 +402,9 @@ void Foam::ConeNozzleInjection<CloudType>::setPositionAndCell
         default:
         {
             FatalErrorInFunction
-             << "Unknown injectionMethod type" << nl
-             << exit(FatalError);
+                << "Unhandled injection method "
+                << injectionMethodNames[injectionMethod_]
+                << exit(FatalError);
         }
     }
 }
@@ -394,12 +440,12 @@ void Foam::ConeNozzleInjection<CloudType>::setProperties
 
     switch (flowType_)
     {
-        case ftConstantVelocity:
+        case flowType::ftConstantVelocity:
         {
             parcel.U() = UMag_*dirVec;
             break;
         }
-        case ftPressureDrivenVelocity:
+        case flowType::ftPressureDrivenVelocity:
         {
             scalar pAmbient = this->owner().pAmbient();
             scalar rho = parcel.rho();
@@ -407,7 +453,7 @@ void Foam::ConeNozzleInjection<CloudType>::setProperties
             parcel.U() = UMag*dirVec;
             break;
         }
-        case ftFlowRateAndDischarge:
+        case flowType::ftFlowRateAndDischarge:
         {
             scalar Ao = 0.25*mathematical::pi*outerDiameter_*outerDiameter_;
             scalar Ai = 0.25*mathematical::pi*innerDiameter_*innerDiameter_;
@@ -422,6 +468,10 @@ void Foam::ConeNozzleInjection<CloudType>::setProperties
         }
         default:
         {
+            FatalErrorInFunction
+                << "Unhandled injection method "
+                << flowTypeNames[flowType_]
+                << exit(FatalError);
         }
     }
 
diff --git a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeNozzleInjection/ConeNozzleInjection.H b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeNozzleInjection/ConeNozzleInjection.H
index f84b9fd0b728b718c5b5dd9186905a9d4fe8886f..7944a59be41f81b596d8d55ee6896d56be07ebfa 100644
--- a/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeNozzleInjection/ConeNozzleInjection.H
+++ b/src/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeNozzleInjection/ConeNozzleInjection.H
@@ -3,7 +3,7 @@
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
     \\  /    A nd           | Copyright (C) 2011-2017 OpenFOAM Foundation
-     \\/     M anipulation  |
+     \\/     M anipulation  | Copyright (C) 2018 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -65,6 +65,7 @@ SourceFiles
 #define ConeNozzleInjection_H
 
 #include "InjectionModel.H"
+#include "Enum.H"
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
@@ -90,20 +91,25 @@ class ConeNozzleInjection
 public:
 
     //- Injection method enumeration
-    enum injectionMethod
+    enum class injectionMethod
     {
         imPoint,
-        imDisc
+        imDisc,
+        imMovingPoint
     };
 
+    static const Enum<injectionMethod> injectionMethodNames;
+
     //- Flow type enumeration
-    enum flowType
+    enum class flowType
     {
         ftConstantVelocity,
         ftPressureDrivenVelocity,
         ftFlowRateAndDischarge
     };
 
+    static const Enum<flowType> flowTypeNames;
+
 
 private:
 
@@ -124,6 +130,9 @@ private:
         //- Injection duration [s]
         scalar duration_;
 
+        //- Position relative to SOI []
+        TimeFunction1<vector> positionVsTime_;
+
         //- Injector position [m]
         vector position_;