diff --git a/applications/utilities/mesh/manipulation/subsetMesh/Make/files b/applications/utilities/mesh/manipulation/subsetMesh/Make/files
index 79552b3264..d8856b5f26 100644
--- a/applications/utilities/mesh/manipulation/subsetMesh/Make/files
+++ b/applications/utilities/mesh/manipulation/subsetMesh/Make/files
@@ -1,3 +1,6 @@
+cellSelection/cellSelection.C
+cellSelection/badQualityCellSelection.C
+cellSelection/outsideCellSelection.C
subsetMesh.C
EXE = $(FOAM_APPBIN)/subsetMesh
diff --git a/applications/utilities/mesh/manipulation/subsetMesh/Make/options b/applications/utilities/mesh/manipulation/subsetMesh/Make/options
index 969020c4af..52519d4f3b 100644
--- a/applications/utilities/mesh/manipulation/subsetMesh/Make/options
+++ b/applications/utilities/mesh/manipulation/subsetMesh/Make/options
@@ -1,8 +1,11 @@
EXE_INC = \
+ -IcellSelection \
-I$(LIB_SRC)/finiteVolume/lnInclude \
+ -I$(LIB_SRC)/dynamicMesh/lnInclude \
-I$(LIB_SRC)/meshTools/lnInclude
EXE_LIBS = \
-lfiniteVolume \
+ -ldynamicMesh \
-lmeshTools \
-lgenericPatchFields
diff --git a/applications/utilities/mesh/manipulation/subsetMesh/cellSelection/badQualityCellSelection.C b/applications/utilities/mesh/manipulation/subsetMesh/cellSelection/badQualityCellSelection.C
new file mode 100644
index 0000000000..fdd73a3034
--- /dev/null
+++ b/applications/utilities/mesh/manipulation/subsetMesh/cellSelection/badQualityCellSelection.C
@@ -0,0 +1,95 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2012 OpenFOAM Foundation
+ \\/ M anipulation |
+-------------------------------------------------------------------------------
+License
+ This file is part of OpenFOAM.
+
+ OpenFOAM is free software: you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with OpenFOAM. If not, see .
+
+\*---------------------------------------------------------------------------*/
+
+#include "badQualityCellSelection.H"
+#include "addToRunTimeSelectionTable.H"
+#include "faceSet.H"
+#include "polyMesh.H"
+#include "motionSmoother.H"
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+namespace Foam
+{
+namespace cellSelections
+{
+ defineTypeNameAndDebug(badQualityCellSelection, 0);
+ addToRunTimeSelectionTable
+ (
+ cellSelection,
+ badQualityCellSelection,
+ dictionary
+ );
+}
+}
+
+
+// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
+
+Foam::cellSelections::badQualityCellSelection::badQualityCellSelection
+(
+ const word& name,
+ const polyMesh& mesh,
+ const dictionary& dict
+)
+:
+ cellSelection(name, mesh, dict)
+{}
+
+
+// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
+
+Foam::cellSelections::badQualityCellSelection::~badQualityCellSelection()
+{}
+
+
+// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
+
+void Foam::cellSelections::badQualityCellSelection::select
+(
+ boolList& selectedCell
+) const
+{
+ //- Delete cell of any face in error
+ faceSet faces(mesh_, "meshQualityFaces", mesh_.nFaces()/100+1);
+ motionSmoother::checkMesh(false, mesh_, dict_, faces);
+ label nFaces = returnReduce(faces.size(), sumOp