From b3c10dbf2de6cee8a91cb7e86347ced40a093dfd Mon Sep 17 00:00:00 2001
From: Sebastian Eibl <sebastian.eibl@fau.de>
Date: Mon, 8 Mar 2021 10:12:21 +0100
Subject: [PATCH] [CLANG-TIDY] modernize-use-using

---
 .../AMRSedimentSettling.cpp                   | 30 +++---
 .../AMRSettlingSphere.cpp                     | 30 +++---
 .../WorkloadEvaluation.cpp                    | 20 ++--
 apps/benchmarks/CouetteFlow/CouetteFlow.cpp   | 38 ++++----
 apps/benchmarks/DEM/DEM.cpp                   |  2 +-
 .../ForcesOnSphereNearPlaneInShearFlow.cpp    | 12 +--
 .../MotionSingleHeavySphere.cpp               | 22 ++---
 .../NonUniformGrid/NonUniformGrid.cpp         | 18 ++--
 .../PoiseuilleChannel/PoiseuilleChannel.cpp   | 20 ++--
 .../SchaeferTurek/SchaeferTurek.cpp           | 65 +++++++------
 apps/benchmarks/UniformGrid/UniformGrid.cpp   | 20 ++--
 .../BidisperseFluidizedBedDPM.cpp             | 54 +++++------
 .../CombinedResolvedUnresolved.cpp            | 70 +++++---------
 apps/tutorials/basics/03_GameOfLife.cpp       |  2 +-
 apps/tutorials/lbm/01_BasicLBM.cpp            |  2 +-
 .../lbm/02_BasicLBM_ExemplaryExtensions.cpp   |  6 +-
 apps/tutorials/lbm/03_LBLidDrivenCavity.cpp   |  6 +-
 apps/tutorials/pde/01_SolvingPDE.cpp          |  2 +-
 apps/tutorials/pde/02_HeatEquation.cpp        |  2 +-
 .../pde/03_HeatEquation_Extensions.cpp        |  2 +-
 apps/tutorials/pe/01_ConfinedGas.cpp          |  2 +-
 apps/tutorials/pe/02_ConfinedGasExtended.cpp  |  2 +-
 src/blockforest/Block.h                       |  2 +-
 src/blockforest/BlockDataHandling.h           |  4 +-
 src/blockforest/BlockForest.h                 |  1 -
 src/blockforest/BlockID.h                     |  2 +-
 src/blockforest/GlobalLoadBalancing.h         |  2 +-
 src/blockforest/PhantomBlock.h                |  2 +-
 src/blockforest/PhantomBlockForest.h          | 19 ++--
 src/blockforest/SetupBlockForest.h            | 17 ++--
 src/blockforest/Types.h                       |  4 +-
 .../communication/NonUniformBufferedScheme.h  | 10 +-
 .../communication/UniformBufferedScheme.h     | 14 +--
 .../communication/UniformDirectScheme.h       |  6 +-
 src/blockforest/loadbalancing/DynamicCurve.h  | 14 +--
 .../loadbalancing/DynamicParMetis.h           |  4 +-
 src/blockforest/loadbalancing/NoPhantomData.h |  2 +-
 .../loadbalancing/PODPhantomData.h            |  2 +-
 .../loadbalancing/StaticParMetis.h            |  4 +-
 src/boundary/BoundaryHandling.h               | 10 +-
 src/boundary/BoundaryHandlingCollection.h     | 10 +-
 src/boundary/BoundaryUID.h                    |  2 +-
 src/core/Abort.h                              |  2 +-
 src/core/AllSet.h                             |  2 +-
 src/core/DataTypes.h                          | 26 ++---
 src/core/OpenMP.h                             | 20 ++--
 src/core/Set.h                                |  6 +-
 src/core/VectorTrait.h                        |  4 +-
 src/core/cell/CellInterval.h                  | 12 +--
 src/core/cell/CellVector.h                    | 14 +--
 src/core/config/Config.h                      | 26 ++---
 src/core/debug/CheckFunctions.impl.h          | 40 ++++----
 src/core/math/AABBFwd.h                       |  2 +-
 src/core/math/GenericAABB.h                   |  4 +-
 src/core/math/MathTrait.h                     | 16 ++--
 src/core/math/Matrix2.h                       |  2 +-
 src/core/math/Matrix3.h                       |  2 +-
 src/core/math/MatrixMxN.h                     |  8 +-
 src/core/math/Plane.h                         |  2 +-
 src/core/math/Quaternion.h                    | 14 +--
 src/core/math/SqrtTrait.h                     |  6 +-
 src/core/math/Uint.h                          | 10 +-
 src/core/math/Utility.h                       |  2 +-
 src/core/math/Vector2.h                       |  6 +-
 src/core/math/Vector3.h                       |  6 +-
 .../math/equation_system/EquationSystem.h     | 16 ++--
 src/core/math/equation_system/FwdEquation.h   |  4 +-
 src/core/math/equation_system/FwdVariable.h   |  6 +-
 src/core/mpi/BufferDataTypeExtensions.h       |  4 +-
 src/core/mpi/BufferSystem.h                   |  4 +-
 src/core/mpi/MPIWrapper.h                     | 20 ++--
 src/core/mpi/OpenMPBufferSystem.h             |  2 +-
 src/core/mpi/RecvBuffer.h                     |  4 +-
 src/core/mpi/SendBuffer.h                     |  6 +-
 src/core/timing/Timer.h                       |  6 +-
 src/core/timing/TimingNode.h                  |  4 +-
 src/core/timing/TimingPool.h                  |  8 +-
 src/core/timing/TimingTree.h                  |  4 +-
 src/core/uid/SUID.h                           |  2 +-
 src/core/uid/UID.h                            |  2 +-
 src/core/uid/UIDGenerators.h                  | 16 ++--
 src/domain_decomposition/BlockDataHandling.h  |  6 +-
 src/domain_decomposition/BlockStorage.h       |  2 +-
 src/domain_decomposition/IBlock.h             |  2 +-
 src/domain_decomposition/IBlockID.h           |  2 +-
 .../StructuredBlockStorage.h                  |  4 +-
 src/fft/Fft.h                                 |  2 +-
 src/field/AccuracyEvaluation.h                | 12 +--
 src/field/AccuracyEvaluationLinePlot.h        | 18 ++--
 src/field/Field.h                             | 26 +++--
 src/field/FlagField.h                         | 22 ++---
 src/field/FlagField.impl.h                    |  4 +-
 src/field/FlagUID.h                           |  2 +-
 src/field/GhostLayerField.h                   | 23 ++---
 src/field/MassEvaluation.h                    | 12 +--
 src/field/StabilityChecker.h                  | 14 +--
 src/field/VolumetricFlowRateEvaluation.h      | 20 ++--
 src/field/adaptors/AdaptorCreators.h          |  4 +-
 src/field/adaptors/AdaptorIterator.h          |  6 +-
 .../adaptors/ComponentExtractionAdaptor.h     | 12 +--
 src/field/adaptors/GhostLayerFieldAdaptor.h   | 24 ++---
 src/field/adaptors/VectorFieldAccessor.h      |  4 +-
 src/field/blockforest/BlockDataHandling.h     | 10 +-
 src/field/communication/MPIDatatypes.impl.h   |  4 +-
 src/field/communication/PackInfo.h            |  2 +-
 src/field/communication/ReducePackInfo.h      |  2 +-
 .../UniformPullReductionPackInfo.h            |  2 +-
 src/field/distributors/DistributorCreators.h  |  4 +-
 src/field/distributors/KernelDistributor.h    |  6 +-
 .../distributors/NearestNeighborDistributor.h |  6 +-
 .../interpolators/FieldInterpolatorCreators.h |  4 +-
 .../interpolators/KernelFieldInterpolator.h   |  6 +-
 .../NearestNeighborFieldInterpolator.h        |  6 +-
 .../NearestNeighborInterpolator.h             |  2 +-
 .../TrilinearFieldInterpolator.h              |  6 +-
 src/field/iterators/FieldIterator.h           | 10 +-
 src/field/iterators/FieldIterator.impl.h      |  2 +-
 src/field/iterators/FieldNeighborPointer.h    |  2 +-
 src/field/iterators/FieldPointer.h            |  2 +-
 src/field/vtk/FlagFieldCellFilter.h           |  2 +-
 src/field/vtk/FlagFieldMapping.h              |  4 +-
 src/field/vtk/VTKWriter.h                     |  8 +-
 src/gather/FileGatherScheme.h                 |  2 +-
 src/gather/MPIGatherScheme.h                  |  2 +-
 src/geometry/InitBoundaryHandling.h           | 12 +--
 src/geometry/containment_octree/BranchNode.h  | 10 +-
 .../containment_octree/ContainmentOctree.h    | 24 ++---
 .../IndeterminateLeafNode.h                   | 10 +-
 .../containment_octree/InsideLeafNode.h       | 10 +-
 src/geometry/containment_octree/LeafNode.h    | 10 +-
 src/geometry/containment_octree/Node.h        | 10 +-
 .../containment_octree/OutsideLeafNode.h      | 10 +-
 src/geometry/initializer/BoundaryFromImage.h  |  4 +-
 .../initializer/BoundaryFromVoxelFile.h       |  4 +-
 .../initializer/InitializationManager.h       |  2 +-
 .../initializer/ScalarFieldFromBody.h         |  2 +-
 src/geometry/mesh/TriangleMesh.h              |  8 +-
 src/geometry/structured/GrayScaleImage.h      |  2 +-
 src/gui/Gui.h                                 |  2 +-
 src/gui/PropertyTree.h                        |  2 +-
 src/lbm/MassEvaluation.h                      | 24 ++---
 src/lbm/blockforest/PostProcessing.h          | 12 +--
 src/lbm/boundary/Curved.h                     |  8 +-
 src/lbm/boundary/DiffusionDirichlet.h         |  6 +-
 src/lbm/boundary/DynamicUBB.h                 |  6 +-
 src/lbm/boundary/FreeDiffusion.h              |  4 +-
 src/lbm/boundary/FreeSlip.h                   |  6 +-
 src/lbm/boundary/NoDiffusion.h                |  2 +-
 src/lbm/boundary/NoSlip.h                     |  6 +-
 src/lbm/boundary/Outlet.h                     |  6 +-
 src/lbm/boundary/ParserUBB.h                  | 10 +-
 src/lbm/boundary/Pressure.h                   |  6 +-
 src/lbm/boundary/SimpleDiffusionDirichlet.h   |  4 +-
 src/lbm/boundary/SimplePAB.h                  |  8 +-
 src/lbm/boundary/SimplePressure.h             |  6 +-
 src/lbm/boundary/SimpleUBB.h                  |  6 +-
 src/lbm/boundary/SimpleVelocityBoundary.h     |  4 +-
 src/lbm/boundary/UBB.h                        |  8 +-
 src/lbm/boundary/VelocityBoundary.h           |  6 +-
 .../factories/DefaultBoundaryHandling.h       | 20 ++--
 .../DefaultBoundaryHandlingCollection.h       |  6 +-
 .../DefaultDiffusionBoundaryHandling.h        | 18 ++--
 .../ExtendedBoundaryHandlingFactory.h         | 26 ++---
 src/lbm/evaluations/Permeability.h            | 10 +-
 src/lbm/field/Adaptors.h                      | 58 +++++------
 src/lbm/field/AddToStorage.h                  |  4 +-
 src/lbm/field/DensityAndMomentumDensity.h     |  4 +-
 src/lbm/field/Equilibrium.h                   |  4 +-
 src/lbm/field/MomentumDensity.h               |  4 +-
 src/lbm/field/PdfField.h                      | 22 ++---
 src/lbm/field/ShearRate.h                     |  4 +-
 .../initializer/ExprSystemInitFunction.h      |  6 +-
 .../field/initializer/PdfFieldInitializer.h   |  2 +-
 .../initializer/PoiseuilleInitializer.h       |  2 +-
 src/lbm/lattice_model/CollisionModel.h        | 10 +-
 src/lbm/lattice_model/D2Q9.h                  |  8 +-
 src/lbm/lattice_model/D3Q15.h                 |  8 +-
 src/lbm/lattice_model/D3Q19.h                 |  8 +-
 src/lbm/lattice_model/D3Q27.h                 |  8 +-
 .../lattice_model/EquilibriumDistribution.h   |  8 +-
 src/lbm/lattice_model/ForceModel.h            | 38 ++++----
 src/lbm/lattice_model/LatticeModelBase.h      |  4 +-
 src/lbm/lattice_model/NeighborsStencil.h      |  4 +-
 src/lbm/lattice_model/SmagorinskyLES.h        |  6 +-
 .../refinement/CurlBasedLevelDetermination.h  |  2 +-
 .../EqualLevelBorderStreamCorrection.h        |  8 +-
 src/lbm/refinement/LinearExplosion.h          |  8 +-
 src/lbm/refinement/PdfFieldPackInfo.h         |  4 +-
 src/lbm/refinement/TimeStep.h                 | 12 +--
 .../VorticityBasedLevelDetermination.h        |  2 +-
 src/lbm/srt/SplitPureSweep.impl.h             |  8 +-
 src/lbm/srt/SplitSweep.impl.h                 |  8 +-
 .../AdvectionDiffusionCellOperation.impl.h    | 12 +--
 .../DefaultCellOperation.impl.h               | 16 ++--
 src/lbm/sweeps/ActiveCellSweep.h              |  2 +-
 src/lbm/sweeps/CellwiseSweep.h                |  8 +-
 src/lbm/sweeps/FlagFieldSweepBase.h           |  4 +-
 src/lbm/sweeps/StreamPull.h                   | 32 +++----
 src/lbm/sweeps/Streaming.h                    | 16 ++--
 src/lbm/sweeps/SweepBase.h                    |  2 +-
 src/lbm/trt/SplitPureSweep.impl.h             |  8 +-
 src/lbm/trt/SplitSweep.impl.h                 |  8 +-
 .../DefaultCellOperation.impl.h               | 12 +--
 src/lbm/vtk/Density.h                         |  4 +-
 src/lbm/vtk/NonEquilibrium.h                  |  4 +-
 src/lbm/vtk/PressureTensor.h                  |  2 +-
 src/lbm/vtk/VTKOutput.h                       |  6 +-
 src/lbm/vtk/Velocity.h                        |  8 +-
 .../utility/SubCyclingManager.h               |  6 +-
 src/mesa_pd/collision_detection/EPA.h         |  6 +-
 src/pde/sweeps/SweepBase.h                    |  2 +-
 src/pe/Materials.h                            |  2 +-
 src/pe/Types.h                                | 96 +++++++++----------
 .../MetisAssignmentFunctor.h                  |  4 +-
 .../WeightAssignmentFunctor.h                 |  4 +-
 src/pe/ccd/HashGrids.h                        |  8 +-
 src/pe/collision/EPA.h                        |  6 +-
 src/pe/cr/HCSITS.h                            |  2 +-
 src/pe/rigidbody/MPIRigidBodyTrait.h          | 10 +-
 src/pe_coupling/amr/InfoCollection.h          |  4 +-
 .../WeightAssignmentFunctor.h                 |  2 +-
 .../evaluators/AddedMassForceEvaluator.h      |  6 +-
 .../EffectiveViscosityFieldEvaluator.h        |  2 +-
 .../evaluators/InteractionForceEvaluator.h    | 10 +-
 .../evaluators/LiftForceEvaluator.h           |  6 +-
 .../evaluators/PressureFieldEvaluator.h       |  4 +-
 .../PressureGradientFieldEvaluator.h          |  6 +-
 .../SolidVolumeFractionFieldEvaluator.h       |  4 +-
 .../StressTensorGradientFieldEvaluator.h      |  6 +-
 .../evaluators/VelocityCurlFieldEvaluator.h   |  4 +-
 .../evaluators/VelocityFieldEvaluator.h       |  4 +-
 .../VelocityGradientFieldEvaluator.h          |  6 +-
 ...elocityTotalTimeDerivativeFieldEvaluator.h |  4 +-
 .../gns_lbm/GNSSweep.h                        | 10 +-
 .../GNSExternalForceToForceFieldAdder.h       |  4 +-
 .../utility/GNSPressureFieldEvaluator.h       |  4 +-
 .../gns_lbm/utility/GNSSmagorinskyLESField.h  |  6 +-
 .../utility/GNSVelocityFieldEvaluator.h       |  6 +-
 ...edInteractionForceFieldToForceFieldAdder.h |  2 +-
 .../utility/BodyVelocityInitializer.h         |  4 +-
 .../utility/ExternalForceToForceFieldAdder.h  |  2 +-
 .../utility/ForceFieldResetter.h              |  2 +-
 .../momentum_exchange_method/BodyMapping.h    | 10 +-
 .../boundary/CurvedLinear.h                   |  8 +-
 .../boundary/CurvedQuadratic.h                |  8 +-
 .../boundary/SimpleBB.h                       |  8 +-
 .../destruction/Destroyer.h                   |  2 +-
 .../ExtrapolationDirectionFinder.h            |  2 +-
 .../restoration/PDFReconstruction.h           |  8 +-
 .../restoration/Reconstructor.h               | 12 +--
 .../BodyAndVolumeFractionMapping.cpp          |  4 +-
 .../BodyAndVolumeFractionMapping.h            |  4 +-
 .../PSMSweep.h                                | 12 +--
 .../PSMUtility.h                              |  6 +-
 .../utility/BodiesForceTorqueContainer.h      |  2 +-
 src/postprocessing/MarchingCubes.impl.h       |  2 +-
 src/stencil/D2CornerStencil.h                 |  4 +-
 src/stencil/D2Q4.h                            |  4 +-
 src/stencil/D2Q5.h                            |  4 +-
 src/stencil/D2Q9.h                            |  4 +-
 src/stencil/D3CornerStencil.h                 |  4 +-
 src/stencil/D3EdgeCornerStencil.h             |  4 +-
 src/stencil/D3Q15.h                           |  4 +-
 src/stencil/D3Q19.h                           |  4 +-
 src/stencil/D3Q27.h                           |  4 +-
 src/stencil/D3Q6.h                            |  4 +-
 src/stencil/D3Q7.h                            |  4 +-
 src/stencil/EdgeStencil.h                     |  4 +-
 src/timeloop/PerformanceMeter.cpp             |  2 +-
 src/timeloop/PerformanceMeter.h               |  2 +-
 src/timeloop/SelectableFunctionCreators.h     |  2 +-
 src/timeloop/Timeloop.h                       |  6 +-
 src/vtk/BlockCellDataWriter.h                 |  6 +-
 src/vtk/ChainedFilter.h                       |  2 +-
 src/vtk/Initialization.h                      |  6 +-
 src/vtk/PolylineDataSource.h                  |  2 +-
 src/vtk/VTKOutput.h                           | 13 ++-
 277 files changed, 1173 insertions(+), 1219 deletions(-)

diff --git a/apps/benchmarks/AdaptiveMeshRefinementFluidParticleCoupling/AMRSedimentSettling.cpp b/apps/benchmarks/AdaptiveMeshRefinementFluidParticleCoupling/AMRSedimentSettling.cpp
index f8b5674df..73e19a030 100644
--- a/apps/benchmarks/AdaptiveMeshRefinementFluidParticleCoupling/AMRSedimentSettling.cpp
+++ b/apps/benchmarks/AdaptiveMeshRefinementFluidParticleCoupling/AMRSedimentSettling.cpp
@@ -90,25 +90,25 @@ using walberla::uint_t;
 //////////////
 
 // PDF field, flag field & body field
-typedef lbm::D3Q19< lbm::collision_model::TRT, false>  LatticeModel_T;
-typedef LatticeModel_T::Stencil          Stencil_T;
-typedef lbm::PdfField< LatticeModel_T > PdfField_T;
+using LatticeModel_T = lbm::D3Q19<lbm::collision_model::TRT, false>;
+using Stencil_T = LatticeModel_T::Stencil;
+using PdfField_T = lbm::PdfField<LatticeModel_T>;
 
-typedef walberla::uint8_t                 flag_t;
-typedef FlagField< flag_t >               FlagField_T;
-typedef GhostLayerField< pe::BodyID, 1 >  BodyField_T;
-typedef GhostLayerField< Vector3<real_t>, 1 >  VelocityField_T;
+using flag_t = walberla::uint8_t;
+using FlagField_T = FlagField<flag_t>;
+using BodyField_T = GhostLayerField<pe::BodyID, 1>;
+using VelocityField_T = GhostLayerField<Vector3<real_t>, 1>;
 
 const uint_t FieldGhostLayers = 4;
 
 // boundary handling
-typedef lbm::NoSlip< LatticeModel_T, flag_t > NoSlip_T;
+using NoSlip_T = lbm::NoSlip<LatticeModel_T, flag_t>;
 
-typedef pe_coupling::CurvedLinear< LatticeModel_T, FlagField_T > MO_T;
+using MO_T = pe_coupling::CurvedLinear<LatticeModel_T, FlagField_T>;
 
-typedef BoundaryHandling< FlagField_T, Stencil_T, NoSlip_T, MO_T > BoundaryHandling_T;
+using BoundaryHandling_T = BoundaryHandling<FlagField_T, Stencil_T, NoSlip_T, MO_T>;
 
-typedef std::tuple<pe::Sphere, pe::Ellipsoid, pe::Plane> BodyTypeTuple;
+using BodyTypeTuple = std::tuple<pe::Sphere, pe::Ellipsoid, pe::Plane>;
 
 ///////////
 // FLAGS //
@@ -135,8 +135,8 @@ template< typename LatticeModel_T, typename Filter_T >
 class VectorGradientRefinement
 {
 public:
-   typedef GhostLayerField< Vector3<real_t>, 1 >  VectorField_T;
-   typedef typename LatticeModel_T::Stencil       Stencil_T;
+   using VectorField_T = GhostLayerField<Vector3<real_t>, 1>;
+   using Stencil_T = typename LatticeModel_T::Stencil;
 
    VectorGradientRefinement( const ConstBlockDataID & fieldID, const Filter_T & filter,
                              const real_t upperLimit, const real_t lowerLimit, const uint_t maxLevel ) :
@@ -1504,7 +1504,7 @@ int main( int argc, char **argv )
    // add velocity field and utility
    BlockDataID velocityFieldID = field::addToStorage<VelocityField_T>( blocks, "velocity field", Vector3<real_t>(real_t(0)), field::zyxf, uint_t(2) );
 
-   typedef lbm::VelocityFieldWriter< PdfField_T, VelocityField_T > VelocityFieldWriter_T;
+   using VelocityFieldWriter_T = lbm::VelocityFieldWriter<PdfField_T, VelocityField_T>;
    BlockSweepWrapper< VelocityFieldWriter_T > velocityFieldWriter( blocks, VelocityFieldWriter_T( pdfFieldID, velocityFieldID ) );
 
 
@@ -1847,7 +1847,7 @@ int main( int argc, char **argv )
                                                  "Body Mapping", finestLevel );
 
    // add sweep for restoring PDFs in cells previously occupied by pe bodies
-   typedef pe_coupling::EquilibriumReconstructor< LatticeModel_T, BoundaryHandling_T > Reconstructor_T;
+   using Reconstructor_T = pe_coupling::EquilibriumReconstructor<LatticeModel_T, BoundaryHandling_T>;
    Reconstructor_T reconstructor( blocks, boundaryHandlingID, bodyFieldID );
    refinementTimestep->addPostStreamVoidFunction(lbm::refinement::SweepAsFunctorWrapper( pe_coupling::PDFReconstruction< LatticeModel_T, BoundaryHandling_T, Reconstructor_T > ( blocks, pdfFieldID,
                                                  boundaryHandlingID, bodyStorageID, globalBodyStorage, bodyFieldID, reconstructor, FormerMO_Flag, Fluid_Flag ), blocks ),
diff --git a/apps/benchmarks/AdaptiveMeshRefinementFluidParticleCoupling/AMRSettlingSphere.cpp b/apps/benchmarks/AdaptiveMeshRefinementFluidParticleCoupling/AMRSettlingSphere.cpp
index 0db5c807d..c13a7c93d 100644
--- a/apps/benchmarks/AdaptiveMeshRefinementFluidParticleCoupling/AMRSettlingSphere.cpp
+++ b/apps/benchmarks/AdaptiveMeshRefinementFluidParticleCoupling/AMRSettlingSphere.cpp
@@ -84,25 +84,25 @@ using walberla::uint_t;
 //////////////
 
 // PDF field, flag field & body field
-typedef lbm::D3Q19< lbm::collision_model::TRT, false >  LatticeModel_T;
-typedef LatticeModel_T::Stencil          Stencil_T;
-typedef lbm::PdfField< LatticeModel_T > PdfField_T;
+using LatticeModel_T = lbm::D3Q19<lbm::collision_model::TRT, false>;
+using Stencil_T = LatticeModel_T::Stencil;
+using PdfField_T = lbm::PdfField<LatticeModel_T>;
 
-typedef walberla::uint8_t                 flag_t;
-typedef FlagField< flag_t >               FlagField_T;
-typedef GhostLayerField< pe::BodyID, 1 >  BodyField_T;
-typedef GhostLayerField< Vector3<real_t>, 1 >  VelocityField_T;
+using flag_t = walberla::uint8_t;
+using FlagField_T = FlagField<flag_t>;
+using BodyField_T = GhostLayerField<pe::BodyID, 1>;
+using VelocityField_T = GhostLayerField<Vector3<real_t>, 1>;
 
 const uint_t FieldGhostLayers = 4;
 
 // boundary handling
-typedef lbm::NoSlip< LatticeModel_T, flag_t > NoSlip_T;
+using NoSlip_T = lbm::NoSlip<LatticeModel_T, flag_t>;
 
-typedef pe_coupling::CurvedLinear< LatticeModel_T, FlagField_T > MO_T;
+using MO_T = pe_coupling::CurvedLinear<LatticeModel_T, FlagField_T>;
 
-typedef BoundaryHandling< FlagField_T, Stencil_T, NoSlip_T, MO_T > BoundaryHandling_T;
+using BoundaryHandling_T = BoundaryHandling<FlagField_T, Stencil_T, NoSlip_T, MO_T>;
 
-typedef std::tuple<pe::Sphere, pe::Ellipsoid, pe::Plane> BodyTypeTuple;
+using BodyTypeTuple = std::tuple<pe::Sphere, pe::Ellipsoid, pe::Plane>;
 
 ///////////
 // FLAGS //
@@ -128,8 +128,8 @@ template< typename LatticeModel_T, typename Filter_T >
 class VectorGradientRefinement
 {
 public:
-   typedef GhostLayerField< Vector3<real_t>, 1 >  VectorField_T;
-   typedef typename LatticeModel_T::Stencil       Stencil_T;
+   using VectorField_T = GhostLayerField<Vector3<real_t>, 1>;
+   using Stencil_T = typename LatticeModel_T::Stencil;
 
    VectorGradientRefinement( const ConstBlockDataID & fieldID, const Filter_T & filter,
                              const real_t upperLimit, const real_t lowerLimit, const uint_t maxLevel ) :
@@ -994,7 +994,7 @@ int main( int argc, char **argv )
    // add velocity field and utility
    BlockDataID velocityFieldID = field::addToStorage<VelocityField_T>( blocks, "velocity field", Vector3<real_t>(real_t(0)), field::zyxf, uint_t(2) );
 
-   typedef lbm::VelocityFieldWriter< PdfField_T, VelocityField_T > VelocityFieldWriter_T;
+   using VelocityFieldWriter_T = lbm::VelocityFieldWriter<PdfField_T, VelocityField_T>;
    BlockSweepWrapper< VelocityFieldWriter_T > velocityFieldWriter( blocks, VelocityFieldWriter_T( pdfFieldID, velocityFieldID ) );
 
 
@@ -1177,7 +1177,7 @@ int main( int argc, char **argv )
                                                  "Body Mapping", finestLevel );
 
    // add sweep for restoring PDFs in cells previously occupied by pe bodies
-   typedef pe_coupling::EquilibriumReconstructor< LatticeModel_T, BoundaryHandling_T > Reconstructor_T;
+   using Reconstructor_T = pe_coupling::EquilibriumReconstructor<LatticeModel_T, BoundaryHandling_T>;
    Reconstructor_T reconstructor( blocks, boundaryHandlingID, bodyFieldID );
    refinementTimestep->addPostStreamVoidFunction(lbm::refinement::SweepAsFunctorWrapper( pe_coupling::PDFReconstruction< LatticeModel_T, BoundaryHandling_T, Reconstructor_T > ( blocks, pdfFieldID,
                                                                                                                                                                                  boundaryHandlingID, bodyStorageID, globalBodyStorage, bodyFieldID, reconstructor, FormerMO_Flag, Fluid_Flag ), blocks ),
diff --git a/apps/benchmarks/AdaptiveMeshRefinementFluidParticleCoupling/WorkloadEvaluation.cpp b/apps/benchmarks/AdaptiveMeshRefinementFluidParticleCoupling/WorkloadEvaluation.cpp
index 18d93204f..01f0b3f99 100644
--- a/apps/benchmarks/AdaptiveMeshRefinementFluidParticleCoupling/WorkloadEvaluation.cpp
+++ b/apps/benchmarks/AdaptiveMeshRefinementFluidParticleCoupling/WorkloadEvaluation.cpp
@@ -86,23 +86,23 @@ using namespace walberla;
 using walberla::uint_t;
 
 // PDF field, flag field & body field
-typedef lbm::D3Q19< lbm::collision_model::TRT, false>  LatticeModel_T;
+using LatticeModel_T = lbm::D3Q19<lbm::collision_model::TRT, false>;
 
-typedef LatticeModel_T::Stencil Stencil_T;
-typedef lbm::PdfField< LatticeModel_T > PdfField_T;
+using Stencil_T = LatticeModel_T::Stencil;
+using PdfField_T = lbm::PdfField<LatticeModel_T>;
 
-typedef walberla::uint8_t                 flag_t;
-typedef FlagField< flag_t >               FlagField_T;
-typedef GhostLayerField< pe::BodyID, 1 >  BodyField_T;
+using flag_t = walberla::uint8_t;
+using FlagField_T = FlagField<flag_t>;
+using BodyField_T = GhostLayerField<pe::BodyID, 1>;
 
 const uint_t FieldGhostLayers = 1;
 
 // boundary handling
-typedef pe_coupling::CurvedLinear< LatticeModel_T, FlagField_T > MO_CLI_T;
+using MO_CLI_T = pe_coupling::CurvedLinear<LatticeModel_T, FlagField_T>;
 
-typedef BoundaryHandling< FlagField_T, Stencil_T, MO_CLI_T > BoundaryHandling_T;
+using BoundaryHandling_T = BoundaryHandling<FlagField_T, Stencil_T, MO_CLI_T>;
 
-typedef std::tuple<pe::Sphere, pe::Ellipsoid, pe::Plane> BodyTypeTuple;
+using BodyTypeTuple = std::tuple<pe::Sphere, pe::Ellipsoid, pe::Plane>;
 
 ///////////
 // FLAGS //
@@ -754,7 +754,7 @@ int main( int argc, char **argv )
          << Sweep( pe_coupling::BodyMapping< LatticeModel_T, BoundaryHandling_T >( blocks, pdfFieldID, boundaryHandlingID, bodyStorageID, globalBodyStorage, bodyFieldID, MO_CLI_Flag, FormerMO_Flag, pe_coupling::selectRegularBodies ), "Body Mapping" );
 
    // sweep for restoring PDFs in cells previously occupied by pe bodies
-   typedef pe_coupling::EquilibriumReconstructor< LatticeModel_T, BoundaryHandling_T > Reconstructor_T;
+   using Reconstructor_T = pe_coupling::EquilibriumReconstructor<LatticeModel_T, BoundaryHandling_T>;
    Reconstructor_T reconstructor( blocks, boundaryHandlingID, bodyFieldID);
    timeloop.add()
          << Sweep( pe_coupling::PDFReconstruction< LatticeModel_T, BoundaryHandling_T, Reconstructor_T >
diff --git a/apps/benchmarks/CouetteFlow/CouetteFlow.cpp b/apps/benchmarks/CouetteFlow/CouetteFlow.cpp
index 4bedb5742..b313738d0 100644
--- a/apps/benchmarks/CouetteFlow/CouetteFlow.cpp
+++ b/apps/benchmarks/CouetteFlow/CouetteFlow.cpp
@@ -118,21 +118,21 @@ using walberla::real_t;
 // TYPEDEFS //
 //////////////
 
-typedef lbm::D3Q15< lbm::collision_model::SRT,      false > D3Q15_SRT_INCOMP;
-typedef lbm::D3Q15< lbm::collision_model::SRT,      true  > D3Q15_SRT_COMP;
-typedef lbm::D3Q15< lbm::collision_model::TRT,      false > D3Q15_TRT_INCOMP;
-typedef lbm::D3Q15< lbm::collision_model::TRT,      true  > D3Q15_TRT_COMP;
-
-typedef lbm::D3Q19< lbm::collision_model::SRT,      false > D3Q19_SRT_INCOMP;
-typedef lbm::D3Q19< lbm::collision_model::SRT,      true  > D3Q19_SRT_COMP;
-typedef lbm::D3Q19< lbm::collision_model::TRT,      false > D3Q19_TRT_INCOMP;
-typedef lbm::D3Q19< lbm::collision_model::TRT,      true  > D3Q19_TRT_COMP;
-typedef lbm::D3Q19< lbm::collision_model::D3Q19MRT, false > D3Q19_MRT_INCOMP;
-
-typedef lbm::D3Q27< lbm::collision_model::SRT,      false > D3Q27_SRT_INCOMP;
-typedef lbm::D3Q27< lbm::collision_model::SRT,      true  > D3Q27_SRT_COMP;
-typedef lbm::D3Q27< lbm::collision_model::TRT,      false > D3Q27_TRT_INCOMP;
-typedef lbm::D3Q27< lbm::collision_model::TRT,      true  > D3Q27_TRT_COMP;
+using D3Q15_SRT_INCOMP = lbm::D3Q15<lbm::collision_model::SRT, false>;
+using D3Q15_SRT_COMP = lbm::D3Q15<lbm::collision_model::SRT, true>;
+using D3Q15_TRT_INCOMP = lbm::D3Q15<lbm::collision_model::TRT, false>;
+using D3Q15_TRT_COMP = lbm::D3Q15<lbm::collision_model::TRT, true>;
+
+using D3Q19_SRT_INCOMP = lbm::D3Q19<lbm::collision_model::SRT, false>;
+using D3Q19_SRT_COMP = lbm::D3Q19<lbm::collision_model::SRT, true>;
+using D3Q19_TRT_INCOMP = lbm::D3Q19<lbm::collision_model::TRT, false>;
+using D3Q19_TRT_COMP = lbm::D3Q19<lbm::collision_model::TRT, true>;
+using D3Q19_MRT_INCOMP = lbm::D3Q19<lbm::collision_model::D3Q19MRT, false>;
+
+using D3Q27_SRT_INCOMP = lbm::D3Q27<lbm::collision_model::SRT, false>;
+using D3Q27_SRT_COMP = lbm::D3Q27<lbm::collision_model::SRT, true>;
+using D3Q27_TRT_INCOMP = lbm::D3Q27<lbm::collision_model::TRT, false>;
+using D3Q27_TRT_COMP = lbm::D3Q27<lbm::collision_model::TRT, true>;
 
 template< typename LatticeModel_T >
 struct Types
@@ -370,10 +370,10 @@ class MyBoundaryHandling
 {
 public:
 
-   typedef lbm::NoSlip< LatticeModel_T, flag_t >    NoSlip_T;
-   typedef lbm::SimpleUBB< LatticeModel_T, flag_t > UBB_T;
+   using NoSlip_T = lbm::NoSlip<LatticeModel_T, flag_t>;
+   using UBB_T = lbm::SimpleUBB<LatticeModel_T, flag_t>;
 
-   typedef BoundaryHandling< FlagField_T, typename Types<LatticeModel_T>::Stencil_T, NoSlip_T, UBB_T > BoundaryHandling_T;
+   using BoundaryHandling_T = BoundaryHandling<FlagField_T, typename Types<LatticeModel_T>::Stencil_T, NoSlip_T, UBB_T>;
 
 
 
@@ -616,7 +616,7 @@ struct AddRefinementTimeStep
          }
          else
          {
-            typedef lbm::SplitSweep< LatticeModel_T, FlagField_T > Sweep_T;
+            using Sweep_T = lbm::SplitSweep<LatticeModel_T, FlagField_T>;
             auto mySweep = make_shared< Sweep_T >( pdfFieldId, flagFieldId, Fluid_Flag );
 
             addRefinementTimeStep< LatticeModel_T, Sweep_T >( timeloop, blocks, pdfFieldId, boundaryHandlingId, timingPool, levelwiseTimingPool,
diff --git a/apps/benchmarks/DEM/DEM.cpp b/apps/benchmarks/DEM/DEM.cpp
index a76f4993f..eb892fa4c 100644
--- a/apps/benchmarks/DEM/DEM.cpp
+++ b/apps/benchmarks/DEM/DEM.cpp
@@ -48,7 +48,7 @@ int main( int argc, char** argv )
    using namespace walberla;
    using namespace walberla::pe;
 
-   typedef std::tuple<Sphere, Plane> BodyTuple ;
+   using BodyTuple = std::tuple<Sphere, Plane> ;
 
    walberla::MPIManager::instance()->initializeMPI( &argc, &argv );
 
diff --git a/apps/benchmarks/ForcesOnSphereNearPlaneInShearFlow/ForcesOnSphereNearPlaneInShearFlow.cpp b/apps/benchmarks/ForcesOnSphereNearPlaneInShearFlow/ForcesOnSphereNearPlaneInShearFlow.cpp
index 7e5c37e2e..a01b5210f 100644
--- a/apps/benchmarks/ForcesOnSphereNearPlaneInShearFlow/ForcesOnSphereNearPlaneInShearFlow.cpp
+++ b/apps/benchmarks/ForcesOnSphereNearPlaneInShearFlow/ForcesOnSphereNearPlaneInShearFlow.cpp
@@ -81,23 +81,23 @@ using walberla::uint_t;
 //////////////
 
 // PDF field, flag field & body field
-typedef lbm::D3Q19< lbm::collision_model::TRT, false >  LatticeModel_T;
+using LatticeModel_T = lbm::D3Q19<lbm::collision_model::TRT, false>;
 using Stencil_T = LatticeModel_T::Stencil;
 using PdfField_T = lbm::PdfField<LatticeModel_T>;
 
 using flag_t = walberla::uint8_t;
 using FlagField_T = FlagField<flag_t>;
-typedef GhostLayerField< pe::BodyID, 1 >  BodyField_T;
+using BodyField_T = GhostLayerField<pe::BodyID, 1>;
 
 const uint_t FieldGhostLayers = 4;
 
 // boundary handling
-typedef pe_coupling::SimpleBB< LatticeModel_T, FlagField_T > MO_SBB_T;
-typedef pe_coupling::CurvedLinear< LatticeModel_T, FlagField_T > MO_CLI_T;
+using MO_SBB_T = pe_coupling::SimpleBB<LatticeModel_T, FlagField_T>;
+using MO_CLI_T = pe_coupling::CurvedLinear<LatticeModel_T, FlagField_T>;
 
-typedef BoundaryHandling< FlagField_T, Stencil_T, MO_SBB_T, MO_CLI_T > BoundaryHandling_T;
+using BoundaryHandling_T = BoundaryHandling<FlagField_T, Stencil_T, MO_SBB_T, MO_CLI_T>;
 
-typedef std::tuple< pe::Sphere, pe::Plane > BodyTypeTuple;
+using BodyTypeTuple = std::tuple<pe::Sphere, pe::Plane>;
 
 ///////////
 // FLAGS //
diff --git a/apps/benchmarks/MotionSingleHeavySphere/MotionSingleHeavySphere.cpp b/apps/benchmarks/MotionSingleHeavySphere/MotionSingleHeavySphere.cpp
index efeb8186e..293451af2 100644
--- a/apps/benchmarks/MotionSingleHeavySphere/MotionSingleHeavySphere.cpp
+++ b/apps/benchmarks/MotionSingleHeavySphere/MotionSingleHeavySphere.cpp
@@ -76,29 +76,29 @@ using walberla::uint_t;
 //////////////
 
 // PDF field, flag field & body field
-typedef lbm::D3Q19< lbm::collision_model::TRT, false >  LatticeModel_T;
+using LatticeModel_T = lbm::D3Q19<lbm::collision_model::TRT, false>;
 
 using Stencil_T = LatticeModel_T::Stencil;
 using PdfField_T = lbm::PdfField<LatticeModel_T>;
 
 using flag_t = walberla::uint8_t;
 using FlagField_T = FlagField<flag_t>;
-typedef GhostLayerField< pe::BodyID, 1 >  BodyField_T;
+using BodyField_T = GhostLayerField<pe::BodyID, 1>;
 
-typedef std::pair< pe::BodyID, real_t >                              BodyAndVolumeFraction_T;
-typedef GhostLayerField< std::vector< BodyAndVolumeFraction_T >, 1 > BodyAndVolumeFractionField_T;
+using BodyAndVolumeFraction_T = std::pair<pe::BodyID, real_t>;
+using BodyAndVolumeFractionField_T = GhostLayerField<std::vector<BodyAndVolumeFraction_T>, 1>;
 
 const uint_t FieldGhostLayers = 1;
 
 // boundary handling
-typedef lbm::SimpleUBB< LatticeModel_T, flag_t >           UBB_T;
-typedef lbm::SimplePressure< LatticeModel_T, flag_t >      Outlet_T;
+using UBB_T = lbm::SimpleUBB<LatticeModel_T, flag_t>;
+using Outlet_T = lbm::SimplePressure<LatticeModel_T, flag_t>;
 
-typedef pe_coupling::SimpleBB< LatticeModel_T, FlagField_T >        MEM_BB_T;
-typedef pe_coupling::CurvedLinear< LatticeModel_T, FlagField_T >    MEM_CLI_T;
-typedef pe_coupling::CurvedQuadratic< LatticeModel_T, FlagField_T > MEM_MR_T;
+using MEM_BB_T = pe_coupling::SimpleBB<LatticeModel_T, FlagField_T>;
+using MEM_CLI_T = pe_coupling::CurvedLinear<LatticeModel_T, FlagField_T>;
+using MEM_MR_T = pe_coupling::CurvedQuadratic<LatticeModel_T, FlagField_T>;
 
-typedef BoundaryHandling< FlagField_T, Stencil_T, UBB_T, Outlet_T, MEM_BB_T, MEM_CLI_T, MEM_MR_T > BoundaryHandling_T;
+using BoundaryHandling_T = BoundaryHandling<FlagField_T, Stencil_T, UBB_T, Outlet_T, MEM_BB_T, MEM_CLI_T, MEM_MR_T>;
 
 using BodyTypeTuple = std::tuple<pe::Sphere>;
 
@@ -1236,7 +1236,7 @@ int main( int argc, char **argv )
       // reconstruct missing PDFs
       using ExtrapolationFinder_T = pe_coupling::SphereNormalExtrapolationDirectionFinder;
       ExtrapolationFinder_T extrapolationFinder( blocks, bodyFieldID );
-      typedef pe_coupling::ExtrapolationReconstructor< LatticeModel_T, BoundaryHandling_T, ExtrapolationFinder_T > Reconstructor_T;
+      using Reconstructor_T = pe_coupling::ExtrapolationReconstructor<LatticeModel_T, BoundaryHandling_T, ExtrapolationFinder_T>;
       Reconstructor_T reconstructor( blocks, boundaryHandlingID, bodyFieldID, extrapolationFinder, true );
       timeloop.add() << Sweep( pe_coupling::PDFReconstruction< LatticeModel_T, BoundaryHandling_T, Reconstructor_T >
                                ( blocks, pdfFieldID, boundaryHandlingID, bodyStorageID, globalBodyStorage, bodyFieldID, reconstructor, FormerMEM_Flag, Fluid_Flag ), "PDF Restore" );
diff --git a/apps/benchmarks/NonUniformGrid/NonUniformGrid.cpp b/apps/benchmarks/NonUniformGrid/NonUniformGrid.cpp
index 631625909..817097cca 100644
--- a/apps/benchmarks/NonUniformGrid/NonUniformGrid.cpp
+++ b/apps/benchmarks/NonUniformGrid/NonUniformGrid.cpp
@@ -97,11 +97,11 @@ using walberla::real_t;
 // TYPEDEFS //
 //////////////
 
-typedef lbm::D3Q19< lbm::collision_model::SRT,      false > D3Q19_SRT_INCOMP;
-typedef lbm::D3Q19< lbm::collision_model::SRT,      true  > D3Q19_SRT_COMP;
-typedef lbm::D3Q19< lbm::collision_model::TRT,      false > D3Q19_TRT_INCOMP;
-typedef lbm::D3Q19< lbm::collision_model::TRT,      true  > D3Q19_TRT_COMP;
-typedef lbm::D3Q19< lbm::collision_model::D3Q19MRT, false > D3Q19_MRT_INCOMP;
+using D3Q19_SRT_INCOMP = lbm::D3Q19<lbm::collision_model::SRT, false>;
+using D3Q19_SRT_COMP = lbm::D3Q19<lbm::collision_model::SRT, true>;
+using D3Q19_TRT_INCOMP = lbm::D3Q19<lbm::collision_model::TRT, false>;
+using D3Q19_TRT_COMP = lbm::D3Q19<lbm::collision_model::TRT, true>;
+using D3Q19_MRT_INCOMP = lbm::D3Q19<lbm::collision_model::D3Q19MRT, false>;
 
 template< typename LatticeModel_T >
 struct Types
@@ -437,10 +437,10 @@ void ReGrid::operator()( std::vector< std::pair< const Block *, uint_t > > & min
 template< typename LatticeModel_T >
 struct MyBoundaryTypes
 {
-   typedef lbm::NoSlip< LatticeModel_T, flag_t >    NoSlip_T;
-   typedef lbm::SimpleUBB< LatticeModel_T, flag_t > UBB_T;
+   using NoSlip_T = lbm::NoSlip<LatticeModel_T, flag_t>;
+   using UBB_T = lbm::SimpleUBB<LatticeModel_T, flag_t>;
 
-   typedef BoundaryHandling< FlagField_T, typename Types<LatticeModel_T>::Stencil_T, NoSlip_T, UBB_T > BoundaryHandling_T;
+   using BoundaryHandling_T = BoundaryHandling<FlagField_T, typename Types<LatticeModel_T>::Stencil_T, NoSlip_T, UBB_T>;
 };  
 
 template< typename LatticeModel_T >
@@ -632,7 +632,7 @@ struct AddRefinementTimeStep
          }
          else
          {
-            typedef lbm::SplitSweep< LatticeModel_T, FlagField_T > Sweep_T;
+            using Sweep_T = lbm::SplitSweep<LatticeModel_T, FlagField_T>;
             auto mySweep = make_shared< Sweep_T >( pdfFieldId, flagFieldId, Fluid_Flag );
 
             addRefinementTimeStep< LatticeModel_T, Sweep_T >( timeloop, blocks, pdfFieldId, boundaryHandlingId, timingPool, levelwiseTimingPool,
diff --git a/apps/benchmarks/PoiseuilleChannel/PoiseuilleChannel.cpp b/apps/benchmarks/PoiseuilleChannel/PoiseuilleChannel.cpp
index f5695a0f5..9542fad39 100644
--- a/apps/benchmarks/PoiseuilleChannel/PoiseuilleChannel.cpp
+++ b/apps/benchmarks/PoiseuilleChannel/PoiseuilleChannel.cpp
@@ -116,15 +116,15 @@ using walberla::real_t;
 // TYPEDEFS //
 //////////////
 
-typedef lbm::D3Q19< lbm::collision_model::SRT, false, lbm::force_model::SimpleConstant > D3Q19_SRT_INCOMP;
-typedef lbm::D3Q19< lbm::collision_model::SRT, true,  lbm::force_model::SimpleConstant > D3Q19_SRT_COMP;
-typedef lbm::D3Q19< lbm::collision_model::TRT, false, lbm::force_model::SimpleConstant > D3Q19_TRT_INCOMP;
+using D3Q19_SRT_INCOMP = lbm::D3Q19<lbm::collision_model::SRT, false, lbm::force_model::SimpleConstant>;
+using D3Q19_SRT_COMP = lbm::D3Q19<lbm::collision_model::SRT, true, lbm::force_model::SimpleConstant>;
+using D3Q19_TRT_INCOMP = lbm::D3Q19<lbm::collision_model::TRT, false, lbm::force_model::SimpleConstant>;
 //typedef lbm::D3Q19< lbm::collision_model::TRT, true,  lbm::force_model::SimpleConstant > D3Q19_TRT_COMP;
 
-typedef lbm::D3Q27< lbm::collision_model::SRT, false, lbm::force_model::SimpleConstant > D3Q27_SRT_INCOMP;
-typedef lbm::D3Q27< lbm::collision_model::SRT, true,  lbm::force_model::SimpleConstant > D3Q27_SRT_COMP;
-typedef lbm::D3Q27< lbm::collision_model::TRT, false, lbm::force_model::SimpleConstant > D3Q27_TRT_INCOMP;
-typedef lbm::D3Q27< lbm::collision_model::TRT, true,  lbm::force_model::SimpleConstant > D3Q27_TRT_COMP;
+using D3Q27_SRT_INCOMP = lbm::D3Q27<lbm::collision_model::SRT, false, lbm::force_model::SimpleConstant>;
+using D3Q27_SRT_COMP = lbm::D3Q27<lbm::collision_model::SRT, true, lbm::force_model::SimpleConstant>;
+using D3Q27_TRT_INCOMP = lbm::D3Q27<lbm::collision_model::TRT, false, lbm::force_model::SimpleConstant>;
+using D3Q27_TRT_COMP = lbm::D3Q27<lbm::collision_model::TRT, true, lbm::force_model::SimpleConstant>;
 
 template< typename LatticeModel_T >
 struct Types
@@ -453,10 +453,10 @@ class MyBoundaryHandling
 {
 public:
 
-   typedef lbm::NoSlip< LatticeModel_T, flag_t >      NoSlip_T;
-   typedef lbm::Curved< LatticeModel_T, FlagField_T > Curved_T;
+   using NoSlip_T = lbm::NoSlip<LatticeModel_T, flag_t>;
+   using Curved_T = lbm::Curved<LatticeModel_T, FlagField_T>;
 
-   typedef BoundaryHandling< FlagField_T, typename Types<LatticeModel_T>::Stencil_T, NoSlip_T, Curved_T > BoundaryHandling_T;
+   using BoundaryHandling_T = BoundaryHandling<FlagField_T, typename Types<LatticeModel_T>::Stencil_T, NoSlip_T, Curved_T>;
 
 
 
diff --git a/apps/benchmarks/SchaeferTurek/SchaeferTurek.cpp b/apps/benchmarks/SchaeferTurek/SchaeferTurek.cpp
index c49dafff0..cdbd64fbe 100644
--- a/apps/benchmarks/SchaeferTurek/SchaeferTurek.cpp
+++ b/apps/benchmarks/SchaeferTurek/SchaeferTurek.cpp
@@ -133,26 +133,26 @@ using walberla::real_t;
 // TYPEDEFS //
 //////////////
 
-typedef lbm::D2Q9< lbm::collision_model::SRT,       false > D2Q9_SRT_INCOMP;
-typedef lbm::D2Q9< lbm::collision_model::SRT,       true  > D2Q9_SRT_COMP;
-typedef lbm::D2Q9< lbm::collision_model::TRT,       false > D2Q9_TRT_INCOMP;
-typedef lbm::D2Q9< lbm::collision_model::TRT,       true  > D2Q9_TRT_COMP;
-
-typedef lbm::D3Q15< lbm::collision_model::SRT,      false > D3Q15_SRT_INCOMP;
-typedef lbm::D3Q15< lbm::collision_model::SRT,      true  > D3Q15_SRT_COMP;
-typedef lbm::D3Q15< lbm::collision_model::TRT,      false > D3Q15_TRT_INCOMP;
-typedef lbm::D3Q15< lbm::collision_model::TRT,      true  > D3Q15_TRT_COMP;
-
-typedef lbm::D3Q19< lbm::collision_model::SRT,      false > D3Q19_SRT_INCOMP;
-typedef lbm::D3Q19< lbm::collision_model::SRT,      true  > D3Q19_SRT_COMP;
-typedef lbm::D3Q19< lbm::collision_model::TRT,      false > D3Q19_TRT_INCOMP;
-typedef lbm::D3Q19< lbm::collision_model::TRT,      true  > D3Q19_TRT_COMP;
-typedef lbm::D3Q19< lbm::collision_model::D3Q19MRT, false > D3Q19_MRT_INCOMP;
-
-typedef lbm::D3Q27< lbm::collision_model::SRT,      false > D3Q27_SRT_INCOMP;
-typedef lbm::D3Q27< lbm::collision_model::SRT,      true  > D3Q27_SRT_COMP;
-typedef lbm::D3Q27< lbm::collision_model::TRT,      false > D3Q27_TRT_INCOMP;
-typedef lbm::D3Q27< lbm::collision_model::TRT,      true  > D3Q27_TRT_COMP;
+using D2Q9_SRT_INCOMP = lbm::D2Q9<lbm::collision_model::SRT, false>;
+using D2Q9_SRT_COMP = lbm::D2Q9<lbm::collision_model::SRT, true>;
+using D2Q9_TRT_INCOMP = lbm::D2Q9<lbm::collision_model::TRT, false>;
+using D2Q9_TRT_COMP = lbm::D2Q9<lbm::collision_model::TRT, true>;
+
+using D3Q15_SRT_INCOMP = lbm::D3Q15<lbm::collision_model::SRT, false>;
+using D3Q15_SRT_COMP = lbm::D3Q15<lbm::collision_model::SRT, true>;
+using D3Q15_TRT_INCOMP = lbm::D3Q15<lbm::collision_model::TRT, false>;
+using D3Q15_TRT_COMP = lbm::D3Q15<lbm::collision_model::TRT, true>;
+
+using D3Q19_SRT_INCOMP = lbm::D3Q19<lbm::collision_model::SRT, false>;
+using D3Q19_SRT_COMP = lbm::D3Q19<lbm::collision_model::SRT, true>;
+using D3Q19_TRT_INCOMP = lbm::D3Q19<lbm::collision_model::TRT, false>;
+using D3Q19_TRT_COMP = lbm::D3Q19<lbm::collision_model::TRT, true>;
+using D3Q19_MRT_INCOMP = lbm::D3Q19<lbm::collision_model::D3Q19MRT, false>;
+
+using D3Q27_SRT_INCOMP = lbm::D3Q27<lbm::collision_model::SRT, false>;
+using D3Q27_SRT_COMP = lbm::D3Q27<lbm::collision_model::SRT, true>;
+using D3Q27_TRT_INCOMP = lbm::D3Q27<lbm::collision_model::TRT, false>;
+using D3Q27_TRT_COMP = lbm::D3Q27<lbm::collision_model::TRT, true>;
 
 template< typename LatticeModel_T >
 struct Types
@@ -776,16 +776,15 @@ private:
 template< typename LatticeModel_T >
 struct MyBoundaryTypes
 {
-   typedef lbm::NoSlip< LatticeModel_T, flag_t >                                  NoSlip_T;
-   typedef lbm::NoSlip< LatticeModel_T, flag_t >                                  Obstacle_T;
-   typedef lbm::Curved< LatticeModel_T, FlagField_T >                             Curved_T;
-   typedef lbm::DynamicUBB< LatticeModel_T, flag_t,
-                            SinusInflowVelocity<Is2D< LatticeModel_T >::value> >  DynamicUBB_T;
-   typedef lbm::Outlet< LatticeModel_T, FlagField_T, 2, 1 >                       Outlet21_T;
-   typedef lbm::Outlet< LatticeModel_T, FlagField_T, 4, 3 >                       Outlet43_T;
-   typedef lbm::SimplePressure< LatticeModel_T, flag_t >                          PressureOutlet_T;
-
-   typedef BoundaryHandling< FlagField_T, typename Types<LatticeModel_T>::Stencil_T, NoSlip_T, Obstacle_T, Curved_T, DynamicUBB_T, Outlet21_T, Outlet43_T, PressureOutlet_T > BoundaryHandling_T;
+   using NoSlip_T = lbm::NoSlip<LatticeModel_T, flag_t>;
+   using Obstacle_T = lbm::NoSlip<LatticeModel_T, flag_t>;
+   using Curved_T = lbm::Curved<LatticeModel_T, FlagField_T>;
+   using DynamicUBB_T = lbm::DynamicUBB<LatticeModel_T, flag_t, SinusInflowVelocity<Is2D<LatticeModel_T>::value>>;
+   using Outlet21_T = lbm::Outlet<LatticeModel_T, FlagField_T, 2, 1>;
+   using Outlet43_T = lbm::Outlet<LatticeModel_T, FlagField_T, 4, 3>;
+   using PressureOutlet_T = lbm::SimplePressure<LatticeModel_T, flag_t>;
+
+   using BoundaryHandling_T = BoundaryHandling<FlagField_T, typename Types<LatticeModel_T>::Stencil_T, NoSlip_T, Obstacle_T, Curved_T, DynamicUBB_T, Outlet21_T, Outlet43_T, PressureOutlet_T>;
 };
 
 
@@ -2285,7 +2284,7 @@ struct AddRefinementTimeStep
          }
          else
          {
-            typedef lbm::SplitSweep< LatticeModel_T, FlagField_T > Sweep_T;
+            using Sweep_T = lbm::SplitSweep<LatticeModel_T, FlagField_T>;
             auto mySweep = make_shared< Sweep_T >( pdfFieldId, flagFieldId, Fluid_Flag );
 
             addRefinementTimeStep< LatticeModel_T, Sweep_T >( timeloop, blocks, pdfFieldId, boundaryHandlingId, timingPool, levelwiseTimingPool,
@@ -2365,10 +2364,10 @@ void run( const shared_ptr< Config > & config, const LatticeModel_T & latticeMod
    
    // add velocity field + initialize velocity field writer (only used for simulations with an adaptive block structure)
 
-   typedef field::GhostLayerField< Vector3<real_t>, 1 > VelocityField_T;
+   using VelocityField_T = field::GhostLayerField<Vector3<real_t>, 1>;
    BlockDataID velocityFieldId = field::addToStorage< VelocityField_T >( blocks, "velocity", Vector3<real_t>(0), field::zyxf, FieldGhostLayers, true, None, Empty );
 
-   typedef lbm::VelocityFieldWriter< typename Types<LatticeModel_T>::PdfField_T, VelocityField_T > VelocityFieldWriter_T;
+   using VelocityFieldWriter_T = lbm::VelocityFieldWriter<typename Types<LatticeModel_T>::PdfField_T, VelocityField_T>;
    BlockSweepWrapper< VelocityFieldWriter_T > velocityFieldWriter( blocks, VelocityFieldWriter_T( pdfFieldId, velocityFieldId ), None, Empty );
    velocityFieldWriter();
 
diff --git a/apps/benchmarks/UniformGrid/UniformGrid.cpp b/apps/benchmarks/UniformGrid/UniformGrid.cpp
index d5d355e49..0a947d20f 100644
--- a/apps/benchmarks/UniformGrid/UniformGrid.cpp
+++ b/apps/benchmarks/UniformGrid/UniformGrid.cpp
@@ -101,12 +101,12 @@ using walberla::real_t;
 // TYPEDEFS //
 //////////////
 
-typedef lbm::D3Q19< lbm::collision_model::SRT,           false > D3Q19_SRT_INCOMP;
-typedef lbm::D3Q19< lbm::collision_model::SRT,           true  > D3Q19_SRT_COMP;
-typedef lbm::D3Q19< lbm::collision_model::TRT,           false > D3Q19_TRT_INCOMP;
-typedef lbm::D3Q19< lbm::collision_model::TRT,           true  > D3Q19_TRT_COMP;
-typedef lbm::D3Q19< lbm::collision_model::D3Q19MRT,      false > D3Q19_MRT_INCOMP;
-typedef lbm::D3Q27< lbm::collision_model::D3Q27Cumulant, true  > D3Q27_CUMULANT_COMP;
+using D3Q19_SRT_INCOMP = lbm::D3Q19<lbm::collision_model::SRT, false>;
+using D3Q19_SRT_COMP = lbm::D3Q19<lbm::collision_model::SRT, true>;
+using D3Q19_TRT_INCOMP = lbm::D3Q19<lbm::collision_model::TRT, false>;
+using D3Q19_TRT_COMP = lbm::D3Q19<lbm::collision_model::TRT, true>;
+using D3Q19_MRT_INCOMP = lbm::D3Q19<lbm::collision_model::D3Q19MRT, false>;
+using D3Q27_CUMULANT_COMP = lbm::D3Q27<lbm::collision_model::D3Q27Cumulant, true>;
 
 
 template< typename LatticeModel_T >
@@ -347,10 +347,10 @@ class MyBoundaryHandling
 {
 public:
 
-   typedef lbm::NoSlip< LatticeModel_T, flag_t >    NoSlip_T;
-   typedef lbm::SimpleUBB< LatticeModel_T, flag_t > UBB_T;
+   using NoSlip_T = lbm::NoSlip<LatticeModel_T, flag_t>;
+   using UBB_T = lbm::SimpleUBB<LatticeModel_T, flag_t>;
 
-   typedef BoundaryHandling< FlagField_T, typename Types<LatticeModel_T>::Stencil_T, NoSlip_T, UBB_T > BoundaryHandling_T;
+   using BoundaryHandling_T = BoundaryHandling<FlagField_T, typename Types<LatticeModel_T>::Stencil_T, NoSlip_T, UBB_T>;
 
 
 
@@ -565,7 +565,7 @@ struct AddLB
             }
             else
             {
-               typedef lbm::SplitSweep< LatticeModel_T, FlagField_T > Sweep_T;
+               using Sweep_T = lbm::SplitSweep<LatticeModel_T, FlagField_T>;
                auto sweep = make_shared< Sweep_T >( pdfFieldId, flagFieldId, Fluid_Flag );
 
                timeloop.add() << Sweep( lbm::CollideSweep< Sweep_T >( sweep ), "split LB sweep (collide)" );
diff --git a/apps/showcases/BidisperseFluidizedBed/BidisperseFluidizedBedDPM.cpp b/apps/showcases/BidisperseFluidizedBed/BidisperseFluidizedBedDPM.cpp
index d3e6fe63a..dad90bc62 100644
--- a/apps/showcases/BidisperseFluidizedBed/BidisperseFluidizedBedDPM.cpp
+++ b/apps/showcases/BidisperseFluidizedBed/BidisperseFluidizedBedDPM.cpp
@@ -76,12 +76,12 @@ const uint_t FieldGhostLayers( 1 );
 //#define OutletBC
 
 // PDF field, flag field & body field
-typedef GhostLayerField< Matrix3<real_t>, 1 >                          TensorField_T;
-typedef GhostLayerField< Vector3<real_t>, 1 >                          Vec3Field_T;
-typedef GhostLayerField< real_t, 1 >                                   ScalarField_T;
+using TensorField_T = GhostLayerField<Matrix3<real_t>, 1>;
+using Vec3Field_T = GhostLayerField<Vector3<real_t>, 1>;
+using ScalarField_T = GhostLayerField<real_t, 1>;
 using ForceModel_T = lbm::force_model::GuoField<Vec3Field_T>;
 
-typedef lbm::D3Q19< lbm::collision_model::SRTField<ScalarField_T>, false, ForceModel_T >   LatticeModel_T;
+using LatticeModel_T = lbm::D3Q19<lbm::collision_model::SRTField<ScalarField_T>, false, ForceModel_T>;
 using Stencil_T = LatticeModel_T::Stencil;
 using PdfField_T = lbm::PdfField<LatticeModel_T>;
 
@@ -89,18 +89,18 @@ using flag_t = walberla::uint8_t;
 using FlagField_T = FlagField<flag_t>;
 
 // boundary handling
-typedef lbm::NoSlip< LatticeModel_T, flag_t >                          NoSlip_T;
-typedef lbm::SimpleUBB< LatticeModel_T, flag_t >                       Inflow_T;
+using NoSlip_T = lbm::NoSlip<LatticeModel_T, flag_t>;
+using Inflow_T = lbm::SimpleUBB<LatticeModel_T, flag_t>;
 
 #ifdef OutletBC
 typedef lbm::Outlet< LatticeModel_T, FlagField_T >                     Outflow_T;
 #else
-typedef lbm::SimplePressure< LatticeModel_T, flag_t >                  Outflow_T;
+using Outflow_T = lbm::SimplePressure<LatticeModel_T, flag_t>;
 #endif
 
-typedef BoundaryHandling<FlagField_T, Stencil_T, NoSlip_T, Inflow_T, Outflow_T> BoundaryHandling_T;
+using BoundaryHandling_T = BoundaryHandling<FlagField_T, Stencil_T, NoSlip_T, Inflow_T, Outflow_T>;
 
-typedef std::tuple<pe::Plane, pe::Sphere> BodyTypeTuple ;
+using BodyTypeTuple = std::tuple<pe::Plane, pe::Sphere> ;
 
 ///////////
 // FLAGS //
@@ -1191,7 +1191,7 @@ int main( int argc, char **argv ) {
    if( dpm == DPMethod::GNS ) {
       if (interpol == Interpolation::INearestNeighbor) {
          if (dist == Distribution::DNearestNeighbor) {
-            typedef pe_coupling::discrete_particle_methods::InteractionForceEvaluator<FlagField_T, field::NearestNeighborFieldInterpolator, field::NearestNeighborDistributor> IFE_T;
+            using IFE_T = pe_coupling::discrete_particle_methods::InteractionForceEvaluator<FlagField_T, field::NearestNeighborFieldInterpolator, field::NearestNeighborDistributor>;
             shared_ptr<IFE_T> forceEvaluatorPtr = make_shared<IFE_T>(blocks, dragForceFieldID, bodyStorageID,
                                                                      flagFieldID, Fluid_Flag,
                                                                      velocityFieldID, svfFieldID,
@@ -1199,7 +1199,7 @@ int main( int argc, char **argv ) {
                                                                      viscosity);
             dragAndPressureForceEvaluationFunction = std::bind(&IFE_T::operator(), forceEvaluatorPtr);
          } else if (dist == Distribution::DKernel) {
-            typedef pe_coupling::discrete_particle_methods::InteractionForceEvaluator<FlagField_T, field::NearestNeighborFieldInterpolator, field::KernelDistributor> IFE_T;
+            using IFE_T = pe_coupling::discrete_particle_methods::InteractionForceEvaluator<FlagField_T, field::NearestNeighborFieldInterpolator, field::KernelDistributor>;
             shared_ptr<IFE_T> forceEvaluatorPtr = make_shared<IFE_T>(blocks, dragForceFieldID, bodyStorageID,
                                                                      flagFieldID, Fluid_Flag,
                                                                      velocityFieldID, svfFieldID,
@@ -1209,7 +1209,7 @@ int main( int argc, char **argv ) {
          }
       } else if (interpol == Interpolation::IKernel) {
          if (dist == Distribution::DNearestNeighbor) {
-            typedef pe_coupling::discrete_particle_methods::InteractionForceEvaluator<FlagField_T, field::KernelFieldInterpolator, field::NearestNeighborDistributor> IFE_T;
+            using IFE_T = pe_coupling::discrete_particle_methods::InteractionForceEvaluator<FlagField_T, field::KernelFieldInterpolator, field::NearestNeighborDistributor>;
             shared_ptr<IFE_T> forceEvaluatorPtr = make_shared<IFE_T>(blocks, dragForceFieldID, bodyStorageID,
                                                                      flagFieldID, Fluid_Flag,
                                                                      velocityFieldID, svfFieldID,
@@ -1217,7 +1217,7 @@ int main( int argc, char **argv ) {
                                                                      viscosity);
             dragAndPressureForceEvaluationFunction = std::bind(&IFE_T::operator(), forceEvaluatorPtr);
          } else if (dist == Distribution::DKernel) {
-            typedef pe_coupling::discrete_particle_methods::InteractionForceEvaluator<FlagField_T, field::KernelFieldInterpolator, field::KernelDistributor> IFE_T;
+            using IFE_T = pe_coupling::discrete_particle_methods::InteractionForceEvaluator<FlagField_T, field::KernelFieldInterpolator, field::KernelDistributor>;
             shared_ptr<IFE_T> forceEvaluatorPtr = make_shared<IFE_T>(blocks, dragForceFieldID, bodyStorageID,
                                                                      flagFieldID, Fluid_Flag,
                                                                      velocityFieldID, svfFieldID,
@@ -1227,7 +1227,7 @@ int main( int argc, char **argv ) {
          }
       } else if (interpol == Interpolation::ITrilinear) {
          if (dist == Distribution::DNearestNeighbor) {
-            typedef pe_coupling::discrete_particle_methods::InteractionForceEvaluator<FlagField_T, field::TrilinearFieldInterpolator, field::NearestNeighborDistributor> IFE_T;
+            using IFE_T = pe_coupling::discrete_particle_methods::InteractionForceEvaluator<FlagField_T, field::TrilinearFieldInterpolator, field::NearestNeighborDistributor>;
             shared_ptr<IFE_T> forceEvaluatorPtr = make_shared<IFE_T>(blocks, dragForceFieldID, bodyStorageID,
                                                                      flagFieldID, Fluid_Flag,
                                                                      velocityFieldID, svfFieldID,
@@ -1235,7 +1235,7 @@ int main( int argc, char **argv ) {
                                                                      viscosity);
             dragAndPressureForceEvaluationFunction = std::bind(&IFE_T::operator(), forceEvaluatorPtr);
          } else if (dist == Distribution::DKernel) {
-            typedef pe_coupling::discrete_particle_methods::InteractionForceEvaluator<FlagField_T, field::TrilinearFieldInterpolator, field::KernelDistributor> IFE_T;
+            using IFE_T = pe_coupling::discrete_particle_methods::InteractionForceEvaluator<FlagField_T, field::TrilinearFieldInterpolator, field::KernelDistributor>;
             shared_ptr<IFE_T> forceEvaluatorPtr = make_shared<IFE_T>(blocks, dragForceFieldID, bodyStorageID,
                                                                      flagFieldID, Fluid_Flag,
                                                                      velocityFieldID, svfFieldID,
@@ -1257,7 +1257,7 @@ int main( int argc, char **argv ) {
    {
       if( dist == Distribution::DNearestNeighbor )
       {
-         typedef pe_coupling::discrete_particle_methods::LiftForceEvaluator< FlagField_T, field::NearestNeighborFieldInterpolator, field::NearestNeighborDistributor > IFE_T;
+         using IFE_T = pe_coupling::discrete_particle_methods::LiftForceEvaluator<FlagField_T, field::NearestNeighborFieldInterpolator, field::NearestNeighborDistributor>;
          shared_ptr< IFE_T > forceEvaluatorPtr = make_shared< IFE_T > ( blocks, liftForceFieldID, bodyStorageID, flagFieldID, Fluid_Flag,
                                                                         velocityFieldID, velocityCurlFieldID, liftCorrelationFunction,
                                                                         viscosity );
@@ -1265,7 +1265,7 @@ int main( int argc, char **argv ) {
       }
       else if( dist == Distribution::DKernel )
       {
-         typedef pe_coupling::discrete_particle_methods::LiftForceEvaluator< FlagField_T, field::NearestNeighborFieldInterpolator, field::KernelDistributor > IFE_T;
+         using IFE_T = pe_coupling::discrete_particle_methods::LiftForceEvaluator<FlagField_T, field::NearestNeighborFieldInterpolator, field::KernelDistributor>;
          shared_ptr< IFE_T > forceEvaluatorPtr = make_shared< IFE_T > ( blocks, liftForceFieldID, bodyStorageID, flagFieldID, Fluid_Flag,
                                                                         velocityFieldID, velocityCurlFieldID, liftCorrelationFunction,
                                                                         viscosity );
@@ -1276,7 +1276,7 @@ int main( int argc, char **argv ) {
    {
       if( dist == Distribution::DNearestNeighbor )
       {
-         typedef pe_coupling::discrete_particle_methods::LiftForceEvaluator< FlagField_T, field::KernelFieldInterpolator, field::NearestNeighborDistributor > IFE_T;
+         using IFE_T = pe_coupling::discrete_particle_methods::LiftForceEvaluator<FlagField_T, field::KernelFieldInterpolator, field::NearestNeighborDistributor>;
          shared_ptr< IFE_T > forceEvaluatorPtr = make_shared< IFE_T > ( blocks, liftForceFieldID, bodyStorageID, flagFieldID, Fluid_Flag,
                                                                         velocityFieldID, velocityCurlFieldID, liftCorrelationFunction,
                                                                         viscosity );
@@ -1284,7 +1284,7 @@ int main( int argc, char **argv ) {
       }
       else if( dist == Distribution::DKernel )
       {
-         typedef pe_coupling::discrete_particle_methods::LiftForceEvaluator< FlagField_T, field::KernelFieldInterpolator, field::KernelDistributor > IFE_T;
+         using IFE_T = pe_coupling::discrete_particle_methods::LiftForceEvaluator<FlagField_T, field::KernelFieldInterpolator, field::KernelDistributor>;
          shared_ptr< IFE_T > forceEvaluatorPtr = make_shared< IFE_T > ( blocks, liftForceFieldID, bodyStorageID, flagFieldID, Fluid_Flag,
                                                                         velocityFieldID, velocityCurlFieldID, liftCorrelationFunction,
                                                                         viscosity );
@@ -1295,7 +1295,7 @@ int main( int argc, char **argv ) {
    {
       if( dist == Distribution::DNearestNeighbor )
       {
-         typedef pe_coupling::discrete_particle_methods::LiftForceEvaluator< FlagField_T, field::TrilinearFieldInterpolator, field::NearestNeighborDistributor > IFE_T;
+         using IFE_T = pe_coupling::discrete_particle_methods::LiftForceEvaluator<FlagField_T, field::TrilinearFieldInterpolator, field::NearestNeighborDistributor>;
          shared_ptr< IFE_T > forceEvaluatorPtr = make_shared< IFE_T > ( blocks, liftForceFieldID, bodyStorageID, flagFieldID, Fluid_Flag,
                                                                         velocityFieldID, velocityCurlFieldID, liftCorrelationFunction,
                                                                         viscosity );
@@ -1303,7 +1303,7 @@ int main( int argc, char **argv ) {
       }
       else if( dist == Distribution::DKernel )
       {
-         typedef pe_coupling::discrete_particle_methods::LiftForceEvaluator< FlagField_T, field::TrilinearFieldInterpolator, field::KernelDistributor > IFE_T;
+         using IFE_T = pe_coupling::discrete_particle_methods::LiftForceEvaluator<FlagField_T, field::TrilinearFieldInterpolator, field::KernelDistributor>;
          shared_ptr< IFE_T > forceEvaluatorPtr = make_shared< IFE_T > ( blocks, liftForceFieldID, bodyStorageID, flagFieldID, Fluid_Flag,
                                                                         velocityFieldID, velocityCurlFieldID, liftCorrelationFunction,
                                                                         viscosity );
@@ -1317,7 +1317,7 @@ int main( int argc, char **argv ) {
    {
       if( dist == Distribution::DNearestNeighbor )
       {
-         typedef pe_coupling::discrete_particle_methods::AddedMassForceEvaluator< FlagField_T, field::NearestNeighborFieldInterpolator, field::NearestNeighborDistributor > IFE_T;
+         using IFE_T = pe_coupling::discrete_particle_methods::AddedMassForceEvaluator<FlagField_T, field::NearestNeighborFieldInterpolator, field::NearestNeighborDistributor>;
          shared_ptr< IFE_T > forceEvaluatorPtr = make_shared< IFE_T > ( blocks, amForceFieldID, bodyStorageID, flagFieldID, Fluid_Flag,
                                                                         timeDerivativeVelocityFieldID, addedMassCorrelationFunction,
                                                                         bodyVelocityTimeDerivativeEvaluator );
@@ -1325,7 +1325,7 @@ int main( int argc, char **argv ) {
       }
       else if( dist == Distribution::DKernel )
       {
-         typedef pe_coupling::discrete_particle_methods::AddedMassForceEvaluator< FlagField_T, field::NearestNeighborFieldInterpolator, field::KernelDistributor > IFE_T;
+         using IFE_T = pe_coupling::discrete_particle_methods::AddedMassForceEvaluator<FlagField_T, field::NearestNeighborFieldInterpolator, field::KernelDistributor>;
          shared_ptr< IFE_T > forceEvaluatorPtr = make_shared< IFE_T > ( blocks, amForceFieldID, bodyStorageID, flagFieldID, Fluid_Flag,
                                                                         timeDerivativeVelocityFieldID, addedMassCorrelationFunction,
                                                                         bodyVelocityTimeDerivativeEvaluator );
@@ -1336,7 +1336,7 @@ int main( int argc, char **argv ) {
    {
       if( dist == Distribution::DNearestNeighbor )
       {
-         typedef pe_coupling::discrete_particle_methods::AddedMassForceEvaluator< FlagField_T, field::KernelFieldInterpolator, field::NearestNeighborDistributor > IFE_T;
+         using IFE_T = pe_coupling::discrete_particle_methods::AddedMassForceEvaluator<FlagField_T, field::KernelFieldInterpolator, field::NearestNeighborDistributor>;
          shared_ptr< IFE_T > forceEvaluatorPtr = make_shared< IFE_T > ( blocks, amForceFieldID, bodyStorageID, flagFieldID, Fluid_Flag,
                                                                         timeDerivativeVelocityFieldID, addedMassCorrelationFunction,
                                                                         bodyVelocityTimeDerivativeEvaluator );
@@ -1344,7 +1344,7 @@ int main( int argc, char **argv ) {
       }
       else if( dist == Distribution::DKernel )
       {
-         typedef pe_coupling::discrete_particle_methods::AddedMassForceEvaluator< FlagField_T, field::KernelFieldInterpolator, field::KernelDistributor > IFE_T;
+         using IFE_T = pe_coupling::discrete_particle_methods::AddedMassForceEvaluator<FlagField_T, field::KernelFieldInterpolator, field::KernelDistributor>;
          shared_ptr< IFE_T > forceEvaluatorPtr = make_shared< IFE_T > ( blocks, amForceFieldID, bodyStorageID, flagFieldID, Fluid_Flag,
                                                                         timeDerivativeVelocityFieldID, addedMassCorrelationFunction,
                                                                         bodyVelocityTimeDerivativeEvaluator );
@@ -1355,7 +1355,7 @@ int main( int argc, char **argv ) {
    {
       if( dist == Distribution::DNearestNeighbor )
       {
-         typedef pe_coupling::discrete_particle_methods::AddedMassForceEvaluator< FlagField_T, field::TrilinearFieldInterpolator, field::NearestNeighborDistributor > IFE_T;
+         using IFE_T = pe_coupling::discrete_particle_methods::AddedMassForceEvaluator<FlagField_T, field::TrilinearFieldInterpolator, field::NearestNeighborDistributor>;
          shared_ptr< IFE_T > forceEvaluatorPtr = make_shared< IFE_T > ( blocks, amForceFieldID, bodyStorageID, flagFieldID, Fluid_Flag,
                                                                         timeDerivativeVelocityFieldID, addedMassCorrelationFunction,
                                                                         bodyVelocityTimeDerivativeEvaluator );
@@ -1363,7 +1363,7 @@ int main( int argc, char **argv ) {
       }
       else if( dist == Distribution::DKernel )
       {
-         typedef pe_coupling::discrete_particle_methods::AddedMassForceEvaluator< FlagField_T, field::TrilinearFieldInterpolator, field::KernelDistributor > IFE_T;
+         using IFE_T = pe_coupling::discrete_particle_methods::AddedMassForceEvaluator<FlagField_T, field::TrilinearFieldInterpolator, field::KernelDistributor>;
          shared_ptr< IFE_T > forceEvaluatorPtr = make_shared< IFE_T > ( blocks, amForceFieldID, bodyStorageID, flagFieldID, Fluid_Flag,
                                                                         timeDerivativeVelocityFieldID, addedMassCorrelationFunction,
                                                                         bodyVelocityTimeDerivativeEvaluator );
diff --git a/apps/showcases/CombinedResolvedUnresolved/CombinedResolvedUnresolved.cpp b/apps/showcases/CombinedResolvedUnresolved/CombinedResolvedUnresolved.cpp
index e8e27e9cf..5e1074ad0 100644
--- a/apps/showcases/CombinedResolvedUnresolved/CombinedResolvedUnresolved.cpp
+++ b/apps/showcases/CombinedResolvedUnresolved/CombinedResolvedUnresolved.cpp
@@ -81,13 +81,13 @@ using walberla::uint_t;
 
 // PDF field, flag field & body field
 
-typedef GhostLayerField< pe::BodyID, 1 > BodyField_T;
-typedef GhostLayerField< Matrix3< real_t >, 1 > TensorField_T;
-typedef GhostLayerField< Vector3< real_t >, 1 > Vec3Field_T;
-typedef GhostLayerField< real_t, 1 > ScalarField_T;
+using BodyField_T = GhostLayerField<pe::BodyID, 1>;
+using TensorField_T = GhostLayerField<Matrix3<real_t>, 1>;
+using Vec3Field_T = GhostLayerField<Vector3<real_t>, 1>;
+using ScalarField_T = GhostLayerField<real_t, 1>;
 using ForceModel_T = lbm::force_model::GuoField< Vec3Field_T >;
 
-typedef lbm::D3Q19< lbm::collision_model::SRTField< ScalarField_T >, false, ForceModel_T > LatticeModel_T;
+using LatticeModel_T = lbm::D3Q19<lbm::collision_model::SRTField<ScalarField_T>, false, ForceModel_T>;
 using Stencil_T  = LatticeModel_T::Stencil;
 using PdfField_T = lbm::PdfField< LatticeModel_T >;
 
@@ -97,13 +97,13 @@ using FlagField_T = FlagField< flag_t >;
 const uint_t FieldGhostLayers = 1;
 
 // boundary handling
-typedef lbm::NoSlip< LatticeModel_T, flag_t > NoSlip_T;
+using NoSlip_T = lbm::NoSlip<LatticeModel_T, flag_t>;
 
-typedef pe_coupling::CurvedLinear< LatticeModel_T, FlagField_T > MO_T;
+using MO_T = pe_coupling::CurvedLinear<LatticeModel_T, FlagField_T>;
 
-typedef BoundaryHandling< FlagField_T, Stencil_T, NoSlip_T, MO_T > BoundaryHandling_T;
+using BoundaryHandling_T = BoundaryHandling<FlagField_T, Stencil_T, NoSlip_T, MO_T>;
 
-typedef std::tuple< pe::Sphere, pe::Plane > BodyTypeTuple;
+using BodyTypeTuple = std::tuple<pe::Sphere, pe::Plane>;
 
 ///////////
 // FLAGS //
@@ -798,9 +798,7 @@ int main(int argc, char** argv)
    {
       if (dist == Distribution::DNearestNeighbor)
       {
-         typedef pe_coupling::discrete_particle_methods::InteractionForceEvaluator<
-            FlagField_T, field::NearestNeighborFieldInterpolator, field::NearestNeighborDistributor >
-            IFE_T;
+         using IFE_T = pe_coupling::discrete_particle_methods::InteractionForceEvaluator<FlagField_T, field::NearestNeighborFieldInterpolator, field::NearestNeighborDistributor>;
          shared_ptr< IFE_T > forceEvaluatorPtr = make_shared< IFE_T >(
             blocks, dragForceFieldID, bodyStorageID, flagFieldID, Fluid_Flag, velocityFieldID, svfFieldID,
             pressureGradientFieldID, dragCorrelationFunction, viscosity, selectDPMBodies);
@@ -808,9 +806,7 @@ int main(int argc, char** argv)
       }
       else if (dist == Distribution::DKernel)
       {
-         typedef pe_coupling::discrete_particle_methods::InteractionForceEvaluator<
-            FlagField_T, field::NearestNeighborFieldInterpolator, field::KernelDistributor >
-            IFE_T;
+         using IFE_T = pe_coupling::discrete_particle_methods::InteractionForceEvaluator<FlagField_T, field::NearestNeighborFieldInterpolator, field::KernelDistributor>;
          shared_ptr< IFE_T > forceEvaluatorPtr = make_shared< IFE_T >(
             blocks, dragForceFieldID, bodyStorageID, flagFieldID, Fluid_Flag, velocityFieldID, svfFieldID,
             pressureGradientFieldID, dragCorrelationFunction, viscosity, selectDPMBodies);
@@ -821,9 +817,7 @@ int main(int argc, char** argv)
    {
       if (dist == Distribution::DNearestNeighbor)
       {
-         typedef pe_coupling::discrete_particle_methods::InteractionForceEvaluator<
-            FlagField_T, field::KernelFieldInterpolator, field::NearestNeighborDistributor >
-            IFE_T;
+         using IFE_T = pe_coupling::discrete_particle_methods::InteractionForceEvaluator<FlagField_T, field::KernelFieldInterpolator, field::NearestNeighborDistributor>;
          shared_ptr< IFE_T > forceEvaluatorPtr = make_shared< IFE_T >(
             blocks, dragForceFieldID, bodyStorageID, flagFieldID, Fluid_Flag, velocityFieldID, svfFieldID,
             pressureGradientFieldID, dragCorrelationFunction, viscosity, selectDPMBodies);
@@ -831,9 +825,7 @@ int main(int argc, char** argv)
       }
       else if (dist == Distribution::DKernel)
       {
-         typedef pe_coupling::discrete_particle_methods::InteractionForceEvaluator<
-            FlagField_T, field::KernelFieldInterpolator, field::KernelDistributor >
-            IFE_T;
+         using IFE_T = pe_coupling::discrete_particle_methods::InteractionForceEvaluator<FlagField_T, field::KernelFieldInterpolator, field::KernelDistributor>;
          shared_ptr< IFE_T > forceEvaluatorPtr = make_shared< IFE_T >(
             blocks, dragForceFieldID, bodyStorageID, flagFieldID, Fluid_Flag, velocityFieldID, svfFieldID,
             pressureGradientFieldID, dragCorrelationFunction, viscosity, selectDPMBodies);
@@ -847,9 +839,7 @@ int main(int argc, char** argv)
    {
       if (dist == Distribution::DNearestNeighbor)
       {
-         typedef pe_coupling::discrete_particle_methods::LiftForceEvaluator<
-            FlagField_T, field::NearestNeighborFieldInterpolator, field::NearestNeighborDistributor >
-            IFE_T;
+         using IFE_T = pe_coupling::discrete_particle_methods::LiftForceEvaluator<FlagField_T, field::NearestNeighborFieldInterpolator, field::NearestNeighborDistributor>;
          shared_ptr< IFE_T > forceEvaluatorPtr =
             make_shared< IFE_T >(blocks, liftForceFieldID, bodyStorageID, flagFieldID, Fluid_Flag, velocityFieldID,
                                  velocityCurlFieldID, liftCorrelationFunction, viscosity, selectDPMBodies);
@@ -857,9 +847,7 @@ int main(int argc, char** argv)
       }
       else if (dist == Distribution::DKernel)
       {
-         typedef pe_coupling::discrete_particle_methods::LiftForceEvaluator<
-            FlagField_T, field::NearestNeighborFieldInterpolator, field::KernelDistributor >
-            IFE_T;
+         using IFE_T = pe_coupling::discrete_particle_methods::LiftForceEvaluator<FlagField_T, field::NearestNeighborFieldInterpolator, field::KernelDistributor>;
          shared_ptr< IFE_T > forceEvaluatorPtr =
             make_shared< IFE_T >(blocks, liftForceFieldID, bodyStorageID, flagFieldID, Fluid_Flag, velocityFieldID,
                                  velocityCurlFieldID, liftCorrelationFunction, viscosity, selectDPMBodies);
@@ -870,9 +858,7 @@ int main(int argc, char** argv)
    {
       if (dist == Distribution::DNearestNeighbor)
       {
-         typedef pe_coupling::discrete_particle_methods::LiftForceEvaluator<
-            FlagField_T, field::KernelFieldInterpolator, field::NearestNeighborDistributor >
-            IFE_T;
+         using IFE_T = pe_coupling::discrete_particle_methods::LiftForceEvaluator<FlagField_T, field::KernelFieldInterpolator, field::NearestNeighborDistributor>;
          shared_ptr< IFE_T > forceEvaluatorPtr =
             make_shared< IFE_T >(blocks, liftForceFieldID, bodyStorageID, flagFieldID, Fluid_Flag, velocityFieldID,
                                  velocityCurlFieldID, liftCorrelationFunction, viscosity, selectDPMBodies);
@@ -880,9 +866,7 @@ int main(int argc, char** argv)
       }
       else if (dist == Distribution::DKernel)
       {
-         typedef pe_coupling::discrete_particle_methods::LiftForceEvaluator<
-            FlagField_T, field::KernelFieldInterpolator, field::KernelDistributor >
-            IFE_T;
+         using IFE_T = pe_coupling::discrete_particle_methods::LiftForceEvaluator<FlagField_T, field::KernelFieldInterpolator, field::KernelDistributor>;
          shared_ptr< IFE_T > forceEvaluatorPtr =
             make_shared< IFE_T >(blocks, liftForceFieldID, bodyStorageID, flagFieldID, Fluid_Flag, velocityFieldID,
                                  velocityCurlFieldID, liftCorrelationFunction, viscosity, selectDPMBodies);
@@ -896,9 +880,7 @@ int main(int argc, char** argv)
    {
       if (dist == Distribution::DNearestNeighbor)
       {
-         typedef pe_coupling::discrete_particle_methods::AddedMassForceEvaluator<
-            FlagField_T, field::NearestNeighborFieldInterpolator, field::NearestNeighborDistributor >
-            IFE_T;
+         using IFE_T = pe_coupling::discrete_particle_methods::AddedMassForceEvaluator<FlagField_T, field::NearestNeighborFieldInterpolator, field::NearestNeighborDistributor>;
          shared_ptr< IFE_T > forceEvaluatorPtr = make_shared< IFE_T >(
             blocks, amForceFieldID, bodyStorageID, flagFieldID, Fluid_Flag, timeDerivativeVelocityFieldID,
             addedMassCorrelationFunction, bodyVelocityTimeDerivativeEvaluator, selectDPMBodies);
@@ -906,9 +888,7 @@ int main(int argc, char** argv)
       }
       else if (dist == Distribution::DKernel)
       {
-         typedef pe_coupling::discrete_particle_methods::AddedMassForceEvaluator<
-            FlagField_T, field::NearestNeighborFieldInterpolator, field::KernelDistributor >
-            IFE_T;
+         using IFE_T = pe_coupling::discrete_particle_methods::AddedMassForceEvaluator<FlagField_T, field::NearestNeighborFieldInterpolator, field::KernelDistributor>;
          shared_ptr< IFE_T > forceEvaluatorPtr = make_shared< IFE_T >(
             blocks, amForceFieldID, bodyStorageID, flagFieldID, Fluid_Flag, timeDerivativeVelocityFieldID,
             addedMassCorrelationFunction, bodyVelocityTimeDerivativeEvaluator, selectDPMBodies);
@@ -919,9 +899,7 @@ int main(int argc, char** argv)
    {
       if (dist == Distribution::DNearestNeighbor)
       {
-         typedef pe_coupling::discrete_particle_methods::AddedMassForceEvaluator<
-            FlagField_T, field::KernelFieldInterpolator, field::NearestNeighborDistributor >
-            IFE_T;
+         using IFE_T = pe_coupling::discrete_particle_methods::AddedMassForceEvaluator<FlagField_T, field::KernelFieldInterpolator, field::NearestNeighborDistributor>;
          shared_ptr< IFE_T > forceEvaluatorPtr = make_shared< IFE_T >(
             blocks, amForceFieldID, bodyStorageID, flagFieldID, Fluid_Flag, timeDerivativeVelocityFieldID,
             addedMassCorrelationFunction, bodyVelocityTimeDerivativeEvaluator, selectDPMBodies);
@@ -929,9 +907,7 @@ int main(int argc, char** argv)
       }
       else if (dist == Distribution::DKernel)
       {
-         typedef pe_coupling::discrete_particle_methods::AddedMassForceEvaluator<
-            FlagField_T, field::KernelFieldInterpolator, field::KernelDistributor >
-            IFE_T;
+         using IFE_T = pe_coupling::discrete_particle_methods::AddedMassForceEvaluator<FlagField_T, field::KernelFieldInterpolator, field::KernelDistributor>;
          shared_ptr< IFE_T > forceEvaluatorPtr = make_shared< IFE_T >(
             blocks, amForceFieldID, bodyStorageID, flagFieldID, Fluid_Flag, timeDerivativeVelocityFieldID,
             addedMassCorrelationFunction, bodyVelocityTimeDerivativeEvaluator, selectDPMBodies);
@@ -1216,9 +1192,7 @@ int main(int argc, char** argv)
 
       // sweep for restoring PDFs in cells previously occupied by pe bodies
       pe_coupling::SphereNormalExtrapolationDirectionFinder extrapolationFinder(blocks, bodyFieldID);
-      typedef pe_coupling::ExtrapolationReconstructor< LatticeModel_T, BoundaryHandling_T,
-                                                       pe_coupling::SphereNormalExtrapolationDirectionFinder >
-         Reconstructor_T;
+      using Reconstructor_T = pe_coupling::ExtrapolationReconstructor<LatticeModel_T, BoundaryHandling_T, pe_coupling::SphereNormalExtrapolationDirectionFinder>;
       Reconstructor_T reconstructor(blocks, boundaryHandlingID, bodyFieldID, extrapolationFinder, true);
 
       timeloop.add() << Sweep(pe_coupling::PDFReconstruction< LatticeModel_T, BoundaryHandling_T, Reconstructor_T >(
diff --git a/apps/tutorials/basics/03_GameOfLife.cpp b/apps/tutorials/basics/03_GameOfLife.cpp
index 92cc1146b..868e21bcd 100644
--- a/apps/tutorials/basics/03_GameOfLife.cpp
+++ b/apps/tutorials/basics/03_GameOfLife.cpp
@@ -186,7 +186,7 @@ int main( int argc, char ** argv )
             false,                                                                   // one block per process? - "false" means all blocks to one process
             false, false, false );                                                   // no periodicity
 
-   typedef GhostLayerField<real_t,1> ScalarField;
+   using ScalarField = GhostLayerField<real_t, 1>;
    BlockDataID fieldID = field::addToStorage<ScalarField>( blocks,      // block storage
                                                            "My Field",  // name
                                                            real_c(0),   // initial value
diff --git a/apps/tutorials/lbm/01_BasicLBM.cpp b/apps/tutorials/lbm/01_BasicLBM.cpp
index 1380a1f10..ccfd0632d 100644
--- a/apps/tutorials/lbm/01_BasicLBM.cpp
+++ b/apps/tutorials/lbm/01_BasicLBM.cpp
@@ -69,7 +69,7 @@ int main( int argc, char ** argv )
 
    auto boundariesConfig = walberlaEnv.config()->getOneBlock( "Boundaries" );
 
-   typedef lbm::DefaultBoundaryHandlingFactory< LatticeModel_T, FlagField_T > BHFactory;
+   using BHFactory = lbm::DefaultBoundaryHandlingFactory<LatticeModel_T, FlagField_T>;
 
    BlockDataID boundaryHandlingId = BHFactory::addBoundaryHandlingToStorage( blocks, "boundary handling", flagFieldId, pdfFieldId, fluidFlagUID,
                                                                              boundariesConfig.getParameter< Vector3<real_t> >( "velocity0", Vector3<real_t>() ),
diff --git a/apps/tutorials/lbm/02_BasicLBM_ExemplaryExtensions.cpp b/apps/tutorials/lbm/02_BasicLBM_ExemplaryExtensions.cpp
index 3f75b9bf6..1c491b90c 100644
--- a/apps/tutorials/lbm/02_BasicLBM_ExemplaryExtensions.cpp
+++ b/apps/tutorials/lbm/02_BasicLBM_ExemplaryExtensions.cpp
@@ -32,7 +32,7 @@
 
 namespace walberla {
 
-typedef lbm::D2Q9< lbm::collision_model::SRT, false, lbm::force_model::SimpleConstant >  LatticeModel_T;
+using LatticeModel_T = lbm::D2Q9<lbm::collision_model::SRT, false, lbm::force_model::SimpleConstant>;
 
 using Stencil_T = LatticeModel_T::Stencil;
 using CommunicationStencil_T = LatticeModel_T::CommunicationStencil;
@@ -78,7 +78,7 @@ public:
          return;
 
       // data type for storing a position together with a floating point value
-      typedef std::pair< Cell, real_t > PosValuePair;
+      using PosValuePair = std::pair<Cell, real_t>;
 
       // variables for storing the process local minimum/maximum velocity & density
       PosValuePair maxVelocity = std::pair< Cell, real_t >( Cell(), real_c(0) );
@@ -582,7 +582,7 @@ int main( int argc, char ** argv )
 
    auto boundariesConfig = walberlaEnv.config()->getOneBlock( "Boundaries" );
 
-   typedef lbm::DefaultBoundaryHandlingFactory< LatticeModel_T, FlagField_T > BHFactory;
+   using BHFactory = lbm::DefaultBoundaryHandlingFactory<LatticeModel_T, FlagField_T>;
    BlockDataID boundaryHandlingId = BHFactory::addBoundaryHandlingToStorage( blocks, "boundary handling", flagFieldId, pdfFieldId, fluidFlagUID,
                                                                              boundariesConfig.getParameter< Vector3<real_t> >( "velocity0", Vector3<real_t>() ),
                                                                              boundariesConfig.getParameter< Vector3<real_t> >( "velocity1", Vector3<real_t>() ),
diff --git a/apps/tutorials/lbm/03_LBLidDrivenCavity.cpp b/apps/tutorials/lbm/03_LBLidDrivenCavity.cpp
index 7aa2e29bc..95f9ef95e 100644
--- a/apps/tutorials/lbm/03_LBLidDrivenCavity.cpp
+++ b/apps/tutorials/lbm/03_LBLidDrivenCavity.cpp
@@ -75,11 +75,11 @@ using FlagField_T = FlagField<flag_t>; // the flag field: used for marking cells
                                           // (also used for distinguishing between different boundary conditions
                                           //  -> every boundary condition possesses its own, unique flag)
 
-typedef lbm::NoSlip< LatticeModel_T, flag_t >     NoSlip_T; // no slip boundary condition
-typedef lbm::SimpleUBB< LatticeModel_T, flag_t >  UBB_T;    // velocity bounce back boundary condition that internally works with one ...
+using NoSlip_T = lbm::NoSlip<LatticeModel_T, flag_t>; // no slip boundary condition
+using UBB_T = lbm::SimpleUBB<LatticeModel_T, flag_t>;    // velocity bounce back boundary condition that internally works with one ...
                                                             // ... constant velocity that must be set during the setup phase
 
-typedef BoundaryHandling< FlagField_T, Stencil_T, NoSlip_T, UBB_T > BoundaryHandling_T; // the boundary handling, includes a collection of all boundary conditions
+using BoundaryHandling_T = BoundaryHandling<FlagField_T, Stencil_T, NoSlip_T, UBB_T>; // the boundary handling, includes a collection of all boundary conditions
 
 ///////////
 // FLAGS //
diff --git a/apps/tutorials/pde/01_SolvingPDE.cpp b/apps/tutorials/pde/01_SolvingPDE.cpp
index 4b1e7d92f..3091c7597 100644
--- a/apps/tutorials/pde/01_SolvingPDE.cpp
+++ b/apps/tutorials/pde/01_SolvingPDE.cpp
@@ -39,7 +39,7 @@
 
 namespace walberla {
 
-typedef GhostLayerField<real_t,1> ScalarField;
+using ScalarField = GhostLayerField<real_t, 1>;
 using Stencil_T = stencil::D2Q5;
 
 
diff --git a/apps/tutorials/pde/02_HeatEquation.cpp b/apps/tutorials/pde/02_HeatEquation.cpp
index dea443380..54a13fd9d 100644
--- a/apps/tutorials/pde/02_HeatEquation.cpp
+++ b/apps/tutorials/pde/02_HeatEquation.cpp
@@ -43,7 +43,7 @@
 namespace walberla {
 
 
-typedef GhostLayerField<real_t,1> ScalarField;
+using ScalarField = GhostLayerField<real_t, 1>;
 using Stencil_T = stencil::D2Q5;
 
 
diff --git a/apps/tutorials/pde/03_HeatEquation_Extensions.cpp b/apps/tutorials/pde/03_HeatEquation_Extensions.cpp
index 9f65e2b12..a1b42906a 100644
--- a/apps/tutorials/pde/03_HeatEquation_Extensions.cpp
+++ b/apps/tutorials/pde/03_HeatEquation_Extensions.cpp
@@ -44,7 +44,7 @@
 namespace walberla {
 
 
-typedef GhostLayerField<real_t,1> ScalarField;
+using ScalarField = GhostLayerField<real_t, 1>;
 using Stencil_T = stencil::D2Q5;
 
 
diff --git a/apps/tutorials/pe/01_ConfinedGas.cpp b/apps/tutorials/pe/01_ConfinedGas.cpp
index 6e0d1f7ab..df137021b 100644
--- a/apps/tutorials/pe/01_ConfinedGas.cpp
+++ b/apps/tutorials/pe/01_ConfinedGas.cpp
@@ -35,7 +35,7 @@ namespace walberla {
 using namespace walberla::pe;
 
 //! [BodyTypeTuple]
-typedef std::tuple<Sphere, Plane> BodyTypeTuple ;
+using BodyTypeTuple = std::tuple<Sphere, Plane> ;
 //! [BodyTypeTuple]
 
 int main( int argc, char ** argv )
diff --git a/apps/tutorials/pe/02_ConfinedGasExtended.cpp b/apps/tutorials/pe/02_ConfinedGasExtended.cpp
index 69629eba1..4e0841175 100644
--- a/apps/tutorials/pe/02_ConfinedGasExtended.cpp
+++ b/apps/tutorials/pe/02_ConfinedGasExtended.cpp
@@ -43,7 +43,7 @@ using namespace walberla::pe;
 using namespace walberla::timing;
 using namespace walberla::pe::raytracing;
 
-typedef std::tuple<Sphere, Plane> BodyTuple ;
+using BodyTuple = std::tuple<Sphere, Plane> ;
 
 int main( int argc, char ** argv )
 {
diff --git a/src/blockforest/Block.h b/src/blockforest/Block.h
index caf87d623..64c7dafa7 100644
--- a/src/blockforest/Block.h
+++ b/src/blockforest/Block.h
@@ -366,7 +366,7 @@ inline void Block::setTargetLevel( const uint_t tl )
 
 } // namespace blockforest
 
-typedef blockforest::Block Block;
+using Block = blockforest::Block;
 
 } // namespace walberla
 
diff --git a/src/blockforest/BlockDataHandling.h b/src/blockforest/BlockDataHandling.h
index be978d3a8..7f56467c0 100644
--- a/src/blockforest/BlockDataHandling.h
+++ b/src/blockforest/BlockDataHandling.h
@@ -95,7 +95,7 @@ namespace internal {
 class BlockDataHandlingWrapper : public domain_decomposition::internal::BlockDataHandlingWrapper
 {
 public:
-   typedef domain_decomposition::internal::BlockData BlockData;
+   using BlockData = domain_decomposition::internal::BlockData;
 
    ~BlockDataHandlingWrapper() override = default;
    
@@ -115,7 +115,7 @@ template< typename T >
 class BlockDataHandlingHelper : public BlockDataHandlingWrapper
 {
 public:
-   typedef domain_decomposition::internal::BlockData BlockData;
+   using BlockData = domain_decomposition::internal::BlockData;
 
    BlockDataHandlingHelper( const shared_ptr< BlockDataHandling<T> > & dataHandling ) : dataHandling_( dataHandling ) {}
    ~BlockDataHandlingHelper() override = default;
diff --git a/src/blockforest/BlockForest.h b/src/blockforest/BlockForest.h
index bd66ced43..0edd764af 100644
--- a/src/blockforest/BlockForest.h
+++ b/src/blockforest/BlockForest.h
@@ -55,7 +55,6 @@ public:
    using RefreshCallbackFunction = std::function<void (BlockForest &, const PhantomBlockForest &)>;
 
    using SnapshotCreationFunction = std::function<void (std::vector<uint_t> &, std::vector<uint_t> &)>;
-   [[deprecated("typo: use SnapshotRestoreFunction")]] typedef std::function<uint_t (const uint_t)> SnapshotRestorenFunction;
    using SnapshotRestoreFunction = std::function<uint_t (const uint_t)>;
    using SnapshotRestoreCallbackFunction = std::function<void ()>;
 
diff --git a/src/blockforest/BlockID.h b/src/blockforest/BlockID.h
index d4efc6bcc..e62d8ff09 100644
--- a/src/blockforest/BlockID.h
+++ b/src/blockforest/BlockID.h
@@ -385,7 +385,7 @@ void BlockID::fromBuffer( Buffer_T& buffer ) {
 
 } // namespace blockforest
 
-typedef blockforest::BlockID BlockID;
+using BlockID = blockforest::BlockID;
 
 } // namespace walberla
 
diff --git a/src/blockforest/GlobalLoadBalancing.h b/src/blockforest/GlobalLoadBalancing.h
index ca7c687a9..ba92b73f2 100644
--- a/src/blockforest/GlobalLoadBalancing.h
+++ b/src/blockforest/GlobalLoadBalancing.h
@@ -55,7 +55,7 @@ public:
    class MetisConfiguration {
 
    public:
-      typedef std::function< memory_t ( const BLOCK* const, const BLOCK* const ) > CommunicationFunction;
+      using CommunicationFunction = std::function<memory_t (const BLOCK *const, const BLOCK *const)>;
 
       MetisConfiguration( const bool _includeMetis = false, const bool _forceMetis = false, CommunicationFunction _communicationFunction = nullptr,
                           const real_t _maxUbvec = real_c(1.5), const uint_t _iterations = uint_c(10) ) :
diff --git a/src/blockforest/PhantomBlock.h b/src/blockforest/PhantomBlock.h
index 2d6c2b6ee..3872a7261 100644
--- a/src/blockforest/PhantomBlock.h
+++ b/src/blockforest/PhantomBlock.h
@@ -374,6 +374,6 @@ inline const AABB & PhantomBlock::getNeighborAABB( const uint_t index ) const
 
 } // namespace blockforest
 
-typedef blockforest::PhantomBlock PhantomBlock;
+using PhantomBlock = blockforest::PhantomBlock;
 
 } // namespace walberla
diff --git a/src/blockforest/PhantomBlockForest.h b/src/blockforest/PhantomBlockForest.h
index 1c7285167..92211a7fc 100644
--- a/src/blockforest/PhantomBlockForest.h
+++ b/src/blockforest/PhantomBlockForest.h
@@ -42,23 +42,16 @@ class PhantomBlockForest
 {
 public:
 
-   typedef std::function< Set<SUID> ( const std::vector< std::pair< BlockID, Set<SUID> > > & source, const BlockID & destintation ) >
-           BlockStateDeterminationFunction;
+   using BlockStateDeterminationFunction = std::function<Set<SUID> (const std::vector<std::pair<BlockID, Set<SUID>>> &, const BlockID &)>;
 
-   typedef std::function< void ( std::vector< std::pair< const PhantomBlock *, walberla::any > > & blockData,
-                                   const PhantomBlockForest & phantomForest ) >
-           PhantomBlockDataAssignmentFunction;
+   using PhantomBlockDataAssignmentFunction = std::function<void (std::vector<std::pair<const PhantomBlock *, walberla::any>> &, const PhantomBlockForest &)>;
 
    /// \param iteration execution counter of this callback
    /// \return should the callback rerun after phantom block migration?
-   typedef std::function< bool ( std::vector< std::pair< const PhantomBlock *, uint_t > > & targetProcess,
-                                   std::set< uint_t > & processesToRecvFrom,
-                                   const PhantomBlockForest & phantomForest,
-                                   const uint_t iteration ) >
-           MigrationPreparationFunction; // = load balancing
+   using MigrationPreparationFunction = std::function<bool (std::vector<std::pair<const PhantomBlock *, uint_t>> &, std::set<uint_t> &, const PhantomBlockForest &, const uint_t)>; // = load balancing
 
-   typedef std::function< void ( mpi::SendBuffer & buffer, const PhantomBlock & block ) >                    PhantomBlockDataPackFunction;
-   typedef std::function< void ( mpi::RecvBuffer & buffer, const PhantomBlock & block, walberla::any & data ) > PhantomBlockDataUnpackFunction;
+   using PhantomBlockDataPackFunction = std::function<void (mpi::SendBuffer &, const PhantomBlock &)>;
+   using PhantomBlockDataUnpackFunction = std::function<void (mpi::RecvBuffer &, const PhantomBlock &, walberla::any &)>;
 
 
 
@@ -128,6 +121,6 @@ inline shared_ptr< PhantomBlock > PhantomBlockForest::getBlock( const BlockID &
 
 } // namespace blockforest
 
-typedef blockforest::PhantomBlockForest PhantomBlockForest;
+using PhantomBlockForest = blockforest::PhantomBlockForest;
 
 } // namespace walberla
diff --git a/src/blockforest/SetupBlockForest.h b/src/blockforest/SetupBlockForest.h
index 2dac1578f..17fd2685a 100644
--- a/src/blockforest/SetupBlockForest.h
+++ b/src/blockforest/SetupBlockForest.h
@@ -45,8 +45,7 @@ class SetupBlockForest : private NonCopyable {
 
 public:
 
-   typedef std::function< uint_t ( SetupBlockForest & forest, const uint_t numberOfProcesses, const memory_t perProcessMemoryLimit ) >
-          TargetProcessAssignmentFunction; // returns number of processes (may be lower than numberOfProcesses)
+   using TargetProcessAssignmentFunction = std::function<uint_t (SetupBlockForest &, const uint_t, const memory_t)>; // returns number of processes (may be lower than numberOfProcesses)
 
 
 
@@ -72,14 +71,14 @@ public:
 
    // Do not use a vector of bool's! Due to the implementation of this vector in the standard library, parallel access to a
    // vector of bool's - even on different elements - is not thread-safe!
-   typedef std::function< void ( std::vector<uint8_t>& excludeBlock, const RootBlockAABB& aabb ) > RootBlockExclusionFunction;
+   using RootBlockExclusionFunction = std::function<void (std::vector<uint8_t> &, const RootBlockAABB &)>;
 
-   typedef std::function< void ( SetupBlockForest& forest ) > RefinementSelectionFunction;
-   typedef std::function< void ( SetupBlockForest& forest ) > WorkloadMemorySUIDAssignmentFunction;
+   using RefinementSelectionFunction = std::function<void (SetupBlockForest &)>;
+   using WorkloadMemorySUIDAssignmentFunction = std::function<void (SetupBlockForest &)>;
 
-   typedef std::vector< std::pair< const SetupBlock*, const SetupBlock* > >               CommunicationPairs;
-   typedef std::vector< real_t >                                                          CommunicationWeights;
-   typedef std::function< void ( const CommunicationPairs &, CommunicationWeights & ) > CommunicationWeightFunction;
+   using CommunicationPairs = std::vector<std::pair<const SetupBlock *, const SetupBlock *>>;
+   using CommunicationWeights = std::vector<real_t>;
+   using CommunicationWeightFunction = std::function<void (const CommunicationPairs &, CommunicationWeights &)>;
 
    inline static void NullCommunicationWeightFunction( const CommunicationPairs &, CommunicationWeights & )
    {
@@ -715,7 +714,7 @@ class RefinementSelectionFunctions
 {
 public:
 
-   typedef blockforest::SetupBlockForest::RefinementSelectionFunction RefinementSelectionFunction;
+   using RefinementSelectionFunction = blockforest::SetupBlockForest::RefinementSelectionFunction;
 
    void add( const RefinementSelectionFunction & function )
    {
diff --git a/src/blockforest/Types.h b/src/blockforest/Types.h
index 76ab39113..dc61b3551 100644
--- a/src/blockforest/Types.h
+++ b/src/blockforest/Types.h
@@ -33,8 +33,8 @@ namespace blockforest {
 
 // data structure specific types
 
-typedef real_t workload_t;
-typedef real_t memory_t;
+using workload_t = real_t;
+using memory_t = real_t;
 
 WALBERLA_STATIC_ASSERT( sizeof( workload_t ) == 4 || sizeof( workload_t ) == 8 );
 WALBERLA_STATIC_ASSERT( sizeof( memory_t   ) == 4 || sizeof( memory_t   ) == 8 );
diff --git a/src/blockforest/communication/NonUniformBufferedScheme.h b/src/blockforest/communication/NonUniformBufferedScheme.h
index 3e206f36d..caf91651c 100644
--- a/src/blockforest/communication/NonUniformBufferedScheme.h
+++ b/src/blockforest/communication/NonUniformBufferedScheme.h
@@ -55,12 +55,12 @@ public:
 
    enum INDEX { EQUAL_LEVEL = 0, COARSE_TO_FINE = 1, FINE_TO_COARSE = 2 };
 
-   typedef mpi::SendBuffer SendBuffer;
-   typedef mpi::RecvBuffer RecvBuffer;
+   using SendBuffer = mpi::SendBuffer;
+   using RecvBuffer = mpi::RecvBuffer;
 
-   typedef shared_ptr< blockforest::communication::NonUniformPackInfo > PackInfo;
-   typedef std::function<void ()>                            VoidFunction;
-   typedef std::function<void ( SendBuffer & buffer )> SendBufferFunction;
+   using PackInfo = shared_ptr<blockforest::communication::NonUniformPackInfo>;
+   using VoidFunction = std::function<void ()>;
+   using SendBufferFunction = std::function<void (SendBuffer &)>;
 
    //**Construction & Destruction***************************************************************************************
    /*! \name Construction & Destruction */
diff --git a/src/blockforest/communication/UniformBufferedScheme.h b/src/blockforest/communication/UniformBufferedScheme.h
index 6ee1be18c..8677b5f83 100644
--- a/src/blockforest/communication/UniformBufferedScheme.h
+++ b/src/blockforest/communication/UniformBufferedScheme.h
@@ -80,16 +80,16 @@ template< typename Stencil_T >
 class UniformBufferedScheme
 {
 public:
-   typedef Stencil_T Stencil;
-   typedef mpi::SendBuffer SendBuffer;
-   typedef mpi::RecvBuffer RecvBuffer;
+   using Stencil = Stencil_T;
+   using SendBuffer = mpi::SendBuffer;
+   using RecvBuffer = mpi::RecvBuffer;
 
-   typedef shared_ptr< walberla::communication::UniformPackInfo >  PackInfo;
+   using PackInfo = shared_ptr<walberla::communication::UniformPackInfo>;
 
-   typedef std::function<void ()>                            VoidFunction;
-   typedef std::function<void ( SendBuffer & buffer )> SendBufferFunction;
+   using VoidFunction = std::function<void ()>;
+   using SendBufferFunction = std::function<void (SendBuffer &)>;
 
-   typedef walberla::communication::UniformPackInfo CommunicationItemInfo;
+   using CommunicationItemInfo = walberla::communication::UniformPackInfo;
 
    //**Construction & Destruction***************************************************************************************
    /*! \name Construction & Destruction */
diff --git a/src/blockforest/communication/UniformDirectScheme.h b/src/blockforest/communication/UniformDirectScheme.h
index 7dfa2d781..0d10c2f4c 100644
--- a/src/blockforest/communication/UniformDirectScheme.h
+++ b/src/blockforest/communication/UniformDirectScheme.h
@@ -48,9 +48,9 @@ template< typename Stencil_T >
 class UniformDirectScheme
 {
 public:
-   typedef Stencil_T Stencil;
-   typedef walberla::communication::UniformMPIDatatypeInfo UniformMPIDatatypeInfo;
-   typedef walberla::communication::UniformMPIDatatypeInfo CommunicationItemInfo;
+   using Stencil = Stencil_T;
+   using UniformMPIDatatypeInfo = walberla::communication::UniformMPIDatatypeInfo;
+   using CommunicationItemInfo = walberla::communication::UniformMPIDatatypeInfo;
 
    //**Construction & Destruction***************************************************************************************
    /*! \name Construction & Destruction */
diff --git a/src/blockforest/loadbalancing/DynamicCurve.h b/src/blockforest/loadbalancing/DynamicCurve.h
index 30724c40f..8b3e5808a 100644
--- a/src/blockforest/loadbalancing/DynamicCurve.h
+++ b/src/blockforest/loadbalancing/DynamicCurve.h
@@ -53,8 +53,8 @@ template< typename PhantomData_T, typename Value_T, bool weighted = true >
 class BlockIDSorter
 {
 public:
-   typedef typename PhantomData_T::weight_t weight_t;
-   typedef std::vector< std::vector< std::pair< BlockID, weight_t > > > Blocks_T;
+   using weight_t = typename PhantomData_T::weight_t;
+   using Blocks_T = std::vector<std::vector<std::pair<BlockID, weight_t>>>;
    BlockIDSorter( const Blocks_T & blocks ) : blocks_( blocks ) {}
    bool operator()( const Value_T & lhs, const Value_T & rhs ) const
    {
@@ -68,7 +68,7 @@ template< typename PhantomData_T, typename Value_T >
 class BlockIDSorter< PhantomData_T, Value_T, false >
 {
 public:
-   typedef std::vector< std::vector< BlockID > > Blocks_T;
+   using Blocks_T = std::vector<std::vector<BlockID>>;
    BlockIDSorter( const Blocks_T & blocks ) : blocks_( blocks ) {}
    bool operator()( const Value_T & lhs, const Value_T & rhs ) const
    {
@@ -101,10 +101,10 @@ class DynamicCurveBalance
 {
 public:
 
-   typedef typename PhantomData_T::weight_t weight_t;
-   typedef mpi::MPIRank pid_t;
-   typedef uint16_t idx_t; // limits the maximum number of blocks per process to 65536
-   typedef internal::Node< pid_t, idx_t > Node;
+   using weight_t = typename PhantomData_T::weight_t;
+   using pid_t = mpi::MPIRank;
+   using idx_t = uint16_t; // limits the maximum number of blocks per process to 65536
+   using Node = internal::Node<pid_t, idx_t>;
 
    DynamicCurveBalance( const bool hilbert = true, const bool allGather = true, const bool levelwise = true ) :
       hilbert_( hilbert ), allGather_( allGather ), levelwise_(levelwise)
diff --git a/src/blockforest/loadbalancing/DynamicParMetis.h b/src/blockforest/loadbalancing/DynamicParMetis.h
index fa5663db5..f78a4c4c0 100644
--- a/src/blockforest/loadbalancing/DynamicParMetis.h
+++ b/src/blockforest/loadbalancing/DynamicParMetis.h
@@ -92,8 +92,8 @@ class DynamicParMetisBlockInfo
 {
 public:
 
-   typedef int64_t weight_t;
-   typedef int64_t vsize_t;
+   using weight_t = int64_t;
+   using vsize_t = int64_t;
 
    DynamicParMetisBlockInfo( const weight_t vertexWeight, const uint_t ncon = 1 )
       : vertexWeight_(ncon, vertexWeight), vertexSize_(1)
diff --git a/src/blockforest/loadbalancing/NoPhantomData.h b/src/blockforest/loadbalancing/NoPhantomData.h
index a1662855d..7de1f9aaf 100644
--- a/src/blockforest/loadbalancing/NoPhantomData.h
+++ b/src/blockforest/loadbalancing/NoPhantomData.h
@@ -31,7 +31,7 @@ namespace blockforest {
 class NoPhantomData
 {
 public:
-   typedef uint8_t weight_t;
+   using weight_t = uint8_t;
    weight_t weight() const { return uint8_t(1); }
 };
 
diff --git a/src/blockforest/loadbalancing/PODPhantomData.h b/src/blockforest/loadbalancing/PODPhantomData.h
index 2be8c77ce..2b8bc23eb 100644
--- a/src/blockforest/loadbalancing/PODPhantomData.h
+++ b/src/blockforest/loadbalancing/PODPhantomData.h
@@ -35,7 +35,7 @@ class PODPhantomWeight
 {
 public:
 
-   typedef T weight_t;
+   using weight_t = T;
 
    PODPhantomWeight( const T _weight ) : weight_( _weight ) {}
 
diff --git a/src/blockforest/loadbalancing/StaticParMetis.h b/src/blockforest/loadbalancing/StaticParMetis.h
index 0e77baf45..305d10a6d 100644
--- a/src/blockforest/loadbalancing/StaticParMetis.h
+++ b/src/blockforest/loadbalancing/StaticParMetis.h
@@ -40,8 +40,8 @@ public:
    enum Algorithm    { PARMETIS_PART_GEOM_KWAY, PARMETIS_PART_KWAY };
    enum WeightsToUse { PARMETIS_NO_WEIGHTS = 0, PARMETIS_EDGE_WEIGHTS = 1, PARMETIS_VERTEX_WEIGHTS = 2, PARMETIS_BOTH_WEIGHTS = 3 };
 
-   typedef std::pair< const SetupBlock *, const SetupBlock * > BlockPair;
-   typedef std::function<void (const std::vector< BlockPair > & edges, std::vector< int64_t > & weights ) > CommWeightFunction;
+   using BlockPair = std::pair<const SetupBlock *, const SetupBlock *>;
+   using CommWeightFunction = std::function<void (const std::vector<BlockPair> &, std::vector<int64_t> &)>;
 
    StaticLevelwiseParMetis( const Algorithm algorithm = PARMETIS_PART_GEOM_KWAY )
       : algorithm_( algorithm ), weightsToUse_( PARMETIS_VERTEX_WEIGHTS ) {}
diff --git a/src/boundary/BoundaryHandling.h b/src/boundary/BoundaryHandling.h
index 0910be455..9aa5a3439 100644
--- a/src/boundary/BoundaryHandling.h
+++ b/src/boundary/BoundaryHandling.h
@@ -66,7 +66,7 @@ using std::tuple_size;
 
 
 class BHUIDGenerator : public uid::IndexGenerator< BHUIDGenerator, uint_t >{};
-typedef UID< BHUIDGenerator > BoundaryHandlingUID;
+using BoundaryHandlingUID = UID<BHUIDGenerator>;
 
 
 
@@ -78,9 +78,9 @@ public:
    template< typename F, typename... T >
    friend class BoundaryHandlingCollection;
 
-   typedef FlagField_T                               FlagField;
-   typedef typename FlagField_T::flag_t              flag_t;
-   typedef typename FlagField_T::const_base_iterator ConstFlagFieldBaseIterator;
+   using FlagField = FlagField_T;
+   using flag_t = typename FlagField_T::flag_t;
+   using ConstFlagFieldBaseIterator = typename FlagField_T::const_base_iterator;
 
    enum Mode { OPTIMIZED_SPARSE_TRAVERSAL, ENTIRE_FIELD_TRAVERSAL };
 
@@ -664,7 +664,7 @@ private:
    std::vector< std::vector< std::vector< std::pair< Cell, stencil::Direction > > > > cellDirectionPairs_; // 1st vector: numberOfGhostLayersToInclude
                                                                                                            // 2nd vector: boundary condition index
                                                                                                            // 3rd vector: vector of cell<->direction pairs
-   typedef std::tuple<Boundaries...> Tuple;
+   using Tuple = std::tuple<Boundaries...>;
    Tuple boundaryConditions_;
    bool  threadSafeBCs_;
 
diff --git a/src/boundary/BoundaryHandlingCollection.h b/src/boundary/BoundaryHandlingCollection.h
index 61320c178..7b94d4a0e 100644
--- a/src/boundary/BoundaryHandlingCollection.h
+++ b/src/boundary/BoundaryHandlingCollection.h
@@ -49,7 +49,7 @@ namespace boundary {
 
 
 class BHCUIDGenerator : public uid::IndexGenerator< BHCUIDGenerator, uint_t >{};
-typedef UID< BHCUIDGenerator > BoundaryHandlingCollectionUID;
+using BoundaryHandlingCollectionUID = UID<BHCUIDGenerator>;
 
 
 
@@ -58,9 +58,9 @@ class BoundaryHandlingCollection
 {
 public:
 
-   typedef FlagField_T                               FlagField;
-   typedef typename FlagField_T::flag_t              flag_t;
-   typedef typename FlagField_T::const_base_iterator ConstFlagFieldBaseIterator;
+   using FlagField = FlagField_T;
+   using flag_t = typename FlagField_T::flag_t;
+   using ConstFlagFieldBaseIterator = typename FlagField_T::const_base_iterator;
 
 
 
@@ -534,7 +534,7 @@ private:
 
    const CellInterval outerBB_;
 
-   typedef std::tuple<Handlers...> Tuple;
+   using Tuple = std::tuple<Handlers...>;
    Tuple boundaryHandlers_;
 
 }; // class BoundaryHandlingCollection
diff --git a/src/boundary/BoundaryUID.h b/src/boundary/BoundaryUID.h
index 3df48a8c8..0f3a86bb1 100644
--- a/src/boundary/BoundaryUID.h
+++ b/src/boundary/BoundaryUID.h
@@ -29,7 +29,7 @@ namespace boundary {
 
 
 class BUIDGenerator : public uid::IndexGenerator< BUIDGenerator, size_t >{};
-typedef UID< BUIDGenerator > BoundaryUID;
+using BoundaryUID = UID<BUIDGenerator>;
 
 
 } // namespace boundary
diff --git a/src/core/Abort.h b/src/core/Abort.h
index 23b1ef1ff..ee77794f5 100644
--- a/src/core/Abort.h
+++ b/src/core/Abort.h
@@ -40,7 +40,7 @@ class Abort : public singleton::Singleton<Abort>
 
 public:
 
-   typedef std::function<void ( const std::string & message, const std::string & callerPath, const int line, bool withDebugInfo  )> AbortFunction;
+   using AbortFunction = std::function<void (const std::string &, const std::string &, const int, bool)>;
 
    void resetAbortFunction( const AbortFunction & function = AbortFunction() ) { abortFunction_ = function; }
 
diff --git a/src/core/AllSet.h b/src/core/AllSet.h
index 74842fd83..a2c79581b 100644
--- a/src/core/AllSet.h
+++ b/src/core/AllSet.h
@@ -94,7 +94,7 @@ public:
    friend inline bool operator==( const AllSet& a, const AllSet& b ) { return  setIsEqual(a,b); } ///< compares the content of two sets
    friend inline bool operator!=( const AllSet& a, const AllSet& b ) { return !setIsEqual(a,b); } ///< compares the content of two sets
 
-   typedef typename std::set<T>::const_iterator ConstIter;
+   using ConstIter = typename std::set<T>::const_iterator;
 
 
 
diff --git a/src/core/DataTypes.h b/src/core/DataTypes.h
index 121f836c5..8cb35637b 100644
--- a/src/core/DataTypes.h
+++ b/src/core/DataTypes.h
@@ -86,10 +86,10 @@ inline S numeric_cast( T t ) {
 
 
 // fixed size signed integral types
-typedef std::int8_t   int8_t;    ///<  8 bit signed integer
-typedef std::int16_t  int16_t;   ///< 16 bit signed integer
-typedef std::int32_t  int32_t;   ///< 32 bit signed integer
-typedef std::int64_t  int64_t;   ///< 64 bit signed integer
+using int8_t = std::int8_t;    ///<  8 bit signed integer
+using int16_t = std::int16_t;   ///< 16 bit signed integer
+using int32_t = std::int32_t;   ///< 32 bit signed integer
+using int64_t = std::int64_t;   ///< 64 bit signed integer
 
 template< typename T > inline int8_t   int8_c( T t ) { return numeric_cast< int8_t  >(t); } ///< cast to type int8_t  using "int8_c(x)"
 template< typename T > inline int16_t int16_c( T t ) { return numeric_cast< int16_t >(t); } ///< cast to type int16_t using "int16_c(x)"
@@ -100,12 +100,12 @@ template< typename T > inline int64_t int64_c( T t ) { return numeric_cast< int6
 
 // fixed size unsigned integral types
 
-typedef std::uint8_t  uint8_t;    ///<  8 bit unsigned integer
-typedef std::uint16_t uint16_t;   ///< 16 bit unsigned integer
-typedef std::uint32_t uint32_t;   ///< 32 bit unsigned integer
-typedef std::uint64_t uint64_t;   ///< 64 bit unsigned integer
-typedef uint8_t byte_t;
-typedef uint64_t id_t;            //sid datatype for pe
+using uint8_t = std::uint8_t;    ///<  8 bit unsigned integer
+using uint16_t = std::uint16_t;   ///< 16 bit unsigned integer
+using uint32_t = std::uint32_t;   ///< 32 bit unsigned integer
+using uint64_t = std::uint64_t;   ///< 64 bit unsigned integer
+using byte_t = uint8_t;
+using id_t = uint64_t;            //sid datatype for pe
 
 template< typename T > inline uint8_t   uint8_c( T t ) { return numeric_cast< uint8_t  >(t); } ///< cast to type uint8_t  using "uint8_c(x)"
 template< typename T > inline uint16_t uint16_c( T t ) { return numeric_cast< uint16_t >(t); } ///< cast to type uint16_t using "uint16_c(x)"
@@ -127,7 +127,7 @@ inline void static_assert_int_t() {
 
 // unsigned integral type
 
-typedef size_t uint_t;
+using uint_t = size_t;
 
 static_assert( std::numeric_limits<uint_t>::is_specialized &&
                std::numeric_limits<uint_t>::is_integer &&
@@ -144,7 +144,7 @@ inline void static_assert_uint_t() {
 
 // data structure specific data types
 
-typedef int cell_idx_t;
+using cell_idx_t = int;
 //typedef int64_t cell_idx_t;
 
 WALBERLA_STATIC_ASSERT( std::numeric_limits<cell_idx_t>::is_specialized &&
@@ -158,7 +158,7 @@ template< typename T > inline cell_idx_t cell_idx_c( T t ) { return numeric_cast
 // floating point type
 
 #ifdef WALBERLA_DOUBLE_ACCURACY
-typedef double real_t;
+using real_t = double;
 #else
 typedef float  real_t;
 #endif
diff --git a/src/core/OpenMP.h b/src/core/OpenMP.h
index 67d32589a..b8ae3d607 100644
--- a/src/core/OpenMP.h
+++ b/src/core/OpenMP.h
@@ -48,12 +48,12 @@ namespace walberla {
 #define WALBERLA_OPENMP_FUNCTION_ERROR WALBERLA_ABORT( "Invalid OpenMP function call! In case of compiling without OpenMP, OpenMP functions are not available and shouldn't be called!" );
 
 /* schedule kind constants */
-typedef enum omp_sched_t {
+using omp_sched_t = enum omp_sched_t {
 omp_sched_static  = 1,
 omp_sched_dynamic = 2,
 omp_sched_guided  = 3,
 omp_sched_auto    = 4
-} omp_sched_t;
+};
 
 /* set API functions */
 inline void    omp_set_num_threads (int) { WALBERLA_OPENMP_FUNCTION_ERROR }
@@ -81,9 +81,9 @@ inline void    omp_get_schedule            (omp_sched_t *, int *) { WALBERLA_OPE
 inline int     omp_get_max_task_priority   (void) { WALBERLA_OPENMP_FUNCTION_ERROR }
 
 /* lock API functions */
-typedef struct omp_lock_t {
+using omp_lock_t = struct omp_lock_t {
     void * _lk;
-} omp_lock_t;
+};
 
 inline void    omp_init_lock    (omp_lock_t *) { WALBERLA_OPENMP_FUNCTION_ERROR }
 inline void    omp_set_lock     (omp_lock_t *) { WALBERLA_OPENMP_FUNCTION_ERROR }
@@ -92,9 +92,9 @@ inline void    omp_destroy_lock (omp_lock_t *) { WALBERLA_OPENMP_FUNCTION_ERROR
 inline int     omp_test_lock    (omp_lock_t *) { WALBERLA_OPENMP_FUNCTION_ERROR }
 
 /* nested lock API functions */
-typedef struct omp_nest_lock_t {
+using omp_nest_lock_t = struct omp_nest_lock_t {
     void * _lk;
-} omp_nest_lock_t;
+};
 
 inline void    omp_init_nest_lock    (omp_nest_lock_t *) { WALBERLA_OPENMP_FUNCTION_ERROR }
 inline void    omp_set_nest_lock     (omp_nest_lock_t *) { WALBERLA_OPENMP_FUNCTION_ERROR }
@@ -103,7 +103,7 @@ inline void    omp_destroy_nest_lock (omp_nest_lock_t *) { WALBERLA_OPENMP_FUNCT
 inline int     omp_test_nest_lock    (omp_nest_lock_t *) { WALBERLA_OPENMP_FUNCTION_ERROR }
 
 /* lock hint type for dynamic user lock */
-typedef enum omp_lock_hint_t {
+using omp_lock_hint_t = enum omp_lock_hint_t {
     omp_lock_hint_none           = 0,
     omp_lock_hint_uncontended    = 1,
     omp_lock_hint_contended      = (1<<1 ),
@@ -112,7 +112,7 @@ typedef enum omp_lock_hint_t {
     kmp_lock_hint_hle            = (1<<16),
     kmp_lock_hint_rtm            = (1<<17),
     kmp_lock_hint_adaptive       = (1<<18)
-} omp_lock_hint_t;
+};
 
 /* hinted lock initializers */
 inline void omp_init_lock_with_hint(omp_lock_t *, omp_lock_hint_t) { WALBERLA_OPENMP_FUNCTION_ERROR }
@@ -144,13 +144,13 @@ inline int    omp_target_associate_ptr(void *, void *, size_t, size_t, int) { WA
 inline int    omp_target_disassociate_ptr(void *, int) { WALBERLA_OPENMP_FUNCTION_ERROR }
 
 /* OpenMP 4.0 affinity API */
-typedef enum omp_proc_bind_t {
+using omp_proc_bind_t = enum omp_proc_bind_t {
     omp_proc_bind_false = 0,
     omp_proc_bind_true = 1,
     omp_proc_bind_master = 2,
     omp_proc_bind_close = 3,
     omp_proc_bind_spread = 4
-} omp_proc_bind_t;
+};
 
 inline omp_proc_bind_t omp_get_proc_bind (void) { WALBERLA_OPENMP_FUNCTION_ERROR }
 
diff --git a/src/core/Set.h b/src/core/Set.h
index 7f094ad96..cbc0d5c11 100644
--- a/src/core/Set.h
+++ b/src/core/Set.h
@@ -85,9 +85,9 @@ template< typename T >
 class Set {
 
 public:
-   typedef typename std::set<T>::value_type     value_type;
-   typedef typename std::set<T>::const_iterator const_iterator;
-   typedef typename std::set<T>::iterator       iterator;
+   using value_type = typename std::set<T>::value_type;
+   using const_iterator = typename std::set<T>::const_iterator;
+   using iterator = typename std::set<T>::iterator;
 
    friend inline Set<T> operator&( const Set& a, const Set& b ) { return setIntersection(a,b); } ///< intersection
    friend inline Set<T> operator+( const Set& a, const Set& b ) { return setUnion       (a,b); } ///< union
diff --git a/src/core/VectorTrait.h b/src/core/VectorTrait.h
index b050d159e..82d60ef0b 100644
--- a/src/core/VectorTrait.h
+++ b/src/core/VectorTrait.h
@@ -38,7 +38,7 @@ namespace walberla {
 template< typename T, class Enable = void >
 struct VectorTrait
 {
-   typedef void OutputType;
+   using OutputType = void;
 
    static const uint_t F_SIZE = 0u;
 };
@@ -46,7 +46,7 @@ struct VectorTrait
 template< typename T >
 struct VectorTrait<T, typename std::enable_if<std::is_arithmetic<T>::value>::type>
 {
-   typedef T OutputType;
+   using OutputType = T;
 
    static const uint_t F_SIZE = 1u;
    static T get   ( T   value, uint_t /*f*/ )        { return value; }
diff --git a/src/core/cell/CellInterval.h b/src/core/cell/CellInterval.h
index 10f2529aa..4befe87c1 100644
--- a/src/core/cell/CellInterval.h
+++ b/src/core/cell/CellInterval.h
@@ -50,7 +50,7 @@ class CellIntervalIterator;
 class CellInterval {
 
 public:
-   typedef CellIntervalIterator const_iterator;
+   using const_iterator = CellIntervalIterator;
 
    CellInterval() : min_( cell_idx_c(0), cell_idx_c(0), cell_idx_c(0) ), max_( cell_idx_c(-1), cell_idx_c(-1), cell_idx_c(-1) ) {}
    CellInterval( const Cell& _min, const Cell& _max ) : min_( _min ), max_( _max ) {}
@@ -132,11 +132,11 @@ inline bool CellInterval::positiveIndicesOnly() const {
 class CellIntervalIterator
 {
 public:
-   typedef std::bidirectional_iterator_tag iterator_category;
-   typedef Cell                            value_type;
-   typedef ptrdiff_t                       difference_type;
-   typedef Cell*                           pointer;
-   typedef Cell&                           reference;
+   using iterator_category = std::bidirectional_iterator_tag;
+   using value_type = Cell;
+   using difference_type = ptrdiff_t;
+   using pointer = Cell *;
+   using reference = Cell &;
 
    CellIntervalIterator( const CellInterval & ci, const Cell & cell ) : ci_(ci), cell_( cell ) { }
 
diff --git a/src/core/cell/CellVector.h b/src/core/cell/CellVector.h
index aa0fdefbd..c05474400 100644
--- a/src/core/cell/CellVector.h
+++ b/src/core/cell/CellVector.h
@@ -45,13 +45,13 @@ public:
 
    /*! \name Standard container typedefs */
    //@{
-   typedef std::vector<Cell>::iterator        iterator;
-   typedef std::vector<Cell>::const_iterator  const_iterator;
-   typedef std::vector<Cell>::size_type       size_type;
-   typedef std::vector<Cell>::reference       reference;
-   typedef std::vector<Cell>::const_reference const_reference;
-   typedef std::vector<Cell>::difference_type difference_type;
-   typedef Cell                               value_type;
+   using iterator = std::vector<Cell>::iterator;
+   using const_iterator = std::vector<Cell>::const_iterator;
+   using size_type = std::vector<Cell>::size_type;
+   using reference = std::vector<Cell>::reference;
+   using const_reference = std::vector<Cell>::const_reference;
+   using difference_type = std::vector<Cell>::difference_type;
+   using value_type = Cell;
    //@}
 
    /*! \name Constructors */
diff --git a/src/core/config/Config.h b/src/core/config/Config.h
index 056661251..51d16fdee 100644
--- a/src/core/config/Config.h
+++ b/src/core/config/Config.h
@@ -88,16 +88,16 @@ public:
 
 private:
    //**Type definitions****************************************************************************
-   typedef std::string                                  Key;                  //!< Parameter key.
-   typedef std::string                                  Value;                //!< Parameter value.
-   typedef std::map<Key,Value, CaseInsensitiveCompare>  Map;                  //!< Parameter map.
-   typedef std::list<Block>                             List;                 //!< List for parameter blocks.
-   typedef std::map<Value,Value>                        ValueReplacementMap;  //!< Parameter value replacement map
-
-   typedef std::stringstream::pos_type         sstreamPos;  //!< Stream position.
-   typedef std::pair<sstreamPos,unsigned int>  Pair;        //!< Pair consisting of a stream position
+   using Key = std::string;                  //!< Parameter key.
+   using Value = std::string;                //!< Parameter value.
+   using Map = std::map<Key, Value, CaseInsensitiveCompare>;                  //!< Parameter map.
+   using List = std::list<Block>;                 //!< List for parameter blocks.
+   using ValueReplacementMap = std::map<Value, Value>;  //!< Parameter value replacement map
+
+   using sstreamPos = std::stringstream::pos_type;  //!< Stream position.
+   using Pair = std::pair<sstreamPos, unsigned int>;        //!< Pair consisting of a stream position
                                                             //!< and a line number.
-   typedef std::vector<Pair>                   LineVector;  //!< Vector for Pair.
+   using LineVector = std::vector<Pair>;  //!< Vector for Pair.
    //*******************************************************************************************************************
 
    //**Member constants*************************************************************************************************
@@ -106,11 +106,11 @@ private:
 
 public:
    //**Type definitions****************************************************************************
-   typedef std::vector<BlockHandle>  Blocks;          //!< Container for block handles.
-   typedef List::size_type           size_type;       //!< Size type for a Block count.
+   using Blocks = std::vector<BlockHandle>;          //!< Container for block handles.
+   using size_type = List::size_type;       //!< Size type for a Block count.
 
-   typedef Map::iterator             iterator;        //!< Iterator over the contained parameters.
-   typedef Map::const_iterator       const_iterator;  //!< Constant iterator over the contained parameters.
+   using iterator = Map::iterator;        //!< Iterator over the contained parameters.
+   using const_iterator = Map::const_iterator;  //!< Constant iterator over the contained parameters.
    //*******************************************************************************************************************
 
    //**Error codes******************************************************************************************************
diff --git a/src/core/debug/CheckFunctions.impl.h b/src/core/debug/CheckFunctions.impl.h
index e1932fdda..e4615bc0e 100644
--- a/src/core/debug/CheckFunctions.impl.h
+++ b/src/core/debug/CheckFunctions.impl.h
@@ -61,14 +61,14 @@ inline bool check_not_nullptr( const shared_ptr<T> & p )
 template< typename T, typename U >
 inline bool check_equal( const T & lhs, const U & rhs )
 {
-   typedef std::integral_constant<bool, std::is_arithmetic<T>::value && std::is_arithmetic<U>::value> truth_type;
+   using truth_type = std::integral_constant<bool, std::is_arithmetic<T>::value && std::is_arithmetic<U>::value>;
    return check_equal( lhs, rhs, truth_type() );
 }
 
 template< typename T, typename U >
 inline bool check_equal( const T & lhs, const U & rhs, const std::true_type & )
 {
-   typedef typename math::MathTrait<T,U>::High HighType;
+   using HighType = typename math::MathTrait<T, U>::High;
    return static_cast<HighType>(lhs) == static_cast<HighType>(rhs);
 }
 
@@ -81,14 +81,14 @@ inline bool check_equal( const T & lhs, const U & rhs, const std::false_type & )
 template< typename T, typename U >
 inline bool check_unequal( const T & lhs, const U & rhs )
 {
-   typedef std::integral_constant<bool, std::is_arithmetic<T>::value && std::is_arithmetic<U>::value> truth_type;
+   using truth_type = std::integral_constant<bool, std::is_arithmetic<T>::value && std::is_arithmetic<U>::value>;
    return check_unequal( lhs, rhs, truth_type() );
 }
 
 template< typename T, typename U >
 inline bool check_unequal( const T & lhs, const U & rhs, const std::true_type & )
 {
-   typedef typename math::MathTrait<T,U>::High HighType;
+   using HighType = typename math::MathTrait<T, U>::High;
    return static_cast<HighType>(lhs) != static_cast<HighType>(rhs);
 }
 
@@ -104,7 +104,7 @@ inline bool check_float_equal( const T & lhs, const U & rhs )
    static_assert( std::is_floating_point<T>::value,  "First operand type T is not a floating point type!");
    static_assert( std::is_floating_point<U>::value, "Second operand type U is not a floating point type!");
 
-   typedef typename math::MathTrait<T,U>::Low LowType;
+   using LowType = typename math::MathTrait<T, U>::Low;
 
    LowType low_lhs = static_cast<LowType>( lhs );
    LowType low_rhs = static_cast<LowType>( rhs );
@@ -118,7 +118,7 @@ inline bool check_float_unequal( const T & lhs, const U & rhs )
    static_assert( std::is_floating_point<T>::value,  "First operand type T is not a floating point type!");
    static_assert( std::is_floating_point<U>::value, "Second operand type U is not a floating point type!");
 
-   typedef typename math::MathTrait<T,U>::Low LowType;
+   using LowType = typename math::MathTrait<T, U>::Low;
 
    LowType low_lhs = static_cast<LowType>( lhs );
    LowType low_rhs = static_cast<LowType>( rhs );
@@ -133,7 +133,7 @@ inline bool check_float_equal_eps( const T & lhs, const U & rhs,
    static_assert( std::is_floating_point<T>::value,  "First operand type T is not a floating point type!");
    static_assert( std::is_floating_point<U>::value, "Second operand type U is not a floating point type!");
 
-   typedef typename math::MathTrait<T,U>::Low LowType;
+   using LowType = typename math::MathTrait<T, U>::Low;
 
    LowType low_lhs = static_cast<LowType>( lhs );
    LowType low_rhs = static_cast<LowType>( rhs );
@@ -148,7 +148,7 @@ inline bool check_float_unequal_eps( const T & lhs, const U & rhs,
    static_assert( std::is_floating_point<T>::value,  "First operand type T is not a floating point type!");
    static_assert( std::is_floating_point<U>::value, "Second operand type U is not a floating point type!");
 
-   typedef typename math::MathTrait<T,U>::Low LowType;
+   using LowType = typename math::MathTrait<T, U>::Low;
 
    LowType low_lhs = static_cast<LowType>( lhs );
    LowType low_rhs = static_cast<LowType>( rhs );
@@ -159,14 +159,14 @@ inline bool check_float_unequal_eps( const T & lhs, const U & rhs,
 template< typename T, typename U >
 inline bool check_identical( const T & lhs, const U & rhs )
 {
-   typedef std::integral_constant<bool, std::is_arithmetic<T>::value && std::is_arithmetic<U>::value> truth_type;
+   using truth_type = std::integral_constant<bool, std::is_arithmetic<T>::value && std::is_arithmetic<U>::value>;
    return check_identical( lhs, rhs, truth_type() );
 }
 
 template< typename T, typename U >
 inline bool check_identical( const T & lhs, const U & rhs, const std::true_type & )
 {
-   typedef typename math::MathTrait<T,U>::High HighType;
+   using HighType = typename math::MathTrait<T, U>::High;
    return isIdentical( static_cast<HighType>(lhs), static_cast<HighType>(rhs) );
 }
 
@@ -179,14 +179,14 @@ inline bool check_identical( const T & lhs, const U & rhs, const std::false_type
 template< typename T, typename U >
 inline bool check_not_identical( const T & lhs, const U & rhs )
 {
-   typedef std::integral_constant<bool, std::is_arithmetic<T>::value && std::is_arithmetic<U>::value> truth_type;
+   using truth_type = std::integral_constant<bool, std::is_arithmetic<T>::value && std::is_arithmetic<U>::value>;
    return check_not_identical( lhs, rhs, truth_type() );
 }
 
 template< typename T, typename U >
 inline bool check_not_identical( const T & lhs, const U & rhs, const std::true_type & )
 {
-   typedef typename math::MathTrait<T,U>::High HighType;
+   using HighType = typename math::MathTrait<T, U>::High;
    return !isIdentical( static_cast<HighType>(lhs), static_cast<HighType>(rhs) );
 }
 
@@ -199,14 +199,14 @@ inline bool check_not_identical( const T & lhs, const U & rhs, const std::false_
 template< typename T, typename U >
 inline bool check_less( const T & lhs, const U & rhs )
 {
-   typedef std::integral_constant<bool, std::is_arithmetic<T>::value && std::is_arithmetic<U>::value> truth_type;
+   using truth_type = std::integral_constant<bool, std::is_arithmetic<T>::value && std::is_arithmetic<U>::value>;
    return check_less( lhs, rhs, truth_type() );
 }
 
 template< typename T, typename U >
 inline bool check_less( const T & lhs, const U & rhs, const std::true_type & )
 {
-   typedef typename math::MathTrait<T,U>::High HighType;
+   using HighType = typename math::MathTrait<T, U>::High;
    return static_cast<HighType>(lhs) < static_cast<HighType>(rhs);
 }
 
@@ -219,14 +219,14 @@ inline bool check_less( const T & lhs, const U & rhs, const std::false_type & )
 template< typename T, typename U >
 inline bool check_greater( const T & lhs, const U & rhs )
 {
-   typedef std::integral_constant<bool, std::is_arithmetic<T>::value && std::is_arithmetic<U>::value> truth_type;
+   using truth_type = std::integral_constant<bool, std::is_arithmetic<T>::value && std::is_arithmetic<U>::value>;
    return check_greater( lhs, rhs, truth_type() );
 }
 
 template< typename T, typename U >
 inline bool check_greater( const T & lhs, const U & rhs, const std::true_type & )
 {
-   typedef typename math::MathTrait<T,U>::High HighType;
+   using HighType = typename math::MathTrait<T, U>::High;
    return static_cast<HighType>(lhs) > static_cast<HighType>(rhs);
 }
 
@@ -239,14 +239,14 @@ inline bool check_greater( const T & lhs, const U & rhs, const std::false_type &
 template< typename T, typename U >
 inline bool check_less_equal( const T & lhs, const U & rhs )
 {
-   typedef std::integral_constant<bool, std::is_arithmetic<T>::value && std::is_arithmetic<U>::value> truth_type;
+   using truth_type = std::integral_constant<bool, std::is_arithmetic<T>::value && std::is_arithmetic<U>::value>;
    return check_less_equal( lhs, rhs, truth_type() );
 }
 
 template< typename T, typename U >
 inline bool check_less_equal( const T & lhs, const U & rhs, const std::true_type & )
 {
-   typedef typename math::MathTrait<T,U>::High HighType;
+   using HighType = typename math::MathTrait<T, U>::High;
    return static_cast<HighType>(lhs) <= static_cast<HighType>(rhs);
 }
 
@@ -259,14 +259,14 @@ inline bool check_less_equal( const T & lhs, const U & rhs, const std::false_typ
 template< typename T, typename U >
 inline bool check_greater_equal( const T & lhs, const U & rhs )
 {
-   typedef std::integral_constant<bool, std::is_arithmetic<T>::value && std::is_arithmetic<U>::value> truth_type;
+   using truth_type = std::integral_constant<bool, std::is_arithmetic<T>::value && std::is_arithmetic<U>::value>;
    return check_greater_equal( lhs, rhs, truth_type() );
 }
 
 template< typename T, typename U >
 inline bool check_greater_equal( const T & lhs, const U & rhs, const std::true_type & )
 {
-   typedef typename math::MathTrait<T,U>::High HighType;
+   using HighType = typename math::MathTrait<T, U>::High;
    return static_cast<HighType>(lhs) >= static_cast<HighType>(rhs);
 }
 
diff --git a/src/core/math/AABBFwd.h b/src/core/math/AABBFwd.h
index 9a7593b67..3a51fbd44 100644
--- a/src/core/math/AABBFwd.h
+++ b/src/core/math/AABBFwd.h
@@ -30,7 +30,7 @@ namespace math {
 template< typename T >
 class GenericAABB;
 
-typedef GenericAABB< real_t > AABB; /// see class GenericAABB
+using AABB = GenericAABB<real_t>; /// see class GenericAABB
 
 } // namespace math
 
diff --git a/src/core/math/GenericAABB.h b/src/core/math/GenericAABB.h
index a6e18882a..5d326b5af 100644
--- a/src/core/math/GenericAABB.h
+++ b/src/core/math/GenericAABB.h
@@ -48,8 +48,8 @@ class GenericAABB
 
 public:
    // Typedefs
-   typedef T            value_type;  /// scalar data type
-   typedef Vector3< T > vector_type; /// data type for three dimensional vectors
+   using value_type = T;  /// scalar data type
+   using vector_type = Vector3<T>; /// data type for three dimensional vectors
 
    // Constructors
    inline GenericAABB();
diff --git a/src/core/math/MathTrait.h b/src/core/math/MathTrait.h
index 3f3332289..492badea4 100644
--- a/src/core/math/MathTrait.h
+++ b/src/core/math/MathTrait.h
@@ -195,19 +195,19 @@ struct INVALID_NUMERICAL_TYPE;
 template< typename T1, typename T2 >
 struct MathTrait
 {
-   typedef T1   HighType;
-   typedef T2   LowType;
-   typedef T1   High;
-   typedef T2   Low;
+   using HighType = T1;
+   using LowType = T2;
+   using High = T1;
+   using Low = T2;
 };
 
 template< typename T>
 struct MathTrait< T, T >
 {
-   typedef T   HighType;
-   typedef T   LowType;
-   typedef T   High;
-   typedef T   Low;
+   using HighType = T;
+   using LowType = T;
+   using High = T;
+   using Low = T;
 };
 
 
diff --git a/src/core/math/Matrix2.h b/src/core/math/Matrix2.h
index a9377506d..7132b05d0 100644
--- a/src/core/math/Matrix2.h
+++ b/src/core/math/Matrix2.h
@@ -987,7 +987,7 @@ namespace walberla {
 template<typename T>
 struct VectorTrait< Matrix2<T> >
 {
-   typedef T OutputType;
+   using OutputType = T;
 
    static const uint_t F_SIZE =  4u;
    static T    get( const Matrix2<T> & v, uint_t f )       { return v[f]; }
diff --git a/src/core/math/Matrix3.h b/src/core/math/Matrix3.h
index e8253b4ad..d6020cd53 100644
--- a/src/core/math/Matrix3.h
+++ b/src/core/math/Matrix3.h
@@ -1694,7 +1694,7 @@ namespace walberla {
 template<typename T>
 struct VectorTrait< Matrix3<T> >
 {
-   typedef T OutputType;
+   using OutputType = T;
 
    static const uint_t F_SIZE =  9u;
    static T    get( const Matrix3<T> & v, uint_t f )       { return v[f]; }
diff --git a/src/core/math/MatrixMxN.h b/src/core/math/MatrixMxN.h
index 1d633e74e..380baeb32 100644
--- a/src/core/math/MatrixMxN.h
+++ b/src/core/math/MatrixMxN.h
@@ -96,10 +96,10 @@ class MatrixMxN
 
 public:
    //**Type definitions****************************************************************************
-   typedef MatrixMxN<Type>   This;           //!< Type of this MatrixMxN instance.
-   typedef This              ResultType;     //!< Result type for expression template evaluations.
-   typedef Type              ElementType;    //!< Type of the matrix elements.
-   typedef const MatrixMxN&  CompositeType;  //!< Data type for composite expression templates.
+   using This = MatrixMxN<Type>;           //!< Type of this MatrixMxN instance.
+   using ResultType = This;     //!< Result type for expression template evaluations.
+   using ElementType = Type;    //!< Type of the matrix elements.
+   using CompositeType = const MatrixMxN &;  //!< Data type for composite expression templates.
    //**********************************************************************************************
 
    //**Constructors********************************************************************************
diff --git a/src/core/math/Plane.h b/src/core/math/Plane.h
index bab0ac1e8..219a13c39 100644
--- a/src/core/math/Plane.h
+++ b/src/core/math/Plane.h
@@ -33,7 +33,7 @@ namespace math {
 class Plane
 {
 public:
-   typedef Vector3<real_t> Vec3Real;
+   using Vec3Real = Vector3<real_t>;
 
    inline Plane();
    inline Plane( const Vec3Real & origin, const Vec3Real & _normal );
diff --git a/src/core/math/Quaternion.h b/src/core/math/Quaternion.h
index 9ca8c6f53..417e9b793 100644
--- a/src/core/math/Quaternion.h
+++ b/src/core/math/Quaternion.h
@@ -108,7 +108,7 @@ class Quaternion
 
 public:
    //**Type definitions****************************************************************************
-   typedef Type  ElementType;  //!< Type of the quaternion elements.
+   using ElementType = Type;  //!< Type of the quaternion elements.
    //**********************************************************************************************
 
    //**Constructors********************************************************************************
@@ -659,7 +659,7 @@ template< typename Other>   // Data type of the vector
 inline const Vector3< typename MathTrait<Type,Other>::MultType >
    Quaternion<Type>::rotate( const Vector3<Other>& v ) const
 {
-   typedef typename MathTrait<Type,Other>::MultType  MT;
+   using MT = typename MathTrait<Type, Other>::MultType;
 
    // Multiplication in two steps
    const MT w( v_[1]*v[0] + v_[2]*v[1] + v_[3]*v[2] );
@@ -701,7 +701,7 @@ template< typename Other >  // Data type of the matrix
 inline const Matrix3< typename MathTrait<Type,Other>::MultType >
    Quaternion<Type>::rotate( const Matrix3<Other>& m ) const
 {
-   typedef typename MathTrait<Type,Other>::MultType  MT;
+   using MT = typename MathTrait<Type, Other>::MultType;
    const Matrix3<MT> R( this->toRotationMatrix() );
    return R.rotate( m );
 }
@@ -725,7 +725,7 @@ template< typename Other >  // Data type of the diagonal matrix
 inline const Matrix3< typename MathTrait<Type,Other>::MultType >
    Quaternion<Type>::diagRotate( const Matrix3<Other>& m ) const
 {
-   typedef typename MathTrait<Type,Other>::MultType  MT;
+   using MT = typename MathTrait<Type, Other>::MultType;
    const Matrix3<MT> R( this->toRotationMatrix() );
    return R.diagRotate( m );
 }
@@ -743,7 +743,7 @@ template< typename Other >  // Data type of the axis
 inline typename MathTrait<Type,Other>::HighType
    Quaternion<Type>::calcAngle( const Vector3<Other>& axis ) const
 {
-   typedef typename MathTrait<Type,Other>::HighType  High;
+   using High = typename MathTrait<Type, Other>::HighType;
 
    const Vector3<High> u( v_[1], v_[2], v_[3] );
    const High y  ( u.length() );
@@ -1057,7 +1057,7 @@ template< typename T1    // Data type of the left-hand side quaternion
 inline const Quaternion< typename MathTrait<T1,T2>::MultType >
    operator*( const Quaternion<T1>& lhs, const Quaternion<T2>& rhs )
 {
-   typedef typename MathTrait<T1,T2>::MultType  MT;
+   using MT = typename MathTrait<T1, T2>::MultType;
 
    const MT r( lhs[0]*rhs[0] - lhs[1]*rhs[1] - lhs[2]*rhs[2] - lhs[3]*rhs[3] );
    const MT i( lhs[0]*rhs[1] + lhs[1]*rhs[0] + lhs[2]*rhs[3] - lhs[3]*rhs[2] );
@@ -1137,7 +1137,7 @@ using math::Quaternion;
 template<typename T>
 struct VectorTrait< Quaternion<T> >
 {
-   typedef T OutputType;
+   using OutputType = T;
 
    static const uint_t F_SIZE =  4u;
    static T    get( const Quaternion<T> & v, uint_t f )       { return v[f]; }
diff --git a/src/core/math/SqrtTrait.h b/src/core/math/SqrtTrait.h
index 372eebae1..5712e65a0 100644
--- a/src/core/math/SqrtTrait.h
+++ b/src/core/math/SqrtTrait.h
@@ -64,7 +64,7 @@ namespace math {
 template< typename T >
 struct SqrtTrait
 {
-   typedef double Type;  //!< Return type of std::sqrt for integral and double arguments.
+   using Type = double;  //!< Return type of std::sqrt for integral and double arguments.
 };
 //**********************************************************************************************************************
 
@@ -77,7 +77,7 @@ struct SqrtTrait
 template<>
 struct SqrtTrait<float>
 {
-   typedef float Type;  //!< Return type of std::sqrt for float arguments.
+   using Type = float;  //!< Return type of std::sqrt for float arguments.
 };
 /*! \endcond */
 //**********************************************************************************************************************
@@ -91,7 +91,7 @@ struct SqrtTrait<float>
 template<>
 struct SqrtTrait<long double>
 {
-   typedef long double Type;  //!< Return type of std::sqrt for long double arguments.
+   using Type = long double;  //!< Return type of std::sqrt for long double arguments.
 };
 /*! \endcond */
 //**********************************************************************************************************************
diff --git a/src/core/math/Uint.h b/src/core/math/Uint.h
index 3b0ab1721..c5fc28d83 100644
--- a/src/core/math/Uint.h
+++ b/src/core/math/Uint.h
@@ -194,10 +194,10 @@ template<> inline uint_t uintMSBPosition< uint8_t >( uint8_t value ) {
 }
 
 template< uint_t size > struct uintFromBitWidth;
-template<> struct uintFromBitWidth<  8 > { typedef uint8_t  type; };
-template<> struct uintFromBitWidth< 16 > { typedef uint16_t type; };
-template<> struct uintFromBitWidth< 32 > { typedef uint32_t type; };
-template<> struct uintFromBitWidth< 64 > { typedef uint64_t type; };
+template<> struct uintFromBitWidth<  8 > { using type = uint8_t; };
+template<> struct uintFromBitWidth< 16 > { using type = uint16_t; };
+template<> struct uintFromBitWidth< 32 > { using type = uint32_t; };
+template<> struct uintFromBitWidth< 64 > { using type = uint64_t; };
 
 constexpr uint_t leastUnsignedIntegerBitWidth( uint_t width )
 {
@@ -218,7 +218,7 @@ constexpr uint_t leastUnsignedIntegerBitWidth( uint_t width )
 template< uint_t minSize >
 struct leastUnsignedInteger
 {
-   typedef typename uintFromBitWidth< leastUnsignedIntegerBitWidth( minSize ) >::type type;
+   using type = typename uintFromBitWidth<leastUnsignedIntegerBitWidth(minSize)>::type;
 };
 
 /// \cond internal
diff --git a/src/core/math/Utility.h b/src/core/math/Utility.h
index b71ea90e0..87300282b 100644
--- a/src/core/math/Utility.h
+++ b/src/core/math/Utility.h
@@ -346,7 +346,7 @@ inline bool equal_backend<long double>( long double a, long double b )
 template< typename T1, typename T2 >
 inline bool equal( T1 a, T2 b )
 {
-   typedef typename MathTrait<T1,T2>::High High;
+   using High = typename MathTrait<T1, T2>::High;
    return equal_backend<High>( a, b );
 }
 //**********************************************************************************************************************
diff --git a/src/core/math/Vector2.h b/src/core/math/Vector2.h
index c69f7bcc7..00bfabe88 100644
--- a/src/core/math/Vector2.h
+++ b/src/core/math/Vector2.h
@@ -94,10 +94,10 @@ private:
 
 public:
    //**Type definitions****************************************************************************
-   typedef typename SqrtTrait<Type>::Type Length;  //!< Vector length return type.
+   using Length = typename SqrtTrait<Type>::Type;  //!< Vector length return type.
                                                    /*!< Return type of the Vector2<Type>::length
                                                         function. */
-   typedef Type value_type;
+   using value_type = Type;
    //*******************************************************************************************************************
 
    //**Constructors*****************************************************************************************************
@@ -1670,7 +1670,7 @@ namespace walberla {
    template<typename T>
    struct VectorTrait< Vector2<T> >
    {
-      typedef T OutputType;
+      using OutputType = T;
 
       static const uint_t F_SIZE =  2u;
       static   T  get( const Vector2<T> & v, uint_t f )       { return v[f]; }
diff --git a/src/core/math/Vector3.h b/src/core/math/Vector3.h
index 72b6a45fa..c47fd4a66 100644
--- a/src/core/math/Vector3.h
+++ b/src/core/math/Vector3.h
@@ -94,10 +94,10 @@ private:
 
 public:
    //**Type definitions****************************************************************************
-   typedef typename SqrtTrait<Type>::Type Length;  //!< Vector length return type.
+   using Length = typename SqrtTrait<Type>::Type;  //!< Vector length return type.
                                                    /*!< Return type of the Vector3<Type>::length
                                                         function. */
-   typedef Type value_type;
+   using value_type = Type;
    //*******************************************************************************************************************
 
    //**Constructors*****************************************************************************************************
@@ -1926,7 +1926,7 @@ namespace walberla {
 template<typename T>
 struct VectorTrait< Vector3<T> >
 {
-   typedef T OutputType;
+   using OutputType = T;
 
    static const uint_t F_SIZE =  3u;
    static T    get( const Vector3<T> & v, uint_t f )       { return v[f]; }
diff --git a/src/core/math/equation_system/EquationSystem.h b/src/core/math/equation_system/EquationSystem.h
index e78df0345..82d17a0f7 100644
--- a/src/core/math/equation_system/EquationSystem.h
+++ b/src/core/math/equation_system/EquationSystem.h
@@ -67,16 +67,16 @@ namespace math {
       // forward declaration of EquationParser class
       friend class EquationParser;
 
-      typedef boost::adjacency_list<boost::vecS, boost::vecS, boost::undirectedS> EqGraph;
+      using EqGraph = boost::adjacency_list<boost::vecS, boost::vecS, boost::undirectedS>;
 
-      typedef std::map<std::string, EqGraph::vertex_descriptor> EqVertexMap;
-      typedef std::map<std::string, EqGraph::vertex_descriptor> VarVertexMap;
+      using EqVertexMap = std::map<std::string, EqGraph::vertex_descriptor>;
+      using VarVertexMap = std::map<std::string, EqGraph::vertex_descriptor>;
 
-      typedef std::map<std::string, EqGraph::vertex_descriptor>::const_iterator EqVertexMapIt;
-      typedef std::map<std::string, EqGraph::vertex_descriptor>::const_iterator VarVertexMapIt;
+      using EqVertexMapIt = std::map<std::string, EqGraph::vertex_descriptor>::const_iterator;
+      using VarVertexMapIt = std::map<std::string, EqGraph::vertex_descriptor>::const_iterator;
 
-      typedef std::map<std::string, EquationPtr>                 EqMap;
-      typedef std::map<std::string, EquationPtr>::const_iterator EqMapIt;
+      using EqMap = std::map<std::string, EquationPtr>;
+      using EqMapIt = std::map<std::string, EquationPtr>::const_iterator;
 
       EqMap       eqMap_;
       EqGraph     eqGraph_;
@@ -121,7 +121,7 @@ namespace math {
 
    };
 
-   typedef shared_ptr< EquationSystem > EquationSystemPtr;
+   using EquationSystemPtr = shared_ptr<EquationSystem>;
 
 } // namespace math
 } // namespace walberla
diff --git a/src/core/math/equation_system/FwdEquation.h b/src/core/math/equation_system/FwdEquation.h
index 37787456b..21fbb523c 100644
--- a/src/core/math/equation_system/FwdEquation.h
+++ b/src/core/math/equation_system/FwdEquation.h
@@ -41,13 +41,13 @@ namespace math {
    };
 
    class Node;
-   typedef std::shared_ptr<Node> NodePtr;
+   using NodePtr = std::shared_ptr<Node>;
 
    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // EQUATION
    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    class Equation;
-   typedef std::shared_ptr< Equation > EquationPtr;
+   using EquationPtr = std::shared_ptr<Equation>;
 
 } // namespace math
 } // namespace walberla
diff --git a/src/core/math/equation_system/FwdVariable.h b/src/core/math/equation_system/FwdVariable.h
index 76715f973..bb9e8edf5 100644
--- a/src/core/math/equation_system/FwdVariable.h
+++ b/src/core/math/equation_system/FwdVariable.h
@@ -33,10 +33,10 @@ namespace math {
 
    class Var;
 
-   typedef std::shared_ptr<Var> VarPtr;
+   using VarPtr = std::shared_ptr<Var>;
 
-   typedef std::map<std::string, VarPtr>                 VarMap;
-   typedef std::map<std::string, VarPtr>::const_iterator VarMapIt;
+   using VarMap = std::map<std::string, VarPtr>;
+   using VarMapIt = std::map<std::string, VarPtr>::const_iterator;
 
 } // namespace math
 } // namespace walberla
diff --git a/src/core/mpi/BufferDataTypeExtensions.h b/src/core/mpi/BufferDataTypeExtensions.h
index 69f3e52e9..0af757246 100644
--- a/src/core/mpi/BufferDataTypeExtensions.h
+++ b/src/core/mpi/BufferDataTypeExtensions.h
@@ -266,7 +266,7 @@ template< typename T,    // Element type of SendBuffer
 GenericSendBuffer<T,G>& packBoolVectorWithoutSize(GenericSendBuffer<T,G> & buf, const std::vector<bool> & bools )
 {
    // Use an unsigned type at least as large as the SendBuffer base type as container for the bools
-   typedef typename math::leastUnsignedInteger< std::numeric_limits<T>::digits >::type ContainerType;
+   using ContainerType = typename math::leastUnsignedInteger<std::numeric_limits<T>::digits>::type;
    static const size_t NUM_BITS = std::numeric_limits<ContainerType>::digits;
 
    auto it = bools.begin();
@@ -287,7 +287,7 @@ template< typename T >    // Element type  of RecvBuffer
 GenericRecvBuffer<T>& unpackBoolVectorWithoutSize(GenericRecvBuffer<T> & buf, std::vector<bool> & bools, size_t size )
 {
    // Use an unsigned type at least as large as the RecvBuffer base type as container for the bools
-   typedef typename math::leastUnsignedInteger<std::numeric_limits<T>::digits>::type ContainerType;
+   using ContainerType = typename math::leastUnsignedInteger<std::numeric_limits<T>::digits>::type;
    static const size_t NUM_BITS = std::numeric_limits<ContainerType>::digits;
 
    bools.resize(size);
diff --git a/src/core/mpi/BufferSystem.h b/src/core/mpi/BufferSystem.h
index ea1037b13..f2b0cbf43 100644
--- a/src/core/mpi/BufferSystem.h
+++ b/src/core/mpi/BufferSystem.h
@@ -211,7 +211,7 @@ public:
    //* Rank Ranges     *************************************************************************************************
    /*! \name Rank Ranges  */
    //@{
-   typedef std::set<MPIRank> RankRange;
+   using RankRange = std::set<MPIRank>;
    static RankRange noRanks();
    static RankRange allRanks();
    static RankRange allRanksButRoot();
@@ -264,7 +264,7 @@ protected:
    int64_t numberOfReceives_ = 0; ///< number of communication partners during last receive
 };
 
-typedef GenericBufferSystem<RecvBuffer, SendBuffer> BufferSystem;
+using BufferSystem = GenericBufferSystem<RecvBuffer, SendBuffer>;
 
 } // namespace mpi
 } // namespace walberla
diff --git a/src/core/mpi/MPIWrapper.h b/src/core/mpi/MPIWrapper.h
index 233baa6bb..cd250cb97 100644
--- a/src/core/mpi/MPIWrapper.h
+++ b/src/core/mpi/MPIWrapper.h
@@ -89,16 +89,16 @@ namespace walberla {
 namespace mpistubs {
 
 
-typedef int MPI_Comm;
-typedef int MPI_Datatype;
-typedef int MPI_Group;
-typedef int MPI_Op;
-typedef int MPI_Request;
-typedef int MPI_File;
-typedef int MPI_Offset;
-typedef int MPI_Info;
-typedef int MPI_Aint;
-typedef void (MPI_User_function) (void* a, void* b, int* len, MPI_Datatype*);
+using MPI_Comm = int;
+using MPI_Datatype = int;
+using MPI_Group = int;
+using MPI_Op = int;
+using MPI_Request = int;
+using MPI_File = int;
+using MPI_Offset = int;
+using MPI_Info = int;
+using MPI_Aint = int;
+using MPI_User_function = void (void *, void *, int *, MPI_Datatype *);
 
 struct MPI_Status
 {
diff --git a/src/core/mpi/OpenMPBufferSystem.h b/src/core/mpi/OpenMPBufferSystem.h
index 232f54f42..660a5cceb 100644
--- a/src/core/mpi/OpenMPBufferSystem.h
+++ b/src/core/mpi/OpenMPBufferSystem.h
@@ -100,7 +100,7 @@ private:
    void waitSerial();
 };
 
-typedef GenericOpenMPBufferSystem<RecvBuffer, SendBuffer> OpenMPBufferSystem;
+using OpenMPBufferSystem = GenericOpenMPBufferSystem<RecvBuffer, SendBuffer>;
 
 
 } // namespace mpi
diff --git a/src/core/mpi/RecvBuffer.h b/src/core/mpi/RecvBuffer.h
index b3dacb3db..0b3df4abf 100644
--- a/src/core/mpi/RecvBuffer.h
+++ b/src/core/mpi/RecvBuffer.h
@@ -81,7 +81,7 @@ class GenericRecvBuffer
 {
 public:
    //**Type definitions*************************************************************************************************
-   typedef T  ElementType;  //!< Type of the receive buffer elements.
+   using ElementType = T;  //!< Type of the receive buffer elements.
    //*******************************************************************************************************************
 
    //**Constructors*****************************************************************************************************
@@ -173,7 +173,7 @@ private:
 };
 //**********************************************************************************************************************
 
-typedef GenericRecvBuffer<> RecvBuffer;
+using RecvBuffer = GenericRecvBuffer<>;
 
 
 
diff --git a/src/core/mpi/SendBuffer.h b/src/core/mpi/SendBuffer.h
index 60d8e471f..3fac958a7 100644
--- a/src/core/mpi/SendBuffer.h
+++ b/src/core/mpi/SendBuffer.h
@@ -87,7 +87,7 @@ public:
    {
    public:
       static_assert( std::is_fundamental<VT>::value, "only fundamental data types are allowed");
-      typedef VT value_type;
+      using value_type = VT;
 
       Ptr(GenericSendBuffer<T, G>& buffer, const std::ptrdiff_t offset, const size_t length)
          : buffer_(buffer), offset_(offset), length_(length) {}
@@ -102,7 +102,7 @@ public:
    };
 
    //**Type definitions*************************************************************************************************
-   typedef T  ElementType;  //!< Type of the receive buffer elements.
+   using ElementType = T;  //!< Type of the receive buffer elements.
    //*******************************************************************************************************************
 
    //**Constructors*****************************************************************************************************
@@ -216,7 +216,7 @@ private:
 };
 //**********************************************************************************************************************
 
-typedef GenericSendBuffer<> SendBuffer;
+using SendBuffer = GenericSendBuffer<>;
 
 
 //======================================================================================================================
diff --git a/src/core/timing/Timer.h b/src/core/timing/Timer.h
index f25602bfa..15a963265 100644
--- a/src/core/timing/Timer.h
+++ b/src/core/timing/Timer.h
@@ -105,7 +105,7 @@ class Timer
    friend mpi::GenericRecvBuffer<T>& operator>>( mpi::GenericRecvBuffer<T> & buf, Timer<TP2> & t );
 public:
    //**Type definitions*************************************************************************************************
-   typedef TP  TimingPolicy;  //!< Timing policy of the Timer.
+   using TimingPolicy = TP;  //!< Timing policy of the Timer.
    //*******************************************************************************************************************
 
    //**Constructor******************************************************************************************************
@@ -589,7 +589,7 @@ mpi::GenericRecvBuffer<T>& operator>>( mpi::GenericRecvBuffer<T> & buf, Timer<TP
 
 } //namespace timing
 
-typedef timing::Timer<timing::CpuPolicy>  CpuTimer;
-typedef timing::Timer<timing::WcPolicy>    WcTimer;
+using CpuTimer = timing::Timer<timing::CpuPolicy>;
+using WcTimer = timing::Timer<timing::WcPolicy>;
 
 } // namespace walberla
diff --git a/src/core/timing/TimingNode.h b/src/core/timing/TimingNode.h
index a99dfe05b..6682ab626 100644
--- a/src/core/timing/TimingNode.h
+++ b/src/core/timing/TimingNode.h
@@ -493,7 +493,7 @@ void addRemainderNodes(timing::TimingNode<TP> &tn) {
 } /// namespace internal
 }
 
-typedef timing::TimingNode<timing::WcPolicy>  WcTimingNode;
-typedef timing::TimingNode<timing::CpuPolicy> CpuTimingNode;
+using WcTimingNode = timing::TimingNode<timing::WcPolicy>;
+using CpuTimingNode = timing::TimingNode<timing::CpuPolicy>;
 
 }
diff --git a/src/core/timing/TimingPool.h b/src/core/timing/TimingPool.h
index b927151ac..5e41c14d7 100644
--- a/src/core/timing/TimingPool.h
+++ b/src/core/timing/TimingPool.h
@@ -70,8 +70,8 @@ public:
    //** Access to Timer Objects ****************************************************************************************
    /*! \name Access to Timer Objects */
    //@{
-   typedef typename std::map<std::string, Timer<TP> >::iterator       iterator;
-   typedef typename std::map<std::string, Timer<TP> >::const_iterator const_iterator;
+   using iterator = typename std::map<std::string, Timer<TP>>::iterator;
+   using const_iterator = typename std::map<std::string, Timer<TP>>::const_iterator;
 
          iterator begin()       { return timerMap_.begin(); }
    const_iterator begin() const { return timerMap_.begin(); }
@@ -248,6 +248,6 @@ namespace timing {
 //======================================================================================================================
 
 namespace walberla {
-   typedef timing::TimingPool<timing::WcPolicy>  WcTimingPool;
-   typedef timing::TimingPool<timing::CpuPolicy> CpuTimingPool;
+   using WcTimingPool = timing::TimingPool<timing::WcPolicy>;
+   using CpuTimingPool = timing::TimingPool<timing::CpuPolicy>;
 }
diff --git a/src/core/timing/TimingTree.h b/src/core/timing/TimingTree.h
index 7fe833b1e..e7fcda960 100644
--- a/src/core/timing/TimingTree.h
+++ b/src/core/timing/TimingTree.h
@@ -251,6 +251,6 @@ TimingTree< TP > TimingTree< TP >::getCopyWithRemainder() const
 
 }
 
-typedef timing::TimingTree<timing::WcPolicy>  WcTimingTree;
-typedef timing::TimingTree<timing::CpuPolicy> CpuTimingTree;
+using WcTimingTree = timing::TimingTree<timing::WcPolicy>;
+using CpuTimingTree = timing::TimingTree<timing::CpuPolicy>;
 }
diff --git a/src/core/uid/SUID.h b/src/core/uid/SUID.h
index 329abb0fa..21b48ca26 100644
--- a/src/core/uid/SUID.h
+++ b/src/core/uid/SUID.h
@@ -33,7 +33,7 @@ namespace uid {
 namespace suidgenerator {
 class S : public IndexGenerator< S, size_t >{}; ///< generator class for unified state/selection UIDs
 }
-typedef UID< suidgenerator::S > SUID;           ///< unified state/selection UID
+using SUID = UID<suidgenerator::S>;           ///< unified state/selection UID
 
 
 } // namespace uid
diff --git a/src/core/uid/UID.h b/src/core/uid/UID.h
index f90f7f9de..89a270e4c 100644
--- a/src/core/uid/UID.h
+++ b/src/core/uid/UID.h
@@ -74,7 +74,7 @@ template< typename T > class UID {
 
 public:
 
-   typedef typename T::uint_type uint_type;
+   using uint_type = typename T::uint_type;
 
 
             inline UID( const char* const  identifier, const bool newUid = false, const bool appendUIDtoIdentifier = false );
diff --git a/src/core/uid/UIDGenerators.h b/src/core/uid/UIDGenerators.h
index 0e913b16a..4d4a333f9 100644
--- a/src/core/uid/UIDGenerators.h
+++ b/src/core/uid/UIDGenerators.h
@@ -87,8 +87,8 @@ template< typename T, typename UINT >
 class IndexGenerator {
 public:
 
-   typedef UINT uint_type;
-   typedef index_generated_tag generator_type;
+   using uint_type = UINT;
+   using generator_type = index_generated_tag;
 
    static uint_type generateUID() {
       static uint_type uid(0);
@@ -123,8 +123,8 @@ template< typename T, typename UINT >
 class StandardGenerator {
 public:
 
-   typedef UINT uint_type;
-   typedef standard_generated_tag generator_type;
+   using uint_type = UINT;
+   using generator_type = standard_generated_tag;
 
    static uint_type generateUID() {
       static uint_type uid(0);
@@ -216,8 +216,8 @@ template< typename T, typename UINT >
 class BitGenerator {
 public:
 
-   typedef UINT uint_type;
-   typedef bit_generated_tag generator_type;
+   using uint_type = UINT;
+   using generator_type = bit_generated_tag;
 
    static uint_type generateUID() {
       static uint_type uid(1);
@@ -262,8 +262,8 @@ template< typename T, typename UINT >
 class SingletonGenerator {
 public:
 
-   typedef UINT uint_type;
-   typedef singleton_generated_tag generator_type;
+   using uint_type = UINT;
+   using generator_type = singleton_generated_tag;
 
    static uint_type generateUID() {
       static uint_type uid(0);
diff --git a/src/domain_decomposition/BlockDataHandling.h b/src/domain_decomposition/BlockDataHandling.h
index 4b07594e0..0720eb572 100644
--- a/src/domain_decomposition/BlockDataHandling.h
+++ b/src/domain_decomposition/BlockDataHandling.h
@@ -45,7 +45,7 @@ template< typename T >
 class BlockDataHandling
 {
 public:
-   typedef T value_type;
+   using value_type = T;
 
    virtual ~BlockDataHandling() = default;
    
@@ -82,7 +82,7 @@ class BlockDataHandlingFunctionAdaptor : public BlockDataHandling<T>
 {
 public:
 
-   typedef std::function< T* ( IBlock * const block ) > Function;
+   using Function = std::function<T *(IBlock *const)>;
 
    BlockDataHandlingFunctionAdaptor( const Function & function ) : function_( function ) {}
 
@@ -206,7 +206,7 @@ private:
 
 
 
-typedef selectable::SetSelectableObject< shared_ptr< BlockDataHandlingWrapper >, SUID > SelectableBlockDataHandlingWrapper;
+using SelectableBlockDataHandlingWrapper = selectable::SetSelectableObject<shared_ptr<BlockDataHandlingWrapper>, SUID>;
 
 
 
diff --git a/src/domain_decomposition/BlockStorage.h b/src/domain_decomposition/BlockStorage.h
index 0d6dfc6c1..b59f7b30f 100644
--- a/src/domain_decomposition/BlockStorage.h
+++ b/src/domain_decomposition/BlockStorage.h
@@ -73,7 +73,7 @@ class BlockStorage : private NonCopyable {
 
 public:
 
-   typedef std::map< IBlockID::IDType, IBlock* > BlockContainerType ;
+   using BlockContainerType = std::map<IBlockID::IDType, IBlock *> ;
 
    class const_iterator;
 
diff --git a/src/domain_decomposition/IBlock.h b/src/domain_decomposition/IBlock.h
index 27c0b894f..06e48b690 100644
--- a/src/domain_decomposition/IBlock.h
+++ b/src/domain_decomposition/IBlock.h
@@ -207,7 +207,7 @@ class IBlock : private NonCopyable
 {
 public:
 
-   typedef internal::BlockData BlockData;
+   using BlockData = internal::BlockData;
 
    friend class           BlockStorage;
    friend class StructuredBlockStorage;
diff --git a/src/domain_decomposition/IBlockID.h b/src/domain_decomposition/IBlockID.h
index e73a50101..5e1cb771d 100644
--- a/src/domain_decomposition/IBlockID.h
+++ b/src/domain_decomposition/IBlockID.h
@@ -44,7 +44,7 @@ class IBlockID {
 
 public:
    /// ID type which can be used as a key in a map
-   typedef uint64_t IDType;
+   using IDType = uint64_t;
 
    virtual ~IBlockID() = default;
 
diff --git a/src/domain_decomposition/StructuredBlockStorage.h b/src/domain_decomposition/StructuredBlockStorage.h
index 8a44ebfd8..574634255 100644
--- a/src/domain_decomposition/StructuredBlockStorage.h
+++ b/src/domain_decomposition/StructuredBlockStorage.h
@@ -121,8 +121,8 @@ public:
       internal::SelectableBlockDataHandlingWrapper dataHandling_;
    };
 
-   typedef BlockStorage::const_iterator const_iterator;
-   typedef BlockStorage::iterator             iterator;
+   using const_iterator = BlockStorage::const_iterator;
+   using iterator = BlockStorage::iterator;
 
    const BlockStorage& getBlockStorage() const { return *blockStorage_; }
          BlockStorage& getBlockStorage()       { return *blockStorage_; }
diff --git a/src/fft/Fft.h b/src/fft/Fft.h
index 5e4372b1c..e3219e461 100644
--- a/src/fft/Fft.h
+++ b/src/fft/Fft.h
@@ -35,7 +35,7 @@ class FourierTransform
       typedef std::unique_ptr<pfft_complex[], std::function<void(pfft_complex*)> > FFTComplex;
       typedef std::unique_ptr<std::remove_pointer<pfft_plan>::type, std::function<void(pfft_plan)> > FFTPlan;
 #else
-      typedef std::unique_ptr<double[], std::function<void(double*)> > FFTReal;
+      using FFTReal = std::unique_ptr<double [], std::function<void (double *)>>;
       typedef std::unique_ptr<fftw_complex[], std::function<void(fftw_complex*)> > FFTComplex;
       typedef std::unique_ptr<std::remove_pointer<fftw_plan>::type, std::function<void(fftw_plan)> > FFTPlan;
 #endif
diff --git a/src/field/AccuracyEvaluation.h b/src/field/AccuracyEvaluation.h
index 036803b43..77fd10c4d 100644
--- a/src/field/AccuracyEvaluation.h
+++ b/src/field/AccuracyEvaluation.h
@@ -332,7 +332,7 @@ shared_ptr< AccuracyEvaluation< Field_T, SolutionFunction_T > > makeAccuracyEval
                                                                                         const Set<SUID> & requiredSelectors = Set<SUID>::emptySet(),
                                                                                         const Set<SUID> & incompatibleSelectors = Set<SUID>::emptySet() )
 {
-   typedef AccuracyEvaluation< Field_T, SolutionFunction_T > AE_T;
+   using AE_T = AccuracyEvaluation<Field_T, SolutionFunction_T>;
    return shared_ptr< AE_T >( new AE_T( blocks, fieldId, solution, plotFrequency, logFrequency, requiredSelectors, incompatibleSelectors ) );
 }
 
@@ -345,7 +345,7 @@ makeAccuracyEvaluation( const weak_ptr< StructuredBlockStorage > & blocks,
                         const Set<SUID> & requiredSelectors = Set<SUID>::emptySet(),
                         const Set<SUID> & incompatibleSelectors = Set<SUID>::emptySet() )
 {
-   typedef AccuracyEvaluation< Field_T, SolutionFunction_T, FlagFieldEvaluationFilter<FlagField_T> > AE_T;
+   using AE_T = AccuracyEvaluation<Field_T, SolutionFunction_T, FlagFieldEvaluationFilter<FlagField_T>>;
    return shared_ptr< AE_T >( new AE_T( blocks, fieldId, solution, FlagFieldEvaluationFilter<FlagField_T>( flagFieldId, cellsToEvaluate ),
                                         plotFrequency, logFrequency, requiredSelectors, incompatibleSelectors ) );
 }
@@ -358,7 +358,7 @@ makeAccuracyEvaluation( const weak_ptr< StructuredBlockStorage > & blocks, const
                         const Set<SUID> & requiredSelectors = Set<SUID>::emptySet(),
                         const Set<SUID> & incompatibleSelectors = Set<SUID>::emptySet() )
 {
-   typedef AccuracyEvaluation< Field_T, SolutionFunction_T, Filter_T > AE_T;
+   using AE_T = AccuracyEvaluation<Field_T, SolutionFunction_T, Filter_T>;
    return shared_ptr< AE_T >( new AE_T( blocks, fieldId, solution, filter, plotFrequency, logFrequency, requiredSelectors, incompatibleSelectors ) );
 }
 
@@ -419,7 +419,7 @@ shared_ptr< AccuracyEvaluation< Field_T, SolutionFunction_T > > makeAccuracyEval
                                                                                         const Set<SUID> & incompatibleSelectors = Set<SUID>::emptySet() )
 {
    WALBERLA_FIELD_MAKE_ACCURACY_EVALUATION_CONFIG_PARSER( config )
-   typedef AccuracyEvaluation< Field_T, SolutionFunction_T > AE_T;
+   using AE_T = AccuracyEvaluation<Field_T, SolutionFunction_T>;
    auto evaluation = shared_ptr< AE_T >( new AE_T( blocks, fieldId, solution, defaultPlotFrequency, defaultLogFrequency, requiredSelectors, incompatibleSelectors ) );
    WALBERLA_FIELD_MAKE_ACCURACY_EVALUATION_SET_AND_RETURN()
 }
@@ -435,7 +435,7 @@ makeAccuracyEvaluation( const Config_T & config,
                         const Set<SUID> & incompatibleSelectors = Set<SUID>::emptySet() )
 {
    WALBERLA_FIELD_MAKE_ACCURACY_EVALUATION_CONFIG_PARSER( config )
-   typedef AccuracyEvaluation< Field_T, SolutionFunction_T, FlagFieldEvaluationFilter<FlagField_T> > AE_T;
+   using AE_T = AccuracyEvaluation<Field_T, SolutionFunction_T, FlagFieldEvaluationFilter<FlagField_T>>;
    auto evaluation = shared_ptr< AE_T >( new AE_T( blocks, fieldId, solution, FlagFieldEvaluationFilter<FlagField_T>( flagFieldId, cellsToEvaluate ),
                                                    defaultPlotFrequency, defaultLogFrequency, requiredSelectors, incompatibleSelectors ) );
    WALBERLA_FIELD_MAKE_ACCURACY_EVALUATION_SET_AND_RETURN()
@@ -451,7 +451,7 @@ makeAccuracyEvaluation( const Config_T & config,
                         const Set<SUID> & incompatibleSelectors = Set<SUID>::emptySet() )
 {
    WALBERLA_FIELD_MAKE_ACCURACY_EVALUATION_CONFIG_PARSER( config )
-   typedef AccuracyEvaluation< Field_T, SolutionFunction_T, Filter_T > AE_T;
+   using AE_T = AccuracyEvaluation<Field_T, SolutionFunction_T, Filter_T>;
    auto evaluation = shared_ptr< AE_T >( new AE_T( blocks, fieldId, solution, filter,
                                                    defaultPlotFrequency, defaultLogFrequency, requiredSelectors, incompatibleSelectors ) );
    WALBERLA_FIELD_MAKE_ACCURACY_EVALUATION_SET_AND_RETURN()
diff --git a/src/field/AccuracyEvaluationLinePlot.h b/src/field/AccuracyEvaluationLinePlot.h
index 51a18da51..a0c221860 100644
--- a/src/field/AccuracyEvaluationLinePlot.h
+++ b/src/field/AccuracyEvaluationLinePlot.h
@@ -356,7 +356,7 @@ void AccuracyEvaluationLinePlot< Field_T, SolutionFunction_T, Filter_T >::operat
 
    WALBERLA_ROOT_SECTION()
    {
-      typedef typename Field_T::value_type Value_T;
+      using Value_T = typename Field_T::value_type;
       
       std::vector< internal::AccuracyEvaluationPlotData<Value_T> > points;
       while( !buffer.isEmpty() )
@@ -398,7 +398,7 @@ shared_ptr< AccuracyEvaluationLinePlot< Field_T, SolutionFunction_T > > makeAccu
                                                                                                         const Set<SUID> & requiredSelectors = Set<SUID>::emptySet(),
                                                                                                         const Set<SUID> & incompatibleSelectors = Set<SUID>::emptySet() )
 {
-   typedef AccuracyEvaluationLinePlot< Field_T, SolutionFunction_T > AE_T;
+   using AE_T = AccuracyEvaluationLinePlot<Field_T, SolutionFunction_T>;
    return shared_ptr< AE_T >( new AE_T( blocks, fieldId, solution, yAxis, requiredSelectors, incompatibleSelectors ) );
 }
 
@@ -411,7 +411,7 @@ makeAccuracyEvaluationLinePlot( const weak_ptr< StructuredBlockStorage > & block
                                 const Set<SUID> & requiredSelectors = Set<SUID>::emptySet(),
                                 const Set<SUID> & incompatibleSelectors = Set<SUID>::emptySet() )
 {
-   typedef AccuracyEvaluationLinePlot< Field_T, SolutionFunction_T, FlagFieldEvaluationFilter<FlagField_T> > AE_T;
+   using AE_T = AccuracyEvaluationLinePlot<Field_T, SolutionFunction_T, FlagFieldEvaluationFilter<FlagField_T>>;
    return shared_ptr< AE_T >( new AE_T( blocks, fieldId, solution, FlagFieldEvaluationFilter<FlagField_T>( flagFieldId, cellsToEvaluate ),
                                         yAxis, requiredSelectors, incompatibleSelectors ) );
 }
@@ -424,7 +424,7 @@ makeAccuracyEvaluationLinePlot( const weak_ptr< StructuredBlockStorage > & block
                                 const Set<SUID> & requiredSelectors = Set<SUID>::emptySet(),
                                 const Set<SUID> & incompatibleSelectors = Set<SUID>::emptySet() )
 {
-   typedef AccuracyEvaluationLinePlot< Field_T, SolutionFunction_T, Filter_T > AE_T;
+   using AE_T = AccuracyEvaluationLinePlot<Field_T, SolutionFunction_T, Filter_T>;
    return shared_ptr< AE_T >( new AE_T( blocks, fieldId, solution, filter, yAxis, requiredSelectors, incompatibleSelectors ) );
 }
 
@@ -491,7 +491,7 @@ makeAccuracyEvaluationLinePlot( const Config_T & config,
                                 const Set<SUID> & incompatibleSelectors = Set<SUID>::emptySet() )
 {
    WALBERLA_FIELD_MAKE_ACCURACY_EVALUATION_LINE_PLOT_CONFIG_PARSER( config )
-   typedef AccuracyEvaluationLinePlot< Field_T, SolutionFunction_T > AE_T;
+   using AE_T = AccuracyEvaluationLinePlot<Field_T, SolutionFunction_T>;
    auto evaluation = shared_ptr< AE_T >( new AE_T( blocks, fieldId, solution, defaultYAxis, requiredSelectors, incompatibleSelectors ) );
    WALBERLA_FIELD_MAKE_ACCURACY_EVALUATION_LINE_PLOT_SET_AND_RETURN()
 }
@@ -507,7 +507,7 @@ makeAccuracyEvaluationLinePlot( const Config_T & config,
                                 const Set<SUID> & incompatibleSelectors = Set<SUID>::emptySet() )
 {
    WALBERLA_FIELD_MAKE_ACCURACY_EVALUATION_LINE_PLOT_CONFIG_PARSER( config )
-   typedef AccuracyEvaluationLinePlot< Field_T, SolutionFunction_T, FlagFieldEvaluationFilter<FlagField_T> > AE_T;
+   using AE_T = AccuracyEvaluationLinePlot<Field_T, SolutionFunction_T, FlagFieldEvaluationFilter<FlagField_T>>;
    auto evaluation = shared_ptr< AE_T >( new AE_T( blocks, fieldId, solution, FlagFieldEvaluationFilter<FlagField_T>( flagFieldId, cellsToEvaluate ),
                                                    defaultYAxis, requiredSelectors, incompatibleSelectors ) );
    WALBERLA_FIELD_MAKE_ACCURACY_EVALUATION_LINE_PLOT_SET_AND_RETURN()
@@ -523,7 +523,7 @@ makeAccuracyEvaluationLinePlot( const Config_T & config,
                                 const Set<SUID> & incompatibleSelectors = Set<SUID>::emptySet() )
 {
    WALBERLA_FIELD_MAKE_ACCURACY_EVALUATION_LINE_PLOT_CONFIG_PARSER( config )
-   typedef AccuracyEvaluationLinePlot< Field_T, SolutionFunction_T, Filter_T > AE_T;
+   using AE_T = AccuracyEvaluationLinePlot<Field_T, SolutionFunction_T, Filter_T>;
    auto evaluation = shared_ptr< AE_T >( new AE_T( blocks, fieldId, solution, filter, defaultYAxis, requiredSelectors, incompatibleSelectors ) );
    WALBERLA_FIELD_MAKE_ACCURACY_EVALUATION_LINE_PLOT_SET_AND_RETURN()
 }
@@ -642,7 +642,7 @@ makeAccuracyEvaluationLinePlotter( const shared_ptr< AccuracyEvaluationLinePlot_
                                    const std::string & filename = internal::accuracyEvaluationLinePlotterFilename,
                                    const std::string & fileExtension = internal::accuracyEvaluationLinePlotterExtension )
 {
-   typedef AccuracyEvaluationLinePlotter< AccuracyEvaluationLinePlot_T > AE_T;
+   using AE_T = AccuracyEvaluationLinePlotter<AccuracyEvaluationLinePlot_T>;
    return shared_ptr< AE_T >( new AE_T( plot, evaluationFrequency, filename, fileExtension ) );
 }
 
@@ -686,7 +686,7 @@ makeAccuracyEvaluationLinePlotter( const Config_T & config,
    std::string defaultFilename( internal::accuracyEvaluationLinePlotterFilename );
    std::string defaultFileExtension( internal::accuracyEvaluationLinePlotterExtension );
    internal::accuracyEvaluationLinePlotterConfigParser( config, configBlockName, defaultEvaluationFrequency, defaultFilename, defaultFileExtension );
-   typedef AccuracyEvaluationLinePlotter< AccuracyEvaluationLinePlot_T > AE_T;
+   using AE_T = AccuracyEvaluationLinePlotter<AccuracyEvaluationLinePlot_T>;
    return shared_ptr< AE_T >( new AE_T( plot, defaultEvaluationFrequency, defaultFilename, defaultFileExtension ) );
 }
 
diff --git a/src/field/Field.h b/src/field/Field.h
index 7b3103b80..a47fe47e7 100644
--- a/src/field/Field.h
+++ b/src/field/Field.h
@@ -72,24 +72,21 @@ namespace field {
       //** Type Definitions  *******************************************************************************************
       /*! \name Type Definitions */
       //@{
-      typedef T                                    value_type;
+      using value_type = T;
 
-      typedef ForwardFieldIterator<T,fSize_>       iterator;
-      typedef ForwardFieldIterator<const T,fSize_> const_iterator;
+      using iterator = ForwardFieldIterator<T, fSize_>;
+      using const_iterator = ForwardFieldIterator<const T, fSize_>;
 
-      typedef ReverseFieldIterator<T,fSize_>       reverse_iterator;
-      typedef ReverseFieldIterator<const T,fSize_> const_reverse_iterator;
+      using reverse_iterator = ReverseFieldIterator<T, fSize_>;
+      using const_reverse_iterator = ReverseFieldIterator<const T, fSize_>;
 
-      typedef FieldIterator<T,fSize_ >             base_iterator;
-      typedef FieldIterator<const T,fSize_ >       const_base_iterator;
+      using base_iterator = FieldIterator<T, fSize_>;
+      using const_base_iterator = FieldIterator<const T, fSize_>;
 
-      typedef FieldPointer<Field<T,fSize_>, Field<T,fSize_>, T >             Ptr;
-      typedef FieldPointer<Field<T,fSize_>, const Field<T,fSize_>, const T > ConstPtr;
+      using Ptr = FieldPointer<Field<T, fSize_>, Field<T, fSize_>, T>;
+      using ConstPtr = FieldPointer<Field<T, fSize_>, const Field<T, fSize_>, const T>;
 
-      typedef typename std::conditional<VectorTrait<T>::F_SIZE!=0,
-                                        Field<typename VectorTrait<T>::OutputType, VectorTrait<T>::F_SIZE*fSize_>,
-                                        Field<T, fSize_>
-                                        >::type FlattenedField;
+      using FlattenedField = typename std::conditional<VectorTrait<T>::F_SIZE != 0, Field<typename VectorTrait<T>::OutputType, VectorTrait<T>::F_SIZE * fSize_>, Field<T, fSize_>>::type;
 
       static const uint_t F_SIZE = fSize_;
       //@}
@@ -283,8 +280,7 @@ namespace field {
       //** Monitoring  *************************************************************************************************
       /*! \name Monitoring */
       //@{
-      typedef std::function< void ( cell_idx_t x, cell_idx_t y,
-                                      cell_idx_t z, cell_idx_t f, const T & value) > MonitorFunction;
+      using MonitorFunction = std::function<void (cell_idx_t, cell_idx_t, cell_idx_t, cell_idx_t, const T &)>;
 
       void addMonitoringFunction( const MonitorFunction & func );
       //@}
diff --git a/src/field/FlagField.h b/src/field/FlagField.h
index ebf17fb39..a2333770d 100644
--- a/src/field/FlagField.h
+++ b/src/field/FlagField.h
@@ -86,21 +86,21 @@ public:
    //** Type Definitions  **********************************************************************************************
    /*! \name Type Definitions */
    //@{
-   typedef T flag_t;
+   using flag_t = T;
 
-   typedef typename GhostLayerField<T,1>::value_type             value_type;
+   using value_type = typename GhostLayerField<T, 1>::value_type;
 
-   typedef typename GhostLayerField<T,1>::iterator               iterator;
-   typedef typename GhostLayerField<T,1>::const_iterator         const_iterator;
+   using iterator = typename GhostLayerField<T, 1>::iterator;
+   using const_iterator = typename GhostLayerField<T, 1>::const_iterator;
 
-   typedef typename GhostLayerField<T,1>::reverse_iterator       reverse_iterator;
-   typedef typename GhostLayerField<T,1>::const_reverse_iterator const_reverse_iterator;
+   using reverse_iterator = typename GhostLayerField<T, 1>::reverse_iterator;
+   using const_reverse_iterator = typename GhostLayerField<T, 1>::const_reverse_iterator;
 
-   typedef typename Field<T,1>::base_iterator                    base_iterator;
-   typedef typename Field<T,1>::const_base_iterator              const_base_iterator;
+   using base_iterator = typename Field<T, 1>::base_iterator;
+   using const_base_iterator = typename Field<T, 1>::const_base_iterator;
 
-   typedef typename GhostLayerField<T,1>::Ptr                    Ptr;
-   typedef typename GhostLayerField<T,1>::ConstPtr               ConstPtr;
+   using Ptr = typename GhostLayerField<T, 1>::Ptr;
+   using ConstPtr = typename GhostLayerField<T, 1>::ConstPtr;
    //@}
    //*******************************************************************************************************************
 
@@ -123,7 +123,7 @@ public:
    //** Access Functions ***********************************************************************************************
    /*! \name Access Functions */
    //@{
-   typedef cell_idx_t idx;
+   using idx = cell_idx_t;
 
    void addMask    (idx x, idx y, idx z, flag_t m) { WALBERLA_ASSERT(isRegistered(m)); field::addMask( this->get(x,y,z), m ); }
    void addFlag    (idx x, idx y, idx z, flag_t f) { WALBERLA_ASSERT(isRegistered(f)); field::addFlag( this->get(x,y,z), f ); }
diff --git a/src/field/FlagField.impl.h b/src/field/FlagField.impl.h
index bc2c5e950..4e32e312c 100644
--- a/src/field/FlagField.impl.h
+++ b/src/field/FlagField.impl.h
@@ -489,7 +489,7 @@ namespace field {
     template<class Sten, typename FieldPtrOrIterator>
     inline bool isFlagInNeighborhood(const FieldPtrOrIterator & i, typename FieldPtrOrIterator::value_type mask)
     {
-       typedef typename std::remove_const< typename FieldPtrOrIterator::value_type >::type T;
+       using T = typename std::remove_const<typename FieldPtrOrIterator::value_type>::type;
 
        static_assert( (std::is_same< T,uint8_t >::value ||
                        std::is_same< T,uint16_t>::value ||
@@ -512,7 +512,7 @@ namespace field {
     inline typename std::remove_const<typename FieldPtrOrIterator::value_type>::type
        getOredNeighborhood(const FieldPtrOrIterator & i)
     {
-       typedef typename std::remove_const<typename FieldPtrOrIterator::value_type>::type RetType;
+       using RetType = typename std::remove_const<typename FieldPtrOrIterator::value_type>::type;
 
        RetType flag = 0;
        for( auto d = Sten::beginNoCenter(); d != Sten::end(); ++d ) {
diff --git a/src/field/FlagUID.h b/src/field/FlagUID.h
index 3e97fac54..116cb21d0 100644
--- a/src/field/FlagUID.h
+++ b/src/field/FlagUID.h
@@ -30,7 +30,7 @@ namespace field {
 
 ///\cond internal
 class FlagUIDGenerator : public uid::IndexGenerator< FlagUIDGenerator, uint_t >{};
-typedef UID< FlagUIDGenerator > FlagUID;
+using FlagUID = UID<FlagUIDGenerator>;
 ///\endcond
 
 } // namespace field
diff --git a/src/field/GhostLayerField.h b/src/field/GhostLayerField.h
index 9a1a57704..381a06ccd 100644
--- a/src/field/GhostLayerField.h
+++ b/src/field/GhostLayerField.h
@@ -53,24 +53,21 @@ namespace field {
       //** Type Definitions  *******************************************************************************************
       /*! \name Type Definitions */
       //@{
-      typedef typename Field<T,fSize_>::value_type             value_type;
+      using value_type = typename Field<T, fSize_>::value_type;
 
-      typedef typename Field<T,fSize_>::iterator               iterator;
-      typedef typename Field<T,fSize_>::const_iterator         const_iterator;
+      using iterator = typename Field<T, fSize_>::iterator;
+      using const_iterator = typename Field<T, fSize_>::const_iterator;
 
-      typedef typename Field<T,fSize_>::reverse_iterator       reverse_iterator;
-      typedef typename Field<T,fSize_>::const_reverse_iterator const_reverse_iterator;
+      using reverse_iterator = typename Field<T, fSize_>::reverse_iterator;
+      using const_reverse_iterator = typename Field<T, fSize_>::const_reverse_iterator;
 
-      typedef typename Field<T,fSize_>::base_iterator          base_iterator;
-      typedef typename Field<T,fSize_>::const_base_iterator    const_base_iterator;
+      using base_iterator = typename Field<T, fSize_>::base_iterator;
+      using const_base_iterator = typename Field<T, fSize_>::const_base_iterator;
 
-      typedef typename Field<T,fSize_>::Ptr                    Ptr;
-      typedef typename Field<T,fSize_>::ConstPtr               ConstPtr;
+      using Ptr = typename Field<T, fSize_>::Ptr;
+      using ConstPtr = typename Field<T, fSize_>::ConstPtr;
 
-      typedef typename std::conditional<VectorTrait<T>::F_SIZE!=0,
-                                        GhostLayerField<typename VectorTrait<T>::OutputType, VectorTrait<T>::F_SIZE*fSize_>,
-                                        GhostLayerField<T, fSize_>
-                                        >::type FlattenedField;
+      using FlattenedField = typename std::conditional<VectorTrait<T>::F_SIZE != 0, GhostLayerField<typename VectorTrait<T>::OutputType, VectorTrait<T>::F_SIZE * fSize_>, GhostLayerField<T, fSize_>>::type;
       //@}
       //****************************************************************************************************************
 
diff --git a/src/field/MassEvaluation.h b/src/field/MassEvaluation.h
index a6aebf96f..0b9ec26a4 100644
--- a/src/field/MassEvaluation.h
+++ b/src/field/MassEvaluation.h
@@ -297,7 +297,7 @@ shared_ptr< MassEvaluation< DensityField_T > > makeMassEvaluation( const weak_pt
                                                                    const Set<SUID> & requiredSelectors = Set<SUID>::emptySet(),
                                                                    const Set<SUID> & incompatibleSelectors = Set<SUID>::emptySet() )
 {
-   typedef MassEvaluation< DensityField_T > ME_T;
+   using ME_T = MassEvaluation<DensityField_T>;
    return shared_ptr< ME_T >( new ME_T( blocks, fieldId, plotFrequency, logFrequency, filename, requiredSelectors, incompatibleSelectors ) );
 }
 
@@ -310,7 +310,7 @@ makeMassEvaluation( const weak_ptr< StructuredBlockStorage > & blocks,
                     const Set<SUID> & requiredSelectors = Set<SUID>::emptySet(),
                     const Set<SUID> & incompatibleSelectors = Set<SUID>::emptySet() )
 {
-   typedef MassEvaluation< DensityField_T, FlagFieldEvaluationFilter<FlagField_T> > ME_T;
+   using ME_T = MassEvaluation<DensityField_T, FlagFieldEvaluationFilter<FlagField_T>>;
    return shared_ptr< ME_T >( new ME_T( blocks, fieldId, FlagFieldEvaluationFilter<FlagField_T>( flagFieldId, cellsToEvaluate ),
                                         plotFrequency, logFrequency, filename, requiredSelectors, incompatibleSelectors ) );
 }
@@ -323,7 +323,7 @@ shared_ptr< MassEvaluation< DensityField_T, Filter_T > > makeMassEvaluation( con
                                                                              const Set<SUID> & requiredSelectors = Set<SUID>::emptySet(),
                                                                              const Set<SUID> & incompatibleSelectors = Set<SUID>::emptySet() )
 {
-   typedef MassEvaluation< DensityField_T, Filter_T > ME_T;
+   using ME_T = MassEvaluation<DensityField_T, Filter_T>;
    return shared_ptr< ME_T >( new ME_T( blocks, fieldId, filter, plotFrequency, logFrequency, filename, requiredSelectors, incompatibleSelectors ) );
 }
 
@@ -385,7 +385,7 @@ shared_ptr< MassEvaluation< DensityField_T > > makeMassEvaluation( const Config_
                                                                    const Set<SUID> & incompatibleSelectors = Set<SUID>::emptySet() )
 {
    WALBERLA_FIELD_MAKE_MASS_EVALUATION_CONFIG_PARSER( config )
-   typedef MassEvaluation< DensityField_T > ME_T;
+   using ME_T = MassEvaluation<DensityField_T>;
    auto evaluation = shared_ptr< ME_T >( new ME_T( blocks, fieldId, defaultPlotFrequency, defaultLogFrequency, defaultFilename,
                                                    requiredSelectors, incompatibleSelectors ) );
    WALBERLA_FIELD_MAKE_MASS_EVALUATION_SET_AND_RETURN()
@@ -401,7 +401,7 @@ makeMassEvaluation( const Config_T & config,
                     const Set<SUID> & incompatibleSelectors = Set<SUID>::emptySet() )
 {
    WALBERLA_FIELD_MAKE_MASS_EVALUATION_CONFIG_PARSER( config )
-   typedef MassEvaluation< DensityField_T, FlagFieldEvaluationFilter<FlagField_T> > ME_T;
+   using ME_T = MassEvaluation<DensityField_T, FlagFieldEvaluationFilter<FlagField_T>>;
    auto evaluation = shared_ptr< ME_T >( new ME_T( blocks, fieldId, FlagFieldEvaluationFilter<FlagField_T>( flagFieldId, cellsToEvaluate ),
                                                    defaultPlotFrequency, defaultLogFrequency, defaultFilename, requiredSelectors, incompatibleSelectors ) );
    WALBERLA_FIELD_MAKE_MASS_EVALUATION_SET_AND_RETURN()
@@ -416,7 +416,7 @@ shared_ptr< MassEvaluation< DensityField_T, Filter_T > > makeMassEvaluation( con
                                                                              const Set<SUID> & incompatibleSelectors = Set<SUID>::emptySet() )
 {
    WALBERLA_FIELD_MAKE_MASS_EVALUATION_CONFIG_PARSER( config )
-   typedef MassEvaluation< DensityField_T, Filter_T > ME_T;
+   using ME_T = MassEvaluation<DensityField_T, Filter_T>;
    auto evaluation = shared_ptr< ME_T >( new ME_T( blocks, fieldId, filter, defaultPlotFrequency, defaultLogFrequency, defaultFilename,
                                                    requiredSelectors, incompatibleSelectors ) );
    WALBERLA_FIELD_MAKE_MASS_EVALUATION_SET_AND_RETURN()
diff --git a/src/field/StabilityChecker.h b/src/field/StabilityChecker.h
index 85a29e725..fbbc530e7 100644
--- a/src/field/StabilityChecker.h
+++ b/src/field/StabilityChecker.h
@@ -138,7 +138,7 @@ class StabilityChecker
 {
 private:
 
-   typedef std::map< const IBlock *, std::map< Cell, std::set< cell_idx_t > > > BlockCellsMap;
+   using BlockCellsMap = std::map<const IBlock *, std::map<Cell, std::set<cell_idx_t>>>;
 
    ////////////////////////////////
    //  VTK Output Helper Classes //
@@ -510,7 +510,7 @@ shared_ptr< StabilityChecker< Field_T > > makeStabilityChecker( const weak_ptr<
                                                                 const Set<SUID> & requiredSelectors     = Set<SUID>::emptySet(),
                                                                 const Set<SUID> & incompatibleSelectors = Set<SUID>::emptySet() )
 {
-   typedef StabilityChecker< Field_T > SC_T;
+   using SC_T = StabilityChecker<Field_T>;
    return shared_ptr< SC_T >( new SC_T( blocks, fieldId, checkFrequency, outputToStream, outputVTK, requiredSelectors, incompatibleSelectors ) );
 }
 
@@ -523,7 +523,7 @@ makeStabilityChecker( const weak_ptr< StructuredBlockStorage > & blocks,
                       const Set<SUID> & requiredSelectors = Set<SUID>::emptySet(),
                       const Set<SUID> & incompatibleSelectors = Set<SUID>::emptySet() )
 {
-   typedef StabilityChecker< Field_T, FlagFieldEvaluationFilter<FlagField_T> > SC_T;
+   using SC_T = StabilityChecker<Field_T, FlagFieldEvaluationFilter<FlagField_T>>;
    return shared_ptr< SC_T >( new SC_T( blocks, fieldId, FlagFieldEvaluationFilter<FlagField_T>( flagFieldId, cellsToEvaluate ),
                                         checkFrequency, outputToStream, outputVTK, requiredSelectors, incompatibleSelectors ) );
 }
@@ -536,7 +536,7 @@ makeStabilityChecker( const weak_ptr< StructuredBlockStorage > & blocks, const C
                       const Set<SUID> & requiredSelectors     = Set<SUID>::emptySet(),
                       const Set<SUID> & incompatibleSelectors = Set<SUID>::emptySet() )
 {
-   typedef StabilityChecker< Field_T, Filter_T > SC_T;
+   using SC_T = StabilityChecker<Field_T, Filter_T>;
    return shared_ptr< SC_T >( new SC_T( blocks, fieldId, filter, checkFrequency, outputToStream, outputVTK, requiredSelectors, incompatibleSelectors ) );
 }
 
@@ -618,7 +618,7 @@ shared_ptr< StabilityChecker< Field_T > > makeStabilityChecker( const Config_T &
                                                                 const Set<SUID> & incompatibleSelectors = Set<SUID>::emptySet() )
 {
    WALBERLA_FIELD_MAKE_STABILITY_CHECKER_CONFIG_PARSER( config )
-   typedef StabilityChecker< Field_T > SC_T;
+   using SC_T = StabilityChecker<Field_T>;
    auto checker = shared_ptr< SC_T >( new SC_T( blocks, fieldId, defaultCheckFrequency, defaultOutputToStream, defaultOutputVTK, requiredSelectors, incompatibleSelectors ) );
    WALBERLA_FIELD_MAKE_STABILITY_CHECKER_SET_AND_RETURN()
 }
@@ -633,7 +633,7 @@ makeStabilityChecker( const Config_T & config,
                       const Set<SUID> & incompatibleSelectors = Set<SUID>::emptySet() )
 {
    WALBERLA_FIELD_MAKE_STABILITY_CHECKER_CONFIG_PARSER( config )
-   typedef StabilityChecker< Field_T, FlagFieldEvaluationFilter<FlagField_T> > SC_T;
+   using SC_T = StabilityChecker<Field_T, FlagFieldEvaluationFilter<FlagField_T>>;
    auto checker = shared_ptr< SC_T >( new SC_T( blocks, fieldId, FlagFieldEvaluationFilter<FlagField_T>( flagFieldId, cellsToEvaluate ),
                                                 defaultCheckFrequency, defaultOutputToStream, defaultOutputVTK, requiredSelectors, incompatibleSelectors ) );
    WALBERLA_FIELD_MAKE_STABILITY_CHECKER_SET_AND_RETURN()
@@ -648,7 +648,7 @@ makeStabilityChecker( const Config_T & config,
                       const Set<SUID> & incompatibleSelectors = Set<SUID>::emptySet() )
 {
    WALBERLA_FIELD_MAKE_STABILITY_CHECKER_CONFIG_PARSER( config )
-   typedef StabilityChecker< Field_T, Filter_T > SC_T;
+   using SC_T = StabilityChecker<Field_T, Filter_T>;
    auto checker = shared_ptr< SC_T >( new SC_T( blocks, fieldId, filter, defaultCheckFrequency, defaultOutputToStream, defaultOutputVTK,
                                                 requiredSelectors, incompatibleSelectors ) );
    WALBERLA_FIELD_MAKE_STABILITY_CHECKER_SET_AND_RETURN()
diff --git a/src/field/VolumetricFlowRateEvaluation.h b/src/field/VolumetricFlowRateEvaluation.h
index bbbcc01e0..063bd1518 100644
--- a/src/field/VolumetricFlowRateEvaluation.h
+++ b/src/field/VolumetricFlowRateEvaluation.h
@@ -48,8 +48,8 @@ namespace field {
 
 namespace internal {
 
-typedef std::function< real_t () >  FlowRateSolution_T;
-typedef std::function< Vector3< real_t > ( const Vector3< real_t > & ) >  FlowRateVelocitySolution_T;
+using FlowRateSolution_T = std::function<real_t ()>;
+using FlowRateVelocitySolution_T = std::function<Vector3<real_t> (const Vector3<real_t> &)>;
 
 const std::string     volumetricFlowRateEvaluationFilename("flowrate.dat");
 const real_t          volumetricFlowRateEvaluationNormalization( real_t(1) );
@@ -150,8 +150,8 @@ class VolumetricFlowRateEvaluation
 {
 public:
 
-   typedef internal::FlowRateSolution_T          Solution_T;
-   typedef internal::FlowRateVelocitySolution_T  VelocitySolution_T;
+   using Solution_T = internal::FlowRateSolution_T;
+   using VelocitySolution_T = internal::FlowRateVelocitySolution_T;
 
    VolumetricFlowRateEvaluation( const weak_ptr< StructuredBlockStorage > & blocks, const ConstBlockDataID & fieldId,
                                  const Filter_T & filter,
@@ -491,7 +491,7 @@ shared_ptr< VolumetricFlowRateEvaluation< VelocityField_T > > makeVolumetricFlow
                                                                                                 const Set<SUID> & requiredSelectors = Set<SUID>::emptySet(),
                                                                                                 const Set<SUID> & incompatibleSelectors = Set<SUID>::emptySet() )
 {
-   typedef VolumetricFlowRateEvaluation< VelocityField_T > FR_T;
+   using FR_T = VolumetricFlowRateEvaluation<VelocityField_T>;
    return shared_ptr< FR_T >( new FR_T( blocks, velocityFieldId, plotFrequency, logFrequency, solution, velocitySolution, requiredSelectors, incompatibleSelectors ) );
 }
 
@@ -505,7 +505,7 @@ makeVolumetricFlowRateEvaluation( const weak_ptr< StructuredBlockStorage > & blo
                                   const Set<SUID> & requiredSelectors = Set<SUID>::emptySet(),
                                   const Set<SUID> & incompatibleSelectors = Set<SUID>::emptySet() )
 {
-   typedef VolumetricFlowRateEvaluation< VelocityField_T, FlagFieldEvaluationFilter<FlagField_T> > FR_T;
+   using FR_T = VolumetricFlowRateEvaluation<VelocityField_T, FlagFieldEvaluationFilter<FlagField_T>>;
    return shared_ptr< FR_T >( new FR_T( blocks, velocityFieldId, FlagFieldEvaluationFilter<FlagField_T>( flagFieldId, cellsToEvaluate ),
                                         plotFrequency, logFrequency, solution, velocitySolution, requiredSelectors, incompatibleSelectors ) );
 }
@@ -519,7 +519,7 @@ makeVolumetricFlowRateEvaluation( const weak_ptr< StructuredBlockStorage > & blo
                                   const Set<SUID> & requiredSelectors = Set<SUID>::emptySet(),
                                   const Set<SUID> & incompatibleSelectors = Set<SUID>::emptySet() )
 {
-   typedef VolumetricFlowRateEvaluation< VelocityField_T, Filter_T > FR_T;
+   using FR_T = VolumetricFlowRateEvaluation<VelocityField_T, Filter_T>;
    return shared_ptr< FR_T >( new FR_T( blocks, velocityFieldId, filter, plotFrequency, logFrequency, solution, velocitySolution, requiredSelectors, incompatibleSelectors ) );
 }
 
@@ -596,7 +596,7 @@ shared_ptr< VolumetricFlowRateEvaluation< VelocityField_T > > makeVolumetricFlow
                                                                                                 const Set<SUID> & incompatibleSelectors = Set<SUID>::emptySet() )
 {
    WALBERLA_FIELD_MAKE_VOLUMETRIC_FLOW_RATE_EVALUATION_CONFIG_PARSER( config )
-   typedef VolumetricFlowRateEvaluation< VelocityField_T > FR_T;
+   using FR_T = VolumetricFlowRateEvaluation<VelocityField_T>;
    auto evaluation = shared_ptr< FR_T >( new FR_T( blocks, velocityFieldId, defaultPlotFrequency, defaultLogFrequency,
                                                    solution, velocitySolution, requiredSelectors, incompatibleSelectors ) );
    WALBERLA_FIELD_MAKE_VOLUMETRIC_FLOW_RATE_EVALUATION_SET_AND_RETURN()
@@ -614,7 +614,7 @@ makeVolumetricFlowRateEvaluation( const Config_T & config,
                                   const Set<SUID> & incompatibleSelectors = Set<SUID>::emptySet() )
 {
    WALBERLA_FIELD_MAKE_VOLUMETRIC_FLOW_RATE_EVALUATION_CONFIG_PARSER( config )
-   typedef VolumetricFlowRateEvaluation< VelocityField_T, FlagFieldEvaluationFilter<FlagField_T> > FR_T;
+   using FR_T = VolumetricFlowRateEvaluation<VelocityField_T, FlagFieldEvaluationFilter<FlagField_T>>;
    auto evaluation = shared_ptr< FR_T >( new FR_T( blocks, velocityFieldId, FlagFieldEvaluationFilter<FlagField_T>( flagFieldId, cellsToEvaluate ),
                                                    defaultPlotFrequency, defaultLogFrequency, solution, velocitySolution, requiredSelectors, incompatibleSelectors ) );
    WALBERLA_FIELD_MAKE_VOLUMETRIC_FLOW_RATE_EVALUATION_SET_AND_RETURN()
@@ -632,7 +632,7 @@ makeVolumetricFlowRateEvaluation( const Config_T & config,
                                   const Set<SUID> & incompatibleSelectors = Set<SUID>::emptySet() )
 {
    WALBERLA_FIELD_MAKE_VOLUMETRIC_FLOW_RATE_EVALUATION_CONFIG_PARSER( config )
-   typedef VolumetricFlowRateEvaluation< VelocityField_T, Filter_T > FR_T;
+   using FR_T = VolumetricFlowRateEvaluation<VelocityField_T, Filter_T>;
    auto evaluation = shared_ptr< FR_T >( new FR_T( blocks, velocityFieldId, filter, defaultPlotFrequency, defaultLogFrequency,
                                                    solution, velocitySolution, requiredSelectors, incompatibleSelectors ) );
    WALBERLA_FIELD_MAKE_VOLUMETRIC_FLOW_RATE_EVALUATION_SET_AND_RETURN()
diff --git a/src/field/adaptors/AdaptorCreators.h b/src/field/adaptors/AdaptorCreators.h
index 56bfff201..b6907b2c2 100644
--- a/src/field/adaptors/AdaptorCreators.h
+++ b/src/field/adaptors/AdaptorCreators.h
@@ -38,14 +38,14 @@ class AdaptorHandling : public blockforest::AlwaysInitializeBlockDataHandling< A
 {
 public:
 
-   typedef typename Adaptor_T::functor_t AdaptionFunction_T;
+   using AdaptionFunction_T = typename Adaptor_T::functor_t;
 
    AdaptorHandling( const ConstBlockDataID & adaptedFieldId, const AdaptionFunction_T & function ) :
       adaptedFieldId_( adaptedFieldId ), function_( function ) {}
 
    Adaptor_T * initialize( IBlock * const block ) override
    {
-      typedef typename Adaptor_T::basefield_t AdaptedField_T;
+      using AdaptedField_T = typename Adaptor_T::basefield_t;
       const AdaptedField_T * adaptedField = block->getData< AdaptedField_T >( adaptedFieldId_ );
       return new Adaptor_T( *adaptedField, function_ );
    }
diff --git a/src/field/adaptors/AdaptorIterator.h b/src/field/adaptors/AdaptorIterator.h
index b9504ef31..e2da36e2e 100644
--- a/src/field/adaptors/AdaptorIterator.h
+++ b/src/field/adaptors/AdaptorIterator.h
@@ -43,9 +43,9 @@ template < typename AdaptedIterator, typename FieldAdaptor>
 class AdaptorIterator
 {
 public:
-   typedef typename FieldAdaptor::value_type T;
-   typedef typename FieldAdaptor::functor_t  Functor;
-   typedef AdaptorIterator<AdaptedIterator, FieldAdaptor > OwnType;
+   using T = typename FieldAdaptor::value_type;
+   using Functor = typename FieldAdaptor::functor_t;
+   using OwnType = AdaptorIterator<AdaptedIterator, FieldAdaptor>;
 
    AdaptorIterator( const AdaptedIterator & baseIterator, const FieldAdaptor * adaptedField )
       : base_( baseIterator ), adaptedField_( adaptedField), functor_( adaptedField->getFunctor() )
diff --git a/src/field/adaptors/ComponentExtractionAdaptor.h b/src/field/adaptors/ComponentExtractionAdaptor.h
index bfd60854c..12451fcc6 100644
--- a/src/field/adaptors/ComponentExtractionAdaptor.h
+++ b/src/field/adaptors/ComponentExtractionAdaptor.h
@@ -32,12 +32,12 @@ namespace field {
    class ComponentExtractionFunction
    {
    public:
-      typedef          Field_T                      basefield_t;
-      typedef typename Field_T::const_base_iterator basefield_iterator;
+      using basefield_t = Field_T;
+      using basefield_iterator = typename Field_T::const_base_iterator;
 
-      typedef VectorTrait<typename basefield_t::value_type > OutputTrait;
+      using OutputTrait = VectorTrait<typename basefield_t::value_type>;
 
-      typedef typename OutputTrait::OutputType          value_type;
+      using value_type = typename OutputTrait::OutputType;
 
       static const uint_t F_SIZE = 1;
 
@@ -61,8 +61,8 @@ namespace field {
    class ComponentExtractionAdaptor : public GhostLayerFieldAdaptor< ComponentExtractionFunction<field_t,component,vectorComponent>, 0 >
    {
    public:
-      typedef ComponentExtractionFunction<field_t,component,vectorComponent> Func;
-      typedef GhostLayerFieldAdaptor< Func, 0 > baseclass;
+      using Func = ComponentExtractionFunction<field_t, component, vectorComponent>;
+      using baseclass = GhostLayerFieldAdaptor<Func, 0>;
 
       ComponentExtractionAdaptor( const field_t & field, const Func & func = Func() )
          : baseclass( field, func)
diff --git a/src/field/adaptors/GhostLayerFieldAdaptor.h b/src/field/adaptors/GhostLayerFieldAdaptor.h
index 3b22ae6ef..13ac8f0e2 100644
--- a/src/field/adaptors/GhostLayerFieldAdaptor.h
+++ b/src/field/adaptors/GhostLayerFieldAdaptor.h
@@ -85,23 +85,23 @@ public:
    //** Type Definitions  **********************************************************************************************
    /*! \name Type Definitions */
    //@{
-   typedef Functor                       functor_t;
-   typedef typename Functor::basefield_t basefield_t;
-   typedef typename Functor::value_type  value_type;
-   typedef typename Functor::value_type  T;
+   using functor_t = Functor;
+   using basefield_t = typename Functor::basefield_t;
+   using value_type = typename Functor::value_type;
+   using T = typename Functor::value_type;
 
    static const uint_t F_SIZE = Functor::F_SIZE;
 
-   typedef typename basefield_t::const_base_iterator     adapted_base_iterator;
-   typedef typename basefield_t::const_iterator          adapted_iterator;
-   typedef typename basefield_t::const_reverse_iterator  adapted_reverse_iterator;
+   using adapted_base_iterator = typename basefield_t::const_base_iterator;
+   using adapted_iterator = typename basefield_t::const_iterator;
+   using adapted_reverse_iterator = typename basefield_t::const_reverse_iterator;
 
-   typedef GhostLayerFieldAdaptor<Functor,glDecrease> OwnType;
-   typedef AdaptorIterator<adapted_base_iterator,   OwnType > const_base_iterator;
-   typedef AdaptorIterator<adapted_iterator,        OwnType > const_iterator;
-   typedef AdaptorIterator<adapted_reverse_iterator,OwnType > const_reverse_iterator;
+   using OwnType = GhostLayerFieldAdaptor<Functor, glDecrease>;
+   using const_base_iterator = AdaptorIterator<adapted_base_iterator, OwnType>;
+   using const_iterator = AdaptorIterator<adapted_iterator, OwnType>;
+   using const_reverse_iterator = AdaptorIterator<adapted_reverse_iterator, OwnType>;
 
-   typedef FieldPointer<OwnType, const OwnType, const T > ConstPtr;
+   using ConstPtr = FieldPointer<OwnType, const OwnType, const T>;
    //@}
    //*******************************************************************************************************************
 
diff --git a/src/field/adaptors/VectorFieldAccessor.h b/src/field/adaptors/VectorFieldAccessor.h
index e41f4684a..2ba6ca1a2 100644
--- a/src/field/adaptors/VectorFieldAccessor.h
+++ b/src/field/adaptors/VectorFieldAccessor.h
@@ -36,7 +36,7 @@ namespace field {
       static_assert( VectorField_T::F_SIZE == 3, "Only valid for Fields with 3 components (F_SIZE==3)" );
       static_assert( std::is_same< typename VectorField_T::value_type, real_t >::value, "Only works for real valued fields" );
 
-      typedef Vector3<real_t> vector_or_constRefVector;
+      using vector_or_constRefVector = Vector3<real_t>;
 
       static vector_or_constRefVector get( const VectorField_T * f, cell_idx_t x, cell_idx_t y, cell_idx_t z )
       {
@@ -56,7 +56,7 @@ namespace field {
                               typename std::enable_if< std::is_same< typename VectorField_T::value_type,
                                                                            Vector3<real_t> >::value >::type >
    {
-       typedef const Vector3<real_t> & vector_or_constRefVector;
+       using vector_or_constRefVector = const Vector3<real_t> &;
 
        static vector_or_constRefVector get( const VectorField_T * f, cell_idx_t x, cell_idx_t y, cell_idx_t z )
        {
diff --git a/src/field/blockforest/BlockDataHandling.h b/src/field/blockforest/BlockDataHandling.h
index e0caa9869..293935234 100644
--- a/src/field/blockforest/BlockDataHandling.h
+++ b/src/field/blockforest/BlockDataHandling.h
@@ -42,8 +42,8 @@ class BlockDataHandling : public blockforest::BlockDataHandling< Field_T >
 {
 public:
 
-   typedef typename Field_T::value_type Value_T;
-   typedef std::function< void ( Field_T * field, IBlock * const block ) > InitializationFunction_T;
+   using Value_T = typename Field_T::value_type;
+   using InitializationFunction_T = std::function<void (Field_T *, IBlock *const)>;
 
    ~BlockDataHandling() override = default;
 
@@ -398,7 +398,7 @@ class DefaultBlockDataHandling : public BlockDataHandling< GhostLayerField_T >
 {
 public:
 
-   typedef typename GhostLayerField_T::value_type Value_T;
+   using Value_T = typename GhostLayerField_T::value_type;
 
    DefaultBlockDataHandling( const weak_ptr< StructuredBlockStorage > & blocks,
                              const std::function< Vector3< uint_t > ( const shared_ptr< StructuredBlockStorage > &, IBlock * const ) > calculateSize = internal::defaultSize ) :
@@ -460,8 +460,8 @@ class AlwaysInitializeBlockDataHandling : public blockforest::AlwaysInitializeBl
 {
 public:
 
-   typedef typename GhostLayerField_T::value_type Value_T;
-   typedef std::function< void ( GhostLayerField_T * field, IBlock * const block ) > InitializationFunction_T;
+   using Value_T = typename GhostLayerField_T::value_type;
+   using InitializationFunction_T = std::function<void (GhostLayerField_T *, IBlock *const)>;
 
    AlwaysInitializeBlockDataHandling( const weak_ptr< StructuredBlockStorage > & blocks,
                                       const std::function< Vector3< uint_t > ( const shared_ptr< StructuredBlockStorage > &, IBlock * const ) > calculateSize = internal::defaultSize ) :
diff --git a/src/field/communication/MPIDatatypes.impl.h b/src/field/communication/MPIDatatypes.impl.h
index 1bb4bf3a6..a21ac75bd 100644
--- a/src/field/communication/MPIDatatypes.impl.h
+++ b/src/field/communication/MPIDatatypes.impl.h
@@ -33,7 +33,7 @@ MPI_Datatype mpiDatatypeSlice( const Field_T & field,
                                const cell_idx_t xBeg, const cell_idx_t yBeg, const cell_idx_t zBeg, const cell_idx_t fBeg,
                                const cell_idx_t xEnd, const cell_idx_t yEnd, const cell_idx_t zEnd, const cell_idx_t fEnd )
 {
-   typedef typename Field_T::value_type T;
+   using T = typename Field_T::value_type;
    int sizes[4];
    int subsizes[4];
    int starts[4];
@@ -133,7 +133,7 @@ MPI_Datatype mpiDatatypeSliceXYZ( const Field_T & field, const CellInterval & in
 template<typename Field_T>
 MPI_Datatype mpiDatatypeSliceXYZ( const Field_T & field, const CellInterval & interval, const std::set<cell_idx_t> & fs )
 {
-   typedef typename Field_T::value_type T;
+   using T = typename Field_T::value_type;
 
    MPI_Datatype newType = MPI_DATATYPE_NULL;
 
diff --git a/src/field/communication/PackInfo.h b/src/field/communication/PackInfo.h
index a8e95ce75..108860eb3 100644
--- a/src/field/communication/PackInfo.h
+++ b/src/field/communication/PackInfo.h
@@ -42,7 +42,7 @@ template<typename GhostLayerField_T>
 class PackInfo : public walberla::communication::UniformPackInfo
 {
 public:
-   typedef typename GhostLayerField_T::value_type T;
+   using T = typename GhostLayerField_T::value_type;
 
    PackInfo( const BlockDataID & bdId ) : bdId_( bdId ), communicateAllGhostLayers_( true ),
                                           numberOfGhostLayers_( 0 ) {}
diff --git a/src/field/communication/ReducePackInfo.h b/src/field/communication/ReducePackInfo.h
index 135574dcd..532b43724 100644
--- a/src/field/communication/ReducePackInfo.h
+++ b/src/field/communication/ReducePackInfo.h
@@ -42,7 +42,7 @@ template< template<typename> class ReduceOperation, typename GhostLayerField_T >
 class ReducePackInfo : public walberla::communication::ReducePackInfo
 {
 public:
-   typedef typename GhostLayerField_T::value_type T;
+   using T = typename GhostLayerField_T::value_type;
 
    ReducePackInfo( const BlockDataID & bdId, T init )
         : bdId_(bdId),
diff --git a/src/field/communication/UniformPullReductionPackInfo.h b/src/field/communication/UniformPullReductionPackInfo.h
index 4233a3d23..aa7ffe1a9 100644
--- a/src/field/communication/UniformPullReductionPackInfo.h
+++ b/src/field/communication/UniformPullReductionPackInfo.h
@@ -49,7 +49,7 @@ template< template<typename> class ReduceOperation, typename GhostLayerField_T >
 class UniformPullReductionPackInfo : public walberla::communication::UniformPackInfo
 {
 public:
-   typedef typename GhostLayerField_T::value_type T;
+   using T = typename GhostLayerField_T::value_type;
 
    UniformPullReductionPackInfo( const BlockDataID & bdID ) : bdID_( bdID ), communicateAllGhostLayers_( true ),
                                  numberOfGhostLayers_( 0 ) {}
diff --git a/src/field/distributors/DistributorCreators.h b/src/field/distributors/DistributorCreators.h
index ab555911c..2ff45e304 100644
--- a/src/field/distributors/DistributorCreators.h
+++ b/src/field/distributors/DistributorCreators.h
@@ -67,8 +67,8 @@ public:
 
    Distributor_T * initialize( IBlock * const block ) override
    {
-      typedef typename Distributor_T::BaseField_T DistributionDestinationField_T;
-      typedef typename FlagField_T::flag_t flag_t;
+      using DistributionDestinationField_T = typename Distributor_T::BaseField_T;
+      using flag_t = typename FlagField_T::flag_t;
       DistributionDestinationField_T * distributionDestinationField = block->getData< DistributionDestinationField_T >( distributionDestinationFieldID_ );
       const FlagField_T * flagField = block->getData< FlagField_T >( flagFieldID_ );
 
diff --git a/src/field/distributors/KernelDistributor.h b/src/field/distributors/KernelDistributor.h
index 1aed2f2ea..712d9a7b7 100644
--- a/src/field/distributors/KernelDistributor.h
+++ b/src/field/distributors/KernelDistributor.h
@@ -50,9 +50,9 @@ public:
 
    static const uint_t F_SIZE = Field_T::F_SIZE;
 
-   typedef Field_T                                BaseField_T;
-   typedef typename FlagField_T::flag_t           flag_t;
-   typedef KernelDistributor<Field_T,FlagField_T> OwnType;
+   using BaseField_T = Field_T;
+   using flag_t = typename FlagField_T::flag_t;
+   using OwnType = KernelDistributor<Field_T, FlagField_T>;
 
    KernelDistributor( const weak_ptr<StructuredBlockStorage> & blockStorage, const IBlock & block,
                       BaseField_T & baseField, const FlagField_T & flagField,
diff --git a/src/field/distributors/NearestNeighborDistributor.h b/src/field/distributors/NearestNeighborDistributor.h
index 6aa4ba295..932f443b3 100644
--- a/src/field/distributors/NearestNeighborDistributor.h
+++ b/src/field/distributors/NearestNeighborDistributor.h
@@ -49,9 +49,9 @@ public:
 
    static const uint_t F_SIZE = Field_T::F_SIZE;
 
-   typedef Field_T                                         BaseField_T;
-   typedef typename FlagField_T::flag_t                    flag_t;
-   typedef NearestNeighborDistributor<Field_T,FlagField_T> OwnType;
+   using BaseField_T = Field_T;
+   using flag_t = typename FlagField_T::flag_t;
+   using OwnType = NearestNeighborDistributor<Field_T, FlagField_T>;
 
    NearestNeighborDistributor( const weak_ptr<StructuredBlockStorage> & blockStorage, const IBlock & block,
                                BaseField_T & baseField, const FlagField_T & flagField,
diff --git a/src/field/interpolators/FieldInterpolatorCreators.h b/src/field/interpolators/FieldInterpolatorCreators.h
index 760db9b7c..c4bcfafc3 100644
--- a/src/field/interpolators/FieldInterpolatorCreators.h
+++ b/src/field/interpolators/FieldInterpolatorCreators.h
@@ -66,8 +66,8 @@ public:
 
    Interpolator_T * initialize( IBlock * const block ) override
    {
-      typedef typename Interpolator_T::BaseField_T InterpolatedField_T;
-      typedef typename FlagField_T::flag_t flag_t;
+      using InterpolatedField_T = typename Interpolator_T::BaseField_T;
+      using flag_t = typename FlagField_T::flag_t;
       const InterpolatedField_T * interpolatedField = block->getData< InterpolatedField_T >( interpolatedFieldID_ );
       const FlagField_T * flagField = block->getData< FlagField_T >( flagFieldID_ );
 
diff --git a/src/field/interpolators/KernelFieldInterpolator.h b/src/field/interpolators/KernelFieldInterpolator.h
index 50dfde0fc..0e59fabf2 100644
--- a/src/field/interpolators/KernelFieldInterpolator.h
+++ b/src/field/interpolators/KernelFieldInterpolator.h
@@ -92,9 +92,9 @@ public:
 
    static const uint_t F_SIZE = Field_T::F_SIZE;
 
-   typedef Field_T                                      BaseField_T;
-   typedef typename FlagField_T::flag_t                 flag_t;
-   typedef KernelFieldInterpolator<Field_T,FlagField_T> OwnType;
+   using BaseField_T = Field_T;
+   using flag_t = typename FlagField_T::flag_t;
+   using OwnType = KernelFieldInterpolator<Field_T, FlagField_T>;
 
    KernelFieldInterpolator( const weak_ptr<StructuredBlockStorage> & blockStorage, const IBlock & block,
                             const BaseField_T & baseField, const FlagField_T & flagField,
diff --git a/src/field/interpolators/NearestNeighborFieldInterpolator.h b/src/field/interpolators/NearestNeighborFieldInterpolator.h
index 975c55edb..b5b5cba7f 100644
--- a/src/field/interpolators/NearestNeighborFieldInterpolator.h
+++ b/src/field/interpolators/NearestNeighborFieldInterpolator.h
@@ -46,9 +46,9 @@ public:
 
    static const uint_t F_SIZE = Field_T::F_SIZE;
 
-   typedef Field_T                                               BaseField_T;
-   typedef typename FlagField_T::flag_t                          flag_t;
-   typedef NearestNeighborFieldInterpolator<Field_T,FlagField_T> OwnType;
+   using BaseField_T = Field_T;
+   using flag_t = typename FlagField_T::flag_t;
+   using OwnType = NearestNeighborFieldInterpolator<Field_T, FlagField_T>;
 
    NearestNeighborFieldInterpolator( const weak_ptr<StructuredBlockStorage> & blockStorage, const IBlock & block,
                                      const BaseField_T & baseField, const FlagField_T & flagField,
diff --git a/src/field/interpolators/NearestNeighborInterpolator.h b/src/field/interpolators/NearestNeighborInterpolator.h
index 0a609dc68..b76c61fa5 100644
--- a/src/field/interpolators/NearestNeighborInterpolator.h
+++ b/src/field/interpolators/NearestNeighborInterpolator.h
@@ -53,7 +53,7 @@ namespace field {
    public:
 
       static const uint_t F_SIZE = GlField::F_SIZE;
-      typedef  typename GlField::value_type value_type;
+      using value_type = typename GlField::value_type;
 
       NearestNeighborInterpolator( const GlField & fieldToInterpolate )
          : field_( fieldToInterpolate )
diff --git a/src/field/interpolators/TrilinearFieldInterpolator.h b/src/field/interpolators/TrilinearFieldInterpolator.h
index bdac4ff1a..8eb24a4cf 100644
--- a/src/field/interpolators/TrilinearFieldInterpolator.h
+++ b/src/field/interpolators/TrilinearFieldInterpolator.h
@@ -48,9 +48,9 @@ public:
 
    static const uint_t F_SIZE = Field_T::F_SIZE;
 
-   typedef Field_T                                         BaseField_T;
-   typedef typename FlagField_T::flag_t                    flag_t;
-   typedef TrilinearFieldInterpolator<Field_T,FlagField_T> OwnType;
+   using BaseField_T = Field_T;
+   using flag_t = typename FlagField_T::flag_t;
+   using OwnType = TrilinearFieldInterpolator<Field_T, FlagField_T>;
 
    TrilinearFieldInterpolator( const weak_ptr<StructuredBlockStorage> & blockStorage, const IBlock & block,
                                const BaseField_T & baseField, const FlagField_T & flagField,
diff --git a/src/field/iterators/FieldIterator.h b/src/field/iterators/FieldIterator.h
index faecf9822..7557fea2a 100644
--- a/src/field/iterators/FieldIterator.h
+++ b/src/field/iterators/FieldIterator.h
@@ -75,7 +75,7 @@ namespace field {
       using pointer = T*;
       using reference = T&;
 
-      typedef Field<typename std::remove_const<T>::type, fieldFSize> FieldType;
+      using FieldType = Field<typename std::remove_const<T>::type, fieldFSize>;
 
       static const uint_t F_SIZE = fieldFSize;
 
@@ -219,8 +219,8 @@ namespace field {
    class ForwardFieldIterator : public FieldIterator<T,fieldFSize>
    {
    public:
-      typedef FieldIterator<T,fieldFSize> Parent;
-      typedef Field<typename std::remove_const<T>::type, fieldFSize> FieldType;
+      using Parent = FieldIterator<T, fieldFSize>;
+      using FieldType = Field<typename std::remove_const<T>::type, fieldFSize>;
 
       //**Constructor/Destructor****************************************************************************************
       /*!\name Constructor/Destructor */
@@ -262,8 +262,8 @@ namespace field {
    class ReverseFieldIterator : public FieldIterator<T,fieldFSize>
    {
    public:
-       typedef FieldIterator<T,fieldFSize> Parent;
-       typedef Field<typename std::remove_const<T>::type, fieldFSize> FieldType;
+       using Parent = FieldIterator<T, fieldFSize>;
+       using FieldType = Field<typename std::remove_const<T>::type, fieldFSize>;
 
       //**Constructor/Destructor****************************************************************************************
       /*!\name Constructor/Destructor */
diff --git a/src/field/iterators/FieldIterator.impl.h b/src/field/iterators/FieldIterator.impl.h
index a643984c8..d2184e9a8 100644
--- a/src/field/iterators/FieldIterator.impl.h
+++ b/src/field/iterators/FieldIterator.impl.h
@@ -47,7 +47,7 @@ FieldIterator<T,fs>::FieldIterator( const typename FieldIterator<T,fs>::FieldTyp
       return;
    }
 
-   typedef typename std::remove_const<T>::type NonConstT;
+   using NonConstT = typename std::remove_const<T>::type;
 
    cur_[0] = cur_[1] = cur_[2] = 0;
    if( f_->layout() == fzyx )
diff --git a/src/field/iterators/FieldNeighborPointer.h b/src/field/iterators/FieldNeighborPointer.h
index 9d483d1e9..4ab5a13c0 100644
--- a/src/field/iterators/FieldNeighborPointer.h
+++ b/src/field/iterators/FieldNeighborPointer.h
@@ -61,7 +61,7 @@ namespace field {
    {
 
    public:
-      typedef Value_T value_type;
+      using value_type = Value_T;
       static const uint_t F_SIZE = Field_T::F_SIZE;
 
       FieldNeighborPointer( FieldMember & field, cell_idx_t _x, cell_idx_t _y, cell_idx_t _z, cell_idx_t _f = 0 )
diff --git a/src/field/iterators/FieldPointer.h b/src/field/iterators/FieldPointer.h
index ba027faad..b36a19af5 100644
--- a/src/field/iterators/FieldPointer.h
+++ b/src/field/iterators/FieldPointer.h
@@ -63,7 +63,7 @@ namespace field {
    class FieldPointer
    {
    public:
-      typedef Value_T value_type;
+      using value_type = Value_T;
       static const uint_t F_SIZE = Field_T::F_SIZE;
 
       FieldPointer( FieldMember & field, cell_idx_t _x, cell_idx_t _y, cell_idx_t _z, cell_idx_t _f = 0 )
diff --git a/src/field/vtk/FlagFieldCellFilter.h b/src/field/vtk/FlagFieldCellFilter.h
index 708c5234e..d82c3a13e 100644
--- a/src/field/vtk/FlagFieldCellFilter.h
+++ b/src/field/vtk/FlagFieldCellFilter.h
@@ -35,7 +35,7 @@ namespace field {
 template< typename FlagField_T >
 class FlagFieldCellFilter {
 private:
-   typedef typename FlagField_T::flag_t flag_t;
+   using flag_t = typename FlagField_T::flag_t;
 public:
 
    FlagFieldCellFilter( const ConstBlockDataID flags ) : flagField_( flags ) {}
diff --git a/src/field/vtk/FlagFieldMapping.h b/src/field/vtk/FlagFieldMapping.h
index e496657df..f8cb572b5 100644
--- a/src/field/vtk/FlagFieldMapping.h
+++ b/src/field/vtk/FlagFieldMapping.h
@@ -34,7 +34,7 @@ template< typename FlagField_T, typename T >
 class FlagFieldMapping : public vtk::BlockCellDataWriter<T,1>
 {
 private:
-   typedef typename FlagField_T::flag_t flag_t;
+   using flag_t = typename FlagField_T::flag_t;
 public:
 
    FlagFieldMapping( const ConstBlockDataID flagId, const std::string& id ) :
@@ -86,7 +86,7 @@ protected:
 template<typename FieldType, typename TargetType=uint8_t>
 class BinarizationFieldWriter : public vtk::BlockCellDataWriter<TargetType,1>
 {
-   typedef typename FieldType::value_type SrcType;
+   using SrcType = typename FieldType::value_type;
 
 public:
    BinarizationFieldWriter( const ConstBlockDataID fieldID, const std::string& id, SrcType mask) :
diff --git a/src/field/vtk/VTKWriter.h b/src/field/vtk/VTKWriter.h
index a86d8fa52..513b920e1 100644
--- a/src/field/vtk/VTKWriter.h
+++ b/src/field/vtk/VTKWriter.h
@@ -103,9 +103,9 @@ class VTKWriter : public vtk::BlockCellDataWriter< OutputType,
                                                    VectorTrait<typename Field_T::value_type>::F_SIZE * Field_T::F_SIZE >
 {
 public:
-   typedef VectorTrait<typename Field_T::value_type > OutputTrait;
+   using OutputTrait = VectorTrait<typename Field_T::value_type>;
 
-   typedef vtk::BlockCellDataWriter<OutputType, OutputTrait::F_SIZE * Field_T::F_SIZE> base_t;
+   using base_t = vtk::BlockCellDataWriter<OutputType, OutputTrait::F_SIZE * Field_T::F_SIZE>;
 
    VTKWriter( const ConstBlockDataID bdid, const std::string& id ) :
       base_t( id ), bdid_( bdid ), field_( nullptr ) {}
@@ -192,7 +192,7 @@ inline vtk::VTKOutput::Write createVTKOutput  ( const ConstBlockDataID & fieldId
                                                 const Set<SUID>& incompatibleStates = Set<SUID>::emptySet(),
                                                 bool useMPIIO = true, const uint_t initialExecutionCount = 0 )
 {
-   typedef typename VectorTrait<typename Field_T::value_type >::OutputType OutputType;
+   using OutputType = typename VectorTrait<typename Field_T::value_type>::OutputType;
 
    return createVTKOutput<Field_T, OutputType> (
                fieldId, blocks, identifier, writeFrequency, ghostLayers, forcePVTU, baseFolder,executionFolder,
@@ -247,7 +247,7 @@ inline vtk::VTKOutput::Write createScalingVTKOutput  ( const ConstBlockDataID &
                                                        const Set<SUID>& incompatibleStates = Set<SUID>::emptySet(),
                                                        bool useMPIIO = true, const uint_t initialExecutionCount = 0 )
 {
-   typedef typename VectorTrait<typename Field_T::value_type >::OutputType OutputType;
+   using OutputType = typename VectorTrait<typename Field_T::value_type>::OutputType;
 
    return createScalingVTKOutput<Field_T, OutputType> (
                fieldId, blocks, identifier, writeFrequency, factor, ghostLayers, forcePVTU, baseFolder,executionFolder,
diff --git a/src/gather/FileGatherScheme.h b/src/gather/FileGatherScheme.h
index b7409573f..7a48b0f10 100644
--- a/src/gather/FileGatherScheme.h
+++ b/src/gather/FileGatherScheme.h
@@ -106,7 +106,7 @@ namespace gather
 
          domain_decomposition::BlockStorage  & blocks_;
 
-         typedef std::vector<shared_ptr<GatherPackInfo> > PackInfoVector;
+         using PackInfoVector = std::vector<shared_ptr<GatherPackInfo>>;
          PackInfoVector  packInfos_; ///< all registered PackInfos
 
          /// To generated unique filenames for every FileCollectorScheme
diff --git a/src/gather/MPIGatherScheme.h b/src/gather/MPIGatherScheme.h
index 3d06db3ca..e9270289b 100644
--- a/src/gather/MPIGatherScheme.h
+++ b/src/gather/MPIGatherScheme.h
@@ -102,7 +102,7 @@ class MPIGatherScheme
 
 
    private:
-      typedef std::vector<shared_ptr<GatherPackInfo> > PackInfoVector;
+      using PackInfoVector = std::vector<shared_ptr<GatherPackInfo>>;
 
       domain_decomposition::BlockStorage  & blocks_;
       PackInfoVector                        packInfos_;               ///< all registered PackInfos
diff --git a/src/geometry/InitBoundaryHandling.h b/src/geometry/InitBoundaryHandling.h
index 7be3b0271..fe6817d3e 100644
--- a/src/geometry/InitBoundaryHandling.h
+++ b/src/geometry/InitBoundaryHandling.h
@@ -87,12 +87,12 @@ void initBoundaryHandling( StructuredBlockStorage & blocks, BlockDataID boundary
    using namespace geometry;
    using namespace initializer;
 
-   typedef BoundaryFromCellInterval  <BoundaryHandling>                 FromCellInterval;
-   typedef BoundaryFromDomainBorder  <BoundaryHandling>                 FromBorder;
-   typedef BoundaryFromVoxelFile     <BoundaryHandling>                 FromVoxelFile;
-   typedef BoundaryFromBody          <BoundaryHandling>                 FromBody;
-   typedef BoundaryFromImage         <BoundaryHandling, GrayScaleImage> FromGrayScaleImage;
-   typedef BoundaryFromImage         <BoundaryHandling, RGBAImage>      FromRGBAImage;
+   using FromCellInterval = BoundaryFromCellInterval<BoundaryHandling>;
+   using FromBorder = BoundaryFromDomainBorder<BoundaryHandling>;
+   using FromVoxelFile = BoundaryFromVoxelFile<BoundaryHandling>;
+   using FromBody = BoundaryFromBody<BoundaryHandling>;
+   using FromGrayScaleImage = BoundaryFromImage<BoundaryHandling, GrayScaleImage>;
+   using FromRGBAImage = BoundaryFromImage<BoundaryHandling, RGBAImage>;
 
    InitializationManager initManager( blocks.getBlockStorage() );
 
diff --git a/src/geometry/containment_octree/BranchNode.h b/src/geometry/containment_octree/BranchNode.h
index fd5d95077..2b160ad5b 100644
--- a/src/geometry/containment_octree/BranchNode.h
+++ b/src/geometry/containment_octree/BranchNode.h
@@ -36,12 +36,12 @@ template< typename ContainmentOctreeT >
 class BranchNode : public Node<ContainmentOctreeT>
 {
 public:
-   typedef typename Node<ContainmentOctreeT>::DistanceObject DistanceObject;
-   typedef typename Node<ContainmentOctreeT>::Scalar Scalar;
-   typedef typename Node<ContainmentOctreeT>::Point Point;
-   typedef typename Node<ContainmentOctreeT>::AABB AABB;
+   using DistanceObject = typename Node<ContainmentOctreeT>::DistanceObject;
+   using Scalar = typename Node<ContainmentOctreeT>::Scalar;
+   using Point = typename Node<ContainmentOctreeT>::Point;
+   using AABB = typename Node<ContainmentOctreeT>::AABB;
    
-   typedef typename Node<ContainmentOctreeT>::KahanAccumulator KahanAccumulator;
+   using KahanAccumulator = typename Node<ContainmentOctreeT>::KahanAccumulator;
    
    inline BranchNode( const shared_ptr<const DistanceObject> & distanceObject, const AABB & aabb, const Scalar epsilon,
                       const uint_t maxDepth, const Scalar minAABBVolume );
diff --git a/src/geometry/containment_octree/ContainmentOctree.h b/src/geometry/containment_octree/ContainmentOctree.h
index 96d091c00..d95fa55ce 100644
--- a/src/geometry/containment_octree/ContainmentOctree.h
+++ b/src/geometry/containment_octree/ContainmentOctree.h
@@ -42,18 +42,18 @@ template< typename DistanceObjectT >
 class ContainmentOctree
 {
 public:
-   typedef typename DistanceObjectT::Scalar Scalar;
-   typedef typename DistanceObjectT::Point  Point;
-   typedef math::GenericAABB<Scalar>        AABB;
-
-   typedef math::KahanAccumulator<Scalar> KahanAccumulator;
-   typedef DistanceObjectT                DistanceObject;
-
-   typedef containment_octree::Node<ContainmentOctree>                  Node;
-   typedef containment_octree::InsideLeafNode<ContainmentOctree>        InsideLeafNode;
-   typedef containment_octree::OutsideLeafNode<ContainmentOctree>       OutsideLeafNode;
-   typedef containment_octree::IndeterminateLeafNode<ContainmentOctree> IndeterminateLeafNode;
-   typedef containment_octree::BranchNode<ContainmentOctree>            BranchNode;
+   using Scalar = typename DistanceObjectT::Scalar;
+   using Point = typename DistanceObjectT::Point;
+   using AABB = math::GenericAABB<Scalar>;
+
+   using KahanAccumulator = math::KahanAccumulator<Scalar>;
+   using DistanceObject = DistanceObjectT;
+
+   using Node = containment_octree::Node<ContainmentOctree>;
+   using InsideLeafNode = containment_octree::InsideLeafNode<ContainmentOctree>;
+   using OutsideLeafNode = containment_octree::OutsideLeafNode<ContainmentOctree>;
+   using IndeterminateLeafNode = containment_octree::IndeterminateLeafNode<ContainmentOctree>;
+   using BranchNode = containment_octree::BranchNode<ContainmentOctree>;
 
    inline ContainmentOctree( const shared_ptr<const DistanceObject> & distanceObject, const Scalar epsilon = Scalar(0),
                              const uint_t maxDepth = 6u, const Scalar minAABBVolume = Scalar(0) );
diff --git a/src/geometry/containment_octree/IndeterminateLeafNode.h b/src/geometry/containment_octree/IndeterminateLeafNode.h
index 977c0a1cb..382620f57 100644
--- a/src/geometry/containment_octree/IndeterminateLeafNode.h
+++ b/src/geometry/containment_octree/IndeterminateLeafNode.h
@@ -34,12 +34,12 @@ class IndeterminateLeafNode : public LeafNode<ContainmentOctreeT>
 {
 public:
    using LeafNode<ContainmentOctreeT>::numNodes;
-   typedef typename LeafNode<ContainmentOctreeT>::DistanceObject DistanceObject;
-   typedef typename LeafNode<ContainmentOctreeT>::Scalar Scalar;
-   typedef typename LeafNode<ContainmentOctreeT>::Point Point;
-   typedef typename LeafNode<ContainmentOctreeT>::AABB AABB;
+   using DistanceObject = typename LeafNode<ContainmentOctreeT>::DistanceObject;
+   using Scalar = typename LeafNode<ContainmentOctreeT>::Scalar;
+   using Point = typename LeafNode<ContainmentOctreeT>::Point;
+   using AABB = typename LeafNode<ContainmentOctreeT>::AABB;
    
-   typedef typename LeafNode<ContainmentOctreeT>::KahanAccumulator KahanAccumulator;
+   using KahanAccumulator = typename LeafNode<ContainmentOctreeT>::KahanAccumulator;
    
    IndeterminateLeafNode( const shared_ptr<const DistanceObject> & distanceObject, const Scalar epsilon )
       :  distanceObject_( distanceObject ), sqEpsilon_( epsilon * epsilon ) { }
diff --git a/src/geometry/containment_octree/InsideLeafNode.h b/src/geometry/containment_octree/InsideLeafNode.h
index b673d61e1..0c46290f1 100644
--- a/src/geometry/containment_octree/InsideLeafNode.h
+++ b/src/geometry/containment_octree/InsideLeafNode.h
@@ -34,12 +34,12 @@ class InsideLeafNode : public LeafNode<ContainmentOctreeT>
 {
 public:
    using LeafNode<ContainmentOctreeT>::numNodes;
-   typedef typename LeafNode<ContainmentOctreeT>::DistanceObject DistanceObject;
-   typedef typename LeafNode<ContainmentOctreeT>::Scalar Scalar;
-   typedef typename LeafNode<ContainmentOctreeT>::Point Point;
-   typedef typename LeafNode<ContainmentOctreeT>::AABB AABB;
+   using DistanceObject = typename LeafNode<ContainmentOctreeT>::DistanceObject;
+   using Scalar = typename LeafNode<ContainmentOctreeT>::Scalar;
+   using Point = typename LeafNode<ContainmentOctreeT>::Point;
+   using AABB = typename LeafNode<ContainmentOctreeT>::AABB;
     
-   typedef typename LeafNode<ContainmentOctreeT>::KahanAccumulator KahanAccumulator;
+   using KahanAccumulator = typename LeafNode<ContainmentOctreeT>::KahanAccumulator;
 
    virtual ~InsideLeafNode() = default;
 
diff --git a/src/geometry/containment_octree/LeafNode.h b/src/geometry/containment_octree/LeafNode.h
index 47223f8b5..177a352dc 100644
--- a/src/geometry/containment_octree/LeafNode.h
+++ b/src/geometry/containment_octree/LeafNode.h
@@ -35,12 +35,12 @@ class LeafNode : public Node<ContainmentOctreeT>
 {
 public:
    using Node<ContainmentOctreeT>::numNodes;
-   typedef typename Node<ContainmentOctreeT>::DistanceObject DistanceObject;
-   typedef typename Node<ContainmentOctreeT>::Scalar Scalar;
-   typedef typename Node<ContainmentOctreeT>::Point Point;
-   typedef typename Node<ContainmentOctreeT>::AABB AABB;
+   using DistanceObject = typename Node<ContainmentOctreeT>::DistanceObject;
+   using Scalar = typename Node<ContainmentOctreeT>::Scalar;
+   using Point = typename Node<ContainmentOctreeT>::Point;
+   using AABB = typename Node<ContainmentOctreeT>::AABB;
    
-   typedef typename Node<ContainmentOctreeT>::KahanAccumulator KahanAccumulator;
+   using KahanAccumulator = typename Node<ContainmentOctreeT>::KahanAccumulator;
 
    virtual ~LeafNode() = default;
 
diff --git a/src/geometry/containment_octree/Node.h b/src/geometry/containment_octree/Node.h
index a1bc9325f..ddc3e15ec 100644
--- a/src/geometry/containment_octree/Node.h
+++ b/src/geometry/containment_octree/Node.h
@@ -33,12 +33,12 @@ template< typename ContainmentOctreeT >
 class Node
 {
 public:
-   typedef typename ContainmentOctreeT::Point  Point;
-   typedef typename ContainmentOctreeT::Scalar Scalar;
-   typedef typename ContainmentOctreeT::AABB   AABB;
+   using Point = typename ContainmentOctreeT::Point;
+   using Scalar = typename ContainmentOctreeT::Scalar;
+   using AABB = typename ContainmentOctreeT::AABB;
 
-   typedef typename ContainmentOctreeT::DistanceObject   DistanceObject;
-   typedef typename ContainmentOctreeT::KahanAccumulator KahanAccumulator;
+   using DistanceObject = typename ContainmentOctreeT::DistanceObject;
+   using KahanAccumulator = typename ContainmentOctreeT::KahanAccumulator;
 
    virtual ~Node() = default;
    virtual bool contains( const Point & p ) const = 0;
diff --git a/src/geometry/containment_octree/OutsideLeafNode.h b/src/geometry/containment_octree/OutsideLeafNode.h
index b5fc61813..6328ce593 100644
--- a/src/geometry/containment_octree/OutsideLeafNode.h
+++ b/src/geometry/containment_octree/OutsideLeafNode.h
@@ -35,12 +35,12 @@ class OutsideLeafNode : public LeafNode<ContainmentOctreeT>
 public:
    using LeafNode<ContainmentOctreeT>::numNodes;
    
-   typedef typename LeafNode<ContainmentOctreeT>::DistanceObject DistanceObject;
-   typedef typename LeafNode<ContainmentOctreeT>::Scalar Scalar;
-   typedef typename LeafNode<ContainmentOctreeT>::Point Point;
-   typedef typename LeafNode<ContainmentOctreeT>::AABB AABB;
+   using DistanceObject = typename LeafNode<ContainmentOctreeT>::DistanceObject;
+   using Scalar = typename LeafNode<ContainmentOctreeT>::Scalar;
+   using Point = typename LeafNode<ContainmentOctreeT>::Point;
+   using AABB = typename LeafNode<ContainmentOctreeT>::AABB;
    
-   typedef typename LeafNode<ContainmentOctreeT>::KahanAccumulator KahanAccumulator;
+   using KahanAccumulator = typename LeafNode<ContainmentOctreeT>::KahanAccumulator;
       
    virtual ~OutsideLeafNode() = default;
 
diff --git a/src/geometry/initializer/BoundaryFromImage.h b/src/geometry/initializer/BoundaryFromImage.h
index d19f4dcbe..466af7431 100644
--- a/src/geometry/initializer/BoundaryFromImage.h
+++ b/src/geometry/initializer/BoundaryFromImage.h
@@ -87,8 +87,8 @@ namespace initializer {
    class BoundaryFromImage : public Initializer
    {
    public:
-      typedef typename Image_T::pixel_t pixel_t;
-      typedef std::map<pixel_t, BoundarySetter<BoundaryHandling_T> > BoundarySetters;
+      using pixel_t = typename Image_T::pixel_t;
+      using BoundarySetters = std::map<pixel_t, BoundarySetter<BoundaryHandling_T>>;
 
 
       BoundaryFromImage( StructuredBlockStorage & blocks, BlockDataID handlerBlockDataID );
diff --git a/src/geometry/initializer/BoundaryFromVoxelFile.h b/src/geometry/initializer/BoundaryFromVoxelFile.h
index 3b0640e33..7987f77f9 100644
--- a/src/geometry/initializer/BoundaryFromVoxelFile.h
+++ b/src/geometry/initializer/BoundaryFromVoxelFile.h
@@ -58,8 +58,8 @@ struct IBlockIDPtrCompare {
    bool operator()( const IBlockID * lhs, const IBlockID * rhs ) const;
 };
 
-typedef std::map<const IBlockID*, CellInterval, IBlockIDPtrCompare> CellIntervalMap;
-typedef std::map<const IBlockID*, std::pair<CellInterval, std::vector<uint8_t> >, IBlockIDPtrCompare> CellIntervalDataMap;
+using CellIntervalMap = std::map<const IBlockID *, CellInterval, IBlockIDPtrCompare>;
+using CellIntervalDataMap = std::map<const IBlockID *, std::pair<CellInterval, std::vector<uint8_t>>, IBlockIDPtrCompare>;
 
 
 //*******************************************************************************************************************
diff --git a/src/geometry/initializer/InitializationManager.h b/src/geometry/initializer/InitializationManager.h
index 7c9ac444b..81ed7d68c 100644
--- a/src/geometry/initializer/InitializationManager.h
+++ b/src/geometry/initializer/InitializationManager.h
@@ -44,7 +44,7 @@ namespace initializer {
 
    class Initializer;
    class InitializerUIDGenerator;
-   typedef uid::UID< InitializerUIDGenerator > InitializerUID;
+   using InitializerUID = uid::UID<InitializerUIDGenerator>;
 
 
    //*******************************************************************************************************************
diff --git a/src/geometry/initializer/ScalarFieldFromBody.h b/src/geometry/initializer/ScalarFieldFromBody.h
index 97ef3cc95..617097ad8 100644
--- a/src/geometry/initializer/ScalarFieldFromBody.h
+++ b/src/geometry/initializer/ScalarFieldFromBody.h
@@ -77,7 +77,7 @@ namespace initializer {
    class ScalarFieldFromBody : public Initializer
    {
    public:
-      typedef typename Field_T::value_type Value_T;
+      using Value_T = typename Field_T::value_type;
       
       /*************************************************************************************************************//**
       * Constructor
diff --git a/src/geometry/mesh/TriangleMesh.h b/src/geometry/mesh/TriangleMesh.h
index 12501c96c..8f6817c41 100644
--- a/src/geometry/mesh/TriangleMesh.h
+++ b/src/geometry/mesh/TriangleMesh.h
@@ -54,12 +54,12 @@ namespace geometry {
    class TriangleMesh
    {
    public:
-      typedef uint32_t index_t;
+      using index_t = uint32_t;
       template<typename T> static index_t index_c( T x ) { return numeric_cast<index_t>(x); }
 
-      typedef Vector3<real_t> vertex_t;
-      typedef Vector3<real_t> normal_t;
-      typedef Vector3<float>  color_t;
+      using vertex_t = Vector3<real_t>;
+      using normal_t = Vector3<real_t>;
+      using color_t = Vector3<float>;
 
       //** Size Information  *******************************************************************************************
       /*! \name Size Information */
diff --git a/src/geometry/structured/GrayScaleImage.h b/src/geometry/structured/GrayScaleImage.h
index 3361cc90e..43e39359b 100644
--- a/src/geometry/structured/GrayScaleImage.h
+++ b/src/geometry/structured/GrayScaleImage.h
@@ -44,7 +44,7 @@ namespace geometry   {
    class GrayScaleImage
    {
    public:
-      typedef unsigned char pixel_t;
+      using pixel_t = unsigned char;
 
       GrayScaleImage( uint_t _width, uint_t _height );
       GrayScaleImage( const std::string & pngFilename );
diff --git a/src/gui/Gui.h b/src/gui/Gui.h
index 1332bb8dc..799060b7a 100644
--- a/src/gui/Gui.h
+++ b/src/gui/Gui.h
@@ -52,7 +52,7 @@ namespace gui {
 
       void registerPropertyTree( const shared_ptr<PropertyTree>& propertyTree );
 
-      typedef std::function< DisplayAdaptor * ( const IBlock &, ConstBlockDataID ) > DisplayAdaptorCreatorFunc;
+      using DisplayAdaptorCreatorFunc = std::function<DisplayAdaptor *(const IBlock &, ConstBlockDataID)>;
       void registerDisplayAdaptorCreator( const DisplayAdaptorCreatorFunc & creatorFunc );
 
       static void breakpoint( const std::string & comment, const std::string & file, int line );
diff --git a/src/gui/PropertyTree.h b/src/gui/PropertyTree.h
index df1965d7e..30bb247e3 100644
--- a/src/gui/PropertyTree.h
+++ b/src/gui/PropertyTree.h
@@ -52,7 +52,7 @@ namespace gui {
 #        ifdef WALBERLA_ENABLE_GUI
          typedef QStandardItem*  ItemID;
 #        else
-         typedef void * ItemID;
+         using ItemID = void *;
 #        endif
 
          PropertyTree();
diff --git a/src/lbm/MassEvaluation.h b/src/lbm/MassEvaluation.h
index 5a12f9c13..9757137db 100644
--- a/src/lbm/MassEvaluation.h
+++ b/src/lbm/MassEvaluation.h
@@ -96,7 +96,7 @@ shared_ptr< walberla::field::MassEvaluation< DensityField_T > > makeMassEvaluati
                                                                                     const Set<SUID> & requiredSelectors = Set<SUID>::emptySet(),
                                                                                     const Set<SUID> & incompatibleSelectors = Set<SUID>::emptySet() )
 {
-   typedef walberla::field::MassEvaluation< DensityField_T > ME_T;
+   using ME_T = walberla::field::MassEvaluation<DensityField_T>;
    auto evaluation = shared_ptr< ME_T >( new ME_T( blocks, fieldId, plotFrequency, logFrequency, filename, requiredSelectors, incompatibleSelectors ) );
    evaluation->setDomainNormalization( internal::massEvaluationDomain( blocks, level ) );
    return evaluation;
@@ -111,7 +111,7 @@ makeMassEvaluation( const shared_ptr< StructuredBlockStorage > & blocks, const u
                     const Set<SUID> & requiredSelectors = Set<SUID>::emptySet(),
                     const Set<SUID> & incompatibleSelectors = Set<SUID>::emptySet() )
 {
-   typedef walberla::field::MassEvaluation< DensityField_T, walberla::field::FlagFieldEvaluationFilter<FlagField_T> > ME_T;
+   using ME_T = walberla::field::MassEvaluation<DensityField_T, walberla::field::FlagFieldEvaluationFilter<FlagField_T>>;
    auto evaluation = shared_ptr< ME_T >( new ME_T( blocks, fieldId, walberla::field::FlagFieldEvaluationFilter<FlagField_T>( flagFieldId, fluid ),
                                                    plotFrequency, logFrequency, filename, requiredSelectors, incompatibleSelectors ) );
    evaluation->setDomainNormalization( internal::massEvaluationDomain( blocks, level ) );
@@ -126,7 +126,7 @@ shared_ptr< walberla::field::MassEvaluation< DensityField_T, Filter_T > > makeMa
                                                                                               const Set<SUID> & requiredSelectors = Set<SUID>::emptySet(),
                                                                                               const Set<SUID> & incompatibleSelectors = Set<SUID>::emptySet() )
 {
-   typedef walberla::field::MassEvaluation< DensityField_T, Filter_T > ME_T;
+   using ME_T = walberla::field::MassEvaluation<DensityField_T, Filter_T>;
    auto evaluation = shared_ptr< ME_T >( new ME_T( blocks, fieldId, filter, plotFrequency, logFrequency, filename, requiredSelectors, incompatibleSelectors ) );
    evaluation->setDomainNormalization( internal::massEvaluationDomain( blocks, level ) );
    return evaluation;
@@ -143,7 +143,7 @@ makeMassEvaluation( const shared_ptr< StructuredBlockStorage > & blocks, const u
                     const Set<SUID> & requiredSelectors = Set<SUID>::emptySet(),
                     const Set<SUID> & incompatibleSelectors = Set<SUID>::emptySet() )
 {
-   typedef walberla::field::MassEvaluation< DensityField_T, field::DefaultEvaluationFilter, Pseudo2D > ME_T;
+   using ME_T = walberla::field::MassEvaluation<DensityField_T, field::DefaultEvaluationFilter, Pseudo2D>;
    auto evaluation = shared_ptr< ME_T >( new ME_T( blocks, fieldId, plotFrequency, logFrequency, filename, requiredSelectors, incompatibleSelectors ) );
    evaluation->setDomainNormalization( internal::massEvaluationDomain( blocks, level ) );
    return evaluation;
@@ -158,7 +158,7 @@ makeMassEvaluation( const shared_ptr< StructuredBlockStorage > & blocks, const u
                     const Set<SUID> & requiredSelectors = Set<SUID>::emptySet(),
                     const Set<SUID> & incompatibleSelectors = Set<SUID>::emptySet() )
 {
-   typedef walberla::field::MassEvaluation< DensityField_T, walberla::field::FlagFieldEvaluationFilter<FlagField_T>, Pseudo2D > ME_T;
+   using ME_T = walberla::field::MassEvaluation<DensityField_T, walberla::field::FlagFieldEvaluationFilter<FlagField_T>, Pseudo2D>;
    auto evaluation = shared_ptr< ME_T >( new ME_T( blocks, fieldId, walberla::field::FlagFieldEvaluationFilter<FlagField_T>( flagFieldId, fluid ),
                                                    plotFrequency, logFrequency, filename, requiredSelectors, incompatibleSelectors ) );
    evaluation->setDomainNormalization( internal::massEvaluationDomain( blocks, level ) );
@@ -174,7 +174,7 @@ makeMassEvaluation( const shared_ptr< StructuredBlockStorage > & blocks, const u
                     const Set<SUID> & requiredSelectors = Set<SUID>::emptySet(),
                     const Set<SUID> & incompatibleSelectors = Set<SUID>::emptySet() )
 {
-   typedef walberla::field::MassEvaluation< DensityField_T, Filter_T, Pseudo2D > ME_T;
+   using ME_T = walberla::field::MassEvaluation<DensityField_T, Filter_T, Pseudo2D>;
    auto evaluation = shared_ptr< ME_T >( new ME_T( blocks, fieldId, filter, plotFrequency, logFrequency, filename, requiredSelectors, incompatibleSelectors ) );
    evaluation->setDomainNormalization( internal::massEvaluationDomain( blocks, level ) );
    return evaluation;
@@ -202,7 +202,7 @@ shared_ptr< walberla::field::MassEvaluation< DensityField_T > > makeMassEvaluati
                                                                                     const Set<SUID> & incompatibleSelectors = Set<SUID>::emptySet() )
 {
    WALBERLA_LBM_MAKE_MASS_EVALUATION_CONFIG_PARSER( config )
-   typedef walberla::field::MassEvaluation< DensityField_T > ME_T;
+   using ME_T = walberla::field::MassEvaluation<DensityField_T>;
    auto evaluation = shared_ptr< ME_T >( new ME_T( blocks, fieldId, defaultPlotFrequency, defaultLogFrequency, defaultFilename, requiredSelectors, incompatibleSelectors ) );
    WALBERLA_FIELD_MAKE_MASS_EVALUATION_SET_AND_RETURN()
 }
@@ -217,7 +217,7 @@ makeMassEvaluation( const Config_T & config,
                     const Set<SUID> & incompatibleSelectors = Set<SUID>::emptySet() )
 {
    WALBERLA_LBM_MAKE_MASS_EVALUATION_CONFIG_PARSER( config )
-   typedef walberla::field::MassEvaluation< DensityField_T, walberla::field::FlagFieldEvaluationFilter<FlagField_T> > ME_T;
+   using ME_T = walberla::field::MassEvaluation<DensityField_T, walberla::field::FlagFieldEvaluationFilter<FlagField_T>>;
    auto evaluation = shared_ptr< ME_T >( new ME_T( blocks, fieldId, walberla::field::FlagFieldEvaluationFilter<FlagField_T>( flagFieldId, fluid ),
                                                    defaultPlotFrequency, defaultLogFrequency, defaultFilename, requiredSelectors, incompatibleSelectors ) );
    WALBERLA_FIELD_MAKE_MASS_EVALUATION_SET_AND_RETURN()
@@ -232,7 +232,7 @@ shared_ptr< walberla::field::MassEvaluation< DensityField_T, Filter_T > > makeMa
                                                                                               const Set<SUID> & incompatibleSelectors = Set<SUID>::emptySet() )
 {
    WALBERLA_LBM_MAKE_MASS_EVALUATION_CONFIG_PARSER( config )
-   typedef walberla::field::MassEvaluation< DensityField_T, Filter_T > ME_T;
+   using ME_T = walberla::field::MassEvaluation<DensityField_T, Filter_T>;
    auto evaluation = shared_ptr< ME_T >( new ME_T( blocks, fieldId, filter, defaultPlotFrequency, defaultLogFrequency, defaultFilename, requiredSelectors, incompatibleSelectors ) );
    WALBERLA_FIELD_MAKE_MASS_EVALUATION_SET_AND_RETURN()
 }
@@ -249,7 +249,7 @@ makeMassEvaluation( const Config_T & config,
                     const Set<SUID> & incompatibleSelectors = Set<SUID>::emptySet() )
 {
    WALBERLA_LBM_MAKE_MASS_EVALUATION_CONFIG_PARSER( config )
-   typedef walberla::field::MassEvaluation< DensityField_T, field::DefaultEvaluationFilter, Pseudo2D > ME_T;
+   using ME_T = walberla::field::MassEvaluation<DensityField_T, field::DefaultEvaluationFilter, Pseudo2D>;
    auto evaluation = shared_ptr< ME_T >( new ME_T( blocks, fieldId, defaultPlotFrequency, defaultLogFrequency, defaultFilename, requiredSelectors, incompatibleSelectors ) );
    WALBERLA_FIELD_MAKE_MASS_EVALUATION_SET_AND_RETURN()
 }
@@ -264,7 +264,7 @@ makeMassEvaluation( const Config_T & config,
                     const Set<SUID> & incompatibleSelectors = Set<SUID>::emptySet() )
 {
    WALBERLA_LBM_MAKE_MASS_EVALUATION_CONFIG_PARSER( config )
-   typedef walberla::field::MassEvaluation< DensityField_T, walberla::field::FlagFieldEvaluationFilter<FlagField_T>, Pseudo2D > ME_T;
+   using ME_T = walberla::field::MassEvaluation<DensityField_T, walberla::field::FlagFieldEvaluationFilter<FlagField_T>, Pseudo2D>;
    auto evaluation = shared_ptr< ME_T >( new ME_T( blocks, fieldId, walberla::field::FlagFieldEvaluationFilter<FlagField_T>( flagFieldId, fluid ),
                                                    defaultPlotFrequency, defaultLogFrequency, defaultFilename, requiredSelectors, incompatibleSelectors ) );
    WALBERLA_FIELD_MAKE_MASS_EVALUATION_SET_AND_RETURN()
@@ -280,7 +280,7 @@ makeMassEvaluation( const Config_T & config,
                     const Set<SUID> & incompatibleSelectors = Set<SUID>::emptySet() )
 {
    WALBERLA_LBM_MAKE_MASS_EVALUATION_CONFIG_PARSER( config )
-   typedef walberla::field::MassEvaluation< DensityField_T, Filter_T, Pseudo2D > ME_T;
+   using ME_T = walberla::field::MassEvaluation<DensityField_T, Filter_T, Pseudo2D>;
    auto evaluation = shared_ptr< ME_T >( new ME_T( blocks, fieldId, filter, defaultPlotFrequency, defaultLogFrequency, defaultFilename, requiredSelectors, incompatibleSelectors ) );
    WALBERLA_FIELD_MAKE_MASS_EVALUATION_SET_AND_RETURN()
 }
diff --git a/src/lbm/blockforest/PostProcessing.h b/src/lbm/blockforest/PostProcessing.h
index 361303cc1..e0037f506 100644
--- a/src/lbm/blockforest/PostProcessing.h
+++ b/src/lbm/blockforest/PostProcessing.h
@@ -36,7 +36,7 @@ namespace lbm {
 
 namespace internal
 {
-   typedef field::Field< uint8_t, 1 > MarkerField_T;
+   using MarkerField_T = field::Field<uint8_t, 1>;
 }
 
 
@@ -47,9 +47,9 @@ class PostProcessing
 {
 public:
 
-   typedef PdfField< LatticeModel_T > PdfField_T;
-   typedef typename LatticeModel_T::Stencil Stencil_T;
-   typedef typename NeighborsStencil<LatticeModel_T>::type NeighborsStencil_T;
+   using PdfField_T = PdfField<LatticeModel_T>;
+   using Stencil_T = typename LatticeModel_T::Stencil;
+   using NeighborsStencil_T = typename NeighborsStencil<LatticeModel_T>::type;
 
    PostProcessing( const BlockDataID & pdfFieldId, const BlockDataID & markerFieldId, const Filter_T & filter ) :
       pdfFieldId_( pdfFieldId ), markerFieldId_( markerFieldId ), filter_( filter )
@@ -316,7 +316,7 @@ class MarkerFieldGenerator
 {
 public:
 
-   typedef PdfField< LatticeModel_T > PdfField_T;
+   using PdfField_T = PdfField<LatticeModel_T>;
 
    MarkerFieldGenerator( const BlockDataID & pdfFieldId, const BlockDataID & markerFieldId, const Filter_T & filter ) :
       pdfFieldId_( pdfFieldId ), markerFieldId_( markerFieldId ), filter_( filter )
@@ -371,7 +371,7 @@ class MarkerData : public blockforest::BlockDataHandling< internal::MarkerField_
 {
 public:
 
-   typedef PdfField< LatticeModel_T > PdfField_T;
+   using PdfField_T = PdfField<LatticeModel_T>;
 
    MarkerData( const BlockDataID & pdfFieldId, const Filter_T & filter ) :
       pdfFieldId_( pdfFieldId ), filter_( filter )
diff --git a/src/lbm/boundary/Curved.h b/src/lbm/boundary/Curved.h
index 045a02398..927554389 100644
--- a/src/lbm/boundary/Curved.h
+++ b/src/lbm/boundary/Curved.h
@@ -48,11 +48,11 @@ namespace lbm {
 template< typename LatticeModel_T, typename FlagField_T >
 class Curved : public Boundary< typename FlagField_T::flag_t >
 {
-   typedef PdfField< LatticeModel_T >        PDFField;
-   typedef typename LatticeModel_T::Stencil  Stencil;
-   typedef typename FlagField_T::flag_t      flag_t;
+   using PDFField = PdfField<LatticeModel_T>;
+   using Stencil = typename LatticeModel_T::Stencil;
+   using flag_t = typename FlagField_T::flag_t;
 
-   typedef GhostLayerField< shared_ptr< std::array<real_t, Stencil::Size> >, 1 >  WeightField;
+   using WeightField = GhostLayerField<shared_ptr<std::array<real_t, Stencil::Size>>, 1>;
 
 public:
 
diff --git a/src/lbm/boundary/DiffusionDirichlet.h b/src/lbm/boundary/DiffusionDirichlet.h
index 96a560085..643027743 100644
--- a/src/lbm/boundary/DiffusionDirichlet.h
+++ b/src/lbm/boundary/DiffusionDirichlet.h
@@ -51,10 +51,10 @@ class DiffusionDirichlet : public Boundary<flag_t>
    static_assert( LatticeModel_T::compressible,                                                             "Only works with compressible models!" );
    //static_assert( (std::is_same< typename LatticeModel_T::ForceModel::tag, force_model::None_tag >::value), "Only works without additional forces!" );
 
-   typedef PdfField< LatticeModel_T >        PDFField;
-   typedef typename LatticeModel_T::Stencil  Stencil;
+   using PDFField = PdfField<LatticeModel_T>;
+   using Stencil = typename LatticeModel_T::Stencil;
 
-   typedef GhostLayerField< real_t, 1 > ScalarField;
+   using ScalarField = GhostLayerField<real_t, 1>;
 
 public:
 
diff --git a/src/lbm/boundary/DynamicUBB.h b/src/lbm/boundary/DynamicUBB.h
index 945cc36f3..07aac83ce 100644
--- a/src/lbm/boundary/DynamicUBB.h
+++ b/src/lbm/boundary/DynamicUBB.h
@@ -54,10 +54,10 @@ namespace lbm {
 template< typename LatticeModel_T, typename flag_t, typename VelocityFunctor_T, bool AdaptVelocityToExternalForce = false, bool StoreForce = false >
 class DynamicUBB : public Boundary<flag_t>
 {
-   typedef lbm::PdfField< LatticeModel_T >   PDFField;
-   typedef typename LatticeModel_T::Stencil  Stencil;
+   using PDFField = lbm::PdfField<LatticeModel_T>;
+   using Stencil = typename LatticeModel_T::Stencil;
 
-   typedef GhostLayerField< Vector3<real_t>, 1 > ForceField;
+   using ForceField = GhostLayerField<Vector3<real_t>, 1>;
 
 public:
 
diff --git a/src/lbm/boundary/FreeDiffusion.h b/src/lbm/boundary/FreeDiffusion.h
index d264eda6d..4e7aab582 100644
--- a/src/lbm/boundary/FreeDiffusion.h
+++ b/src/lbm/boundary/FreeDiffusion.h
@@ -33,8 +33,8 @@ namespace lbm {
    template< typename LatticeModel_T, typename FlagField_T > class FreeDiffusion : public FreeSlip< LatticeModel_T, FlagField_T >
    {
    protected:
-      typedef typename FreeSlip< LatticeModel_T, FlagField_T >::flag_t    flag_t;
-      typedef typename FreeSlip< LatticeModel_T, FlagField_T >::PDFField  PDFField;
+      using flag_t = typename FreeSlip<LatticeModel_T, FlagField_T>::flag_t;
+      using PDFField = typename FreeSlip<LatticeModel_T, FlagField_T>::PDFField;
 
    public:
       FreeDiffusion( const BoundaryUID& boundaryUID, const FlagUID& uid, PDFField* const pdfField, const FlagField_T* const flagField, const flag_t domain )
diff --git a/src/lbm/boundary/FreeSlip.h b/src/lbm/boundary/FreeSlip.h
index 14d3cd0f1..1f5a35be9 100644
--- a/src/lbm/boundary/FreeSlip.h
+++ b/src/lbm/boundary/FreeSlip.h
@@ -46,9 +46,9 @@ template< typename LatticeModel_T, typename FlagField_T >
 class FreeSlip : public Boundary< typename FlagField_T::flag_t > {
 
 protected:
-   typedef PdfField< LatticeModel_T >        PDFField;
-   typedef typename LatticeModel_T::Stencil  Stencil;
-   typedef typename FlagField_T::flag_t      flag_t;
+   using PDFField = PdfField<LatticeModel_T>;
+   using Stencil = typename LatticeModel_T::Stencil;
+   using flag_t = typename FlagField_T::flag_t;
 
 public:
 
diff --git a/src/lbm/boundary/NoDiffusion.h b/src/lbm/boundary/NoDiffusion.h
index f6bbec40b..fb0e295ce 100644
--- a/src/lbm/boundary/NoDiffusion.h
+++ b/src/lbm/boundary/NoDiffusion.h
@@ -33,7 +33,7 @@ namespace lbm {
    template< typename LatticeModel_T, typename flag_t > class NoDiffusion : public NoSlip< LatticeModel_T, flag_t >
    {
    protected:
-      typedef typename NoSlip< LatticeModel_T, flag_t >::PDFField  PDFField;
+      using PDFField = typename NoSlip<LatticeModel_T, flag_t>::PDFField;
 
    public:
       NoDiffusion( const BoundaryUID& boundaryUID, const FlagUID& uid, PDFField* const pdfField )
diff --git a/src/lbm/boundary/NoSlip.h b/src/lbm/boundary/NoSlip.h
index dc769d345..3c52f5872 100644
--- a/src/lbm/boundary/NoSlip.h
+++ b/src/lbm/boundary/NoSlip.h
@@ -47,10 +47,10 @@ class NoSlip : public Boundary<flag_t>
 {
 protected:
 
-   typedef PdfField< LatticeModel_T >        PDFField;
-   typedef typename LatticeModel_T::Stencil  Stencil;
+   using PDFField = PdfField<LatticeModel_T>;
+   using Stencil = typename LatticeModel_T::Stencil;
 
-   typedef GhostLayerField< Vector3<real_t>, 1 > ForceField;
+   using ForceField = GhostLayerField<Vector3<real_t>, 1>;
 
 public:
 
diff --git a/src/lbm/boundary/Outlet.h b/src/lbm/boundary/Outlet.h
index da59ec47c..c512345b7 100644
--- a/src/lbm/boundary/Outlet.h
+++ b/src/lbm/boundary/Outlet.h
@@ -47,9 +47,9 @@ template< typename LatticeModel_T, typename FlagField_T, int Numerator = 2, int
 class Outlet : public Boundary< typename FlagField_T::flag_t > {
 
 protected:
-   typedef PdfField< LatticeModel_T >        PDFField;
-   typedef typename LatticeModel_T::Stencil  Stencil;
-   typedef typename FlagField_T::flag_t      flag_t;
+   using PDFField = PdfField<LatticeModel_T>;
+   using Stencil = typename LatticeModel_T::Stencil;
+   using flag_t = typename FlagField_T::flag_t;
 
 public:
 
diff --git a/src/lbm/boundary/ParserUBB.h b/src/lbm/boundary/ParserUBB.h
index 2ef68c194..98aae788e 100644
--- a/src/lbm/boundary/ParserUBB.h
+++ b/src/lbm/boundary/ParserUBB.h
@@ -50,10 +50,10 @@ namespace lbm {
 template< typename LatticeModel_T, typename flag_t, bool AdaptVelocityToExternalForce = false, bool StoreForce = false >
 class ParserUBB : public Boundary<flag_t>
 {
-   typedef lbm::PdfField< LatticeModel_T >   PDFField;
-   typedef typename LatticeModel_T::Stencil  Stencil;
+   using PDFField = lbm::PdfField<LatticeModel_T>;
+   using Stencil = typename LatticeModel_T::Stencil;
 
-   typedef GhostLayerField< Vector3<real_t>, 1 > ForceField;
+   using ForceField = GhostLayerField<Vector3<real_t>, 1>;
 
 public:
 
@@ -108,8 +108,8 @@ public:
       return velocity != nullptr;
    }
 
-   typedef GhostLayerField< shared_ptr<Parser>, 1 > ParserField;
-   typedef GhostLayerField< Vector3<real_t>, 1 >    VelocityField;
+   using ParserField = GhostLayerField<shared_ptr<Parser>, 1>;
+   using VelocityField = GhostLayerField<Vector3<real_t>, 1>;
 
    static shared_ptr<Parser> createConfiguration( const Config::BlockHandle & config )
       { return make_shared<Parser>( config ); }
diff --git a/src/lbm/boundary/Pressure.h b/src/lbm/boundary/Pressure.h
index 8dafb7e46..bbb93f770 100644
--- a/src/lbm/boundary/Pressure.h
+++ b/src/lbm/boundary/Pressure.h
@@ -48,10 +48,10 @@ namespace lbm {
 template< typename LatticeModel_T, typename flag_t >
 class Pressure : public Boundary<flag_t>
 {
-   typedef PdfField< LatticeModel_T >        PDFField;
-   typedef typename LatticeModel_T::Stencil  Stencil;
+   using PDFField = PdfField<LatticeModel_T>;
+   using Stencil = typename LatticeModel_T::Stencil;
 
-   typedef GhostLayerField< real_t, 1 >  LatticeDensityField;
+   using LatticeDensityField = GhostLayerField<real_t, 1>;
 
 public:
 
diff --git a/src/lbm/boundary/SimpleDiffusionDirichlet.h b/src/lbm/boundary/SimpleDiffusionDirichlet.h
index 1aca569bb..e3a6dde2f 100644
--- a/src/lbm/boundary/SimpleDiffusionDirichlet.h
+++ b/src/lbm/boundary/SimpleDiffusionDirichlet.h
@@ -51,8 +51,8 @@ class SimpleDiffusionDirichlet : public Boundary<flag_t>
    static_assert( LatticeModel_T::compressible,                                                             "Only works with compressible models!" );
    //static_assert( (std::is_same< typename LatticeModel_T::ForceModel::tag, force_model::None_tag >::value), "Only works without additional forces!" );
 
-   typedef PdfField< LatticeModel_T >        PDFField;
-   typedef typename LatticeModel_T::Stencil  Stencil;
+   using PDFField = PdfField<LatticeModel_T>;
+   using Stencil = typename LatticeModel_T::Stencil;
 
 public:
 
diff --git a/src/lbm/boundary/SimplePAB.h b/src/lbm/boundary/SimplePAB.h
index b4cd589cf..f35429958 100644
--- a/src/lbm/boundary/SimplePAB.h
+++ b/src/lbm/boundary/SimplePAB.h
@@ -57,11 +57,11 @@ class SimplePAB : public Boundary<typename FlagFieldT::flag_t>
    static_assert( LatticeModel_T::compressible == false,                                                             "Only works with incompressible models!" );
    static_assert( (std::is_same< typename LatticeModel_T::ForceModel::tag, force_model::None_tag >::value),        "Only works without additional forces!" );
 
-   typedef PdfField< LatticeModel_T >        PDFField;
-   typedef typename LatticeModel_T::Stencil  Stencil;
-   typedef typename FlagFieldT::flag_t       flag_t;
+   using PDFField = PdfField<LatticeModel_T>;
+   using Stencil = typename LatticeModel_T::Stencil;
+   using flag_t = typename FlagFieldT::flag_t;
 
-   typedef Vector3<real_t> Vec3Real;
+   using Vec3Real = Vector3<real_t>;
 
 public:
 
diff --git a/src/lbm/boundary/SimplePressure.h b/src/lbm/boundary/SimplePressure.h
index d7b39045f..543360d91 100644
--- a/src/lbm/boundary/SimplePressure.h
+++ b/src/lbm/boundary/SimplePressure.h
@@ -48,10 +48,10 @@ namespace lbm {
 template< typename LatticeModel_T, typename flag_t >
 class SimplePressure : public Boundary<flag_t>
 {
-   typedef PdfField< LatticeModel_T >        PDFField;
-   typedef typename LatticeModel_T::Stencil  Stencil;
+   using PDFField = PdfField<LatticeModel_T>;
+   using Stencil = typename LatticeModel_T::Stencil;
 
-   typedef Vector3<real_t>  Vec3Real;
+   using Vec3Real = Vector3<real_t>;
 
 public:
 
diff --git a/src/lbm/boundary/SimpleUBB.h b/src/lbm/boundary/SimpleUBB.h
index ba07eedc4..8c1c93af0 100644
--- a/src/lbm/boundary/SimpleUBB.h
+++ b/src/lbm/boundary/SimpleUBB.h
@@ -48,10 +48,10 @@ namespace lbm {
 template< typename LatticeModel_T, typename flag_t, bool AdaptVelocityToExternalForce = false, bool StoreForce = false >
 class SimpleUBB : public Boundary<flag_t>
 {
-   typedef PdfField< LatticeModel_T >        PDFField;
-   typedef typename LatticeModel_T::Stencil  Stencil;
+   using PDFField = PdfField<LatticeModel_T>;
+   using Stencil = typename LatticeModel_T::Stencil;
 
-   typedef GhostLayerField< Vector3<real_t>, 1 > ForceField;
+   using ForceField = GhostLayerField<Vector3<real_t>, 1>;
 
 public:
 
diff --git a/src/lbm/boundary/SimpleVelocityBoundary.h b/src/lbm/boundary/SimpleVelocityBoundary.h
index edb6a4d94..1eda8237c 100644
--- a/src/lbm/boundary/SimpleVelocityBoundary.h
+++ b/src/lbm/boundary/SimpleVelocityBoundary.h
@@ -47,8 +47,8 @@ namespace lbm {
 template< typename LatticeModel_T, typename flag_t >
 class SimpleVelocityBoundary : public Boundary<flag_t>
 {
-   typedef PdfField< LatticeModel_T >        PDFField;
-   typedef typename LatticeModel_T::Stencil  Stencil;
+   using PDFField = PdfField<LatticeModel_T>;
+   using Stencil = typename LatticeModel_T::Stencil;
 
 public:
 
diff --git a/src/lbm/boundary/UBB.h b/src/lbm/boundary/UBB.h
index e2621fb2f..c866776d2 100644
--- a/src/lbm/boundary/UBB.h
+++ b/src/lbm/boundary/UBB.h
@@ -49,12 +49,12 @@ namespace lbm {
 template< typename LatticeModel_T, typename flag_t, bool AdaptVelocityToExternalForce = false, bool StoreForce = false >
 class UBB : public Boundary<flag_t>
 {
-   typedef PdfField< LatticeModel_T >        PDFField;
-   typedef typename LatticeModel_T::Stencil  Stencil;
+   using PDFField = PdfField<LatticeModel_T>;
+   using Stencil = typename LatticeModel_T::Stencil;
 
-   typedef GhostLayerField< Vector3<real_t>, 1 >  VelField;
+   using VelField = GhostLayerField<Vector3<real_t>, 1>;
 
-   typedef GhostLayerField< Vector3<real_t>, 1 > ForceField;
+   using ForceField = GhostLayerField<Vector3<real_t>, 1>;
 
 public:
 
diff --git a/src/lbm/boundary/VelocityBoundary.h b/src/lbm/boundary/VelocityBoundary.h
index 0673f5a28..c5be0e0a6 100644
--- a/src/lbm/boundary/VelocityBoundary.h
+++ b/src/lbm/boundary/VelocityBoundary.h
@@ -48,10 +48,10 @@ namespace lbm {
 template< typename LatticeModel_T, typename flag_t >
 class VelocityBoundary : public Boundary<flag_t>
 {
-   typedef PdfField< LatticeModel_T >        PDFField;
-   typedef typename LatticeModel_T::Stencil  Stencil;
+   using PDFField = PdfField<LatticeModel_T>;
+   using Stencil = typename LatticeModel_T::Stencil;
 
-   typedef GhostLayerField< shared_ptr< std::vector<real_t> >, 1 >  VelField;
+   using VelField = GhostLayerField<shared_ptr<std::vector<real_t>>, 1>;
 
 public:
 
diff --git a/src/lbm/boundary/factories/DefaultBoundaryHandling.h b/src/lbm/boundary/factories/DefaultBoundaryHandling.h
index 328bd1aac..bdd2fb493 100644
--- a/src/lbm/boundary/factories/DefaultBoundaryHandling.h
+++ b/src/lbm/boundary/factories/DefaultBoundaryHandling.h
@@ -71,16 +71,16 @@ template <typename LatticeModel, typename FlagFieldT >
 class DefaultBoundaryHandlingFactory
 {
 public:
-   typedef typename FlagFieldT::flag_t            flag_t;
-   typedef typename LatticeModel::Stencil         Stencil;
-   typedef NoSlip< LatticeModel, flag_t >         BcNoSlip;
-   typedef FreeSlip< LatticeModel, FlagFieldT >   BcFreeSlip;
-   typedef SimpleUBB< LatticeModel, flag_t >      BcSimpleUBB;
-   typedef SimplePressure< LatticeModel, flag_t > BcSimplePressure;
-   typedef Vector3<real_t>                        Velocity;
-   typedef PdfField< LatticeModel >               PdfFieldLM;
-
-   typedef walberla::boundary::BoundaryHandling< FlagFieldT, Stencil, BcNoSlip, BcFreeSlip, BcSimpleUBB, BcSimpleUBB, BcSimplePressure, BcSimplePressure > BoundaryHandling;
+   using flag_t = typename FlagFieldT::flag_t;
+   using Stencil = typename LatticeModel::Stencil;
+   using BcNoSlip = NoSlip<LatticeModel, flag_t>;
+   using BcFreeSlip = FreeSlip<LatticeModel, FlagFieldT>;
+   using BcSimpleUBB = SimpleUBB<LatticeModel, flag_t>;
+   using BcSimplePressure = SimplePressure<LatticeModel, flag_t>;
+   using Velocity = Vector3<real_t>;
+   using PdfFieldLM = PdfField<LatticeModel>;
+
+   using BoundaryHandling = walberla::boundary::BoundaryHandling<FlagFieldT, Stencil, BcNoSlip, BcFreeSlip, BcSimpleUBB, BcSimpleUBB, BcSimplePressure, BcSimplePressure>;
 
    static BlockDataID addBoundaryHandlingToStorage( const shared_ptr< StructuredBlockStorage > & bs, const std::string & identifier,
                                                     BlockDataID flagFieldID, BlockDataID pdfFieldID, const Set< FlagUID > & flagUIDSet,
diff --git a/src/lbm/boundary/factories/DefaultBoundaryHandlingCollection.h b/src/lbm/boundary/factories/DefaultBoundaryHandlingCollection.h
index 54aafd334..49e77691a 100644
--- a/src/lbm/boundary/factories/DefaultBoundaryHandlingCollection.h
+++ b/src/lbm/boundary/factories/DefaultBoundaryHandlingCollection.h
@@ -37,11 +37,11 @@ template< typename LatticeModel_T, typename DiffusionLatticeModel_T, typename Fl
 class DefaultBoundaryHandlingCollectionFactory
 {
 private:
-   typedef typename DefaultBoundaryHandlingFactory         < LatticeModel_T,          FlagField_T >::BoundaryHandling    DefaultBoundaryHandling_T;
-   typedef typename DefaultDiffusionBoundaryHandlingFactory< DiffusionLatticeModel_T, FlagField_T >::BoundaryHandling_T  DefaultDiffusionBoundaryHandlingFactory_T;
+   using DefaultBoundaryHandling_T = typename DefaultBoundaryHandlingFactory<LatticeModel_T, FlagField_T>::BoundaryHandling;
+   using DefaultDiffusionBoundaryHandlingFactory_T = typename DefaultDiffusionBoundaryHandlingFactory<DiffusionLatticeModel_T, FlagField_T>::BoundaryHandling_T;
 
 public:
-   typedef BoundaryHandlingCollection< FlagField_T, DefaultBoundaryHandling_T &, DefaultDiffusionBoundaryHandlingFactory_T & > BoundaryHandlingCollection_T;
+   using BoundaryHandlingCollection_T = BoundaryHandlingCollection<FlagField_T, DefaultBoundaryHandling_T &, DefaultDiffusionBoundaryHandlingFactory_T &>;
 
 
 private:
diff --git a/src/lbm/boundary/factories/DefaultDiffusionBoundaryHandling.h b/src/lbm/boundary/factories/DefaultDiffusionBoundaryHandling.h
index e32559776..99754f88f 100644
--- a/src/lbm/boundary/factories/DefaultDiffusionBoundaryHandling.h
+++ b/src/lbm/boundary/factories/DefaultDiffusionBoundaryHandling.h
@@ -44,19 +44,19 @@ template< typename LatticeModel_T, typename FlagField_T >
 class DefaultDiffusionBoundaryHandlingFactory
 {
 private:
-   typedef typename FlagField_T::flag_t flag_t;
+   using flag_t = typename FlagField_T::flag_t;
 
-   typedef typename LatticeModel_T::Stencil Stencil;
+   using Stencil = typename LatticeModel_T::Stencil;
 
 public:
-   typedef lbm::DiffusionDirichlet      < LatticeModel_T, flag_t      >  DiffusionDirichlet_T;
-   typedef lbm::SimpleDiffusionDirichlet< LatticeModel_T, flag_t      >  SimpleDiffusionDirichlet_T;
-   typedef lbm::NoDiffusion             < LatticeModel_T, flag_t      >  NoDiffusion_T;
-   typedef lbm::FreeDiffusion           < LatticeModel_T, FlagField_T >  FreeDiffusion_T;
+   using DiffusionDirichlet_T = lbm::DiffusionDirichlet<LatticeModel_T, flag_t>;
+   using SimpleDiffusionDirichlet_T = lbm::SimpleDiffusionDirichlet<LatticeModel_T, flag_t>;
+   using NoDiffusion_T = lbm::NoDiffusion<LatticeModel_T, flag_t>;
+   using FreeDiffusion_T = lbm::FreeDiffusion<LatticeModel_T, FlagField_T>;
 
 public:
-   typedef walberla::boundary::BoundaryHandling< FlagField_T, Stencil, DiffusionDirichlet_T, SimpleDiffusionDirichlet_T, NoDiffusion_T, FreeDiffusion_T, SimpleDiffusionDirichlet_T, SimpleDiffusionDirichlet_T > BoundaryHandling_T;
-   typedef BoundaryHandling_T BoundaryHandling;
+   using BoundaryHandling_T = walberla::boundary::BoundaryHandling<FlagField_T, Stencil, DiffusionDirichlet_T, SimpleDiffusionDirichlet_T, NoDiffusion_T, FreeDiffusion_T, SimpleDiffusionDirichlet_T, SimpleDiffusionDirichlet_T>;
+   using BoundaryHandling = BoundaryHandling_T;
 
    const static FlagUID& getDiffusionDirichletFlagUID()        { static FlagUID uid( "DiffusionDirichlet"        ); return uid; }
    const static FlagUID& getSimpleDiffusionDirichletFlagUID()  { static FlagUID uid( "SimpleDiffusionDirichlet"  ); return uid; }
@@ -87,7 +87,7 @@ private:
    static BoundaryHandling_T* createDefaultDiffusionBoundaryHandlingFactory( 
       IBlock* const block, const StructuredBlockStorage* const /*bs*/, const BlockDataID& flagFieldID, const Set< FlagUID > & domainFlagUIDs, const BlockDataID& pdfFieldID, const Set< FlagUID > & initFlagUIDs )
    {
-      typedef lbm::PdfField< LatticeModel_T > PDFField_T;
+      using PDFField_T = lbm::PdfField<LatticeModel_T>;
 
       WALBERLA_ASSERT_NOT_NULLPTR( block );
 
diff --git a/src/lbm/boundary/factories/ExtendedBoundaryHandlingFactory.h b/src/lbm/boundary/factories/ExtendedBoundaryHandlingFactory.h
index 118065cff..730ceb008 100644
--- a/src/lbm/boundary/factories/ExtendedBoundaryHandlingFactory.h
+++ b/src/lbm/boundary/factories/ExtendedBoundaryHandlingFactory.h
@@ -72,19 +72,19 @@ template <typename LatticeModel, typename FlagFieldT >
 class ExtendedBoundaryHandlingFactory
 {
 public:
-   typedef typename FlagFieldT::flag_t            flag_t;
-   typedef typename LatticeModel::Stencil         Stencil;
-   typedef Vector3<real_t>                        Velocity;
-   typedef PdfField< LatticeModel >               PdfFieldLM;
-
-   typedef NoSlip< LatticeModel, flag_t >         BcNoSlip;
-   typedef FreeSlip< LatticeModel, FlagFieldT >   BcFreeSlip;
-   typedef Pressure< LatticeModel, flag_t >       BcPressure;
-   typedef ParserUBB<LatticeModel, flag_t>        BcUBB;
-   typedef Outlet<LatticeModel, FlagFieldT >      BcOutlet;
-   typedef Curved<LatticeModel, FlagFieldT >      BcCurved;
-
-   typedef walberla::boundary::BoundaryHandling< FlagFieldT, Stencil, BcNoSlip, BcFreeSlip, BcPressure, BcUBB, BcOutlet, BcCurved >  BoundaryHandling;
+   using flag_t = typename FlagFieldT::flag_t;
+   using Stencil = typename LatticeModel::Stencil;
+   using Velocity = Vector3<real_t>;
+   using PdfFieldLM = PdfField<LatticeModel>;
+
+   using BcNoSlip = NoSlip<LatticeModel, flag_t>;
+   using BcFreeSlip = FreeSlip<LatticeModel, FlagFieldT>;
+   using BcPressure = Pressure<LatticeModel, flag_t>;
+   using BcUBB = ParserUBB<LatticeModel, flag_t>;
+   using BcOutlet = Outlet<LatticeModel, FlagFieldT>;
+   using BcCurved = Curved<LatticeModel, FlagFieldT>;
+
+   using BoundaryHandling = walberla::boundary::BoundaryHandling<FlagFieldT, Stencil, BcNoSlip, BcFreeSlip, BcPressure, BcUBB, BcOutlet, BcCurved>;
 
    static BlockDataID addBoundaryHandlingToStorage( const shared_ptr< StructuredBlockStorage > & bs, const std::string & identifier,
                                                     BlockDataID flagFieldID, BlockDataID pdfFieldID, const Set< FlagUID > & flagUIDSet)
diff --git a/src/lbm/evaluations/Permeability.h b/src/lbm/evaluations/Permeability.h
index 997bda395..94e146f24 100644
--- a/src/lbm/evaluations/Permeability.h
+++ b/src/lbm/evaluations/Permeability.h
@@ -43,12 +43,12 @@ class Permeability
 {
 public:
 
-   typedef PdfField_T         PdfField;
-   typedef BoundaryHandling_T BoundaryHandling;
+   using PdfField = PdfField_T;
+   using BoundaryHandling = BoundaryHandling_T;
 
-   typedef typename PdfField_T::LatticeModel      LatticeModel;
-   typedef typename BoundaryHandling_T::FlagField FlagField;
-   typedef typename FlagField::flag_t             flag_t;
+   using LatticeModel = typename PdfField_T::LatticeModel;
+   using FlagField = typename BoundaryHandling_T::FlagField;
+   using flag_t = typename FlagField::flag_t;
 
    Permeability( real_t viscosity, const BlockDataID & pdfFieldId, const BlockDataID & boundaryHandlingId, const FlagUID & fluid,
                  const shared_ptr<blockforest::StructuredBlockForest> blocks );
diff --git a/src/lbm/field/Adaptors.h b/src/lbm/field/Adaptors.h
index 4bb36ca5c..f0c7ee172 100644
--- a/src/lbm/field/Adaptors.h
+++ b/src/lbm/field/Adaptors.h
@@ -37,9 +37,9 @@ template< typename LatticeModel_T >
 class DensityAdaptionFunction
 {
 public:
-   typedef PdfField< LatticeModel_T >                 basefield_t;
-   typedef typename basefield_t::const_base_iterator  basefield_iterator;
-   typedef real_t                                     value_type;
+   using basefield_t = PdfField<LatticeModel_T>;
+   using basefield_iterator = typename basefield_t::const_base_iterator;
+   using value_type = real_t;
 
    static const uint_t F_SIZE = 1u;
 
@@ -62,9 +62,9 @@ template< typename LatticeModel_T >
 class VelocityVectorAdaptionFunction
 {
 public:
-   typedef PdfField< LatticeModel_T >                 basefield_t;
-   typedef typename basefield_t::const_base_iterator  basefield_iterator;
-   typedef Vector3<real_t>                            value_type;
+   using basefield_t = PdfField<LatticeModel_T>;
+   using basefield_iterator = typename basefield_t::const_base_iterator;
+   using value_type = Vector3<real_t>;
 
    static const uint_t F_SIZE = 1u;
 
@@ -86,11 +86,11 @@ template< typename LatticeModel_T, bool stream = false >
 class MomentumDensityVectorAdaptionFunction
 {
 public:
-   typedef PdfField< LatticeModel_T >                 basefield_t;
-   typedef typename basefield_t::const_base_iterator  basefield_iterator;
-   typedef Vector3<real_t>                            value_type;
+   using basefield_t = PdfField<LatticeModel_T>;
+   using basefield_iterator = typename basefield_t::const_base_iterator;
+   using value_type = Vector3<real_t>;
 
-   typedef typename LatticeModel_T::Stencil           Stencil;
+   using Stencil = typename LatticeModel_T::Stencil;
 
    static const uint_t F_SIZE = 1u;
 
@@ -114,9 +114,9 @@ template< typename LatticeModel_T >
 class VelocityAdaptionFunction
 {
 public:
-   typedef PdfField< LatticeModel_T >                 basefield_t;
-   typedef typename basefield_t::const_base_iterator  basefield_iterator;
-   typedef real_t                                     value_type;
+   using basefield_t = PdfField<LatticeModel_T>;
+   using basefield_iterator = typename basefield_t::const_base_iterator;
+   using value_type = real_t;
 
    static const uint_t F_SIZE = 3u;
 
@@ -142,11 +142,11 @@ template< typename LatticeModel_T, bool stream = false >
 class MomentumDensityAdaptionFunction
 {
 public:
-   typedef PdfField< LatticeModel_T >                 basefield_t;
-   typedef typename basefield_t::const_base_iterator  basefield_iterator;
-   typedef real_t                                     value_type;
+   using basefield_t = PdfField<LatticeModel_T>;
+   using basefield_iterator = typename basefield_t::const_base_iterator;
+   using value_type = real_t;
 
-   typedef typename LatticeModel_T::Stencil           Stencil;
+   using Stencil = typename LatticeModel_T::Stencil;
 
    static const uint_t F_SIZE = 3u;
 
@@ -173,9 +173,9 @@ template< typename LatticeModel_T >
 class ShearRateAdaptionFunction
 {
 public:
-   typedef PdfField< LatticeModel_T >                 basefield_t;
-   typedef typename basefield_t::const_base_iterator  basefield_iterator;
-   typedef real_t                                     value_type;
+   using basefield_t = PdfField<LatticeModel_T>;
+   using basefield_iterator = typename basefield_t::const_base_iterator;
+   using value_type = real_t;
 
    static const uint_t F_SIZE = 1u;
 
@@ -199,15 +199,15 @@ public:
 template< typename LatticeModel_T >
 struct Adaptor
 {
-   typedef field::GhostLayerFieldAdaptor<DensityAdaptionFunction       <LatticeModel_T>, 0> Density;
-   typedef field::GhostLayerFieldAdaptor<VelocityVectorAdaptionFunction<LatticeModel_T>, 0> VelocityVector;
-   typedef field::GhostLayerFieldAdaptor<VelocityAdaptionFunction      <LatticeModel_T>, 0> Velocity;
-   typedef field::GhostLayerFieldAdaptor<ShearRateAdaptionFunction     <LatticeModel_T>, 0> ShearRate;
-
-   typedef field::GhostLayerFieldAdaptor<MomentumDensityVectorAdaptionFunction<LatticeModel_T, true >, 1> StreamMomentumDensityVector;
-   typedef field::GhostLayerFieldAdaptor<MomentumDensityAdaptionFunction      <LatticeModel_T, true >, 1> StreamMomentumDensity;
-   typedef field::GhostLayerFieldAdaptor<MomentumDensityVectorAdaptionFunction<LatticeModel_T, false>, 0> CollideMomentumDensityVector;
-   typedef field::GhostLayerFieldAdaptor<MomentumDensityAdaptionFunction      <LatticeModel_T, false>, 0> CollideMomentumDensity;
+   using Density = field::GhostLayerFieldAdaptor<DensityAdaptionFunction<LatticeModel_T>, 0>;
+   using VelocityVector = field::GhostLayerFieldAdaptor<VelocityVectorAdaptionFunction<LatticeModel_T>, 0>;
+   using Velocity = field::GhostLayerFieldAdaptor<VelocityAdaptionFunction<LatticeModel_T>, 0>;
+   using ShearRate = field::GhostLayerFieldAdaptor<ShearRateAdaptionFunction<LatticeModel_T>, 0>;
+
+   using StreamMomentumDensityVector = field::GhostLayerFieldAdaptor<MomentumDensityVectorAdaptionFunction<LatticeModel_T, true>, 1>;
+   using StreamMomentumDensity = field::GhostLayerFieldAdaptor<MomentumDensityAdaptionFunction<LatticeModel_T, true>, 1>;
+   using CollideMomentumDensityVector = field::GhostLayerFieldAdaptor<MomentumDensityVectorAdaptionFunction<LatticeModel_T, false>, 0>;
+   using CollideMomentumDensity = field::GhostLayerFieldAdaptor<MomentumDensityAdaptionFunction<LatticeModel_T, false>, 0>;
 };
 
 
diff --git a/src/lbm/field/AddToStorage.h b/src/lbm/field/AddToStorage.h
index 287673ad4..cd3319a8b 100644
--- a/src/lbm/field/AddToStorage.h
+++ b/src/lbm/field/AddToStorage.h
@@ -40,8 +40,8 @@ class PdfFieldHandling : public field::BlockDataHandling< PdfField<LatticeModel_
 {
 public:
 
-   typedef PdfField<LatticeModel_T> PdfField_T;
-   typedef field::BlockDataHandling< PdfField_T, LatticeModel_T::Stencil::D == 2 > Base_T;
+   using PdfField_T = PdfField<LatticeModel_T>;
+   using Base_T = field::BlockDataHandling<PdfField_T, LatticeModel_T::Stencil::D == 2>;
 
    PdfFieldHandling( const weak_ptr< StructuredBlockStorage > & blocks, const LatticeModel_T & latticeModel,
                      const bool _initialize, const Vector3<real_t> & initialVelocity, const real_t initialDensity,
diff --git a/src/lbm/field/DensityAndMomentumDensity.h b/src/lbm/field/DensityAndMomentumDensity.h
index db732eb01..5a1d139b9 100644
--- a/src/lbm/field/DensityAndMomentumDensity.h
+++ b/src/lbm/field/DensityAndMomentumDensity.h
@@ -112,7 +112,7 @@ real_t getDensityAndMomentumDensityD3Q19( Vector3< real_t > & momentumDensity, c
    static_assert( (std::is_same< typename LatticeModel_T::Stencil, stencil::D3Q19 >::value), "This function works with D3Q19 stencils only!" );
 
    using namespace stencil;
-   typedef typename LatticeModel_T::Stencil Stencil;
+   using Stencil = typename LatticeModel_T::Stencil;
 
    momentumDensity[0] = it[ Stencil::idx[E] ] + it[ Stencil::idx[NE] ] + it[ Stencil::idx[SE] ] + it[ Stencil::idx[TE] ] + it[ Stencil::idx[BE] ] ;
    momentumDensity[1] = it[ Stencil::idx[N] ] + it[ Stencil::idx[NW] ] + it[ Stencil::idx[TN] ] + it[ Stencil::idx[BN] ];
@@ -138,7 +138,7 @@ real_t getDensityAndMomentumDensityD3Q19( Vector3< real_t > & momentumDensity, c
    static_assert( (std::is_same< typename LatticeModel_T::Stencil, stencil::D3Q19 >::value), "This function works with D3Q19 stencils only!" );
 
    using namespace stencil;
-   typedef typename LatticeModel_T::Stencil Stencil;
+   using Stencil = typename LatticeModel_T::Stencil;
 
    const auto & xyz0 = pdf(x,y,z,0);
 
diff --git a/src/lbm/field/Equilibrium.h b/src/lbm/field/Equilibrium.h
index 8b6635431..1fcd48033 100644
--- a/src/lbm/field/Equilibrium.h
+++ b/src/lbm/field/Equilibrium.h
@@ -210,7 +210,7 @@ struct Equilibrium< LatticeModel_T, typename std::enable_if< std::is_same< typen
    static_assert( LatticeModel_T::compressible == false,                                       "Only works with incompressible models!" );
    static_assert( LatticeModel_T::equilibriumAccuracyOrder == 2, "Only works for lattice models that require the equilibrium distribution to be order 2 accurate!" );
 
-   typedef typename LatticeModel_T::Stencil  Stencil;
+   using Stencil = typename LatticeModel_T::Stencil;
 
    template< typename FieldPtrOrIterator >
    static void set( FieldPtrOrIterator & it,
@@ -359,7 +359,7 @@ struct Equilibrium< LatticeModel_T, typename std::enable_if< std::is_same< typen
    static_assert( LatticeModel_T::compressible,                                                "Only works with compressible models!" );
    static_assert( LatticeModel_T::equilibriumAccuracyOrder == 2, "Only works for lattice models that require the equilibrium distribution to be order 2 accurate!" );
 
-   typedef typename LatticeModel_T::Stencil  Stencil;
+   using Stencil = typename LatticeModel_T::Stencil;
 
    template< typename FieldPtrOrIterator >
    static void set( FieldPtrOrIterator & it,
diff --git a/src/lbm/field/MomentumDensity.h b/src/lbm/field/MomentumDensity.h
index 782e82ef4..0a79a0fdc 100644
--- a/src/lbm/field/MomentumDensity.h
+++ b/src/lbm/field/MomentumDensity.h
@@ -103,7 +103,7 @@ void getMomentumDensityD3Q19( Vector3< real_t > & momentumDensity, const FieldPt
    static_assert( (std::is_same< typename LatticeModel_T::Stencil, stencil::D3Q19 >::value), "This function works with D3Q19 stencils only!" );
 
    using namespace stencil;
-   typedef typename LatticeModel_T::Stencil Stencil;
+   using Stencil = typename LatticeModel_T::Stencil;
 
    momentumDensity[0] = it[ Stencil::idx[E] ] + it[ Stencil::idx[NE] ] + it[ Stencil::idx[SE] ] + it[ Stencil::idx[TE] ] + it[ Stencil::idx[BE] ] -
                         it[ Stencil::idx[W] ] - it[ Stencil::idx[NW] ] - it[ Stencil::idx[SW] ] - it[ Stencil::idx[TW] ] - it[ Stencil::idx[BW] ];
@@ -120,7 +120,7 @@ void getMomentumDensityD3Q19( Vector3< real_t > & momentumDensity, const PdfFiel
    static_assert( (std::is_same< typename LatticeModel_T::Stencil, stencil::D3Q19 >::value), "This function works with D3Q19 stencils only!" );
 
    using namespace stencil;
-   typedef typename LatticeModel_T::Stencil Stencil;
+   using Stencil = typename LatticeModel_T::Stencil;
 
    const auto & xyz0 = pdf(x,y,z,0);
 
diff --git a/src/lbm/field/PdfField.h b/src/lbm/field/PdfField.h
index a9438e42b..178804a88 100644
--- a/src/lbm/field/PdfField.h
+++ b/src/lbm/field/PdfField.h
@@ -78,22 +78,22 @@ public:
    //** Type Definitions  **********************************************************************************************
    /*! \name Type Definitions */
    //@{
-   typedef LatticeModel_T                    LatticeModel;
-   typedef typename LatticeModel_T::Stencil  Stencil;
+   using LatticeModel = LatticeModel_T;
+   using Stencil = typename LatticeModel_T::Stencil;
 
-   typedef typename GhostLayerField< real_t, Stencil::Size >::value_type             value_type;
+   using value_type = typename GhostLayerField<real_t, Stencil::Size>::value_type;
 
-   typedef typename GhostLayerField< real_t, Stencil::Size >::iterator               iterator;
-   typedef typename GhostLayerField< real_t, Stencil::Size >::const_iterator         const_iterator;
+   using iterator = typename GhostLayerField<real_t, Stencil::Size>::iterator;
+   using const_iterator = typename GhostLayerField<real_t, Stencil::Size>::const_iterator;
 
-   typedef typename GhostLayerField< real_t, Stencil::Size >::reverse_iterator       reverse_iterator;
-   typedef typename GhostLayerField< real_t, Stencil::Size >::const_reverse_iterator const_reverse_iterator;
+   using reverse_iterator = typename GhostLayerField<real_t, Stencil::Size>::reverse_iterator;
+   using const_reverse_iterator = typename GhostLayerField<real_t, Stencil::Size>::const_reverse_iterator;
 
-   typedef typename GhostLayerField< real_t, Stencil::Size >::base_iterator          base_iterator;
-   typedef typename GhostLayerField< real_t, Stencil::Size >::const_base_iterator    const_base_iterator;
+   using base_iterator = typename GhostLayerField<real_t, Stencil::Size>::base_iterator;
+   using const_base_iterator = typename GhostLayerField<real_t, Stencil::Size>::const_base_iterator;
 
-   typedef typename GhostLayerField< real_t, Stencil::Size >::Ptr                    Ptr;
-   typedef typename GhostLayerField< real_t, Stencil::Size >::ConstPtr               ConstPtr;
+   using Ptr = typename GhostLayerField<real_t, Stencil::Size>::Ptr;
+   using ConstPtr = typename GhostLayerField<real_t, Stencil::Size>::ConstPtr;
    //@}
    //*******************************************************************************************************************
 
diff --git a/src/lbm/field/ShearRate.h b/src/lbm/field/ShearRate.h
index 2352a9782..d98a169a9 100644
--- a/src/lbm/field/ShearRate.h
+++ b/src/lbm/field/ShearRate.h
@@ -89,8 +89,8 @@ namespace internal {
 template< typename LatticeModel_T >
 struct ShearRate
 {
-   typedef typename LatticeModel_T::Stencil Stencil;
-   typedef typename internal::ShearRelaxationParameter<typename LatticeModel_T::CollisionModel> ShearRelaxationParameter;
+   using Stencil = typename LatticeModel_T::Stencil;
+   using ShearRelaxationParameter = typename internal::ShearRelaxationParameter<typename LatticeModel_T::CollisionModel>;
 
    template< typename FieldPtrOrIterator >
    static inline real_t get( const LatticeModel_T & latticeModel, const FieldPtrOrIterator & it,
diff --git a/src/lbm/field/initializer/ExprSystemInitFunction.h b/src/lbm/field/initializer/ExprSystemInitFunction.h
index 4d8557f7c..32d91f43f 100644
--- a/src/lbm/field/initializer/ExprSystemInitFunction.h
+++ b/src/lbm/field/initializer/ExprSystemInitFunction.h
@@ -43,9 +43,9 @@ class ExprSystemInitFunction
 {
 public:
 
-   typedef exprtk::symbol_table<real_t>      SymbolTable;
-   typedef exprtk::expression<real_t>        Expression;
-   typedef std::map<std::string, Expression> ExprSystem;
+   using SymbolTable = exprtk::symbol_table<real_t>;
+   using Expression = exprtk::expression<real_t>;
+   using ExprSystem = std::map<std::string, Expression>;
 
    ExprSystemInitFunction( const shared_ptr<StructuredBlockForest> & blocks );
    ~ExprSystemInitFunction();
diff --git a/src/lbm/field/initializer/PdfFieldInitializer.h b/src/lbm/field/initializer/PdfFieldInitializer.h
index 0558b1b52..5a718f8d7 100644
--- a/src/lbm/field/initializer/PdfFieldInitializer.h
+++ b/src/lbm/field/initializer/PdfFieldInitializer.h
@@ -55,7 +55,7 @@ public:
 
 private:
 
-   typedef lbm::PdfField<LatticeModel_T> PdfField_T;
+   using PdfField_T = lbm::PdfField<LatticeModel_T>;
 
    const BlockDataID                       pdfFieldId_;
    const shared_ptr<StructuredBlockForest> blocks_;
diff --git a/src/lbm/geometry/initializer/PoiseuilleInitializer.h b/src/lbm/geometry/initializer/PoiseuilleInitializer.h
index 8f8898556..fa6677a44 100644
--- a/src/lbm/geometry/initializer/PoiseuilleInitializer.h
+++ b/src/lbm/geometry/initializer/PoiseuilleInitializer.h
@@ -82,7 +82,7 @@ namespace initializer {
          Z_AXIS=2,
          INVALID_AXIS=3
       };*/
-      typedef uint_t Axis;
+      using Axis = uint_t;
       static const uint_t X_AXIS;
       static const uint_t Y_AXIS;
       static const uint_t Z_AXIS;
diff --git a/src/lbm/lattice_model/CollisionModel.h b/src/lbm/lattice_model/CollisionModel.h
index c3077e97f..bd521e042 100644
--- a/src/lbm/lattice_model/CollisionModel.h
+++ b/src/lbm/lattice_model/CollisionModel.h
@@ -81,7 +81,7 @@ class SRT
 {
 public:
 
-   typedef SRT_tag tag;
+   using tag = SRT_tag;
    static const bool constant = true;
    
    SRT( const real_t _omega, const uint_t _level = uint_t(0) ) :
@@ -138,7 +138,7 @@ class SRTField
 {
 public:
 
-   typedef SRT_tag tag;
+   using tag = SRT_tag;
    static const bool constant = false;
 
    SRTField() :
@@ -212,7 +212,7 @@ class TRT
 {
 public:
 
-   typedef TRT_tag tag;
+   using tag = TRT_tag;
    
    static const real_t threeSixteenth;
 
@@ -332,7 +332,7 @@ class D3Q19MRT
 {
 public:
 
-   typedef MRT_tag tag;
+   using tag = MRT_tag;
    
    static const real_t threeSixteenth;
    
@@ -581,7 +581,7 @@ class D3Q27Cumulant
 {
 public:
   
-   typedef Cumulant_tag tag;
+   using tag = Cumulant_tag;
 
    /// Initializes all omegas to one except omega1
    D3Q27Cumulant( const real_t _omega1, const uint_t _level = uint_t(0) ) :
diff --git a/src/lbm/lattice_model/D2Q9.h b/src/lbm/lattice_model/D2Q9.h
index 4fe777ead..831159c8f 100644
--- a/src/lbm/lattice_model/D2Q9.h
+++ b/src/lbm/lattice_model/D2Q9.h
@@ -39,11 +39,11 @@ public:
 
    static_assert( ( ! std::is_same< CollisionModel_T, collision_model::D3Q19MRT >::value), "D3Q19MRT only works with D3Q19!" );
 
-   typedef typename LatticeModelBase< CollisionModel_T, Compressible, ForceModel_T, EquilibriumAccuracyOrder >::CollisionModel  CollisionModel;
-   typedef typename LatticeModelBase< CollisionModel_T, Compressible, ForceModel_T, EquilibriumAccuracyOrder >::ForceModel      ForceModel;
+   using CollisionModel = typename LatticeModelBase<CollisionModel_T, Compressible, ForceModel_T, EquilibriumAccuracyOrder>::CollisionModel;
+   using ForceModel = typename LatticeModelBase<CollisionModel_T, Compressible, ForceModel_T, EquilibriumAccuracyOrder>::ForceModel;
 
-   typedef stencil::D2Q9 Stencil;
-   typedef stencil::D2Q9 CommunicationStencil;
+   using Stencil = stencil::D2Q9;
+   using CommunicationStencil = stencil::D2Q9;
 
    static const char * NAME;
 
diff --git a/src/lbm/lattice_model/D3Q15.h b/src/lbm/lattice_model/D3Q15.h
index a946fce3d..42dc975fd 100644
--- a/src/lbm/lattice_model/D3Q15.h
+++ b/src/lbm/lattice_model/D3Q15.h
@@ -38,11 +38,11 @@ class D3Q15 : public LatticeModelBase< CollisionModel_T, Compressible, ForceMode
 {
 public:
 
-   typedef typename LatticeModelBase< CollisionModel_T, Compressible, ForceModel_T, EquilibriumAccuracyOrder >::CollisionModel  CollisionModel;
-   typedef typename LatticeModelBase< CollisionModel_T, Compressible, ForceModel_T, EquilibriumAccuracyOrder >::ForceModel      ForceModel;
+   using CollisionModel = typename LatticeModelBase<CollisionModel_T, Compressible, ForceModel_T, EquilibriumAccuracyOrder>::CollisionModel;
+   using ForceModel = typename LatticeModelBase<CollisionModel_T, Compressible, ForceModel_T, EquilibriumAccuracyOrder>::ForceModel;
 
-   typedef stencil::D3Q15 Stencil;
-   typedef stencil::D3Q27 CommunicationStencil;
+   using Stencil = stencil::D3Q15;
+   using CommunicationStencil = stencil::D3Q27;
 
    static const char * NAME;
 
diff --git a/src/lbm/lattice_model/D3Q19.h b/src/lbm/lattice_model/D3Q19.h
index d8cfc3dbc..f6decf3cf 100644
--- a/src/lbm/lattice_model/D3Q19.h
+++ b/src/lbm/lattice_model/D3Q19.h
@@ -37,11 +37,11 @@ class D3Q19 : public LatticeModelBase< CollisionModel_T, Compressible, ForceMode
 {
 public:
 
-   typedef typename LatticeModelBase< CollisionModel_T, Compressible, ForceModel_T, EquilibriumAccuracyOrder >::CollisionModel  CollisionModel;
-   typedef typename LatticeModelBase< CollisionModel_T, Compressible, ForceModel_T, EquilibriumAccuracyOrder >::ForceModel      ForceModel;
+   using CollisionModel = typename LatticeModelBase<CollisionModel_T, Compressible, ForceModel_T, EquilibriumAccuracyOrder>::CollisionModel;
+   using ForceModel = typename LatticeModelBase<CollisionModel_T, Compressible, ForceModel_T, EquilibriumAccuracyOrder>::ForceModel;
 
-   typedef stencil::D3Q19 Stencil;
-   typedef stencil::D3Q19 CommunicationStencil;
+   using Stencil = stencil::D3Q19;
+   using CommunicationStencil = stencil::D3Q19;
 
    static const char * NAME;
 
diff --git a/src/lbm/lattice_model/D3Q27.h b/src/lbm/lattice_model/D3Q27.h
index fb8289cbf..e90c078c7 100644
--- a/src/lbm/lattice_model/D3Q27.h
+++ b/src/lbm/lattice_model/D3Q27.h
@@ -39,11 +39,11 @@ public:
 
    static_assert( ( ! std::is_same< CollisionModel_T, collision_model::D3Q19MRT >::value), "D3Q19MRT only works with D3Q19!" );
 
-   typedef typename LatticeModelBase< CollisionModel_T, Compressible, ForceModel_T, EquilibriumAccuracyOrder >::CollisionModel  CollisionModel;
-   typedef typename LatticeModelBase< CollisionModel_T, Compressible, ForceModel_T, EquilibriumAccuracyOrder >::ForceModel      ForceModel;
+   using CollisionModel = typename LatticeModelBase<CollisionModel_T, Compressible, ForceModel_T, EquilibriumAccuracyOrder>::CollisionModel;
+   using ForceModel = typename LatticeModelBase<CollisionModel_T, Compressible, ForceModel_T, EquilibriumAccuracyOrder>::ForceModel;
 
-   typedef stencil::D3Q27 Stencil;
-   typedef stencil::D3Q27 CommunicationStencil;
+   using Stencil = stencil::D3Q27;
+   using CommunicationStencil = stencil::D3Q27;
 
    static const char * NAME;
 
diff --git a/src/lbm/lattice_model/EquilibriumDistribution.h b/src/lbm/lattice_model/EquilibriumDistribution.h
index 31daeb246..48eab60f5 100644
--- a/src/lbm/lattice_model/EquilibriumDistribution.h
+++ b/src/lbm/lattice_model/EquilibriumDistribution.h
@@ -71,7 +71,7 @@ public:
    static_assert( LatticeModel_T::compressible == false,         "Only works with incompressible models!" );
    static_assert( LatticeModel_T::equilibriumAccuracyOrder == 2, "Only works for lattice models that require the equilibrium distribution to be order 2 accurate!" );
 
-   typedef typename LatticeModel_T::Stencil Stencil;
+   using Stencil = typename LatticeModel_T::Stencil;
 
    static real_t get( const real_t cx, const real_t cy, const real_t cz, const real_t w,
                       const Vector3< real_t > & velocity = Vector3< real_t >( real_t(0.0) ), const real_t rho = real_t(1.0) )
@@ -127,7 +127,7 @@ public:
    static_assert( LatticeModel_T::compressible == false,         "Only works with incompressible models!" );
    static_assert( LatticeModel_T::equilibriumAccuracyOrder == 1, "Only works for lattice models that require the equilibrium distribution to be order 1 accurate!" );
 
-   typedef typename LatticeModel_T::Stencil Stencil;
+   using Stencil = typename LatticeModel_T::Stencil;
 
    static real_t get( const real_t cx, const real_t cy, const real_t cz, const real_t w,
                       const Vector3< real_t > & velocity = Vector3< real_t >( real_t(0.0) ), const real_t rho = real_t(1.0) )
@@ -176,7 +176,7 @@ public:
    static_assert( LatticeModel_T::compressible,                  "Only works with compressible models!" );
    static_assert( LatticeModel_T::equilibriumAccuracyOrder == 2, "Only works for lattice models that require the equilibrium distribution to be order 2 accurate!" );
 
-   typedef typename LatticeModel_T::Stencil Stencil;
+   using Stencil = typename LatticeModel_T::Stencil;
 
    static real_t get( const real_t cx, const real_t cy, const real_t cz, const real_t w,
                       const Vector3< real_t > & velocity = Vector3< real_t >( real_t(0.0) ), const real_t rho = real_t(1.0) )
@@ -231,7 +231,7 @@ public:
    static_assert( LatticeModel_T::compressible,                  "Only works with compressible models!" );
    static_assert( LatticeModel_T::equilibriumAccuracyOrder == 1, "Only works for lattice models that require the equilibrium distribution to be order 1 accurate!" );
 
-   typedef typename LatticeModel_T::Stencil Stencil;
+   using Stencil = typename LatticeModel_T::Stencil;
 
    static real_t get( const real_t cx, const real_t cy, const real_t cz, const real_t w,
                       const Vector3< real_t > & velocity = Vector3< real_t >( real_t(0.0) ), const real_t rho = real_t(1.0) )
diff --git a/src/lbm/lattice_model/ForceModel.h b/src/lbm/lattice_model/ForceModel.h
index b82f05634..0c30441ca 100644
--- a/src/lbm/lattice_model/ForceModel.h
+++ b/src/lbm/lattice_model/ForceModel.h
@@ -143,8 +143,8 @@ class None
 {
 public:
 
-   typedef None_tag tag;
-   typedef NoDirectionIndependentTerms DirectionIndependentTerms_T;
+   using tag = None_tag;
+   using DirectionIndependentTerms_T = NoDirectionIndependentTerms;
 
    static const bool shiftMacVel = false;
    static const bool shiftEquVel = false;
@@ -180,8 +180,8 @@ class SimpleConstant
 {
 public:
 
-   typedef Simple_tag tag;
-   typedef NoDirectionIndependentTerms DirectionIndependentTerms_T;
+   using tag = Simple_tag;
+   using DirectionIndependentTerms_T = NoDirectionIndependentTerms;
 
    static const bool shiftMacVel = true;
    static const bool shiftEquVel = false;
@@ -277,9 +277,9 @@ private:
 
 public:
 
-   typedef EDM_tag tag;
-   typedef real_t DirectionIndependentTerms_T;
-   typedef ForceField_T ForceField;
+   using tag = EDM_tag;
+   using DirectionIndependentTerms_T = real_t;
+   using ForceField = ForceField_T;
 
    static const bool shiftMacVel = true;
    static const bool shiftEquVel = false;
@@ -337,8 +337,8 @@ class LuoConstant
 {
 public:
 
-   typedef Luo_tag tag;
-   typedef NoDirectionIndependentTerms DirectionIndependentTerms_T;
+   using tag = Luo_tag;
+   using DirectionIndependentTerms_T = NoDirectionIndependentTerms;
 
    static const bool shiftMacVel = true;
    static const bool shiftEquVel = false;
@@ -404,9 +404,9 @@ class LuoField
 {
 public:
 
-   typedef Luo_tag tag;
-   typedef NoDirectionIndependentTerms DirectionIndependentTerms_T;
-   typedef ForceField_T ForceField;
+   using tag = Luo_tag;
+   using DirectionIndependentTerms_T = NoDirectionIndependentTerms;
+   using ForceField = ForceField_T;
 
    static const bool shiftMacVel = true;
    static const bool shiftEquVel = false;
@@ -460,8 +460,8 @@ class GuoConstant
 {
 public:
 
-   typedef Guo_tag tag;
-   typedef Matrix3<real_t> DirectionIndependentTerms_T;
+   using tag = Guo_tag;
+   using DirectionIndependentTerms_T = Matrix3<real_t>;
 
    static const bool shiftMacVel = true;
    static const bool shiftEquVel = true;
@@ -553,9 +553,9 @@ class GuoField
 {
 public:
 
-   typedef Guo_tag tag;
-   typedef Matrix3<real_t> DirectionIndependentTerms_T;
-   typedef ForceField_T ForceField;
+   using tag = Guo_tag;
+   using DirectionIndependentTerms_T = Matrix3<real_t>;
+   using ForceField = ForceField_T;
 
    static const bool shiftMacVel = true;
    static const bool shiftEquVel = true;
@@ -635,8 +635,8 @@ class Correction
 {
 public:
 
-   typedef Correction_tag tag;
-   typedef Vector3<real_t> DirectionIndependentTerms_T;
+   using tag = Correction_tag;
+   using DirectionIndependentTerms_T = Vector3<real_t>;
 
    static const bool shiftMacVel = false;
    static const bool shiftEquVel = false;
diff --git a/src/lbm/lattice_model/LatticeModelBase.h b/src/lbm/lattice_model/LatticeModelBase.h
index 82039ee3a..3ded2ae7e 100644
--- a/src/lbm/lattice_model/LatticeModelBase.h
+++ b/src/lbm/lattice_model/LatticeModelBase.h
@@ -71,8 +71,8 @@ class LatticeModelBase
 {
 public:
 
-   typedef CollisionModel_T CollisionModel;
-   typedef ForceModel_T     ForceModel;
+   using CollisionModel = CollisionModel_T;
+   using ForceModel = ForceModel_T;
 
    static const bool compressible = Compressible;
    static const int  equilibriumAccuracyOrder = EquilibriumAccuracyOrder;
diff --git a/src/lbm/lattice_model/NeighborsStencil.h b/src/lbm/lattice_model/NeighborsStencil.h
index 32badbbd3..823b45383 100644
--- a/src/lbm/lattice_model/NeighborsStencil.h
+++ b/src/lbm/lattice_model/NeighborsStencil.h
@@ -39,13 +39,13 @@ struct NeighborsStencil;
 template< typename LatticeModel_T >
 struct NeighborsStencil< LatticeModel_T, typename std::enable_if< LatticeModel_T::Stencil::D == 2 >::type >
 {
-   typedef stencil::D2Q9 type;
+   using type = stencil::D2Q9;
 };
 
 template< typename LatticeModel_T >
 struct NeighborsStencil< LatticeModel_T, typename std::enable_if< LatticeModel_T::Stencil::D == 3 >::type >
 {
-   typedef stencil::D3Q27 type;
+   using type = stencil::D3Q27;
 };
 
 
diff --git a/src/lbm/lattice_model/SmagorinskyLES.h b/src/lbm/lattice_model/SmagorinskyLES.h
index 169439e77..167f88e4f 100644
--- a/src/lbm/lattice_model/SmagorinskyLES.h
+++ b/src/lbm/lattice_model/SmagorinskyLES.h
@@ -44,9 +44,9 @@ class SmagorinskyLES
 {
 public:
 
-   typedef lbm::PdfField< LatticeModel_T >   PdfField_T;
-   typedef GhostLayerField< real_t, 1 >      ScalarField_T;
-   typedef typename LatticeModel_T::Stencil  Stencil_T;
+   using PdfField_T = lbm::PdfField<LatticeModel_T>;
+   using ScalarField_T = GhostLayerField<real_t, 1>;
+   using Stencil_T = typename LatticeModel_T::Stencil;
 
    SmagorinskyLES( weak_ptr< StructuredBlockStorage > blocks, const ConstBlockDataID & pdfFieldId, const BlockDataID & omegaFieldId,
                    const real_t & kinematicViscosity, const real_t & smagorinskyConstant,
diff --git a/src/lbm/refinement/CurlBasedLevelDetermination.h b/src/lbm/refinement/CurlBasedLevelDetermination.h
index d384449fb..7e9157c31 100644
--- a/src/lbm/refinement/CurlBasedLevelDetermination.h
+++ b/src/lbm/refinement/CurlBasedLevelDetermination.h
@@ -52,7 +52,7 @@ class CurlBasedLevelDetermination // used as a 'BlockForest::RefreshMinTargetLev
 
 public:
 
-   typedef GhostLayerField< Vector3<real_t>, 1 >  VectorField_T;
+   using VectorField_T = GhostLayerField<Vector3<real_t>, 1>;
 
    CurlBasedLevelDetermination(const ConstBlockDataID & fieldID, const StructuredBlockForest & structuredBlockForest,
          const Filter_T & filter, const uint_t maxLevel,
diff --git a/src/lbm/refinement/EqualLevelBorderStreamCorrection.h b/src/lbm/refinement/EqualLevelBorderStreamCorrection.h
index 2cc428b98..957b99adc 100644
--- a/src/lbm/refinement/EqualLevelBorderStreamCorrection.h
+++ b/src/lbm/refinement/EqualLevelBorderStreamCorrection.h
@@ -47,12 +47,12 @@ struct EdgeCornerStencil;
 template< typename LatticeModel_T >
 struct EdgeCornerStencil< LatticeModel_T, typename std::enable_if< LatticeModel_T::Stencil::D == 2 >::type >
 {
-   typedef stencil::D2CornerStencil type;
+   using type = stencil::D2CornerStencil;
 };
 template< typename LatticeModel_T >
 struct EdgeCornerStencil< LatticeModel_T, typename std::enable_if< LatticeModel_T::Stencil::D == 3 >::type >
 {
-   typedef stencil::D3EdgeCornerStencil type;
+   using type = stencil::D3EdgeCornerStencil;
 };
 }
 
@@ -63,8 +63,8 @@ class EqualLevelBorderStreamCorrection
 {
 public:
 
-   typedef PdfField< LatticeModel_T > PdfField_T;
-   typedef typename internal::EdgeCornerStencil< LatticeModel_T >::type EdgeCornerStencil_T;
+   using PdfField_T = PdfField<LatticeModel_T>;
+   using EdgeCornerStencil_T = typename internal::EdgeCornerStencil<LatticeModel_T>::type;
 
    EqualLevelBorderStreamCorrection( const BlockDataID & pdfFieldId ) : pdfFieldId_( pdfFieldId ) {}
 
diff --git a/src/lbm/refinement/LinearExplosion.h b/src/lbm/refinement/LinearExplosion.h
index c70b7befe..a43f07923 100644
--- a/src/lbm/refinement/LinearExplosion.h
+++ b/src/lbm/refinement/LinearExplosion.h
@@ -67,12 +67,12 @@ class LinearExplosion
 {
 private:
 
-   typedef typename LatticeModel_T::Stencil Stencil;
+   using Stencil = typename LatticeModel_T::Stencil;
 
-   typedef PdfField< LatticeModel_T > PdfField_T;
+   using PdfField_T = PdfField<LatticeModel_T>;
 
-   typedef field::GhostLayerField< typename PdfField_T::value_type, PdfField_T::F_SIZE > CoarseField;
-   typedef field::GhostLayerField< bool, 1 > BoolField;
+   using CoarseField = field::GhostLayerField<typename PdfField_T::value_type, PdfField_T::F_SIZE>;
+   using BoolField = field::GhostLayerField<bool, 1>;
 
 public:
 
diff --git a/src/lbm/refinement/PdfFieldPackInfo.h b/src/lbm/refinement/PdfFieldPackInfo.h
index 7117c64cd..1c1202e4f 100644
--- a/src/lbm/refinement/PdfFieldPackInfo.h
+++ b/src/lbm/refinement/PdfFieldPackInfo.h
@@ -44,8 +44,8 @@ class PdfFieldPackInfo : public TimeStepPdfPackInfo
 {
 public:
 
-   typedef PdfField<LatticeModel_T>          PdfField_T;
-   typedef typename LatticeModel_T::Stencil  Stencil;
+   using PdfField_T = PdfField<LatticeModel_T>;
+   using Stencil = typename LatticeModel_T::Stencil;
 
 #ifdef NDEBUG   
    PdfFieldPackInfo( const BlockDataID & pdfFieldId, const bool _optimizedEqualLevelCommunication = true,
diff --git a/src/lbm/refinement/TimeStep.h b/src/lbm/refinement/TimeStep.h
index 84189ba4b..bafcdcc04 100644
--- a/src/lbm/refinement/TimeStep.h
+++ b/src/lbm/refinement/TimeStep.h
@@ -53,10 +53,10 @@ class TimeStep
 {
 public:
    
-   typedef typename NeighborsStencil<LatticeModel_T>::type CommunicationStencil_T;
+   using CommunicationStencil_T = typename NeighborsStencil<LatticeModel_T>::type;
 
-   typedef std::function< void ( const uint_t, const uint_t ) >            VoidFunction;  // parameters: level, execution count
-   typedef std::function< void ( IBlock *, const uint_t, const uint_t ) >  BlockFunction; // parameters: block, level, execution count
+   using VoidFunction = std::function<void (const uint_t, const uint_t)>;  // parameters: level, execution count
+   using BlockFunction = std::function<void (IBlock *, const uint_t, const uint_t)>; // parameters: block, level, execution count
    
 private:
 
@@ -110,7 +110,7 @@ private:
 
 public:
 
-   typedef typename LatticeModel_T::Stencil Stencil;
+   using Stencil = typename LatticeModel_T::Stencil;
 
    static const uint_t StreamIncludedGhostLayers = 2;
 
@@ -1726,7 +1726,7 @@ makeTimeStep( weak_ptr< StructuredBlockForest > blocks, shared_ptr< Sweep_T > &
               const Set<SUID> & requiredBlockSelectors = Set<SUID>::emptySet(),
               const Set<SUID> & incompatibleBlockSelectors = Set<SUID>::emptySet() )
 {
-   typedef TimeStep< LatticeModel_T, Sweep_T, BoundaryHandling_T > TS_T;
+   using TS_T = TimeStep<LatticeModel_T, Sweep_T, BoundaryHandling_T>;
    return shared_ptr< TS_T >( new TS_T( blocks, sweep, pdfFieldId, boundaryHandlingId, requiredBlockSelectors, incompatibleBlockSelectors ) );
 }
 
@@ -1740,7 +1740,7 @@ makeTimeStep( weak_ptr< StructuredBlockForest > blocks, shared_ptr< Sweep_T > &
               const Set<SUID> & requiredBlockSelectors = Set<SUID>::emptySet(),
               const Set<SUID> & incompatibleBlockSelectors = Set<SUID>::emptySet() )
 {
-   typedef TimeStep< LatticeModel_T, Sweep_T, BoundaryHandling_T > TS_T;
+   using TS_T = TimeStep<LatticeModel_T, Sweep_T, BoundaryHandling_T>;
    return shared_ptr< TS_T >( new TS_T( blocks, sweep, pdfFieldId, boundaryHandlingId, pdfPackInfo, requiredBlockSelectors, incompatibleBlockSelectors ) );
 }
 
diff --git a/src/lbm/refinement/VorticityBasedLevelDetermination.h b/src/lbm/refinement/VorticityBasedLevelDetermination.h
index c3f4ee20d..2be753c0c 100644
--- a/src/lbm/refinement/VorticityBasedLevelDetermination.h
+++ b/src/lbm/refinement/VorticityBasedLevelDetermination.h
@@ -49,7 +49,7 @@ class VorticityBasedLevelDetermination // used as a 'BlockForest::RefreshMinTarg
 
 public:
 
-   typedef GhostLayerField< Vector3<real_t>, 1 >  VectorField_T;
+   using VectorField_T = GhostLayerField<Vector3<real_t>, 1>;
 
    VorticityBasedLevelDetermination( const ConstBlockDataID & fieldID, const Filter_T & filter,
                                      const real_t upperLimit, const real_t lowerLimit, const uint_t maxLevel ) :
diff --git a/src/lbm/srt/SplitPureSweep.impl.h b/src/lbm/srt/SplitPureSweep.impl.h
index 3c716216c..e1cfe424b 100644
--- a/src/lbm/srt/SplitPureSweep.impl.h
+++ b/src/lbm/srt/SplitPureSweep.impl.h
@@ -73,8 +73,8 @@ public:
    static_assert( (std::is_same< typename LatticeModel_T::ForceModel::tag, force_model::None_tag >::value),        "Only works without additional forces!" );
    static_assert( LatticeModel_T::equilibriumAccuracyOrder == 2, "Only works for lattice models that require the equilibrium distribution to be order 2 accurate!" );
 
-   typedef typename SweepBase<LatticeModel_T>::PdfField_T  PdfField_T;
-   typedef typename LatticeModel_T::Stencil                Stencil;
+   using PdfField_T = typename SweepBase<LatticeModel_T>::PdfField_T;
+   using Stencil = typename LatticeModel_T::Stencil;
 
    // block has NO dst pdf field
    SplitPureSweep( const BlockDataID & pdfField ) :
@@ -768,8 +768,8 @@ public:
    static_assert( (std::is_same< typename LatticeModel_T::ForceModel::tag, force_model::None_tag >::value),        "Only works without additional forces!" );
    static_assert( LatticeModel_T::equilibriumAccuracyOrder == 2, "Only works for lattice models that require the equilibrium distribution to be order 2 accurate!" );
 
-   typedef typename SweepBase<LatticeModel_T>::PdfField_T  PdfField_T;
-   typedef typename LatticeModel_T::Stencil                Stencil;
+   using PdfField_T = typename SweepBase<LatticeModel_T>::PdfField_T;
+   using Stencil = typename LatticeModel_T::Stencil;
 
    // block has NO dst pdf field
    SplitPureSweep( const BlockDataID & pdfField ) :
diff --git a/src/lbm/srt/SplitSweep.impl.h b/src/lbm/srt/SplitSweep.impl.h
index e86dc16b2..b5f6b68fb 100644
--- a/src/lbm/srt/SplitSweep.impl.h
+++ b/src/lbm/srt/SplitSweep.impl.h
@@ -67,8 +67,8 @@ public:
    static_assert( (std::is_same< typename LatticeModel_T::ForceModel::tag, force_model::None_tag >::value),        "Only works without additional forces!" );
    static_assert( LatticeModel_T::equilibriumAccuracyOrder == 2, "Only works for lattice models that require the equilibrium distribution to be order 2 accurate!" );
 
-   typedef typename FlagFieldSweepBase<LatticeModel_T,FlagField_T>::PdfField_T  PdfField_T;
-   typedef typename LatticeModel_T::Stencil                                     Stencil;
+   using PdfField_T = typename FlagFieldSweepBase<LatticeModel_T, FlagField_T>::PdfField_T;
+   using Stencil = typename LatticeModel_T::Stencil;
 
    // block has NO dst pdf field, lbm mask consists of multiple flags
    SplitSweep( const BlockDataID & pdfField, const ConstBlockDataID & flagField, const Set< FlagUID > & lbmMask ) :
@@ -902,8 +902,8 @@ public:
    static_assert( (std::is_same< typename LatticeModel_T::ForceModel::tag, force_model::None_tag >::value),        "Only works without additional forces!" );
    static_assert( LatticeModel_T::equilibriumAccuracyOrder == 2, "Only works for lattice models that require the equilibrium distribution to be order 2 accurate!" );
 
-   typedef typename FlagFieldSweepBase<LatticeModel_T,FlagField_T>::PdfField_T  PdfField_T;
-   typedef typename LatticeModel_T::Stencil                                     Stencil;
+   using PdfField_T = typename FlagFieldSweepBase<LatticeModel_T, FlagField_T>::PdfField_T;
+   using Stencil = typename LatticeModel_T::Stencil;
 
    // block has NO dst pdf field, lbm mask consists of multiple flags
    SplitSweep( const BlockDataID & pdfField, const ConstBlockDataID & flagField, const Set< FlagUID > & lbmMask ) :
diff --git a/src/lbm/srt/cell_operations/AdvectionDiffusionCellOperation.impl.h b/src/lbm/srt/cell_operations/AdvectionDiffusionCellOperation.impl.h
index 44883340f..f638cf3c9 100644
--- a/src/lbm/srt/cell_operations/AdvectionDiffusionCellOperation.impl.h
+++ b/src/lbm/srt/cell_operations/AdvectionDiffusionCellOperation.impl.h
@@ -63,9 +63,9 @@ public:
    static_assert( LM_AdvDiff::compressible,                                                                      "Only works with compressible models!" );
    static_assert( (std::is_same< typename LM_AdvDiff::ForceModel::tag, force_model::None_tag >::value),        "Only works without additional forces!" );
 
-   typedef PdfField< LM_AdvDiff >        AdvDiffPdfField_T;
-   typedef PdfField< LM_Hydro   >        HydroPdfField_T;
-   typedef typename LM_AdvDiff::Stencil  Stencil;
+   using AdvDiffPdfField_T = PdfField<LM_AdvDiff>;
+   using HydroPdfField_T = PdfField<LM_Hydro>;
+   using Stencil = typename LM_AdvDiff::Stencil;
 
    AdvectionDiffusionCellOperation() : omega_( real_t(0) ), advDiffLatticeModel_( NULL ), hydroLatticeModel_(NULL) {}
 
@@ -138,9 +138,9 @@ public:
    static_assert( LM_AdvDiff::compressible,                                                                      "Only works with compressible models!" );
    static_assert( (std::is_same< typename LM_AdvDiff::ForceModel::tag, force_model::Correction_tag >::value),  "Only works with correction force!" );
 
-   typedef PdfField< LM_AdvDiff >        AdvDiffPdfField_T;
-   typedef PdfField< LM_Hydro   >        HydroPdfField_T;
-   typedef typename LM_AdvDiff::Stencil  Stencil;
+   using AdvDiffPdfField_T = PdfField<LM_AdvDiff>;
+   using HydroPdfField_T = PdfField<LM_Hydro>;
+   using Stencil = typename LM_AdvDiff::Stencil;
 
    AdvectionDiffusionCellOperation() : omega_( real_t(0) ), advDiffLatticeModel_( NULL ), hydroLatticeModel_(NULL) {}
 
diff --git a/src/lbm/srt/cell_operations/DefaultCellOperation.impl.h b/src/lbm/srt/cell_operations/DefaultCellOperation.impl.h
index 7f1086e77..0cf052e6b 100644
--- a/src/lbm/srt/cell_operations/DefaultCellOperation.impl.h
+++ b/src/lbm/srt/cell_operations/DefaultCellOperation.impl.h
@@ -65,8 +65,8 @@ public:
    static_assert( (std::is_same< typename LatticeModel_T::ForceModel::tag, force_model::None_tag >::value),        "Only works without additional forces!" );
    static_assert( LatticeModel_T::equilibriumAccuracyOrder == 2, "Only works for lattice models that require the equilibrium distribution to be order 2 accurate!" );
 
-   typedef PdfField< LatticeModel_T >        PdfField_T;
-   typedef typename LatticeModel_T::Stencil  Stencil;
+   using PdfField_T = PdfField<LatticeModel_T>;
+   using Stencil = typename LatticeModel_T::Stencil;
 
    DefaultCellOperation() : omega_( real_t(0) ), latticeModel_( NULL ) {}
 
@@ -136,8 +136,8 @@ public:
    static_assert( (std::is_same< typename LatticeModel_T::ForceModel::tag, force_model::Guo_tag >::value),         "Only works with Guo constant force model !" );
    static_assert( LatticeModel_T::equilibriumAccuracyOrder == 2, "Only works for lattice models that require the equilibrium distribution to be order 2 accurate!" );
 
-   typedef PdfField< LatticeModel_T >        PdfField_T;
-   typedef typename LatticeModel_T::Stencil  Stencil;
+   using PdfField_T = PdfField<LatticeModel_T>;
+   using Stencil = typename LatticeModel_T::Stencil;
 
    DefaultCellOperation() : omega_( real_t(0) ), latticeModel_( NULL ) {}
 
@@ -230,8 +230,8 @@ public:
    static_assert( (std::is_same< typename LatticeModel_T::ForceModel::tag, force_model::None_tag >::value),        "Only works without additional forces!" );
    static_assert( LatticeModel_T::equilibriumAccuracyOrder == 2, "Only works for lattice models that require the equilibrium distribution to be order 2 accurate!" );
 
-   typedef PdfField< LatticeModel_T >        PdfField_T;
-   typedef typename LatticeModel_T::Stencil  Stencil;
+   using PdfField_T = PdfField<LatticeModel_T>;
+   using Stencil = typename LatticeModel_T::Stencil;
 
    DefaultCellOperation() : omega_trm_( real_t(0) ), omega_w0_( real_t(0) ), omega_w1_( real_t(0) ), omega_w2_( real_t(0) ) {}
 
@@ -476,8 +476,8 @@ public:
    static_assert( (std::is_same< typename LatticeModel_T::ForceModel::tag, force_model::None_tag >::value),        "Only works without additional forces!" );
    static_assert( LatticeModel_T::equilibriumAccuracyOrder == 2, "Only works for lattice models that require the equilibrium distribution to be order 2 accurate!" );
 
-   typedef PdfField< LatticeModel_T >        PdfField_T;
-   typedef typename LatticeModel_T::Stencil  Stencil;
+   using PdfField_T = PdfField<LatticeModel_T>;
+   using Stencil = typename LatticeModel_T::Stencil;
 
    DefaultCellOperation() : omega_trm_( real_t(0) ), omega_w0_( real_t(0) ), omega_w1_( real_t(0) ), omega_w2_( real_t(0) ) {}
 
diff --git a/src/lbm/sweeps/ActiveCellSweep.h b/src/lbm/sweeps/ActiveCellSweep.h
index cfc3b6d35..4874c36af 100644
--- a/src/lbm/sweeps/ActiveCellSweep.h
+++ b/src/lbm/sweeps/ActiveCellSweep.h
@@ -35,7 +35,7 @@ class ActiveCellSweep : FlagFieldSweepBase< LatticeModel_T, FlagField_T >
 {
 public:
 
-   typedef typename FlagFieldSweepBase<LatticeModel_T,FlagField_T>::PdfField_T  PdfField_T;
+   using PdfField_T = typename FlagFieldSweepBase<LatticeModel_T, FlagField_T>::PdfField_T;
 
    // block has NO dst pdf field, lbm mask consists of multiple flags
    ActiveCellSweep( const CellOperation & op, const BlockDataID & pdfField, const ConstBlockDataID & flagField,
diff --git a/src/lbm/sweeps/CellwiseSweep.h b/src/lbm/sweeps/CellwiseSweep.h
index 2879f19ae..e35e32f64 100644
--- a/src/lbm/sweeps/CellwiseSweep.h
+++ b/src/lbm/sweeps/CellwiseSweep.h
@@ -410,7 +410,7 @@ shared_ptr< CellwiseSweep< LatticeModel_T, Filter_T, DensityVelocityIn_T, Densit
 makeCellwiseSweep( const BlockDataID & pdfFieldId, const Filter_T & filter,
                    const DensityVelocityIn_T & densityVelocityIn, const DensityVelocityOut_T & densityVelocityOut )
 {
-   typedef CellwiseSweep< LatticeModel_T, Filter_T, DensityVelocityIn_T, DensityVelocityOut_T > CS_T;
+   using CS_T = CellwiseSweep<LatticeModel_T, Filter_T, DensityVelocityIn_T, DensityVelocityOut_T>;
    return shared_ptr< CS_T >( new CS_T( pdfFieldId, filter, densityVelocityIn, densityVelocityOut ) );
 }
 
@@ -419,7 +419,7 @@ shared_ptr< CellwiseSweep< LatticeModel_T, Filter_T, DensityVelocityIn_T, Densit
 makeCellwiseSweep( const BlockDataID & src, const BlockDataID & dst, const Filter_T & filter,
                    const DensityVelocityIn_T & densityVelocityIn, const DensityVelocityOut_T & densityVelocityOut )
 {
-   typedef CellwiseSweep< LatticeModel_T, Filter_T, DensityVelocityIn_T, DensityVelocityOut_T > CS_T;
+   using CS_T = CellwiseSweep<LatticeModel_T, Filter_T, DensityVelocityIn_T, DensityVelocityOut_T>;
    return shared_ptr< CS_T >( new CS_T( src, dst, filter, densityVelocityIn, densityVelocityOut ) );
 }
 
@@ -520,7 +520,7 @@ shared_ptr< CellwiseSweep< LatticeModel_T, Filter_T, AdvectionDiffusionDensityEq
 makeCellwiseAdvectionDiffusionSweep( const BlockDataID & pdfFieldId, const ConstBlockDataID & velocityFieldId, const Filter_T & filter,
                                      const DensityVelocityOut_T & densityVelocityOut )
 {
-   typedef CellwiseSweep< LatticeModel_T, Filter_T, AdvectionDiffusionDensityEquilibriumVelocityCalculation<VelocityField_T>, DensityVelocityOut_T > CS_T;
+   using CS_T = CellwiseSweep<LatticeModel_T, Filter_T, AdvectionDiffusionDensityEquilibriumVelocityCalculation<VelocityField_T>, DensityVelocityOut_T>;
    return shared_ptr< CS_T >( new CS_T( pdfFieldId, filter,
                                         AdvectionDiffusionDensityEquilibriumVelocityCalculation<VelocityField_T>( velocityFieldId ), densityVelocityOut ) );
 }
@@ -530,7 +530,7 @@ shared_ptr< CellwiseSweep< LatticeModel_T, Filter_T, AdvectionDiffusionDensityEq
 makeCellwiseAdvectionDiffusionSweep( const BlockDataID & src, const BlockDataID & dst, const ConstBlockDataID & velocityFieldId,
                                      const Filter_T & filter, const DensityVelocityOut_T & densityVelocityOut )
 {
-   typedef CellwiseSweep< LatticeModel_T, Filter_T, AdvectionDiffusionDensityEquilibriumVelocityCalculation<VelocityField_T>, DensityVelocityOut_T > CS_T;
+   using CS_T = CellwiseSweep<LatticeModel_T, Filter_T, AdvectionDiffusionDensityEquilibriumVelocityCalculation<VelocityField_T>, DensityVelocityOut_T>;
    return shared_ptr< CS_T >( new CS_T( src, dst, filter,
                                         AdvectionDiffusionDensityEquilibriumVelocityCalculation<VelocityField_T>( velocityFieldId ), densityVelocityOut ) );
 }
diff --git a/src/lbm/sweeps/FlagFieldSweepBase.h b/src/lbm/sweeps/FlagFieldSweepBase.h
index 3df1dcf95..edf5ed56b 100644
--- a/src/lbm/sweeps/FlagFieldSweepBase.h
+++ b/src/lbm/sweeps/FlagFieldSweepBase.h
@@ -35,8 +35,8 @@ class FlagFieldSweepBase : public SweepBase<LatticeModel_T>
 {
 public:
 
-   typedef typename SweepBase< LatticeModel_T >::PdfField_T PdfField_T;
-   typedef typename FlagField_T::flag_t                     flag_t;
+   using PdfField_T = typename SweepBase<LatticeModel_T>::PdfField_T;
+   using flag_t = typename FlagField_T::flag_t;
 
    // block has NO dst pdf field, lbm mask consists of multiple flags
    FlagFieldSweepBase( const BlockDataID & pdfField, const ConstBlockDataID & flagField, const Set< FlagUID > & lbmMask ) :
diff --git a/src/lbm/sweeps/StreamPull.h b/src/lbm/sweeps/StreamPull.h
index 136712f8b..fba95f580 100644
--- a/src/lbm/sweeps/StreamPull.h
+++ b/src/lbm/sweeps/StreamPull.h
@@ -62,8 +62,8 @@ struct StreamPullEverything
    static_assert( (std::is_same< typename LatticeModel_T::Stencil, stencil::D3Q19 >::value == false), "There is a specialization for D3Q19!" );
    static_assert( (std::is_same< typename LatticeModel_T::Stencil, stencil::D3Q27 >::value == false), "There is a specialization for D3Q27!" );
 
-   typedef PdfField< LatticeModel_T >        PdfField_T;
-   typedef typename LatticeModel_T::Stencil  Stencil_T;
+   using PdfField_T = PdfField<LatticeModel_T>;
+   using Stencil_T = typename LatticeModel_T::Stencil;
 
    static void execute( PdfField_T * src, PdfField_T * dst, const uint_t numberOfGhostLayersToInclude = uint_t(0) );
 };
@@ -114,8 +114,8 @@ struct StreamPullEverything< LatticeModel_T, typename std::enable_if< std::is_sa
 {
    static_assert( (std::is_same< typename LatticeModel_T::Stencil, stencil::D2Q9 >::value), "Only works with D2Q9!" );
 
-   typedef PdfField< LatticeModel_T >        PdfField_T;
-   typedef typename LatticeModel_T::Stencil  Stencil_T;
+   using PdfField_T = PdfField<LatticeModel_T>;
+   using Stencil_T = typename LatticeModel_T::Stencil;
 
    static void execute( PdfField_T * src, PdfField_T * dst, const uint_t numberOfGhostLayersToInclude = uint_t(0) );
 };
@@ -177,8 +177,8 @@ struct StreamPullEverything< LatticeModel_T, typename std::enable_if< std::is_sa
 {
    static_assert( (std::is_same< typename LatticeModel_T::Stencil, stencil::D3Q19 >::value), "Only works with D3Q19!" );
 
-   typedef PdfField< LatticeModel_T >        PdfField_T;
-   typedef typename LatticeModel_T::Stencil  Stencil_T;
+   using PdfField_T = PdfField<LatticeModel_T>;
+   using Stencil_T = typename LatticeModel_T::Stencil;
 
    static void execute( PdfField_T * src, PdfField_T * dst, const uint_t numberOfGhostLayersToInclude = uint_t(0) );
 };
@@ -250,8 +250,8 @@ struct StreamPullEverything< LatticeModel_T, typename std::enable_if< std::is_sa
 {
    static_assert( (std::is_same< typename LatticeModel_T::Stencil, stencil::D3Q27 >::value), "Only works with D3Q27!" );
 
-   typedef PdfField< LatticeModel_T >        PdfField_T;
-   typedef typename LatticeModel_T::Stencil  Stencil_T;
+   using PdfField_T = PdfField<LatticeModel_T>;
+   using Stencil_T = typename LatticeModel_T::Stencil;
 
    static void execute( PdfField_T * src, PdfField_T * dst, const uint_t numberOfGhostLayersToInclude = uint_t(0) );
 };
@@ -334,8 +334,8 @@ struct StreamPull
    static_assert( (std::is_same< typename LatticeModel_T::Stencil, stencil::D3Q19 >::value == false), "There is a specialization for D3Q19!" );
    static_assert( (std::is_same< typename LatticeModel_T::Stencil, stencil::D3Q27 >::value == false), "There is a specialization for D3Q27!" );
 
-   typedef PdfField< LatticeModel_T >        PdfField_T;
-   typedef typename LatticeModel_T::Stencil  Stencil_T;
+   using PdfField_T = PdfField<LatticeModel_T>;
+   using Stencil_T = typename LatticeModel_T::Stencil;
 
    template< typename Filter_T >
    static inline void execute( PdfField_T * src, PdfField_T * dst, IBlock * block, Filter_T & filter, const uint_t numberOfGhostLayersToInclude = uint_t(0) );
@@ -392,8 +392,8 @@ struct StreamPull< LatticeModel_T, typename std::enable_if< std::is_same< typena
 {
    static_assert( (std::is_same< typename LatticeModel_T::Stencil, stencil::D2Q9 >::value), "Only works with D2Q9!" );
 
-   typedef PdfField< LatticeModel_T >        PdfField_T;
-   typedef typename LatticeModel_T::Stencil  Stencil_T;
+   using PdfField_T = PdfField<LatticeModel_T>;
+   using Stencil_T = typename LatticeModel_T::Stencil;
 
    template< typename Filter_T >
    static void execute( PdfField_T * src, PdfField_T * dst, IBlock * block, Filter_T & filter, const uint_t numberOfGhostLayersToInclude = uint_t(0) );
@@ -464,8 +464,8 @@ struct StreamPull< LatticeModel_T, typename std::enable_if< std::is_same< typena
 {
    static_assert( (std::is_same< typename LatticeModel_T::Stencil, stencil::D3Q19 >::value), "Only works with D3Q19!" );
 
-   typedef PdfField< LatticeModel_T >        PdfField_T;
-   typedef typename LatticeModel_T::Stencil  Stencil_T;
+   using PdfField_T = PdfField<LatticeModel_T>;
+   using Stencil_T = typename LatticeModel_T::Stencil;
 
    template< typename Filter_T >
    static void execute( PdfField_T * src, PdfField_T * dst, IBlock * block, Filter_T & filter, const uint_t numberOfGhostLayersToInclude = uint_t(0) );
@@ -546,8 +546,8 @@ struct StreamPull< LatticeModel_T, typename std::enable_if< std::is_same< typena
 {
    static_assert( (std::is_same< typename LatticeModel_T::Stencil, stencil::D3Q27 >::value), "Only works with D3Q27!" );
 
-   typedef PdfField< LatticeModel_T >        PdfField_T;
-   typedef typename LatticeModel_T::Stencil  Stencil_T;
+   using PdfField_T = PdfField<LatticeModel_T>;
+   using Stencil_T = typename LatticeModel_T::Stencil;
 
    template< typename Filter_T >
    static void execute( PdfField_T * src, PdfField_T * dst, IBlock * block, Filter_T & filter, const uint_t numberOfGhostLayersToInclude = uint_t(0) );
diff --git a/src/lbm/sweeps/Streaming.h b/src/lbm/sweeps/Streaming.h
index f4d87fe4a..b331e72f4 100644
--- a/src/lbm/sweeps/Streaming.h
+++ b/src/lbm/sweeps/Streaming.h
@@ -57,8 +57,8 @@ struct Stream< LatticeModel_T, FlagField_T, typename std::enable_if< ! std::is_s
 {
    static_assert( (std::is_same< typename LatticeModel_T::Stencil, stencil::D3Q19 >::value == false), "There is a specialization for D3Q19!" );
 
-   typedef PdfField< LatticeModel_T >        PdfField_T;
-   typedef typename LatticeModel_T::Stencil  Stencil;
+   using PdfField_T = PdfField<LatticeModel_T>;
+   using Stencil = typename LatticeModel_T::Stencil;
 
    static void execute( PdfField_T * src, PdfField_T * dst, const FlagField_T * flagField, const typename FlagField_T::flag_t lbm,
                         const uint_t numberOfGhostLayersToInclude = uint_t(0) );
@@ -99,8 +99,8 @@ struct Stream< LatticeModel_T, FlagField_T, typename std::enable_if< std::is_sam
 {
    static_assert( (std::is_same< typename LatticeModel_T::Stencil, stencil::D3Q19 >::value), "Only works with D3Q19!" );
 
-   typedef PdfField< LatticeModel_T >        PdfField_T;
-   typedef typename LatticeModel_T::Stencil  Stencil;
+   using PdfField_T = PdfField<LatticeModel_T>;
+   using Stencil = typename LatticeModel_T::Stencil;
 
    static void execute( PdfField_T * src, PdfField_T * dst, const FlagField_T * flagField, const typename FlagField_T::flag_t lbm,
                         const uint_t numberOfGhostLayersToInclude = uint_t(0) );
@@ -164,8 +164,8 @@ struct StreamEverything< LatticeModel_T, typename std::enable_if< ! std::is_same
 {
    static_assert( (std::is_same< typename LatticeModel_T::Stencil, stencil::D3Q19 >::value == false), "There is a specialization for D3Q19!" );
 
-   typedef PdfField< LatticeModel_T >        PdfField_T;
-   typedef typename LatticeModel_T::Stencil  Stencil;
+   using PdfField_T = PdfField<LatticeModel_T>;
+   using Stencil = typename LatticeModel_T::Stencil;
 
    static void execute( PdfField_T * src, PdfField_T * dst, const uint_t numberOfGhostLayersToInclude = uint_t(0) );
 };
@@ -216,8 +216,8 @@ struct StreamEverything< LatticeModel_T, typename std::enable_if< std::is_same<
 {
    static_assert( (std::is_same< typename LatticeModel_T::Stencil, stencil::D3Q19 >::value), "Only works with D3Q19!" );
 
-   typedef PdfField< LatticeModel_T >        PdfField_T;
-   typedef typename LatticeModel_T::Stencil  Stencil;
+   using PdfField_T = PdfField<LatticeModel_T>;
+   using Stencil = typename LatticeModel_T::Stencil;
 
    static void execute( PdfField_T * src, PdfField_T * dst, const uint_t numberOfGhostLayersToInclude = uint_t(0) );
 };
diff --git a/src/lbm/sweeps/SweepBase.h b/src/lbm/sweeps/SweepBase.h
index d3389cc60..f7dbddd12 100644
--- a/src/lbm/sweeps/SweepBase.h
+++ b/src/lbm/sweeps/SweepBase.h
@@ -47,7 +47,7 @@ class SweepBase
 {
 public:
 
-   typedef PdfField< LatticeModel_T > PdfField_T;
+   using PdfField_T = PdfField<LatticeModel_T>;
 
    // block has NO dst pdf field
    SweepBase( const BlockDataID & pdfField,
diff --git a/src/lbm/trt/SplitPureSweep.impl.h b/src/lbm/trt/SplitPureSweep.impl.h
index 84104e092..3594863a9 100644
--- a/src/lbm/trt/SplitPureSweep.impl.h
+++ b/src/lbm/trt/SplitPureSweep.impl.h
@@ -73,8 +73,8 @@ public:
    static_assert( (std::is_same< typename LatticeModel_T::ForceModel::tag, force_model::None_tag >::value),        "Only works without additional forces!" );
    static_assert( LatticeModel_T::equilibriumAccuracyOrder == 2, "Only works for lattice models that require the equilibrium distribution to be order 2 accurate!" );
 
-   typedef typename SweepBase<LatticeModel_T>::PdfField_T  PdfField_T;
-   typedef typename LatticeModel_T::Stencil                Stencil;
+   using PdfField_T = typename SweepBase<LatticeModel_T>::PdfField_T;
+   using Stencil = typename LatticeModel_T::Stencil;
 
    // block has NO dst pdf field
    SplitPureSweep( const BlockDataID & pdfField ) :
@@ -866,8 +866,8 @@ public:
    static_assert( (std::is_same< typename LatticeModel_T::ForceModel::tag, force_model::None_tag >::value),        "Only works without additional forces!" );
    static_assert( LatticeModel_T::equilibriumAccuracyOrder == 2, "Only works for lattice models that require the equilibrium distribution to be order 2 accurate!" );
 
-   typedef typename SweepBase<LatticeModel_T>::PdfField_T  PdfField_T;
-   typedef typename LatticeModel_T::Stencil                Stencil;
+   using PdfField_T = typename SweepBase<LatticeModel_T>::PdfField_T;
+   using Stencil = typename LatticeModel_T::Stencil;
 
    // block has NO dst pdf field
    SplitPureSweep( const BlockDataID & pdfField ) :
diff --git a/src/lbm/trt/SplitSweep.impl.h b/src/lbm/trt/SplitSweep.impl.h
index 4439727ca..c46db20a7 100644
--- a/src/lbm/trt/SplitSweep.impl.h
+++ b/src/lbm/trt/SplitSweep.impl.h
@@ -68,8 +68,8 @@ public:
    static_assert( (std::is_same< typename LatticeModel_T::ForceModel::tag, force_model::None_tag >::value),        "Only works without additional forces!" );
    static_assert( LatticeModel_T::equilibriumAccuracyOrder == 2, "Only works for lattice models that require the equilibrium distribution to be order 2 accurate!" );
 
-   typedef typename FlagFieldSweepBase<LatticeModel_T,FlagField_T>::PdfField_T  PdfField_T;
-   typedef typename LatticeModel_T::Stencil                                     Stencil;
+   using PdfField_T = typename FlagFieldSweepBase<LatticeModel_T, FlagField_T>::PdfField_T;
+   using Stencil = typename LatticeModel_T::Stencil;
 
    // block has NO dst pdf field, lbm mask consists of multiple flags
    SplitSweep( const BlockDataID & pdfField, const ConstBlockDataID & flagField, const Set< FlagUID > & lbmMask ) :
@@ -1005,8 +1005,8 @@ public:
    static_assert( (std::is_same< typename LatticeModel_T::ForceModel::tag, force_model::None_tag >::value),        "Only works without additional forces!" );
    static_assert( LatticeModel_T::equilibriumAccuracyOrder == 2, "Only works for lattice models that require the equilibrium distribution to be order 2 accurate!" );
 
-   typedef typename FlagFieldSweepBase<LatticeModel_T,FlagField_T>::PdfField_T  PdfField_T;
-   typedef typename LatticeModel_T::Stencil                                     Stencil;
+   using PdfField_T = typename FlagFieldSweepBase<LatticeModel_T, FlagField_T>::PdfField_T;
+   using Stencil = typename LatticeModel_T::Stencil;
 
    // block has NO dst pdf field, lbm mask consists of multiple flags
    SplitSweep( const BlockDataID & pdfField, const ConstBlockDataID & flagField, const Set< FlagUID > & lbmMask ) :
diff --git a/src/lbm/trt/cell_operations/DefaultCellOperation.impl.h b/src/lbm/trt/cell_operations/DefaultCellOperation.impl.h
index 0950f0cca..165e47f68 100644
--- a/src/lbm/trt/cell_operations/DefaultCellOperation.impl.h
+++ b/src/lbm/trt/cell_operations/DefaultCellOperation.impl.h
@@ -63,8 +63,8 @@ public:
    static_assert( (std::is_same< typename LatticeModel_T::ForceModel::tag, force_model::None_tag >::value),        "Only works without additional forces!" );
    static_assert( LatticeModel_T::equilibriumAccuracyOrder == 2, "Only works for lattice models that require the equilibrium distribution to be order 2 accurate!" );
 
-   typedef PdfField< LatticeModel_T >        PdfField_T;
-   typedef typename LatticeModel_T::Stencil  Stencil;
+   using PdfField_T = PdfField<LatticeModel_T>;
+   using Stencil = typename LatticeModel_T::Stencil;
 
    DefaultCellOperation() : lambda_e_( real_t(0) ), lambda_d_( real_t(0) ), latticeModel_( NULL ) {}
 
@@ -179,8 +179,8 @@ public:
    static_assert( (std::is_same< typename LatticeModel_T::ForceModel::tag, force_model::None_tag >::value),        "Only works without additional forces!" );
    static_assert( LatticeModel_T::equilibriumAccuracyOrder == 2, "Only works for lattice models that require the equilibrium distribution to be order 2 accurate!" );
 
-   typedef PdfField< LatticeModel_T >        PdfField_T;
-   typedef typename LatticeModel_T::Stencil  Stencil;
+   using PdfField_T = PdfField<LatticeModel_T>;
+   using Stencil = typename LatticeModel_T::Stencil;
 
    DefaultCellOperation() :
       lambda_e_( real_t(0) ), lambda_e_scaled_( real_t(0) ), lambda_d_scaled_( real_t(0) ),
@@ -431,8 +431,8 @@ public:
    static_assert( (std::is_same< typename LatticeModel_T::ForceModel::tag, force_model::None_tag >::value),        "Only works without additional forces!" );
    static_assert( LatticeModel_T::equilibriumAccuracyOrder == 2, "Only works for lattice models that require the equilibrium distribution to be order 2 accurate!" );
 
-   typedef PdfField< LatticeModel_T >        PdfField_T;
-   typedef typename LatticeModel_T::Stencil  Stencil;
+   using PdfField_T = PdfField<LatticeModel_T>;
+   using Stencil = typename LatticeModel_T::Stencil;
 
    DefaultCellOperation() :
       lambda_e_( real_t(0) ), lambda_e_scaled_( real_t(0) ), lambda_d_scaled_( real_t(0) ),
diff --git a/src/lbm/vtk/Density.h b/src/lbm/vtk/Density.h
index 6b7e4ee51..f40bc6359 100644
--- a/src/lbm/vtk/Density.h
+++ b/src/lbm/vtk/Density.h
@@ -36,7 +36,7 @@ class DensityVTKWriter : public vtk::BlockCellDataWriter< OutputType >
 {
 public:
 
-   typedef PdfField< LatticeModel_T > PdfField_T;
+   using PdfField_T = PdfField<LatticeModel_T>;
 
    DensityVTKWriter( const ConstBlockDataID & pdf, const std::string & id ) :
       vtk::BlockCellDataWriter< OutputType >( id ), bdid_( pdf ), pdf_( nullptr ) {}
@@ -63,7 +63,7 @@ class DensitySIVTKWriter : public vtk::BlockCellDataWriter< OutputType >
 {
 public:
 
-   typedef PdfField< LatticeModel_T > PdfField_T;
+   using PdfField_T = PdfField<LatticeModel_T>;
 
    DensitySIVTKWriter( const ConstBlockDataID & pdf, const real_t rho_SI, const std::string & id ) :
       vtk::BlockCellDataWriter< OutputType >( id ), bdid_( pdf ), pdf_( NULL ), rho_SI_( rho_SI ) {}
diff --git a/src/lbm/vtk/NonEquilibrium.h b/src/lbm/vtk/NonEquilibrium.h
index 3754c58dd..4a756dba9 100644
--- a/src/lbm/vtk/NonEquilibrium.h
+++ b/src/lbm/vtk/NonEquilibrium.h
@@ -41,8 +41,8 @@ class NonEqulibriumVTKWriter : public vtk::BlockCellDataWriter< OutputType, Latt
 {
 public:
 
-   typedef PdfField< LatticeModel_T >       PdfField_T;
-   typedef typename LatticeModel_T::Stencil Stencil;
+   using PdfField_T = PdfField<LatticeModel_T>;
+   using Stencil = typename LatticeModel_T::Stencil;
 
    NonEqulibriumVTKWriter( const ConstBlockDataID & pdf, const std::string & id ) :
       vtk::BlockCellDataWriter< OutputType, Stencil::Size >( id ), bdid_( pdf ), pdf_( nullptr ) {}
diff --git a/src/lbm/vtk/PressureTensor.h b/src/lbm/vtk/PressureTensor.h
index da09d6664..60c3afe53 100644
--- a/src/lbm/vtk/PressureTensor.h
+++ b/src/lbm/vtk/PressureTensor.h
@@ -36,7 +36,7 @@ class PressureTensorVTKWriter : public vtk::BlockCellDataWriter< OutputType, 9 >
 {
 public:
 
-   typedef PdfField< LatticeModel_T > PdfField_T;
+   using PdfField_T = PdfField<LatticeModel_T>;
 
    PressureTensorVTKWriter( const ConstBlockDataID & pdfFieldId, const std::string & id ) :
       vtk::BlockCellDataWriter< OutputType, 9 >( id ), bdid_( pdfFieldId ), pdf_( NULL ) {}
diff --git a/src/lbm/vtk/VTKOutput.h b/src/lbm/vtk/VTKOutput.h
index e42fb6bd9..9e58cf06f 100644
--- a/src/lbm/vtk/VTKOutput.h
+++ b/src/lbm/vtk/VTKOutput.h
@@ -79,8 +79,8 @@ class VTKOutput {
 
 public:
 
-   typedef typename FlagFieldT::flag_t flag_t;
-   typedef std::map<FlagUID, flag_t> FlagMap;
+   using flag_t = typename FlagFieldT::flag_t;
+   using FlagMap = std::map<FlagUID, flag_t>;
 
    VTKOutput( const ConstBlockDataID & pdfField, const ConstBlockDataID & flagField,
               const FlagUID & domainFlagUID, const vtk::VTKOutput::BeforeFunction & ghostLayerSyncFunction,
@@ -196,7 +196,7 @@ void VTKOutput<LatticeModel, FlagFieldT>::addToTimeloop( Timeloop & timeloop, co
                                                          const FlagUID & domainFlagUID,
                                                          const FlagMap & flagFieldMapping )
 {
-   typedef PdfField< LatticeModel > PdfField_t;
+   using PdfField_t = PdfField<LatticeModel>;
 
    blockforest::communication::UniformBufferedScheme< stencil::D3Q27 > pdfGhostLayerSync( blocks );
    pdfGhostLayerSync.addPackInfo( make_shared< field::communication::PackInfo< PdfField_t > >( pdfField ) );
diff --git a/src/lbm/vtk/Velocity.h b/src/lbm/vtk/Velocity.h
index 10957ee4a..8a31c07d2 100644
--- a/src/lbm/vtk/Velocity.h
+++ b/src/lbm/vtk/Velocity.h
@@ -36,7 +36,7 @@ class VelocityVTKWriter : public vtk::BlockCellDataWriter< OutputType, 3 >
 {
 public:
 
-   typedef PdfField< LatticeModel_T > PdfField_T;
+   using PdfField_T = PdfField<LatticeModel_T>;
 
    VelocityVTKWriter( const ConstBlockDataID & pdfFieldId, const std::string & id ) :
       vtk::BlockCellDataWriter< OutputType, 3 >( id ), bdid_( pdfFieldId ), pdf_( nullptr ) {}
@@ -63,7 +63,7 @@ class VelocityMagnitudeVTKWriter : public vtk::BlockCellDataWriter< OutputType,
 {
 public:
 
-   typedef PdfField< LatticeModel_T > PdfField_T;
+   using PdfField_T = PdfField<LatticeModel_T>;
 
    VelocityMagnitudeVTKWriter( const ConstBlockDataID & pdfFieldId, const std::string & id ) :
       vtk::BlockCellDataWriter< OutputType, 1 >( id ), bdid_( pdfFieldId ), pdf_( nullptr ) {}
@@ -90,7 +90,7 @@ class VelocitySIVTKWriter : public vtk::BlockCellDataWriter< OutputType, 3 >
 {
 public:
 
-   typedef PdfField< LatticeModel_T > PdfField_T;
+   using PdfField_T = PdfField<LatticeModel_T>;
 
    VelocitySIVTKWriter( const ConstBlockDataID & pdfFieldId, const real_t dx_SI, const real_t dt_SI, const std::string & id ) :
       vtk::BlockCellDataWriter< OutputType, 3 >( id ), bdid_( pdfFieldId ), pdf_( NULL ), dxDividedByDt_SI_( dx_SI / dt_SI ) {}
@@ -118,7 +118,7 @@ class VelocitySIMagnitudeVTKWriter : public vtk::BlockCellDataWriter< OutputType
 {
 public:
 
-   typedef PdfField< LatticeModel_T > PdfField_T;
+   using PdfField_T = PdfField<LatticeModel_T>;
 
    VelocitySIMagnitudeVTKWriter( const ConstBlockDataID & pdfFieldId, const real_t dx_SI, const real_t dt_SI, const std::string & id ) :
       vtk::BlockCellDataWriter< OutputType, 1 >( id ), bdid_( pdfFieldId ), pdf_( NULL ), dxDividedByDt_SI_( dx_SI / dt_SI ) {}
diff --git a/src/lbm_mesapd_coupling/utility/SubCyclingManager.h b/src/lbm_mesapd_coupling/utility/SubCyclingManager.h
index d001a43ba..b46ed444b 100644
--- a/src/lbm_mesapd_coupling/utility/SubCyclingManager.h
+++ b/src/lbm_mesapd_coupling/utility/SubCyclingManager.h
@@ -34,7 +34,7 @@ namespace lbm_mesapd_coupling {
 
 class SubCyclingManager {
 public:
-   typedef std::function<void ()> VoidVoidFunc;
+   using VoidVoidFunc = std::function<void ()>;
 
    /*! \name Construction & Destruction */
    //@{
@@ -45,7 +45,7 @@ public:
 
    /*! \name Registration Functions */
    //@{
-   typedef size_t FuncHandle;
+   using FuncHandle = size_t;
 
    FuncHandle addFuncBeforeSubCycles(const VoidVoidFunc &f, const std::string &identifier = "Other");
    FuncHandle addFuncDuringSubCycles(const VoidVoidFunc &f, const std::string &identifier = "Other");
@@ -64,7 +64,7 @@ public:
    //@}
 
 private:
-   typedef std::pair<std::string, VoidVoidFunc> IdentifiedFunc;
+   using IdentifiedFunc = std::pair<std::string, VoidVoidFunc>;
 
    inline void executeBeforeFunctions();
    inline void executeDuringFunctions();
diff --git a/src/mesa_pd/collision_detection/EPA.h b/src/mesa_pd/collision_detection/EPA.h
index 781196f62..052f6cdf8 100644
--- a/src/mesa_pd/collision_detection/EPA.h
+++ b/src/mesa_pd/collision_detection/EPA.h
@@ -48,9 +48,9 @@ private :
    class EPA_Triangle;
    class EPA_TriangleComp;
 
-   typedef std::vector<EPA_Triangle>  EPA_EntryBuffer;
-   typedef std::vector<EPA_Triangle*> EPA_EntryHeap;
-   typedef std::vector<EPA_Edge>      EPA_EdgeBuffer;
+   using EPA_EntryBuffer = std::vector<EPA_Triangle>;
+   using EPA_EntryHeap = std::vector<EPA_Triangle *>;
+   using EPA_EdgeBuffer = std::vector<EPA_Edge>;
    //**********************************************************************************************
 
 public:
diff --git a/src/pde/sweeps/SweepBase.h b/src/pde/sweeps/SweepBase.h
index 031a3ee59..e8fe9fb43 100644
--- a/src/pde/sweeps/SweepBase.h
+++ b/src/pde/sweeps/SweepBase.h
@@ -39,7 +39,7 @@ class SweepBase
 {
 public:
 
-   typedef GhostLayerField< real_t, 1 > Field_T;
+   using Field_T = GhostLayerField<real_t, 1>;
 
    // block has NO dst u field
    SweepBase( const BlockDataID & uFieldId, const BlockDataID & fFieldId ) :
diff --git a/src/pe/Materials.h b/src/pe/Materials.h
index d4d54b96c..15863462f 100644
--- a/src/pe/Materials.h
+++ b/src/pe/Materials.h
@@ -95,7 +95,7 @@ class WALBERLA_PUBLIC Material
 {
 private:
    //**Type definitions****************************************************************************
-   typedef Materials::size_type  SizeType;  //!< Size type of the Material class.
+   using SizeType = Materials::size_type;  //!< Size type of the Material class.
    //**********************************************************************************************
 
 public:
diff --git a/src/pe/Types.h b/src/pe/Types.h
index d66c9df92..645f16780 100644
--- a/src/pe/Types.h
+++ b/src/pe/Types.h
@@ -42,12 +42,12 @@ template<typename T> class MatrixMxN;
 }
 namespace pe{
 
-typedef math::Vector2<real_t> Vec2;
-typedef math::Vector3<real_t> Vec3;
-typedef math::Matrix2<real_t> Mat2;
-typedef math::Matrix3<real_t> Mat3;
-typedef math::Quaternion<real_t>  Quat;
-typedef math::MatrixMxN<real_t> MatN;
+using Vec2 = math::Vector2<real_t>;
+using Vec3 = math::Vector3<real_t>;
+using Mat2 = math::Matrix2<real_t>;
+using Mat3 = math::Matrix3<real_t>;
+using Quat = math::Quaternion<real_t>;
+using MatN = math::MatrixMxN<real_t>;
 
 using math::AABB;
 
@@ -77,67 +77,67 @@ class TriangleMesh;
 template <typename... BodyTypes>
 class Union;
 
-typedef RigidBody             BodyType;            //!< Type of the rigid bodies.
-typedef RigidBody*            BodyID;              //!< Handle for a rigid body.
-typedef const RigidBody*      ConstBodyID;         //!< Handle for a constant rigid body.
+using BodyType = RigidBody;            //!< Type of the rigid bodies.
+using BodyID = RigidBody *;              //!< Handle for a rigid body.
+using ConstBodyID = const RigidBody *;         //!< Handle for a constant rigid body.
 using   BodyPtr             = std::unique_ptr<RigidBody>;
 
-typedef GeomPrimitive*  GeomID;
-typedef const GeomPrimitive*  ConstGeomID;
+using GeomID = GeomPrimitive *;
+using ConstGeomID = const GeomPrimitive *;
 
-typedef Box                   BoxType;             //!< Type of the box geometric primitive.
-typedef Box*                  BoxID;               //!< Handle for a box primitive.
-typedef const Box*            ConstBoxID;          //!< Handle for a constant box primitive.
+using BoxType = Box;             //!< Type of the box geometric primitive.
+using BoxID = Box *;               //!< Handle for a box primitive.
+using ConstBoxID = const Box *;          //!< Handle for a constant box primitive.
 using   BoxPtr              = std::unique_ptr<Box>;
 
-typedef Capsule               CapsuleType;         //!< Type of the capsule geometric primitive.
-typedef Capsule*              CapsuleID;           //!< Handle for a capsule primitive.
-typedef const Capsule*        ConstCapsuleID;      //!< Handle for a constant capsule primitive.
+using CapsuleType = Capsule;         //!< Type of the capsule geometric primitive.
+using CapsuleID = Capsule *;           //!< Handle for a capsule primitive.
+using ConstCapsuleID = const Capsule *;      //!< Handle for a constant capsule primitive.
 using   CapsulePtr          = std::unique_ptr<Capsule>;
 
-typedef Cylinder              CylinderType;        //!< Type of the cylinder geometric primitive.
-typedef Cylinder*             CylinderID;          //!< Handle for a cylinder primitive.
-typedef const Cylinder*       ConstCylinderID;     //!< Handle for a constant cylinder primitive.
+using CylinderType = Cylinder;        //!< Type of the cylinder geometric primitive.
+using CylinderID = Cylinder *;          //!< Handle for a cylinder primitive.
+using ConstCylinderID = const Cylinder *;     //!< Handle for a constant cylinder primitive.
 using   CylinderPtr         = std::unique_ptr<Cylinder>;
 
-typedef CylindricalBoundary        CylindricalBoundaryType;        //!< Type of the cylindrical boundary geometric primitive.
-typedef CylindricalBoundary*       CylindricalBoundaryID;          //!< Handle for a cylindrical boundary primitive.
-typedef const CylindricalBoundary* ConstCylindricalBoundaryID;     //!< Handle for a constant cylindrical boundary primitive.
+using CylindricalBoundaryType = CylindricalBoundary;        //!< Type of the cylindrical boundary geometric primitive.
+using CylindricalBoundaryID = CylindricalBoundary *;          //!< Handle for a cylindrical boundary primitive.
+using ConstCylindricalBoundaryID = const CylindricalBoundary *;     //!< Handle for a constant cylindrical boundary primitive.
 using   CylindricalBoundaryPtr   = std::unique_ptr<CylindricalBoundary>;
 
-typedef Ellipsoid             EllipsoidType;       //!< Type of the ellipsoid geometric primitive.
-typedef Ellipsoid*            EllipsoidID;         //!< Handle for a ellipsoid primitive.
-typedef const Ellipsoid*      ConstEllipsoidID;    //!< Handle for a constant ellipsoid primitive.
+using EllipsoidType = Ellipsoid;       //!< Type of the ellipsoid geometric primitive.
+using EllipsoidID = Ellipsoid *;         //!< Handle for a ellipsoid primitive.
+using ConstEllipsoidID = const Ellipsoid *;    //!< Handle for a constant ellipsoid primitive.
 using   EllipsoidPtr        = std::unique_ptr<Ellipsoid>;
 
-typedef Plane                 PlaneType;           //!< Type of the plane geometric primitive.
-typedef Plane*                PlaneID;             //!< Handle for a plane primitive.
-typedef const Plane*          ConstPlaneID;        //!< Handle for a constant plane primitive.
+using PlaneType = Plane;           //!< Type of the plane geometric primitive.
+using PlaneID = Plane *;             //!< Handle for a plane primitive.
+using ConstPlaneID = const Plane *;        //!< Handle for a constant plane primitive.
 using   PlanePtr            = std::unique_ptr<Plane>;
 
-typedef Sphere                SphereType;          //!< Type of the sphere geometric primitive.
-typedef Sphere*               SphereID;            //!< Handle for a sphere primitive.
-typedef const Sphere*         ConstSphereID;       //!< Handle for a constant sphere primitive.
+using SphereType = Sphere;          //!< Type of the sphere geometric primitive.
+using SphereID = Sphere *;            //!< Handle for a sphere primitive.
+using ConstSphereID = const Sphere *;       //!< Handle for a constant sphere primitive.
 using   SpherePtr           = std::unique_ptr<Sphere>;
 
-typedef Squirmer              SquirmerType;        //!< Type of the squirmer geometric primitive.
-typedef Squirmer*             SquirmerID;          //!< Handle for a squirmer primitive.
-typedef const Squirmer*       ConstSquirmerID;     //!< Handle for a constant squirmer primitive.
+using SquirmerType = Squirmer;        //!< Type of the squirmer geometric primitive.
+using SquirmerID = Squirmer *;          //!< Handle for a squirmer primitive.
+using ConstSquirmerID = const Squirmer *;     //!< Handle for a constant squirmer primitive.
 using   SquirmerPtr         = std::unique_ptr<Squirmer>;
 
-typedef TriangleMesh          MeshType;             //!< Type of the triangle mesh geometric primitive.
-typedef TriangleMesh*         MeshID;               //!< Handle for a triangle mesh primitive.
-typedef const TriangleMesh*   ConstMeshID;          //!< Handle for a constant triangle mesh primitive.
+using MeshType = TriangleMesh;             //!< Type of the triangle mesh geometric primitive.
+using MeshID = TriangleMesh *;               //!< Handle for a triangle mesh primitive.
+using ConstMeshID = const TriangleMesh *;          //!< Handle for a constant triangle mesh primitive.
 using   TriangleMeshPtr     = std::unique_ptr<TriangleMesh>;
 
-typedef Contact               ContactType;         //!< Type of the contacts.
-typedef Contact*              ContactID;           //!< Handle for a contact.
-typedef const Contact*        ConstContactID;      //!< Handle for a constant contact.
+using ContactType = Contact;         //!< Type of the contacts.
+using ContactID = Contact *;           //!< Handle for a contact.
+using ConstContactID = const Contact *;      //!< Handle for a constant contact.
 
-typedef BodyManager*          ManagerID;           //!< Handle for a BodyManager.
-typedef const BodyManager*    ConstManagerID;      //!< Handle for a constant BodyManager.
+using ManagerID = BodyManager *;           //!< Handle for a BodyManager.
+using ConstManagerID = const BodyManager *;      //!< Handle for a constant BodyManager.
 
-typedef std::vector<Material>  Materials;          //!< Vector for materials.
+using Materials = std::vector<Material>;          //!< Vector for materials.
 
 
 //*************************************************************************************************
@@ -156,14 +156,14 @@ typedef std::vector<Material>  Materials;          //!< Vector for materials.
    MaterialID myMaterial = createMaterial( "myMaterial", real_c(2.54), real_c(0.8), real_c(0.1), real_c(0.05) );
    \endcode
  */
-typedef Materials::size_type  MaterialID;
+using MaterialID = Materials::size_type;
 //*************************************************************************************************
 
 ///Output data type of coarse collision detection module
-typedef std::vector<std::pair<BodyID, BodyID> > PossibleContacts;
+using PossibleContacts = std::vector<std::pair<BodyID, BodyID>>;
 
 ///Output data type of fine collision detection module
-typedef std::vector< Contact > Contacts;
+using Contacts = std::vector<Contact>;
 
 ///Class enum for BodyStorages
 /// \see Storage
@@ -187,7 +187,7 @@ struct StorageSelect
 };
 
 ///Container for local and shadow body storage
-typedef std::array<BodyStorage, 2> Storage;
+using Storage = std::array<BodyStorage, 2>;
 
 }  // namespace pe
 }  // namespace walberla
diff --git a/src/pe/amr/weight_assignment/MetisAssignmentFunctor.h b/src/pe/amr/weight_assignment/MetisAssignmentFunctor.h
index 4d0aeb411..f0797401e 100644
--- a/src/pe/amr/weight_assignment/MetisAssignmentFunctor.h
+++ b/src/pe/amr/weight_assignment/MetisAssignmentFunctor.h
@@ -40,9 +40,9 @@ class MetisAssignmentFunctor
 {
 public:
    ///Convenience typedef to be used as PhantomBlock weight in conjunction with this weight assignment functor.
-   typedef blockforest::DynamicParMetisBlockInfo           PhantomBlockWeight;
+   using PhantomBlockWeight = blockforest::DynamicParMetisBlockInfo;
    ///Convenience typdef for pack and unpack functions to be used in conjunction with PhantomBlockWeight.
-   typedef blockforest::DynamicParMetisBlockInfoPackUnpack PhantomBlockWeightPackUnpackFunctor;
+   using PhantomBlockWeightPackUnpackFunctor = blockforest::DynamicParMetisBlockInfoPackUnpack;
 
    MetisAssignmentFunctor( shared_ptr<blockforest::InfoCollection>& ic, const real_t baseWeight = real_t(10.0) ) : ic_(ic), baseWeight_(baseWeight) {}
 
diff --git a/src/pe/amr/weight_assignment/WeightAssignmentFunctor.h b/src/pe/amr/weight_assignment/WeightAssignmentFunctor.h
index 66f267af0..069efae7e 100644
--- a/src/pe/amr/weight_assignment/WeightAssignmentFunctor.h
+++ b/src/pe/amr/weight_assignment/WeightAssignmentFunctor.h
@@ -38,9 +38,9 @@ class WeightAssignmentFunctor
 {
 public:
    ///Convenience typedef to be used as PhantomBlock weight in conjunction with this weight assignment functor.
-   typedef walberla::blockforest::PODPhantomWeight<double>           PhantomBlockWeight;
+   using PhantomBlockWeight = walberla::blockforest::PODPhantomWeight<double>;
    ///Convenience typdef for pack and unpack functions to be used in conjunction with PhantomBlockWeight.
-   typedef walberla::blockforest::PODPhantomWeightPackUnpack<double> PhantomBlockWeightPackUnpackFunctor;
+   using PhantomBlockWeightPackUnpackFunctor = walberla::blockforest::PODPhantomWeightPackUnpack<double>;
 
    WeightAssignmentFunctor( shared_ptr<blockforest::InfoCollection>& ic, const real_t baseWeight = real_t(10.0) ) : ic_(ic), baseWeight_(baseWeight) {}
 
diff --git a/src/pe/ccd/HashGrids.h b/src/pe/ccd/HashGrids.h
index 15b2968e3..cbfe0471d 100644
--- a/src/pe/ccd/HashGrids.h
+++ b/src/pe/ccd/HashGrids.h
@@ -103,7 +103,7 @@ public:
 private:
    //**Type definitions****************************************************************************
    //! Vector for storing (handles to) rigid bodies.
-   typedef std::vector<BodyID>  BodyVector;
+   using BodyVector = std::vector<BodyID>;
    //**********************************************************************************************
 
    //**********************************************************************************************
@@ -114,7 +114,7 @@ private:
     private:
       //**Type definitions*************************************************************************
       //! The signed integer type that is used for storing offsets to neighboring cells.
-      typedef long offset_t;
+      using offset_t = long;
       //*******************************************************************************************
 
       //*******************************************************************************************
@@ -139,7 +139,7 @@ private:
 
       //**Type definitions*************************************************************************
       //! Vector for storing pointers to (body-occupied) cells.
-      typedef std::vector<Cell*>  CellVector;
+      using CellVector = std::vector<Cell *>;
       //*******************************************************************************************
 
     public:
@@ -262,7 +262,7 @@ private:
    //! List for storing all the hash grids that are in use.
    /*! This data structure is used to represent the grid hierarchy. All hash grids are stored in
        ascending order by the size of their cells. */
-   typedef std::list<HashGrid*>  GridList;
+   using GridList = std::list<HashGrid *>;
    //**********************************************************************************************
 
 public:
diff --git a/src/pe/collision/EPA.h b/src/pe/collision/EPA.h
index a318e7e57..7bc5840d1 100644
--- a/src/pe/collision/EPA.h
+++ b/src/pe/collision/EPA.h
@@ -64,9 +64,9 @@ private :
    class EPA_Triangle;
    class EPA_TriangleComp;
 
-   typedef std::vector<EPA_Triangle>  EPA_EntryBuffer;
-   typedef std::vector<EPA_Triangle*> EPA_EntryHeap;
-   typedef std::vector<EPA_Edge>      EPA_EdgeBuffer;
+   using EPA_EntryBuffer = std::vector<EPA_Triangle>;
+   using EPA_EntryHeap = std::vector<EPA_Triangle *>;
+   using EPA_EdgeBuffer = std::vector<EPA_Edge>;
    //**********************************************************************************************
 
 public:
diff --git a/src/pe/cr/HCSITS.h b/src/pe/cr/HCSITS.h
index 8cf803c46..93da3f0f2 100644
--- a/src/pe/cr/HCSITS.h
+++ b/src/pe/cr/HCSITS.h
@@ -270,7 +270,7 @@ private:
 };
 //*************************************************************************************************
 
-typedef HardContactSemiImplicitTimesteppingSolvers HCSITS;
+using HCSITS = HardContactSemiImplicitTimesteppingSolvers;
 
 //=================================================================================================
 //
diff --git a/src/pe/rigidbody/MPIRigidBodyTrait.h b/src/pe/rigidbody/MPIRigidBodyTrait.h
index a8a055e1e..5e24baa29 100644
--- a/src/pe/rigidbody/MPIRigidBodyTrait.h
+++ b/src/pe/rigidbody/MPIRigidBodyTrait.h
@@ -47,15 +47,15 @@ class MPIRigidBodyTrait
 {
 protected:
    //**Type definitions****************************************************************************
-   typedef std::vector<Owner>             ShadowOwners;       //!< Vector for remote MPI processes the rigid body is contained in.
-   typedef std::set<BlockID>              BlockStates;        //!< Stores the information if neighbor block knows about object.
+   using ShadowOwners = std::vector<Owner>;       //!< Vector for remote MPI processes the rigid body is contained in.
+   using BlockStates = std::set<BlockID>;        //!< Stores the information if neighbor block knows about object.
    //**********************************************************************************************
 
 public:
    //**Type definitions****************************************************************************
-   typedef ShadowOwners::iterator        ShadowOwnersIterator;       //!< Iterator over the connected processes.
-   typedef ShadowOwners::const_iterator  ConstShadowOwnersIterator;  //!< ConstIterator over the connected processes.
-   typedef size_t                        SizeType;
+   using ShadowOwnersIterator = ShadowOwners::iterator;       //!< Iterator over the connected processes.
+   using ConstShadowOwnersIterator = ShadowOwners::const_iterator;  //!< ConstIterator over the connected processes.
+   using SizeType = size_t;
    //**********************************************************************************************
 
    //**Constructor*********************************************************************************
diff --git a/src/pe_coupling/amr/InfoCollection.h b/src/pe_coupling/amr/InfoCollection.h
index 86e508e87..c39d41a6d 100644
--- a/src/pe_coupling/amr/InfoCollection.h
+++ b/src/pe_coupling/amr/InfoCollection.h
@@ -35,8 +35,8 @@
 namespace walberla {
 namespace pe_coupling {
 
-typedef std::map<blockforest::BlockID, BlockInfo>  InfoCollection;
-typedef std::pair<blockforest::BlockID, BlockInfo> InfoCollectionPair;
+using InfoCollection = std::map<blockforest::BlockID, BlockInfo>;
+using InfoCollectionPair = std::pair<blockforest::BlockID, BlockInfo>;
 
 template <typename BoundaryHandling_T>
 void createWithNeighborhood(BlockForest& bf, const BlockDataID boundaryHandlingID,
diff --git a/src/pe_coupling/amr/weight_assignment/WeightAssignmentFunctor.h b/src/pe_coupling/amr/weight_assignment/WeightAssignmentFunctor.h
index 5fa776362..ad5aa4489 100644
--- a/src/pe_coupling/amr/weight_assignment/WeightAssignmentFunctor.h
+++ b/src/pe_coupling/amr/weight_assignment/WeightAssignmentFunctor.h
@@ -34,7 +34,7 @@ namespace amr {
 class WeightAssignmentFunctor
 {
 public:
-   typedef walberla::blockforest::PODPhantomWeight<double> PhantomBlockWeight;
+   using PhantomBlockWeight = walberla::blockforest::PODPhantomWeight<double>;
 
    WeightAssignmentFunctor( const shared_ptr<InfoCollection>& ic,
                             const std::function<real_t(const BlockInfo&)> & weightEvaluationFct ) :
diff --git a/src/pe_coupling/discrete_particle_methods/evaluators/AddedMassForceEvaluator.h b/src/pe_coupling/discrete_particle_methods/evaluators/AddedMassForceEvaluator.h
index c452f8864..c441e9009 100644
--- a/src/pe_coupling/discrete_particle_methods/evaluators/AddedMassForceEvaluator.h
+++ b/src/pe_coupling/discrete_particle_methods/evaluators/AddedMassForceEvaluator.h
@@ -70,9 +70,9 @@ class AddedMassForceEvaluator
 
 public:
 
-   typedef GhostLayerField< Vector3<real_t>, 1>             Vec3Field_T;
-   typedef FieldInterpolator_T<Vec3Field_T, FlagField_T>    Vec3FieldInterpolator_T;
-   typedef Distributor_T<Vec3Field_T, FlagField_T>          ForceDistributor_T;
+   using Vec3Field_T = GhostLayerField<Vector3<real_t>, 1>;
+   using Vec3FieldInterpolator_T = FieldInterpolator_T<Vec3Field_T, FlagField_T>;
+   using ForceDistributor_T = Distributor_T<Vec3Field_T, FlagField_T>;
 
    AddedMassForceEvaluator( const shared_ptr<StructuredBlockStorage> & blockStorage,
                             const BlockDataID & forceFieldID, const BlockDataID & bodyStorageID,
diff --git a/src/pe_coupling/discrete_particle_methods/evaluators/EffectiveViscosityFieldEvaluator.h b/src/pe_coupling/discrete_particle_methods/evaluators/EffectiveViscosityFieldEvaluator.h
index fc10c9b97..f8039c7e6 100644
--- a/src/pe_coupling/discrete_particle_methods/evaluators/EffectiveViscosityFieldEvaluator.h
+++ b/src/pe_coupling/discrete_particle_methods/evaluators/EffectiveViscosityFieldEvaluator.h
@@ -62,7 +62,7 @@ real_t calculateEilersEffectiveViscosity( real_t fluidViscosity, real_t porosity
 class EffectiveViscosityFieldEvaluator
 {
 public:
-   typedef GhostLayerField< real_t, 1 >  ScalarField_T;
+   using ScalarField_T = GhostLayerField<real_t, 1>;
 
    EffectiveViscosityFieldEvaluator( const BlockDataID & omegaFieldID, const ConstBlockDataID & solidVolumeFractionFieldID,
                                      const real_t & fluidViscosity,
diff --git a/src/pe_coupling/discrete_particle_methods/evaluators/InteractionForceEvaluator.h b/src/pe_coupling/discrete_particle_methods/evaluators/InteractionForceEvaluator.h
index 11709d1e8..9f5125fc8 100644
--- a/src/pe_coupling/discrete_particle_methods/evaluators/InteractionForceEvaluator.h
+++ b/src/pe_coupling/discrete_particle_methods/evaluators/InteractionForceEvaluator.h
@@ -78,11 +78,11 @@ class InteractionForceEvaluator
 
 public:
 
-   typedef GhostLayerField< Vector3<real_t>, 1>             Vec3Field_T;
-   typedef GhostLayerField< real_t, 1>                      ScalarField_T;
-   typedef FieldInterpolator_T<Vec3Field_T, FlagField_T>    Vec3FieldInterpolator_T;
-   typedef FieldInterpolator_T<ScalarField_T, FlagField_T>  ScalarFieldInterpolator_T;
-   typedef Distributor_T<Vec3Field_T, FlagField_T>          ForceDistributor_T;
+   using Vec3Field_T = GhostLayerField<Vector3<real_t>, 1>;
+   using ScalarField_T = GhostLayerField<real_t, 1>;
+   using Vec3FieldInterpolator_T = FieldInterpolator_T<Vec3Field_T, FlagField_T>;
+   using ScalarFieldInterpolator_T = FieldInterpolator_T<ScalarField_T, FlagField_T>;
+   using ForceDistributor_T = Distributor_T<Vec3Field_T, FlagField_T>;
 
    InteractionForceEvaluator( const shared_ptr<StructuredBlockStorage> & blockStorage,
                               const BlockDataID & forceFieldID, const BlockDataID & bodyStorageID,
diff --git a/src/pe_coupling/discrete_particle_methods/evaluators/LiftForceEvaluator.h b/src/pe_coupling/discrete_particle_methods/evaluators/LiftForceEvaluator.h
index de8518349..3243b32be 100644
--- a/src/pe_coupling/discrete_particle_methods/evaluators/LiftForceEvaluator.h
+++ b/src/pe_coupling/discrete_particle_methods/evaluators/LiftForceEvaluator.h
@@ -65,9 +65,9 @@ class LiftForceEvaluator
 
 public:
 
-   typedef GhostLayerField< Vector3<real_t>, 1>          Vec3Field_T;
-   typedef FieldInterpolator_T<Vec3Field_T, FlagField_T> Vec3FieldInterpolator_T;
-   typedef Distributor_T<Vec3Field_T, FlagField_T>       ForceDistributor_T;
+   using Vec3Field_T = GhostLayerField<Vector3<real_t>, 1>;
+   using Vec3FieldInterpolator_T = FieldInterpolator_T<Vec3Field_T, FlagField_T>;
+   using ForceDistributor_T = Distributor_T<Vec3Field_T, FlagField_T>;
 
    LiftForceEvaluator( const shared_ptr<StructuredBlockStorage> & blockStorage,
                        const BlockDataID & forceFieldID, const BlockDataID & bodyStorageID, const BlockDataID & flagFieldID, const Set< FlagUID > & domainFlags,
diff --git a/src/pe_coupling/discrete_particle_methods/evaluators/PressureFieldEvaluator.h b/src/pe_coupling/discrete_particle_methods/evaluators/PressureFieldEvaluator.h
index 61998ae6d..f7a639e55 100644
--- a/src/pe_coupling/discrete_particle_methods/evaluators/PressureFieldEvaluator.h
+++ b/src/pe_coupling/discrete_particle_methods/evaluators/PressureFieldEvaluator.h
@@ -39,8 +39,8 @@ template <typename LatticeModel_T, typename BoundaryHandling_T>
 class PressureFieldEvaluator
 {
 public:
-   typedef lbm::PdfField< LatticeModel_T >        PdfField_T;
-   typedef GhostLayerField< real_t, 1 >           ScalarField_T;
+   using PdfField_T = lbm::PdfField<LatticeModel_T>;
+   using ScalarField_T = GhostLayerField<real_t, 1>;
 
    PressureFieldEvaluator( const BlockDataID & pressureFieldID, const ConstBlockDataID & pdfFieldID, const ConstBlockDataID & boundaryHandlingID )
       : pressureFieldID_( pressureFieldID ), pdfFieldID_( pdfFieldID ), boundaryHandlingID_( boundaryHandlingID )
diff --git a/src/pe_coupling/discrete_particle_methods/evaluators/PressureGradientFieldEvaluator.h b/src/pe_coupling/discrete_particle_methods/evaluators/PressureGradientFieldEvaluator.h
index 2e8511fca..a206b32ed 100644
--- a/src/pe_coupling/discrete_particle_methods/evaluators/PressureGradientFieldEvaluator.h
+++ b/src/pe_coupling/discrete_particle_methods/evaluators/PressureGradientFieldEvaluator.h
@@ -42,9 +42,9 @@ template <typename LatticeModel_T, typename BoundaryHandling_T>
 class PressureGradientFieldEvaluator
 {
 public:
-   typedef GhostLayerField< Vector3<real_t>, 1 >  VectorField_T;
-   typedef GhostLayerField< real_t, 1>            ScalarField_T;
-   typedef typename LatticeModel_T::Stencil       Stencil_T;
+   using VectorField_T = GhostLayerField<Vector3<real_t>, 1>;
+   using ScalarField_T = GhostLayerField<real_t, 1>;
+   using Stencil_T = typename LatticeModel_T::Stencil;
 
    PressureGradientFieldEvaluator( const BlockDataID & pressureGradientFieldID, const ConstBlockDataID & pressureFieldID,
                                    const ConstBlockDataID & boundaryHandlingID )
diff --git a/src/pe_coupling/discrete_particle_methods/evaluators/SolidVolumeFractionFieldEvaluator.h b/src/pe_coupling/discrete_particle_methods/evaluators/SolidVolumeFractionFieldEvaluator.h
index 586b51bc2..0ba419f46 100644
--- a/src/pe_coupling/discrete_particle_methods/evaluators/SolidVolumeFractionFieldEvaluator.h
+++ b/src/pe_coupling/discrete_particle_methods/evaluators/SolidVolumeFractionFieldEvaluator.h
@@ -62,8 +62,8 @@ class SolidVolumeFractionFieldEvaluator
 {
 public:
 
-   typedef GhostLayerField< real_t, 1 >              ScalarField_T;
-   typedef Distributor_T<ScalarField_T, FlagField_T> ScalarDistributor_T;
+   using ScalarField_T = GhostLayerField<real_t, 1>;
+   using ScalarDistributor_T = Distributor_T<ScalarField_T, FlagField_T>;
 
    SolidVolumeFractionFieldEvaluator( const shared_ptr<StructuredBlockStorage> & blockStorage,
                                       const BlockDataID & solidVolumeFractionFieldID, const BlockDataID & bodyStorageID,
diff --git a/src/pe_coupling/discrete_particle_methods/evaluators/StressTensorGradientFieldEvaluator.h b/src/pe_coupling/discrete_particle_methods/evaluators/StressTensorGradientFieldEvaluator.h
index 29dce0a61..613e2a7c3 100644
--- a/src/pe_coupling/discrete_particle_methods/evaluators/StressTensorGradientFieldEvaluator.h
+++ b/src/pe_coupling/discrete_particle_methods/evaluators/StressTensorGradientFieldEvaluator.h
@@ -43,9 +43,9 @@ template <typename LatticeModel_T, typename BoundaryHandling_T>
 class StressTensorGradientFieldEvaluator
 {
 public:
-   typedef GhostLayerField< Matrix3< real_t >, 1> TensorField_T;
-   typedef GhostLayerField< Vector3<real_t>, 1 >  VectorField_T;
-   typedef typename LatticeModel_T::Stencil       Stencil_T;
+   using TensorField_T = GhostLayerField<Matrix3<real_t>, 1>;
+   using VectorField_T = GhostLayerField<Vector3<real_t>, 1>;
+   using Stencil_T = typename LatticeModel_T::Stencil;
 
    StressTensorGradientFieldEvaluator( const BlockDataID & stressTensorGradientFieldID,
                                        const ConstBlockDataID & velocityGradientFieldID,
diff --git a/src/pe_coupling/discrete_particle_methods/evaluators/VelocityCurlFieldEvaluator.h b/src/pe_coupling/discrete_particle_methods/evaluators/VelocityCurlFieldEvaluator.h
index 0442814db..ed693ff86 100644
--- a/src/pe_coupling/discrete_particle_methods/evaluators/VelocityCurlFieldEvaluator.h
+++ b/src/pe_coupling/discrete_particle_methods/evaluators/VelocityCurlFieldEvaluator.h
@@ -42,8 +42,8 @@ template <typename LatticeModel_T, typename BoundaryHandling_T>
 class VelocityCurlFieldEvaluator
 {
 public:
-   typedef GhostLayerField< Vector3<real_t>, 1 >  VectorField_T;
-   typedef typename LatticeModel_T::Stencil       Stencil_T;
+   using VectorField_T = GhostLayerField<Vector3<real_t>, 1>;
+   using Stencil_T = typename LatticeModel_T::Stencil;
 
    VelocityCurlFieldEvaluator( const BlockDataID & velocityCurlFieldID, const ConstBlockDataID & velocityFieldID,
                                const ConstBlockDataID & boundaryHandlingID )
diff --git a/src/pe_coupling/discrete_particle_methods/evaluators/VelocityFieldEvaluator.h b/src/pe_coupling/discrete_particle_methods/evaluators/VelocityFieldEvaluator.h
index 70d62853b..b82f8fac3 100644
--- a/src/pe_coupling/discrete_particle_methods/evaluators/VelocityFieldEvaluator.h
+++ b/src/pe_coupling/discrete_particle_methods/evaluators/VelocityFieldEvaluator.h
@@ -44,8 +44,8 @@ template <typename LatticeModel_T, typename BoundaryHandling_T>
 class VelocityFieldEvaluator
 {
 public:
-   typedef lbm::PdfField< LatticeModel_T >        PdfField_T;
-   typedef GhostLayerField< Vector3<real_t>, 1 >  VelocityField_T;
+   using PdfField_T = lbm::PdfField<LatticeModel_T>;
+   using VelocityField_T = GhostLayerField<Vector3<real_t>, 1>;
 
    VelocityFieldEvaluator( const BlockDataID & velocityFieldID,
                            const ConstBlockDataID & pdfFieldID, const ConstBlockDataID & boundaryHandlingID )
diff --git a/src/pe_coupling/discrete_particle_methods/evaluators/VelocityGradientFieldEvaluator.h b/src/pe_coupling/discrete_particle_methods/evaluators/VelocityGradientFieldEvaluator.h
index 9e0397a5a..0f85958ad 100644
--- a/src/pe_coupling/discrete_particle_methods/evaluators/VelocityGradientFieldEvaluator.h
+++ b/src/pe_coupling/discrete_particle_methods/evaluators/VelocityGradientFieldEvaluator.h
@@ -44,9 +44,9 @@ template <typename LatticeModel_T, typename BoundaryHandling_T>
 class VelocityGradientFieldEvaluator
 {
 public:
-   typedef GhostLayerField< Matrix3< real_t >, 1> TensorField_T;
-   typedef GhostLayerField< Vector3<real_t>, 1 >  VectorField_T;
-   typedef typename LatticeModel_T::Stencil       Stencil_T;
+   using TensorField_T = GhostLayerField<Matrix3<real_t>, 1>;
+   using VectorField_T = GhostLayerField<Vector3<real_t>, 1>;
+   using Stencil_T = typename LatticeModel_T::Stencil;
 
    VelocityGradientFieldEvaluator( const BlockDataID & velocityGradientFieldID,
                                    const ConstBlockDataID & velocityFieldID,
diff --git a/src/pe_coupling/discrete_particle_methods/evaluators/VelocityTotalTimeDerivativeFieldEvaluator.h b/src/pe_coupling/discrete_particle_methods/evaluators/VelocityTotalTimeDerivativeFieldEvaluator.h
index 62e70f973..2bcbba999 100644
--- a/src/pe_coupling/discrete_particle_methods/evaluators/VelocityTotalTimeDerivativeFieldEvaluator.h
+++ b/src/pe_coupling/discrete_particle_methods/evaluators/VelocityTotalTimeDerivativeFieldEvaluator.h
@@ -46,8 +46,8 @@ using math::Vector3;
 class VelocityTotalTimeDerivativeFieldEvaluator
 {
 public:
-   typedef GhostLayerField< Vector3<real_t>, 1 >  VelocityField_T;
-   typedef GhostLayerField< Matrix3< real_t >, 1> TensorField_T;
+   using VelocityField_T = GhostLayerField<Vector3<real_t>, 1>;
+   using TensorField_T = GhostLayerField<Matrix3<real_t>, 1>;
 
    VelocityTotalTimeDerivativeFieldEvaluator( const BlockDataID & totalTimeDerivativeVelocityFieldID,
                                               const ConstBlockDataID & currentVelocityFieldID,
diff --git a/src/pe_coupling/discrete_particle_methods/gns_lbm/GNSSweep.h b/src/pe_coupling/discrete_particle_methods/gns_lbm/GNSSweep.h
index 7c62ccb5b..a36e475ef 100644
--- a/src/pe_coupling/discrete_particle_methods/gns_lbm/GNSSweep.h
+++ b/src/pe_coupling/discrete_particle_methods/gns_lbm/GNSSweep.h
@@ -53,9 +53,9 @@ class GNSSweep
 {
 public:
 
-   typedef typename lbm::SweepBase< LatticeModel_T, Filter_T, DensityVelocityIn_T, DensityVelocityOut_T >::PdfField_T  PdfField_T;
-   typedef typename LatticeModel_T::Stencil Stencil_T;
-   typedef GhostLayerField< real_t, 1> ScalarField_T;
+   using PdfField_T = typename lbm::SweepBase<LatticeModel_T, Filter_T, DensityVelocityIn_T, DensityVelocityOut_T>::PdfField_T;
+   using Stencil_T = typename LatticeModel_T::Stencil;
+   using ScalarField_T = GhostLayerField<real_t, 1>;
 
    static_assert( LatticeModel_T::ForceModel::constant == false, "Only works with non-constant force models!" );
    static_assert( LatticeModel_T::compressible == false,         "Only works with incompressible models!" );
@@ -257,7 +257,7 @@ shared_ptr< GNSSweep< LatticeModel_T, Filter_T, DensityVelocityIn_T, DensityVelo
 makeGNSSweep( const BlockDataID & pdfFieldID, const BlockDataID & solidVolumeFractionFieldID, const Filter_T & filter,
                const DensityVelocityIn_T & densityVelocityIn, const DensityVelocityOut_T & densityVelocityOut )
 {
-   typedef GNSSweep< LatticeModel_T, Filter_T, DensityVelocityIn_T, DensityVelocityOut_T > Sweep_T;
+   using Sweep_T = GNSSweep<LatticeModel_T, Filter_T, DensityVelocityIn_T, DensityVelocityOut_T>;
    return shared_ptr< Sweep_T >( new Sweep_T( pdfFieldID, solidVolumeFractionFieldID, filter, densityVelocityIn, densityVelocityOut ) );
 }
 
@@ -266,7 +266,7 @@ shared_ptr< GNSSweep< LatticeModel_T, Filter_T, DensityVelocityIn_T, DensityVelo
 makeGNSSweep( const BlockDataID & srcID, const BlockDataID & dstID, const BlockDataID & solidVolumeFractionFieldID, const Filter_T & filter,
                const DensityVelocityIn_T & densityVelocityIn, const DensityVelocityOut_T & densityVelocityOut )
 {
-   typedef GNSSweep< LatticeModel_T, Filter_T, DensityVelocityIn_T, DensityVelocityOut_T > Sweep_T;
+   using Sweep_T = GNSSweep<LatticeModel_T, Filter_T, DensityVelocityIn_T, DensityVelocityOut_T>;
    return shared_ptr< Sweep_T >( new Sweep_T( srcID, dstID, solidVolumeFractionFieldID, filter, densityVelocityIn, densityVelocityOut ) );
 }
 
diff --git a/src/pe_coupling/discrete_particle_methods/gns_lbm/utility/GNSExternalForceToForceFieldAdder.h b/src/pe_coupling/discrete_particle_methods/gns_lbm/utility/GNSExternalForceToForceFieldAdder.h
index 73fc6f547..9517c8b60 100644
--- a/src/pe_coupling/discrete_particle_methods/gns_lbm/utility/GNSExternalForceToForceFieldAdder.h
+++ b/src/pe_coupling/discrete_particle_methods/gns_lbm/utility/GNSExternalForceToForceFieldAdder.h
@@ -41,8 +41,8 @@ using math::Vector3;
 class GNSExternalForceToForceFieldAdder
 {
 public:
-   typedef GhostLayerField< Vector3<real_t>, 1 >  ForceField_T;
-   typedef GhostLayerField< real_t, 1 >  ScalarField_T;
+   using ForceField_T = GhostLayerField<Vector3<real_t>, 1>;
+   using ScalarField_T = GhostLayerField<real_t, 1>;
 
    GNSExternalForceToForceFieldAdder( const BlockDataID & forceFieldID, const ConstBlockDataID & solidVolumeFractionFieldID, const Vector3<real_t> & externalForce )
       : forceFieldID_( forceFieldID ), solidVolumeFractionFieldID_( solidVolumeFractionFieldID ), externalForce_( externalForce )
diff --git a/src/pe_coupling/discrete_particle_methods/gns_lbm/utility/GNSPressureFieldEvaluator.h b/src/pe_coupling/discrete_particle_methods/gns_lbm/utility/GNSPressureFieldEvaluator.h
index c284db5fd..8ff05a953 100644
--- a/src/pe_coupling/discrete_particle_methods/gns_lbm/utility/GNSPressureFieldEvaluator.h
+++ b/src/pe_coupling/discrete_particle_methods/gns_lbm/utility/GNSPressureFieldEvaluator.h
@@ -36,8 +36,8 @@ template <typename LatticeModel_T, typename BoundaryHandling_T>
 class GNSPressureFieldEvaluator
 {
 public:
-   typedef lbm::PdfField< LatticeModel_T >        PdfField_T;
-   typedef GhostLayerField< real_t, 1 >           ScalarField_T;
+   using PdfField_T = lbm::PdfField<LatticeModel_T>;
+   using ScalarField_T = GhostLayerField<real_t, 1>;
 
    GNSPressureFieldEvaluator( const BlockDataID & pressureFieldID, const ConstBlockDataID & pdfFieldID,
                               const ConstBlockDataID & solidVolumeFractionFieldID, const ConstBlockDataID & boundaryHandlingID )
diff --git a/src/pe_coupling/discrete_particle_methods/gns_lbm/utility/GNSSmagorinskyLESField.h b/src/pe_coupling/discrete_particle_methods/gns_lbm/utility/GNSSmagorinskyLESField.h
index 4ae1a67df..f4d8fd414 100644
--- a/src/pe_coupling/discrete_particle_methods/gns_lbm/utility/GNSSmagorinskyLESField.h
+++ b/src/pe_coupling/discrete_particle_methods/gns_lbm/utility/GNSSmagorinskyLESField.h
@@ -64,9 +64,9 @@ class GNSSmagorinskyLESField
 {
 public:
 
-   typedef lbm::PdfField< LatticeModel_T >   PdfField_T;
-   typedef GhostLayerField< real_t, 1 >      ScalarField_T;
-   typedef typename LatticeModel_T::Stencil  Stencil_T;
+   using PdfField_T = lbm::PdfField<LatticeModel_T>;
+   using ScalarField_T = GhostLayerField<real_t, 1>;
+   using Stencil_T = typename LatticeModel_T::Stencil;
 
    static_assert( LatticeModel_T::CollisionModel::constant == false, "Only works with non-constant relaxation time fields!" );
    static_assert( LatticeModel_T::compressible == false,             "Only works with incompressible models!" );
diff --git a/src/pe_coupling/discrete_particle_methods/gns_lbm/utility/GNSVelocityFieldEvaluator.h b/src/pe_coupling/discrete_particle_methods/gns_lbm/utility/GNSVelocityFieldEvaluator.h
index 157c812b7..d0fcdf110 100644
--- a/src/pe_coupling/discrete_particle_methods/gns_lbm/utility/GNSVelocityFieldEvaluator.h
+++ b/src/pe_coupling/discrete_particle_methods/gns_lbm/utility/GNSVelocityFieldEvaluator.h
@@ -48,9 +48,9 @@ template <typename LatticeModel_T, typename BoundaryHandling_T>
 class GNSVelocityFieldEvaluator
 {
 public:
-   typedef lbm::PdfField< LatticeModel_T >        PdfField_T;
-   typedef GhostLayerField< Vector3<real_t>, 1 >  VelocityField_T;
-   typedef GhostLayerField< real_t, 1 >           ScalarField_T;
+   using PdfField_T = lbm::PdfField<LatticeModel_T>;
+   using VelocityField_T = GhostLayerField<Vector3<real_t>, 1>;
+   using ScalarField_T = GhostLayerField<real_t, 1>;
 
    GNSVelocityFieldEvaluator( const BlockDataID & velocityFieldID, const ConstBlockDataID & pdfFieldID, const ConstBlockDataID & solidVolumeFractionFieldID,
                               const ConstBlockDataID & boundaryHandlingID )
diff --git a/src/pe_coupling/discrete_particle_methods/utility/AveragedInteractionForceFieldToForceFieldAdder.h b/src/pe_coupling/discrete_particle_methods/utility/AveragedInteractionForceFieldToForceFieldAdder.h
index bffee1573..9d8d5a208 100644
--- a/src/pe_coupling/discrete_particle_methods/utility/AveragedInteractionForceFieldToForceFieldAdder.h
+++ b/src/pe_coupling/discrete_particle_methods/utility/AveragedInteractionForceFieldToForceFieldAdder.h
@@ -48,7 +48,7 @@ using math::Vector3;
 class AveragedInteractionForceFieldToForceFieldAdder
 {
 public:
-   typedef GhostLayerField< Vector3<real_t>, 1 >  ForceField_T;
+   using ForceField_T = GhostLayerField<Vector3<real_t>, 1>;
 
    AveragedInteractionForceFieldToForceFieldAdder( const shared_ptr<StructuredBlockStorage> & blockStorage, const BlockDataID & forceFieldID,
                                                    const ConstBlockDataID & interactionForceFieldID, uint_t maximumAveragingSteps )
diff --git a/src/pe_coupling/discrete_particle_methods/utility/BodyVelocityInitializer.h b/src/pe_coupling/discrete_particle_methods/utility/BodyVelocityInitializer.h
index 6ff059c61..575f4cec8 100644
--- a/src/pe_coupling/discrete_particle_methods/utility/BodyVelocityInitializer.h
+++ b/src/pe_coupling/discrete_particle_methods/utility/BodyVelocityInitializer.h
@@ -60,8 +60,8 @@ class BodyVelocityInitializer
 
 public:
 
-   typedef GhostLayerField< Vector3<real_t>, 1>          Vec3Field_T;
-   typedef FieldInterpolator_T<Vec3Field_T, FlagField_T> Vec3FieldInterpolator_T;
+   using Vec3Field_T = GhostLayerField<Vector3<real_t>, 1>;
+   using Vec3FieldInterpolator_T = FieldInterpolator_T<Vec3Field_T, FlagField_T>;
 
    BodyVelocityInitializer( const shared_ptr<StructuredBlockStorage> & blockStorage,
                             const BlockDataID & bodyStorageID, const BlockDataID & flagFieldID, const Set< FlagUID > & domainFlags,
diff --git a/src/pe_coupling/discrete_particle_methods/utility/ExternalForceToForceFieldAdder.h b/src/pe_coupling/discrete_particle_methods/utility/ExternalForceToForceFieldAdder.h
index f5e27bc31..b833cae93 100644
--- a/src/pe_coupling/discrete_particle_methods/utility/ExternalForceToForceFieldAdder.h
+++ b/src/pe_coupling/discrete_particle_methods/utility/ExternalForceToForceFieldAdder.h
@@ -39,7 +39,7 @@ using math::Vector3;
 class ExternalForceToForceFieldAdder
 {
 public:
-   typedef GhostLayerField< Vector3<real_t>, 1 >  ForceField_T;
+   using ForceField_T = GhostLayerField<Vector3<real_t>, 1>;
 
    ExternalForceToForceFieldAdder( const BlockDataID & forceFieldID, const Vector3<real_t> & externalForce )
       : forceFieldID_( forceFieldID ), externalForce_( externalForce )
diff --git a/src/pe_coupling/discrete_particle_methods/utility/ForceFieldResetter.h b/src/pe_coupling/discrete_particle_methods/utility/ForceFieldResetter.h
index d58e30d51..17278887e 100644
--- a/src/pe_coupling/discrete_particle_methods/utility/ForceFieldResetter.h
+++ b/src/pe_coupling/discrete_particle_methods/utility/ForceFieldResetter.h
@@ -36,7 +36,7 @@ using math::Vector3;
 class ForceFieldResetter
 {
 public:
-   typedef GhostLayerField< Vector3<real_t>, 1 >  ForceField_T;
+   using ForceField_T = GhostLayerField<Vector3<real_t>, 1>;
 
    ForceFieldResetter( const BlockDataID & forceFieldID )
       : forceFieldID_( forceFieldID )
diff --git a/src/pe_coupling/momentum_exchange_method/BodyMapping.h b/src/pe_coupling/momentum_exchange_method/BodyMapping.h
index 96cfd1276..c3addc457 100644
--- a/src/pe_coupling/momentum_exchange_method/BodyMapping.h
+++ b/src/pe_coupling/momentum_exchange_method/BodyMapping.h
@@ -61,10 +61,10 @@ class BodyMapping
 {
 public:
 
-   typedef lbm::PdfField< LatticeModel_T >        PdfField_T;
-   typedef typename BoundaryHandling_T::FlagField FlagField_T;
-   typedef typename BoundaryHandling_T::flag_t    flag_t;
-   typedef Field< pe::BodyID, 1 >                 BodyField_T;
+   using PdfField_T = lbm::PdfField<LatticeModel_T>;
+   using FlagField_T = typename BoundaryHandling_T::FlagField;
+   using flag_t = typename BoundaryHandling_T::flag_t;
+   using BodyField_T = Field<pe::BodyID, 1>;
 
    BodyMapping( const shared_ptr<StructuredBlockStorage> & blockStorage,
                 const BlockDataID & pdfFieldID,
@@ -250,7 +250,7 @@ template< typename BoundaryHandling_T >
 void mapMovingBody( pe::BodyID body, IBlock & block, StructuredBlockStorage & blockStorage,
                     const BlockDataID & boundaryHandlingID, const BlockDataID & bodyFieldID, const FlagUID & obstacle )
 {
-   typedef Field< pe::BodyID, 1 > BodyField_T;
+   using BodyField_T = Field<pe::BodyID, 1>;
 
    WALBERLA_ASSERT_EQUAL( &block.getBlockStorage(), &(blockStorage.getBlockStorage()) );
 
diff --git a/src/pe_coupling/momentum_exchange_method/boundary/CurvedLinear.h b/src/pe_coupling/momentum_exchange_method/boundary/CurvedLinear.h
index 05fee404d..41dcdf79a 100644
--- a/src/pe_coupling/momentum_exchange_method/boundary/CurvedLinear.h
+++ b/src/pe_coupling/momentum_exchange_method/boundary/CurvedLinear.h
@@ -64,10 +64,10 @@ namespace pe_coupling {
 template< typename LatticeModel_T, typename FlagField_T >
 class CurvedLinear : public Boundary< typename FlagField_T::flag_t >
 {
-   typedef lbm::PdfField< LatticeModel_T >   PDFField_T;
-   typedef typename LatticeModel_T::Stencil  Stencil_T;
-   typedef typename FlagField_T::flag_t      flag_t;
-   typedef Field< pe::BodyID, 1 >            BodyField_T;
+   using PDFField_T = lbm::PdfField<LatticeModel_T>;
+   using Stencil_T = typename LatticeModel_T::Stencil;
+   using flag_t = typename FlagField_T::flag_t;
+   using BodyField_T = Field<pe::BodyID, 1>;
 
 public:
 
diff --git a/src/pe_coupling/momentum_exchange_method/boundary/CurvedQuadratic.h b/src/pe_coupling/momentum_exchange_method/boundary/CurvedQuadratic.h
index 3ba15e919..4e5e4f9b4 100644
--- a/src/pe_coupling/momentum_exchange_method/boundary/CurvedQuadratic.h
+++ b/src/pe_coupling/momentum_exchange_method/boundary/CurvedQuadratic.h
@@ -75,10 +75,10 @@ class CurvedQuadratic : public Boundary< typename FlagField_T::flag_t >
 {
    static_assert( (std::is_same< typename LatticeModel_T::CollisionModel::tag, lbm::collision_model::TRT_tag >::value), "Only works with TRT!" ); // to access lambda_d
 
-   typedef lbm::PdfField< LatticeModel_T >   PDFField_T;
-   typedef typename LatticeModel_T::Stencil  Stencil_T;
-   typedef typename FlagField_T::flag_t      flag_t;
-   typedef Field< pe::BodyID, 1 >            BodyField_T;
+   using PDFField_T = lbm::PdfField<LatticeModel_T>;
+   using Stencil_T = typename LatticeModel_T::Stencil;
+   using flag_t = typename FlagField_T::flag_t;
+   using BodyField_T = Field<pe::BodyID, 1>;
 
 public:
 
diff --git a/src/pe_coupling/momentum_exchange_method/boundary/SimpleBB.h b/src/pe_coupling/momentum_exchange_method/boundary/SimpleBB.h
index 0d7af9d9a..d3ee85dec 100644
--- a/src/pe_coupling/momentum_exchange_method/boundary/SimpleBB.h
+++ b/src/pe_coupling/momentum_exchange_method/boundary/SimpleBB.h
@@ -59,11 +59,11 @@ namespace pe_coupling {
 template< typename LatticeModel_T, typename FlagField_T >
 class SimpleBB : public Boundary< typename FlagField_T::flag_t >
 {
-   typedef lbm::PdfField< LatticeModel_T >   PDFField_T;
-   typedef typename LatticeModel_T::Stencil  Stencil_T;
-   typedef typename FlagField_T::flag_t      flag_t;
+   using PDFField_T = lbm::PdfField<LatticeModel_T>;
+   using Stencil_T = typename LatticeModel_T::Stencil;
+   using flag_t = typename FlagField_T::flag_t;
 
-   typedef Field< pe::BodyID, 1 > BodyField;
+   using BodyField = Field<pe::BodyID, 1>;
 
 public:
 
diff --git a/src/pe_coupling/momentum_exchange_method/destruction/Destroyer.h b/src/pe_coupling/momentum_exchange_method/destruction/Destroyer.h
index 68d9ae2a3..f1f5a366c 100644
--- a/src/pe_coupling/momentum_exchange_method/destruction/Destroyer.h
+++ b/src/pe_coupling/momentum_exchange_method/destruction/Destroyer.h
@@ -33,7 +33,7 @@ class NaNDestroyer
 {
 public:
 
-   typedef lbm::PdfField< LatticeModel_T > PdfField_T;
+   using PdfField_T = lbm::PdfField<LatticeModel_T>;
 
    void operator()( const cell_idx_t & x, const cell_idx_t & y, const cell_idx_t & z, IBlock * const /*block*/, PdfField_T * const pdfField ) {
       for (auto d = uint_t(0); d < LatticeModel_T::Stencil::Size; ++d)
diff --git a/src/pe_coupling/momentum_exchange_method/restoration/ExtrapolationDirectionFinder.h b/src/pe_coupling/momentum_exchange_method/restoration/ExtrapolationDirectionFinder.h
index 7e9968d83..1cdab1b9c 100644
--- a/src/pe_coupling/momentum_exchange_method/restoration/ExtrapolationDirectionFinder.h
+++ b/src/pe_coupling/momentum_exchange_method/restoration/ExtrapolationDirectionFinder.h
@@ -118,7 +118,7 @@ class SphereNormalExtrapolationDirectionFinder
 {
 public:
 
-   typedef Field< pe::BodyID, 1 > BodyField_T;
+   using BodyField_T = Field<pe::BodyID, 1>;
 
    SphereNormalExtrapolationDirectionFinder( const shared_ptr<StructuredBlockStorage> & blockStorage, const BlockDataID & bodyFieldID )
    : blockStorage_( blockStorage ), bodyFieldID_( bodyFieldID )
diff --git a/src/pe_coupling/momentum_exchange_method/restoration/PDFReconstruction.h b/src/pe_coupling/momentum_exchange_method/restoration/PDFReconstruction.h
index 0d6dcfe12..6de45fbca 100644
--- a/src/pe_coupling/momentum_exchange_method/restoration/PDFReconstruction.h
+++ b/src/pe_coupling/momentum_exchange_method/restoration/PDFReconstruction.h
@@ -60,10 +60,10 @@ class PDFReconstruction
 {
 public:
 
-   typedef lbm::PdfField< LatticeModel_T >        PdfField_T;
-   typedef typename BoundaryHandling_T::FlagField FlagField_T;
-   typedef typename BoundaryHandling_T::flag_t    flag_t;
-   typedef Field< pe::BodyID, 1 >                 BodyField_T;
+   using PdfField_T = lbm::PdfField<LatticeModel_T>;
+   using FlagField_T = typename BoundaryHandling_T::FlagField;
+   using flag_t = typename BoundaryHandling_T::flag_t;
+   using BodyField_T = Field<pe::BodyID, 1>;
 
    inline PDFReconstruction( const shared_ptr<StructuredBlockStorage> & blockStorage,
                              const BlockDataID & pdfFieldID,
diff --git a/src/pe_coupling/momentum_exchange_method/restoration/Reconstructor.h b/src/pe_coupling/momentum_exchange_method/restoration/Reconstructor.h
index ad2b8adfa..c8ebb191f 100644
--- a/src/pe_coupling/momentum_exchange_method/restoration/Reconstructor.h
+++ b/src/pe_coupling/momentum_exchange_method/restoration/Reconstructor.h
@@ -73,8 +73,8 @@ class EquilibriumReconstructor
 {
 public:
 
-   typedef lbm::PdfField< LatticeModel_T > PdfField_T;
-   typedef Field< pe::BodyID, 1 >          BodyField_T;
+   using PdfField_T = lbm::PdfField<LatticeModel_T>;
+   using BodyField_T = Field<pe::BodyID, 1>;
 
    EquilibriumReconstructor( const shared_ptr<StructuredBlockStorage> & blockStorage, const BlockDataID & boundaryHandlingID,
                              const BlockDataID & bodyFieldID )
@@ -168,8 +168,8 @@ class EquilibriumAndNonEquilibriumReconstructor
 {
 public:
 
-   typedef lbm::PdfField< LatticeModel_T > PdfField_T;
-   typedef Field< pe::BodyID, 1 >          BodyField_T;
+   using PdfField_T = lbm::PdfField<LatticeModel_T>;
+   using BodyField_T = Field<pe::BodyID, 1>;
 
    EquilibriumAndNonEquilibriumReconstructor( const shared_ptr<StructuredBlockStorage> & blockStorage, const BlockDataID & boundaryHandlingID,
                                               const BlockDataID & bodyFieldID,
@@ -259,8 +259,8 @@ class ExtrapolationReconstructor
 {
 public:
 
-   typedef lbm::PdfField< LatticeModel_T > PdfField_T;
-   typedef Field< pe::BodyID, 1 >          BodyField_T;
+   using PdfField_T = lbm::PdfField<LatticeModel_T>;
+   using BodyField_T = Field<pe::BodyID, 1>;
 
    ExtrapolationReconstructor( const shared_ptr<StructuredBlockStorage> & blockStorage, const BlockDataID & boundaryHandlingID,
                                const BlockDataID & bodyFieldID,
diff --git a/src/pe_coupling/partially_saturated_cells_method/BodyAndVolumeFractionMapping.cpp b/src/pe_coupling/partially_saturated_cells_method/BodyAndVolumeFractionMapping.cpp
index d0d36a921..9d6511d4d 100644
--- a/src/pe_coupling/partially_saturated_cells_method/BodyAndVolumeFractionMapping.cpp
+++ b/src/pe_coupling/partially_saturated_cells_method/BodyAndVolumeFractionMapping.cpp
@@ -35,8 +35,8 @@ namespace pe_coupling {
 void mapPSMBodyAndVolumeFraction( const pe::BodyID body, IBlock & block, StructuredBlockStorage & blockStorage,
                                   const BlockDataID bodyAndVolumeFractionFieldID )
 {
-   typedef std::pair< pe::BodyID, real_t >                              BodyAndVolumeFraction_T;
-   typedef GhostLayerField< std::vector< BodyAndVolumeFraction_T >, 1 > BodyAndVolumeFractionField_T;
+   using BodyAndVolumeFraction_T = std::pair<pe::BodyID, real_t>;
+   using BodyAndVolumeFractionField_T = GhostLayerField<std::vector<BodyAndVolumeFraction_T>, 1>;
 
    BodyAndVolumeFractionField_T * bodyAndVolumeFractionField = block.getData< BodyAndVolumeFractionField_T >( bodyAndVolumeFractionFieldID );
    WALBERLA_ASSERT_NOT_NULLPTR( bodyAndVolumeFractionField );
diff --git a/src/pe_coupling/partially_saturated_cells_method/BodyAndVolumeFractionMapping.h b/src/pe_coupling/partially_saturated_cells_method/BodyAndVolumeFractionMapping.h
index 59fb85590..56faedf94 100644
--- a/src/pe_coupling/partially_saturated_cells_method/BodyAndVolumeFractionMapping.h
+++ b/src/pe_coupling/partially_saturated_cells_method/BodyAndVolumeFractionMapping.h
@@ -66,8 +66,8 @@ class BodyAndVolumeFractionMapping
 {
 public:
 
-   typedef std::pair< pe::BodyID, real_t >                              BodyAndVolumeFraction_T;
-   typedef GhostLayerField< std::vector< BodyAndVolumeFraction_T >, 1 > BodyAndVolumeFractionField_T;
+   using BodyAndVolumeFraction_T = std::pair<pe::BodyID, real_t>;
+   using BodyAndVolumeFractionField_T = GhostLayerField<std::vector<BodyAndVolumeFraction_T>, 1>;
 
    BodyAndVolumeFractionMapping( const shared_ptr<StructuredBlockStorage> & blockStorage,
                                  const shared_ptr<pe::BodyStorage> & globalBodyStorage,
diff --git a/src/pe_coupling/partially_saturated_cells_method/PSMSweep.h b/src/pe_coupling/partially_saturated_cells_method/PSMSweep.h
index 66992d54d..2b326f116 100644
--- a/src/pe_coupling/partially_saturated_cells_method/PSMSweep.h
+++ b/src/pe_coupling/partially_saturated_cells_method/PSMSweep.h
@@ -66,10 +66,10 @@ class PSMSweep
 {
 public:
 
-   typedef typename lbm::SweepBase< LatticeModel_T, Filter_T, DensityVelocityIn_T, DensityVelocityOut_T >::PdfField_T  PdfField_T;
-   typedef typename LatticeModel_T::Stencil                   Stencil_T;
-   typedef std::pair< pe::BodyID, real_t >                    BodyAndVolumeFraction_T;
-   typedef Field< std::vector< BodyAndVolumeFraction_T >, 1 > BodyAndVolumeFractionField_T;
+   using PdfField_T = typename lbm::SweepBase<LatticeModel_T, Filter_T, DensityVelocityIn_T, DensityVelocityOut_T>::PdfField_T;
+   using Stencil_T = typename LatticeModel_T::Stencil;
+   using BodyAndVolumeFraction_T = std::pair<pe::BodyID, real_t>;
+   using BodyAndVolumeFractionField_T = Field<std::vector<BodyAndVolumeFraction_T>, 1>;
 
    PSMSweep( const BlockDataID & pdfFieldID,
              const BlockDataID & bodyAndVolumeFractionFieldID,
@@ -441,7 +441,7 @@ shared_ptr< PSMSweep< LatticeModel_T, Filter_T, DensityVelocityIn_T, DensityVelo
 makePSMSweep( const BlockDataID & pdfFieldID, const BlockDataID & bodyAndVolumeFractionFieldID, const shared_ptr<StructuredBlockStorage> & blockStorage,
               const Filter_T & filter, const DensityVelocityIn_T & densityVelocityIn, const DensityVelocityOut_T & densityVelocityOut )
 {
-   typedef PSMSweep< LatticeModel_T, Filter_T, DensityVelocityIn_T, DensityVelocityOut_T, SolidCollision_T, Weighting_T > PSMS_T;
+   using PSMS_T = PSMSweep<LatticeModel_T, Filter_T, DensityVelocityIn_T, DensityVelocityOut_T, SolidCollision_T, Weighting_T>;
    return shared_ptr< PSMS_T >( new PSMS_T( pdfFieldID, bodyAndVolumeFractionFieldID, blockStorage, filter, densityVelocityIn, densityVelocityOut ) );
 }
 
@@ -450,7 +450,7 @@ shared_ptr< PSMSweep< LatticeModel_T, Filter_T, DensityVelocityIn_T, DensityVelo
 makePSMSweep( const BlockDataID & srcID, const BlockDataID & dstID, const BlockDataID & bodyAndVolumeFractionFieldID, const shared_ptr<StructuredBlockStorage> & blockStorage,
               const Filter_T & filter, const DensityVelocityIn_T & densityVelocityIn, const DensityVelocityOut_T & densityVelocityOut )
 {
-   typedef PSMSweep< LatticeModel_T, Filter_T, DensityVelocityIn_T, DensityVelocityOut_T, SolidCollision_T, Weighting_T > PSMS_T;
+   using PSMS_T = PSMSweep<LatticeModel_T, Filter_T, DensityVelocityIn_T, DensityVelocityOut_T, SolidCollision_T, Weighting_T>;
    return shared_ptr< PSMS_T >( new PSMS_T( srcID, dstID, bodyAndVolumeFractionFieldID, blockStorage, filter, densityVelocityIn, densityVelocityOut ) );
 }
 
diff --git a/src/pe_coupling/partially_saturated_cells_method/PSMUtility.h b/src/pe_coupling/partially_saturated_cells_method/PSMUtility.h
index e39c3b7b2..b78a4e45f 100644
--- a/src/pe_coupling/partially_saturated_cells_method/PSMUtility.h
+++ b/src/pe_coupling/partially_saturated_cells_method/PSMUtility.h
@@ -92,9 +92,9 @@ template < typename LatticeModel_T, int Weighting_T >
 void initializeDomainForPSM( StructuredBlockStorage & blockStorage,
                              const BlockDataID & pdfFieldID, const BlockDataID & bodyAndVolumeFractionFieldID )
 {
-   typedef lbm::PdfField< LatticeModel_T >                              PdfField_T;
-   typedef std::pair< pe::BodyID, real_t >                              BodyAndVolumeFraction_T;
-   typedef GhostLayerField< std::vector< BodyAndVolumeFraction_T >, 1 > BodyAndVolumeFractionField_T;
+   using PdfField_T = lbm::PdfField<LatticeModel_T>;
+   using BodyAndVolumeFraction_T = std::pair<pe::BodyID, real_t>;
+   using BodyAndVolumeFractionField_T = GhostLayerField<std::vector<BodyAndVolumeFraction_T>, 1>;
 
    // iterate all blocks with an iterator 'block'
    for( auto blockIt = blockStorage.begin(); blockIt != blockStorage.end(); ++blockIt )
diff --git a/src/pe_coupling/utility/BodiesForceTorqueContainer.h b/src/pe_coupling/utility/BodiesForceTorqueContainer.h
index b18d4ec0d..72f6dcc2c 100644
--- a/src/pe_coupling/utility/BodiesForceTorqueContainer.h
+++ b/src/pe_coupling/utility/BodiesForceTorqueContainer.h
@@ -34,7 +34,7 @@ class BodiesForceTorqueContainer
 {  
 public:
 
-   typedef std::map< walberla::id_t, std::array<real_t,6> > ForceTorqueStorage_T;
+   using ForceTorqueStorage_T = std::map<walberla::id_t, std::array<real_t, 6>>;
 
    BodiesForceTorqueContainer( const shared_ptr<StructuredBlockForest> & blockForest, const BlockDataID & bodyStorageID, const std::function<bool(
             pe::BodyID)> &bodySelectorFct = selectRegularBodies)
diff --git a/src/postprocessing/MarchingCubes.impl.h b/src/postprocessing/MarchingCubes.impl.h
index 6f4538742..29f22544f 100644
--- a/src/postprocessing/MarchingCubes.impl.h
+++ b/src/postprocessing/MarchingCubes.impl.h
@@ -378,7 +378,7 @@ void generateIsoSurface_internal( const Field_T & f, real_t threshold,
 
 
 
-   typedef Vector3<real_t> RealVec3;
+   using RealVec3 = Vector3<real_t>;
 
    // the field store for every edge the index of the vertex that was computed on it
    // or -1 for "not yet computed"
diff --git a/src/stencil/D2CornerStencil.h b/src/stencil/D2CornerStencil.h
index 574da37bc..9d1716100 100644
--- a/src/stencil/D2CornerStencil.h
+++ b/src/stencil/D2CornerStencil.h
@@ -88,7 +88,7 @@ namespace stencil {
          /*! \name Iteration*/
          //@{
 
-         typedef stencil::Iterator<D2CornerStencil> iterator;
+         using iterator = stencil::Iterator<D2CornerStencil>;
 
          static iterator begin()           { return iterator(0); }
          static iterator beginNoCenter()   { return iterator(noCenterFirstIdx); }
@@ -239,7 +239,7 @@ namespace stencil {
 
    } // namespace internal
 
-   typedef internal::D2CornerStencil<> D2CornerStencil;
+   using D2CornerStencil = internal::D2CornerStencil<>;
 
 } // namespace stencil
 } // namespace walberla
diff --git a/src/stencil/D2Q4.h b/src/stencil/D2Q4.h
index 26131a49a..9c1f9b7b7 100644
--- a/src/stencil/D2Q4.h
+++ b/src/stencil/D2Q4.h
@@ -88,7 +88,7 @@ namespace stencil {
          /*! \name Iteration*/
          //@{
 
-         typedef stencil::Iterator<D2Q4> iterator;
+         using iterator = stencil::Iterator<D2Q4>;
 
          static iterator begin()           { return iterator(0); }
          static iterator beginNoCenter()   { return iterator(noCenterFirstIdx); }
@@ -239,7 +239,7 @@ namespace stencil {
 
    } // namespace internal
 
-   typedef internal::D2Q4<> D2Q4;
+   using D2Q4 = internal::D2Q4<>;
 
 } // namespace stencil
 } // namespace walberla
diff --git a/src/stencil/D2Q5.h b/src/stencil/D2Q5.h
index 8547a4747..98cfbb009 100644
--- a/src/stencil/D2Q5.h
+++ b/src/stencil/D2Q5.h
@@ -88,7 +88,7 @@ namespace stencil {
          /*! \name Iteration*/
          //@{
 
-         typedef stencil::Iterator<D2Q5> iterator;
+         using iterator = stencil::Iterator<D2Q5>;
 
          static iterator begin()           { return iterator(0); }
          static iterator beginNoCenter()   { return iterator(noCenterFirstIdx); }
@@ -239,7 +239,7 @@ namespace stencil {
 
    } // namespace internal
 
-   typedef internal::D2Q5<> D2Q5;
+   using D2Q5 = internal::D2Q5<>;
 
 } // namespace stencil
 } // namespace walberla
diff --git a/src/stencil/D2Q9.h b/src/stencil/D2Q9.h
index 4e79ab2fe..4c3dc0cd9 100644
--- a/src/stencil/D2Q9.h
+++ b/src/stencil/D2Q9.h
@@ -88,7 +88,7 @@ namespace stencil {
          /*! \name Iteration*/
          //@{
 
-         typedef stencil::Iterator<D2Q9> iterator;
+         using iterator = stencil::Iterator<D2Q9>;
 
          static iterator begin()           { return iterator(0); }
          static iterator beginNoCenter()   { return iterator(noCenterFirstIdx); }
@@ -239,7 +239,7 @@ namespace stencil {
 
    } // namespace internal
 
-   typedef internal::D2Q9<> D2Q9;
+   using D2Q9 = internal::D2Q9<>;
 
 } // namespace stencil
 } // namespace walberla
diff --git a/src/stencil/D3CornerStencil.h b/src/stencil/D3CornerStencil.h
index 21ba0f491..b234a89d0 100644
--- a/src/stencil/D3CornerStencil.h
+++ b/src/stencil/D3CornerStencil.h
@@ -88,7 +88,7 @@ namespace stencil {
          /*! \name Iteration*/
          //@{
 
-         typedef stencil::Iterator<D3CornerStencil> iterator;
+         using iterator = stencil::Iterator<D3CornerStencil>;
 
          static iterator begin()           { return iterator(0); }
          static iterator beginNoCenter()   { return iterator(noCenterFirstIdx); }
@@ -239,7 +239,7 @@ namespace stencil {
 
    } // namespace internal
 
-   typedef internal::D3CornerStencil<> D3CornerStencil;
+   using D3CornerStencil = internal::D3CornerStencil<>;
 
 } // namespace stencil
 } // namespace walberla
diff --git a/src/stencil/D3EdgeCornerStencil.h b/src/stencil/D3EdgeCornerStencil.h
index 8e1045b25..e3e6a2832 100644
--- a/src/stencil/D3EdgeCornerStencil.h
+++ b/src/stencil/D3EdgeCornerStencil.h
@@ -88,7 +88,7 @@ namespace stencil {
          /*! \name Iteration*/
          //@{
 
-         typedef stencil::Iterator<D3EdgeCornerStencil> iterator;
+         using iterator = stencil::Iterator<D3EdgeCornerStencil>;
 
          static iterator begin()           { return iterator(0); }
          static iterator beginNoCenter()   { return iterator(noCenterFirstIdx); }
@@ -239,7 +239,7 @@ namespace stencil {
 
    } // namespace internal
 
-   typedef internal::D3EdgeCornerStencil<> D3EdgeCornerStencil;
+   using D3EdgeCornerStencil = internal::D3EdgeCornerStencil<>;
 
 } // namespace stencil
 } // namespace walberla
diff --git a/src/stencil/D3Q15.h b/src/stencil/D3Q15.h
index ba7fecb5c..896c8c49b 100644
--- a/src/stencil/D3Q15.h
+++ b/src/stencil/D3Q15.h
@@ -88,7 +88,7 @@ namespace stencil {
          /*! \name Iteration*/
          //@{
 
-         typedef stencil::Iterator<D3Q15> iterator;
+         using iterator = stencil::Iterator<D3Q15>;
 
          static iterator begin()           { return iterator(0); }
          static iterator beginNoCenter()   { return iterator(noCenterFirstIdx); }
@@ -239,7 +239,7 @@ namespace stencil {
 
    } // namespace internal
 
-   typedef internal::D3Q15<> D3Q15;
+   using D3Q15 = internal::D3Q15<>;
 
 } // namespace stencil
 } // namespace walberla
diff --git a/src/stencil/D3Q19.h b/src/stencil/D3Q19.h
index 0d4ca0fb8..a7a520f69 100644
--- a/src/stencil/D3Q19.h
+++ b/src/stencil/D3Q19.h
@@ -88,7 +88,7 @@ namespace stencil {
          /*! \name Iteration*/
          //@{
 
-         typedef stencil::Iterator<D3Q19> iterator;
+         using iterator = stencil::Iterator<D3Q19>;
 
          static iterator begin()           { return iterator(0); }
          static iterator beginNoCenter()   { return iterator(noCenterFirstIdx); }
@@ -239,7 +239,7 @@ namespace stencil {
 
    } // namespace internal
 
-   typedef internal::D3Q19<> D3Q19;
+   using D3Q19 = internal::D3Q19<>;
 
 } // namespace stencil
 } // namespace walberla
diff --git a/src/stencil/D3Q27.h b/src/stencil/D3Q27.h
index 644ba99fe..6ba403bd5 100644
--- a/src/stencil/D3Q27.h
+++ b/src/stencil/D3Q27.h
@@ -88,7 +88,7 @@ namespace stencil {
          /*! \name Iteration*/
          //@{
 
-         typedef stencil::Iterator<D3Q27> iterator;
+         using iterator = stencil::Iterator<D3Q27>;
 
          static iterator begin()           { return iterator(0); }
          static iterator beginNoCenter()   { return iterator(noCenterFirstIdx); }
@@ -239,7 +239,7 @@ namespace stencil {
 
    } // namespace internal
 
-   typedef internal::D3Q27<> D3Q27;
+   using D3Q27 = internal::D3Q27<>;
 
 } // namespace stencil
 } // namespace walberla
diff --git a/src/stencil/D3Q6.h b/src/stencil/D3Q6.h
index 5567a7d79..8b9f81d3a 100644
--- a/src/stencil/D3Q6.h
+++ b/src/stencil/D3Q6.h
@@ -88,7 +88,7 @@ namespace stencil {
          /*! \name Iteration*/
          //@{
 
-         typedef stencil::Iterator<D3Q6> iterator;
+         using iterator = stencil::Iterator<D3Q6>;
 
          static iterator begin()           { return iterator(0); }
          static iterator beginNoCenter()   { return iterator(noCenterFirstIdx); }
@@ -239,7 +239,7 @@ namespace stencil {
 
    } // namespace internal
 
-   typedef internal::D3Q6<> D3Q6;
+   using D3Q6 = internal::D3Q6<>;
 
 } // namespace stencil
 } // namespace walberla
diff --git a/src/stencil/D3Q7.h b/src/stencil/D3Q7.h
index 672afa9e8..8e14c9b00 100644
--- a/src/stencil/D3Q7.h
+++ b/src/stencil/D3Q7.h
@@ -88,7 +88,7 @@ namespace stencil {
          /*! \name Iteration*/
          //@{
 
-         typedef stencil::Iterator<D3Q7> iterator;
+         using iterator = stencil::Iterator<D3Q7>;
 
          static iterator begin()           { return iterator(0); }
          static iterator beginNoCenter()   { return iterator(noCenterFirstIdx); }
@@ -239,7 +239,7 @@ namespace stencil {
 
    } // namespace internal
 
-   typedef internal::D3Q7<> D3Q7;
+   using D3Q7 = internal::D3Q7<>;
 
 } // namespace stencil
 } // namespace walberla
diff --git a/src/stencil/EdgeStencil.h b/src/stencil/EdgeStencil.h
index fb35bd948..1c4982c99 100644
--- a/src/stencil/EdgeStencil.h
+++ b/src/stencil/EdgeStencil.h
@@ -88,7 +88,7 @@ namespace stencil {
          /*! \name Iteration*/
          //@{
 
-         typedef stencil::Iterator<EdgeStencil> iterator;
+         using iterator = stencil::Iterator<EdgeStencil>;
 
          static iterator begin()           { return iterator(0); }
          static iterator beginNoCenter()   { return iterator(noCenterFirstIdx); }
@@ -239,7 +239,7 @@ namespace stencil {
 
    } // namespace internal
 
-   typedef internal::EdgeStencil<> EdgeStencil;
+   using EdgeStencil = internal::EdgeStencil<>;
 
 } // namespace stencil
 } // namespace walberla
diff --git a/src/timeloop/PerformanceMeter.cpp b/src/timeloop/PerformanceMeter.cpp
index d79863203..98a6fc350 100644
--- a/src/timeloop/PerformanceMeter.cpp
+++ b/src/timeloop/PerformanceMeter.cpp
@@ -179,7 +179,7 @@ namespace timeloop {
     *******************************************************************************************************************/
    shared_ptr< std::map<std::string, real_t> > PerformanceMeter::getReduced ( int targetRank )
    {
-      typedef std::map<std::string, real_t> ResultMap;
+      using ResultMap = std::map<std::string, real_t>;
       shared_ptr < ResultMap > res;
 
       std::vector<real_t> totalNrCells;
diff --git a/src/timeloop/PerformanceMeter.h b/src/timeloop/PerformanceMeter.h
index 0efac6514..e5ccee059 100644
--- a/src/timeloop/PerformanceMeter.h
+++ b/src/timeloop/PerformanceMeter.h
@@ -70,7 +70,7 @@ namespace timeloop {
    class PerformanceMeter
    {
    public:
-      typedef std::function< uint_t(const IBlock &) > CountFunction;
+      using CountFunction = std::function<uint_t (const IBlock &)>;
 
 
       PerformanceMeter( StructuredBlockStorage & blockStorage );
diff --git a/src/timeloop/SelectableFunctionCreators.h b/src/timeloop/SelectableFunctionCreators.h
index e3a29325c..965faf627 100644
--- a/src/timeloop/SelectableFunctionCreators.h
+++ b/src/timeloop/SelectableFunctionCreators.h
@@ -128,7 +128,7 @@ namespace timeloop {
       Set<SUID>                                     incompatibleSelectors_;
    };
 
-   typedef FuncCreator<void (IBlock*) > Sweep;
+   using Sweep = FuncCreator<void (IBlock *)>;
 
 
    template<typename SweepClass>
diff --git a/src/timeloop/Timeloop.h b/src/timeloop/Timeloop.h
index f1430ec63..48b7de6ce 100644
--- a/src/timeloop/Timeloop.h
+++ b/src/timeloop/Timeloop.h
@@ -36,7 +36,7 @@
 namespace walberla {
 namespace timeloop {
 
-typedef std::function<void ()> VoidFctNoArguments;
+using VoidFctNoArguments = std::function<void ()>;
 
 
 //*******************************************************************************************************************
@@ -140,7 +140,7 @@ public:
    //** Registration Functions **************************************************************************************
    /*! \name Registration Functions */
    //@{
-   typedef size_t FctHandle;
+   using FctHandle = size_t;
 
 
     FctHandle addFuncBeforeTimeStep(const VoidFctNoArguments & f,
@@ -198,7 +198,7 @@ protected:
    uint_t curTimeStep_;   ///< current time step
    uint_t nrOfTimeSteps_; ///< total number of time steps
 
-   typedef selectable::SetSelectableObject<VoidFctNoArguments, SUID> SelectableFunc;
+   using SelectableFunc = selectable::SetSelectableObject<VoidFctNoArguments, SUID>;
    std::vector<SelectableFunc> beforeFunctions_;
    std::vector<SelectableFunc> afterFunctions_;
 
diff --git a/src/vtk/BlockCellDataWriter.h b/src/vtk/BlockCellDataWriter.h
index cac2599c7..877b5543b 100644
--- a/src/vtk/BlockCellDataWriter.h
+++ b/src/vtk/BlockCellDataWriter.h
@@ -197,7 +197,7 @@ inline void BlockCellDataWriter::push( Base64Writer& b64, const cell_idx_t x, co
 
 } // namespace internal
 
-typedef internal::BlockCellDataWriter BlockCellDataWriterInterface;
+using BlockCellDataWriterInterface = internal::BlockCellDataWriter;
 
 
 
@@ -219,7 +219,7 @@ class BlockCellDataWriter : public BlockCellDataWriterInterface
 
 public:
 
-   typedef T value_type;
+   using value_type = T;
 
    static const uint_t F_SIZE = F_SIZE_ARG;
 
@@ -285,7 +285,7 @@ template< typename T >
 class BlockCellDataWriterScalingAdapter : public T
 {
 public:
-   typedef typename T::value_type value_type;
+   using value_type = typename T::value_type;
    static const uint_t F_SIZE = T::F_SIZE;
 
    BlockCellDataWriterScalingAdapter( const std::string& id, const T & base, value_type factor ) 
diff --git a/src/vtk/ChainedFilter.h b/src/vtk/ChainedFilter.h
index 573fff5c1..187486a74 100644
--- a/src/vtk/ChainedFilter.h
+++ b/src/vtk/ChainedFilter.h
@@ -37,7 +37,7 @@ class ChainedFilter {
 
 public:
 
-   typedef std::function< void ( CellSet& filteredCells, const IBlock& block, const StructuredBlockStorage& storage, const uint_t ghostLayers ) > CellFilter;
+   using CellFilter = std::function<void (CellSet &, const IBlock &, const StructuredBlockStorage &, const uint_t)>;
 
    void addFilter( const CellFilter& filter ) { filters_.push_back( filter ); }
 
diff --git a/src/vtk/Initialization.h b/src/vtk/Initialization.h
index 50fd523c3..43304eac2 100644
--- a/src/vtk/Initialization.h
+++ b/src/vtk/Initialization.h
@@ -37,7 +37,7 @@ namespace vtk {
 // For documentation see the documentation of function "initializeVTKOutput" in Initialization.cpp
 
 
-typedef std::function< void () > OutputFunction;
+using OutputFunction = std::function<void ()>;
 
 struct SelectableOutputFunction {
 
@@ -76,9 +76,7 @@ void initializeVTKOutput( std::map< std::string, SelectableOutputFunction > & ou
                           const std::map< std::string, VTKOutput::CellFilter > & filters,
                           const std::map< std::string, VTKOutput::BeforeFunction > & beforeFunctions );
 
-typedef std::function< void ( std::vector< shared_ptr< BlockCellDataWriterInterface > > & writers,
-                                std::map< std::string, VTKOutput::CellFilter > &            filters,
-                                std::map< std::string, VTKOutput::BeforeFunction > &        beforeFunctions ) > RegisterVTKOutputFunction;
+using RegisterVTKOutputFunction = std::function<void (std::vector<shared_ptr<BlockCellDataWriterInterface>> &, std::map<std::string, VTKOutput::CellFilter> &, std::map<std::string, VTKOutput::BeforeFunction> &)>;
 
 void initializeVTKOutput( std::map< std::string, SelectableOutputFunction > & outputFunctions, const RegisterVTKOutputFunction& registerVTKOutputFunction,
                           const shared_ptr< const StructuredBlockStorage > & storage, const shared_ptr< Config > & config,
diff --git a/src/vtk/PolylineDataSource.h b/src/vtk/PolylineDataSource.h
index c3b39a18d..af4b8dbaf 100644
--- a/src/vtk/PolylineDataSource.h
+++ b/src/vtk/PolylineDataSource.h
@@ -49,7 +49,7 @@ public:
       uint_t      components;
    };
 
-   typedef std::vector< Vector3< real_t > > Polyline;
+   using Polyline = std::vector<Vector3<real_t>>;
 
    virtual ~PolylineDataSource() = default;
 
diff --git a/src/vtk/VTKOutput.h b/src/vtk/VTKOutput.h
index dc36ae003..d90586b5c 100644
--- a/src/vtk/VTKOutput.h
+++ b/src/vtk/VTKOutput.h
@@ -52,12 +52,12 @@ class VTKOutput : public NonCopyable {
 private:
 
    class VTKGEN : public uid::IndexGenerator< VTKGEN, size_t >{};
-   typedef UID< VTKGEN > VTKUID;
+   using VTKUID = UID<VTKGEN>;
 
    // types used during vertex-index mapping procedure when writing (P)VTU files
-   typedef std::tuple< cell_idx_t, cell_idx_t, cell_idx_t > Vertex;
-   typedef std::tuple< real_t,     real_t,     real_t >     VertexCoord;
-   typedef int32_t Index;
+   using Vertex = std::tuple<cell_idx_t, cell_idx_t, cell_idx_t>;
+   using VertexCoord = std::tuple<real_t, real_t, real_t>;
+   using Index = int32_t;
 
    struct VertexCompare {
       bool operator()( const Vertex& lhs, const Vertex& rhs ) const
@@ -141,9 +141,8 @@ public:
                                                                      const bool continuousNumbering, const bool binary, const bool littleEndian,
                                                                      const bool useMPIIO, const uint_t initialExecutionCount );
 
-   typedef std::function< void () > BeforeFunction;
-   typedef std::function< void ( CellSet& filteredCells, const IBlock& block,
-                                   const StructuredBlockStorage& storage, const uint_t ghostLayers ) >  CellFilter;
+   using BeforeFunction = std::function<void ()>;
+   using CellFilter = std::function<void (CellSet &, const IBlock &, const StructuredBlockStorage &, const uint_t)>;
 
    ~VTKOutput();
 
-- 
GitLab