diff --git a/src/functionObjects/field/extractEulerianParticles/extractEulerianParticles/extractEulerianParticles.C b/src/functionObjects/field/extractEulerianParticles/extractEulerianParticles/extractEulerianParticles.C
index f71fcbeef466598c8179ff808c3d9b7560603cf8..ad40fcf5f7f1ce77a748025c4eae1dab1e15616e 100644
--- a/src/functionObjects/field/extractEulerianParticles/extractEulerianParticles/extractEulerianParticles.C
+++ b/src/functionObjects/field/extractEulerianParticles/extractEulerianParticles/extractEulerianParticles.C
@@ -314,7 +314,8 @@ void Foam::functionObjects::extractEulerianParticles::collectParticles
                     tag,
                     time,
                     d,
-                    U
+                    U,
+                    false // not looking to set cell owner etc.
                 );
 
                 cloud_.addParticle(ip);
diff --git a/src/lagrangian/basic/Cloud/Cloud.C b/src/lagrangian/basic/Cloud/Cloud.C
index 5f07b4d1f228cd90960e23606f89967644802fb8..d5da7fe151075098e5641ad04798c13253b620a2 100644
--- a/src/lagrangian/basic/Cloud/Cloud.C
+++ b/src/lagrangian/basic/Cloud/Cloud.C
@@ -76,10 +76,10 @@ Foam::Cloud<ParticleType>::Cloud
 :
     cloud(pMesh, cloudName),
     IDLList<ParticleType>(),
-    geometryType_(IOPosition<Cloud<ParticleType>>::geometryType::COORDINATES),
     polyMesh_(pMesh),
     labels_(),
-    globalPositionsPtr_()
+    globalPositionsPtr_(),
+    geometryType_(IOPosition<Cloud<ParticleType>>::geometryType::COORDINATES)
 {
     checkPatches();
 
diff --git a/src/lagrangian/basic/Cloud/Cloud.H b/src/lagrangian/basic/Cloud/Cloud.H
index a49247d0d60099da749f49ec1555618325a136e1..33d554c977b43bcca2231736bdec3825b0518611 100644
--- a/src/lagrangian/basic/Cloud/Cloud.H
+++ b/src/lagrangian/basic/Cloud/Cloud.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) 2017 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -75,9 +75,6 @@ class Cloud
 {
     // Private data
 
-        //- Geometry type
-        typename IOPosition<Cloud<ParticleType>>::geometryType geometryType_;
-
         //- Reference to the mesh database
         const polyMesh& polyMesh_;
 
@@ -109,6 +106,12 @@ class Cloud
         void writeCloudUniformProperties() const;
 
 
+protected:
+
+        //- Geometry type
+        typename IOPosition<Cloud<ParticleType>>::geometryType geometryType_;
+
+
 public:
 
     friend class particle;
diff --git a/src/lagrangian/basic/Cloud/CloudIO.C b/src/lagrangian/basic/Cloud/CloudIO.C
index 8678c5bde632f0f3066c5e280f54ebb5d4ebf4f3..d5fe11ace8e11c295c055daad1890d9e5cfc3740 100644
--- a/src/lagrangian/basic/Cloud/CloudIO.C
+++ b/src/lagrangian/basic/Cloud/CloudIO.C
@@ -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) 2017 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -167,10 +167,10 @@ Foam::Cloud<ParticleType>::Cloud
 )
 :
     cloud(pMesh, cloudName),
-    geometryType_(IOPosition<Cloud<ParticleType>>::geometryType::COORDINATES),
     polyMesh_(pMesh),
     labels_(),
-    cellWallFacesPtr_()
+    cellWallFacesPtr_(),
+    geometryType_(IOPosition<Cloud<ParticleType>>::geometryType::COORDINATES)
 {
     checkPatches();
 
diff --git a/src/lagrangian/basic/injectedParticle/injectedParticle.C b/src/lagrangian/basic/injectedParticle/injectedParticle.C
index 4a0866e940b0d373a9ee35f713bfbdb92fafcacb..8625a420a86764d782a3652af7de416e11fe00c6 100644
--- a/src/lagrangian/basic/injectedParticle/injectedParticle.C
+++ b/src/lagrangian/basic/injectedParticle/injectedParticle.C
@@ -38,6 +38,7 @@ namespace Foam
 Foam::injectedParticle::injectedParticle(const injectedParticle& p)
 :
     particle(p),
+    position_(p.position_),
     tag_(p.tag_),
     soi_(p.soi_),
     d_(p.d_),
@@ -52,6 +53,7 @@ Foam::injectedParticle::injectedParticle
 )
 :
     particle(p, mesh),
+    position_(p.position_),
     tag_(p.tag_),
     soi_(p.soi_),
     d_(p.d_),
diff --git a/src/lagrangian/basic/injectedParticle/injectedParticle.H b/src/lagrangian/basic/injectedParticle/injectedParticle.H
index 1d8bfbf3fbee222d50b3831164017cc181ef7fa4..5c196c1b3a71c28c06195d5c1055509b7441cf7f 100644
--- a/src/lagrangian/basic/injectedParticle/injectedParticle.H
+++ b/src/lagrangian/basic/injectedParticle/injectedParticle.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2016 OpenCFD Ltd.
+    \\  /    A nd           | Copyright (C) 2016-2017 OpenCFD Ltd.
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -25,11 +25,18 @@ Class
     Foam::injectedParticle
 
 Description
+    Primarly stores particle properties so that it can be injected at a later
+    time.  Note that this stores its own local position as opposed to the
+    base particle class barycentric coordinates since the particle is not
+    (usually) attached to a mesh, and instead used for post-processing.
 
 SourceFiles
     injectedParticle.C
     injectedParticleIO.C
 
+SeeAlso
+    Foam::functionObjects::extractEulerianParticles
+
 \*---------------------------------------------------------------------------*/
 
 #ifndef injectedParticle_H
@@ -74,6 +81,9 @@ protected:
 
         // Particle properties
 
+            //- Position
+            point position_;
+
             //- Tag
             label tag_;
 
@@ -125,7 +135,8 @@ public:
             const label tag,
             const scalar soi,
             const scalar d,
-            const vector& U
+            const vector& U,
+            const bool doLocate = true
         );
 
         //- Construct from Istream
@@ -225,6 +236,11 @@ public:
                 objectRegistry& obr
             );
 
+            //- Write the particle position and cell
+            //  Note: This uses the local particle position, and bypasses the
+            //  barycentric description
+            virtual void writePosition(Ostream&) const;
+
 
     // Ostream Operator
 
diff --git a/src/lagrangian/basic/injectedParticle/injectedParticleCloud.C b/src/lagrangian/basic/injectedParticle/injectedParticleCloud.C
index 329aff039e057bd21984088a826f95930d629958..91a4e498848501ad981fe3b143549e98339e38c8 100644
--- a/src/lagrangian/basic/injectedParticle/injectedParticleCloud.C
+++ b/src/lagrangian/basic/injectedParticle/injectedParticleCloud.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2016 OpenCFD Ltd.
+    \\  /    A nd           | Copyright (C) 2016-2017 OpenCFD Ltd.
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -41,6 +41,9 @@ Foam::injectedParticleCloud::injectedParticleCloud
 :
     Cloud<injectedParticle>(mesh, cloudName, false)
 {
+    geometryType_ =
+        IOPosition<Cloud<injectedParticle>>::geometryType::POSITIONS;
+
     if (readFields)
     {
         injectedParticle::readFields(*this);
diff --git a/src/lagrangian/basic/injectedParticle/injectedParticleI.H b/src/lagrangian/basic/injectedParticle/injectedParticleI.H
index 579edb16efaf56f053deab5694c9af7397b58da1..2c4c05a41386e4eb68f27937c7bd0de3f2a0f52e 100644
--- a/src/lagrangian/basic/injectedParticle/injectedParticleI.H
+++ b/src/lagrangian/basic/injectedParticle/injectedParticleI.H
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2016 OpenCFD Ltd.
+    \\  /    A nd           | Copyright (C) 2016-2017 OpenCFD Ltd.
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -33,10 +33,12 @@ inline Foam::injectedParticle::injectedParticle
     const label tag,
     const scalar soi,
     const scalar d,
-    const vector& U
+    const vector& U,
+    const bool doLocate
 )
 :
-    particle(mesh, position, -1),
+    particle(mesh, position, -1, -1, -1, doLocate),
+    position_(position),
     tag_(tag),
     soi_(soi),
     d_(d),
diff --git a/src/lagrangian/basic/injectedParticle/injectedParticleIO.C b/src/lagrangian/basic/injectedParticle/injectedParticleIO.C
index 711f393cd05f947eb30d57482ffd6706fe0db8db..72d6e87bcbb684cf0095acf0c999e268ecb09910 100644
--- a/src/lagrangian/basic/injectedParticle/injectedParticleIO.C
+++ b/src/lagrangian/basic/injectedParticle/injectedParticleIO.C
@@ -2,7 +2,7 @@
   =========                 |
   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
    \\    /   O peration     |
-    \\  /    A nd           | Copyright (C) 2016 OpenCFD Ltd.
+    \\  /    A nd           | Copyright (C) 2016-2017 OpenCFD Ltd.
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
 License
@@ -38,6 +38,7 @@ Foam::string Foam::injectedParticle::propertyTypes_ =
 
 const std::size_t Foam::injectedParticle::sizeofFields
 (
+    // Note: does not include position_
     sizeof(label) + sizeof(scalar) + sizeof(scalar) + sizeof(vector)
 );
 
@@ -52,7 +53,8 @@ Foam::injectedParticle::injectedParticle
     bool newFormat
 )
 :
-    particle(mesh, is, readFields, newFormat),
+    particle(mesh, is, readFields, false), // force to read old positions file
+    position_(Zero),
     tag_(-1),
     soi_(0.0),
     d_(0.0),
@@ -60,6 +62,11 @@ Foam::injectedParticle::injectedParticle
 {
     if (readFields)
     {
+        // After the base particle class has read the fields from file and
+        // constructed the necessary barcentric co-ordinates we can update the
+        // particle position on this mesh
+        position_ = particle::position();
+
         if (is.format() == IOstream::ASCII)
         {
             tag_ = readLabel(is);
@@ -84,6 +91,8 @@ void Foam::injectedParticle::readFields(Cloud<injectedParticle>& c)
         return;
     }
 
+    // Note: not reading local position_ - defer to base particle class
+
     particle::readFields(c);
 
     IOField<label> tag(c.fieldIOobject("tag", IOobject::MUST_READ));
@@ -100,7 +109,7 @@ void Foam::injectedParticle::readFields(Cloud<injectedParticle>& c)
 
     label i = 0;
 
-    forAllIter(Cloud<injectedParticle>, c, iter)
+    forAllIters(c, iter)
     {
         injectedParticle& p = iter();
 
@@ -116,8 +125,14 @@ void Foam::injectedParticle::readFields(Cloud<injectedParticle>& c)
 
 void Foam::injectedParticle::writeFields(const Cloud<injectedParticle>& c)
 {
+    // Force writing positions instead of coordinates
+    particle::writeLagrangianCoordinates = false;
+    particle::writeLagrangianPositions = true;
+
     particle::writeFields(c);
 
+    // Note: not writing local position_ - defer to base particle class
+
     label np =  c.size();
 
     IOField<label> tag(c.fieldIOobject("tag", IOobject::NO_READ), np);
@@ -127,7 +142,7 @@ void Foam::injectedParticle::writeFields(const Cloud<injectedParticle>& c)
 
     label i = 0;
 
-    forAllConstIter(Cloud<injectedParticle>, c, iter)
+    forAllConstIters(c, iter)
     {
         const injectedParticle& p = iter();
 
@@ -152,6 +167,10 @@ void Foam::injectedParticle::writeObjects
     objectRegistry& obr
 )
 {
+    // Force writing positions instead of coordinates
+    particle::writeLagrangianCoordinates = false;
+    particle::writeLagrangianPositions = true;
+
     particle::writeObjects(c, obr);
 
     label np = c.size();
@@ -163,7 +182,7 @@ void Foam::injectedParticle::writeObjects
 
     label i = 0;
 
-    forAllConstIter(Cloud<injectedParticle>, c, iter)
+    forAllConstIters(c, iter)
     {
         const injectedParticle& p = iter();
 
@@ -177,6 +196,40 @@ void Foam::injectedParticle::writeObjects
 }
 
 
+void Foam::injectedParticle::writePosition(Ostream& os) const
+{
+    if (os.format() == IOstream::ASCII)
+    {
+        os  << position_ << token::SPACE << cell();
+    }
+    else
+    {
+        struct oldParticle
+        {
+            vector position;
+            label celli;
+            label facei;
+            scalar stepFraction;
+            label tetFacei;
+            label tetPti;
+            label origProc;
+            label origId;
+        } p;
+
+        const size_t s =
+            offsetof(oldParticle, facei) - offsetof(oldParticle, position);
+
+        p.position = position_;
+        p.celli = cell();
+
+        os.write(reinterpret_cast<const char*>(&p.position), s);
+    }
+
+    // Check state of Ostream
+    os.check(FUNCTION_NAME);
+}
+
+
 // * * * * * * * * * * * * * * * IOstream Operators  * * * * * * * * * * * * //
 
 Foam::Ostream& Foam::operator<<
@@ -185,6 +238,8 @@ Foam::Ostream& Foam::operator<<
     const injectedParticle& p
 )
 {
+    // Note: not writing local position_ - defer to base particle class
+
     if (os.format() == IOstream::ASCII)
     {
         os  << static_cast<const particle&>(p)
diff --git a/src/lagrangian/basic/particle/particle.C b/src/lagrangian/basic/particle/particle.C
index e81c52199150ddefebf62261a38ae435e0112fa7..d9e8ebdabbd7f742cb3fd8314ab5b393ee5669be 100644
--- a/src/lagrangian/basic/particle/particle.C
+++ b/src/lagrangian/basic/particle/particle.C
@@ -37,6 +37,10 @@ Foam::label Foam::particle::particleCount_ = 0;
 namespace Foam
 {
     defineTypeNameAndDebug(particle, 0);
+    bool particle::writeLagrangianCoordinates
+    (
+        debug::infoSwitch("writeLagrangianCoordinates", 1)
+    );
     bool particle::writeLagrangianPositions
     (
         debug::infoSwitch("writeLagrangianPositions", 0)
diff --git a/src/lagrangian/basic/particle/particle.H b/src/lagrangian/basic/particle/particle.H
index 50e7e2755edded32326c4a2019b3ba92210c8afd..88dfd257c2963abe49ac35f48deec7dd32ad281d 100644
--- a/src/lagrangian/basic/particle/particle.H
+++ b/src/lagrangian/basic/particle/particle.H
@@ -87,9 +87,6 @@ class particle
 {
     // Private member data
 
-        //- Write particle positions file (v1706 format and earlier)
-        static bool writeLagrangianPositions;
-
         //- Size in bytes of the position data
         static const std::size_t sizeofPosition;
 
@@ -348,6 +345,14 @@ public:
         //- Cumulative particle counter - used to provide unique ID
         static label particleCount_;
 
+        //- Write particle coordinates file (v1712 and later)
+        //- Default is true
+        static bool writeLagrangianCoordinates;
+
+        //- Write particle positions file (v1706 format and earlier)
+        //- Default is false
+        static bool writeLagrangianPositions;
+
 
     // Constructors
 
@@ -685,7 +690,7 @@ public:
         void writeCoordinates(Ostream&) const;
 
         //- Write the particle position and cell
-        void writePosition(Ostream&) const;
+        virtual void writePosition(Ostream&) const;
 
 
     // Friend Operators
diff --git a/src/lagrangian/basic/particle/particleTemplates.C b/src/lagrangian/basic/particle/particleTemplates.C
index 0748f4df3bca8cee56de4f0a9ff428ea5c4bcc3f..71472677d20d41e1ce926ebfac8315d1ea73a33c 100644
--- a/src/lagrangian/basic/particle/particleTemplates.C
+++ b/src/lagrangian/basic/particle/particleTemplates.C
@@ -72,6 +72,7 @@ void Foam::particle::writeFields(const TrackCloudType& c)
 {
     label np = c.size();
 
+    if (writeLagrangianCoordinates)
     {
         IOPosition<TrackCloudType> ioP(c);
         ioP.write(np > 0);
diff --git a/tutorials/multiphase/interFoam/laminar/vofToLagrangian/lagrangianDistributionInjection/Allrun b/tutorials/multiphase/interFoam/laminar/vofToLagrangian/lagrangianDistributionInjection/Allrun
index 3dd409fe044d6488c7bf3a4a6c3fce8bd2276cf0..595da750655a7aa4ac123a09d06fae0ad0104b7e 100755
--- a/tutorials/multiphase/interFoam/laminar/vofToLagrangian/lagrangianDistributionInjection/Allrun
+++ b/tutorials/multiphase/interFoam/laminar/vofToLagrangian/lagrangianDistributionInjection/Allrun
@@ -27,14 +27,16 @@ copyLagrangianData()
         exit 1
     fi
 
-    dir=$dir/${latestTime}/lagrangian
+    udir=$dir/${latestTime}/uniform/lagrangian
+    ldir=$dir/${latestTime}/lagrangian
 
     if [ -d $dir ]
     then
-        echo "Copying lagrangian data from $dir to 0 directory"
-        \cp -r $dir 0
+        echo "Copying lagrangian data from $ldir to 0 directory"
+        \cp -r $ldir 0
+        mkdir 0/uniform && \cp -r $udir 0/uniform
     else
-        echo "Error: unable to find Lagrangian data in case $dir"
+        echo "Error: unable to find Lagrangian data in case $ldir"
         exit 1
     fi
 }
@@ -46,10 +48,12 @@ copyLagrangianData ${eulerianCase}
 
 runApplication blockMesh
 
-runApplication decomposePar
+#runApplication decomposePar
+
+#runParallel $(getApplication)
 
-runParallel $(getApplication)
+#runApplication reconstructPar
 
-runApplication reconstructPar
+runApplication $(getApplication)
 
 #------------------------------------------------------------------------------
diff --git a/tutorials/multiphase/interFoam/laminar/vofToLagrangian/lagrangianParticleInjection/Allrun b/tutorials/multiphase/interFoam/laminar/vofToLagrangian/lagrangianParticleInjection/Allrun
index 3dd409fe044d6488c7bf3a4a6c3fce8bd2276cf0..24fab8cccb6bdfbda334948a7ea180014905c820 100755
--- a/tutorials/multiphase/interFoam/laminar/vofToLagrangian/lagrangianParticleInjection/Allrun
+++ b/tutorials/multiphase/interFoam/laminar/vofToLagrangian/lagrangianParticleInjection/Allrun
@@ -27,14 +27,16 @@ copyLagrangianData()
         exit 1
     fi
 
-    dir=$dir/${latestTime}/lagrangian
+    udir=$dir/${latestTime}/uniform/lagrangian
+    ldir=$dir/${latestTime}/lagrangian
 
     if [ -d $dir ]
     then
-        echo "Copying lagrangian data from $dir to 0 directory"
-        \cp -r $dir 0
+        echo "Copying lagrangian data from $ldir to 0 directory"
+        \cp -r $ldir 0
+        mkdir 0/uniform && \cp -r $udir 0/uniform
     else
-        echo "Error: unable to find Lagrangian data in case $dir"
+        echo "Error: unable to find Lagrangian data in case $ldir"
         exit 1
     fi
 }
@@ -46,10 +48,13 @@ copyLagrangianData ${eulerianCase}
 
 runApplication blockMesh
 
-runApplication decomposePar
+#runApplication decomposePar
+
+#runParallel $(getApplication)
+
+#runApplication reconstructPar
 
-runParallel $(getApplication)
+runApplication $(getApplication)
 
-runApplication reconstructPar
 
 #------------------------------------------------------------------------------