diff --git a/src/geometry/containment_octree/BranchNode.h b/src/geometry/containment_octree/BranchNode.h
index 742d09623c73b0e0bc80c9a253262636ed34765d..cb10fdabbf1b0f54406c2fd853838fbca114c7dd 100644
--- a/src/geometry/containment_octree/BranchNode.h
+++ b/src/geometry/containment_octree/BranchNode.h
@@ -46,7 +46,7 @@ public:
    inline BranchNode( const shared_ptr<const DistanceObject> & distanceObject, const AABB & aabb, const Scalar epsilon,
                       const uint_t maxDepth, const Scalar minAABBVolume );
 
-   virtual ~BranchNode() { for( int i = 0; i < 8; ++i ) delete children_[i]; }
+   ~BranchNode() override { for( int i = 0; i < 8; ++i ) delete children_[i]; }
 
    virtual inline bool contains( const Point & p ) const;
 
diff --git a/src/geometry/containment_octree/IndeterminateLeafNode.h b/src/geometry/containment_octree/IndeterminateLeafNode.h
index 382620f5767bbc746dbc7873448c42532a24aa46..f21fa5a653531244560d28cfcb9dab4327e3021c 100644
--- a/src/geometry/containment_octree/IndeterminateLeafNode.h
+++ b/src/geometry/containment_octree/IndeterminateLeafNode.h
@@ -44,12 +44,12 @@ public:
    IndeterminateLeafNode( const shared_ptr<const DistanceObject> & distanceObject, const Scalar epsilon )
       :  distanceObject_( distanceObject ), sqEpsilon_( epsilon * epsilon ) { }
 
-   virtual ~IndeterminateLeafNode() = default;
+   ~IndeterminateLeafNode() override = default;
 
-   virtual bool contains( const Point & p ) const { return distanceObject_->sqSignedDistance(p) <= sqEpsilon_; }
+   bool contains( const Point & p ) const override { return distanceObject_->sqSignedDistance(p) <= sqEpsilon_; }
 
-   virtual void numNodes( uint_t & /*numInside*/, uint_t & /*numOutside*/, uint_t & numIndeterminate, uint_t & /*numBranch*/ ) const { ++numIndeterminate; }
-   virtual void volumes( KahanAccumulator & /*insideVolume*/, KahanAccumulator & /*outsideVolume*/, KahanAccumulator & indeterminateVolume, Scalar volume ) const { indeterminateVolume += volume; }
+   void numNodes( uint_t & /*numInside*/, uint_t & /*numOutside*/, uint_t & numIndeterminate, uint_t & /*numBranch*/ ) const override { ++numIndeterminate; }
+   void volumes( KahanAccumulator & /*insideVolume*/, KahanAccumulator & /*outsideVolume*/, KahanAccumulator & indeterminateVolume, Scalar volume ) const override { indeterminateVolume += volume; }
 
 protected:
    shared_ptr<const DistanceObject> distanceObject_;
diff --git a/src/geometry/containment_octree/InsideLeafNode.h b/src/geometry/containment_octree/InsideLeafNode.h
index 0c46290f13148bcd3d2451301512d6ae5a62df0d..30b83eb93f6c962f3fb9efccabfbc8449bbd4eec 100644
--- a/src/geometry/containment_octree/InsideLeafNode.h
+++ b/src/geometry/containment_octree/InsideLeafNode.h
@@ -41,12 +41,12 @@ public:
     
    using KahanAccumulator = typename LeafNode<ContainmentOctreeT>::KahanAccumulator;
 
-   virtual ~InsideLeafNode() = default;
+   ~InsideLeafNode() override = default;
 
-   virtual bool contains( const Point & /*p*/ ) const { return true; }
+   bool contains( const Point & /*p*/ ) const override { return true; }
 
-   virtual void numNodes( uint_t & numInside, uint_t & /*numOutside*/, uint_t & /*numIndeterminate*/, uint_t & /*numBranch*/ ) const { ++numInside; }
-   virtual void volumes( KahanAccumulator & insideVolume, KahanAccumulator & /*outsideVolume*/, KahanAccumulator & /*indeterminateVolume*/, Scalar volume ) const { insideVolume += volume; }
+   void numNodes( uint_t & numInside, uint_t & /*numOutside*/, uint_t & /*numIndeterminate*/, uint_t & /*numBranch*/ ) const override { ++numInside; }
+   void volumes( KahanAccumulator & insideVolume, KahanAccumulator & /*outsideVolume*/, KahanAccumulator & /*indeterminateVolume*/, Scalar volume ) const override { insideVolume += volume; }
 };
 
    
diff --git a/src/geometry/containment_octree/LeafNode.h b/src/geometry/containment_octree/LeafNode.h
index 177a352dc1f07300f09f6058df8755b98d57e96f..231ab10891ec7cd9120b7d0484feea95c9de089b 100644
--- a/src/geometry/containment_octree/LeafNode.h
+++ b/src/geometry/containment_octree/LeafNode.h
@@ -42,13 +42,13 @@ public:
    
    using KahanAccumulator = typename Node<ContainmentOctreeT>::KahanAccumulator;
 
-   virtual ~LeafNode() = default;
+   ~LeafNode() override = default;
 
-   virtual uint_t height() const { return uint_t(0); }
-   virtual uint_t numNodes() const { return uint_t(0); }
-   virtual uint_t numChildren() const { return uint_t(0); }
+   uint_t height() const override { return uint_t(0); }
+   uint_t numNodes() const override { return uint_t(0); }
+   uint_t numChildren() const override { return uint_t(0); }
 
-   virtual const Node<ContainmentOctreeT> * getChild( const uint_t ) const { WALBERLA_ABORT("ContainmentOctree: You are requesting access to children of a Leaf Node!"); return 0; }
+   const Node<ContainmentOctreeT> * getChild( const uint_t ) const override { WALBERLA_ABORT("ContainmentOctree: You are requesting access to children of a Leaf Node!"); return 0; }
 };
 
 
diff --git a/src/geometry/containment_octree/OutsideLeafNode.h b/src/geometry/containment_octree/OutsideLeafNode.h
index 6328ce593bfa29ad81ec0414f816eadc7580296f..782faaad4213434d974da1fd4afca7cc3ea3efcc 100644
--- a/src/geometry/containment_octree/OutsideLeafNode.h
+++ b/src/geometry/containment_octree/OutsideLeafNode.h
@@ -42,12 +42,12 @@ public:
    
    using KahanAccumulator = typename LeafNode<ContainmentOctreeT>::KahanAccumulator;
       
-   virtual ~OutsideLeafNode() = default;
+   ~OutsideLeafNode() override = default;
 
-   virtual bool contains( const Point & /*p*/ ) const { return false; }
+   bool contains( const Point & /*p*/ ) const override { return false; }
 
-   virtual void numNodes( uint_t & /*numInside*/, uint_t & numOutside, uint_t & /*numIndeterminate*/, uint_t & /*numBranch*/ ) const { ++numOutside; }
-   virtual void volumes( KahanAccumulator & /*insideVolume*/, KahanAccumulator & outsideVolume, KahanAccumulator & /*indeterminateVolume*/, Scalar volume ) const { outsideVolume += volume; }
+   void numNodes( uint_t & /*numInside*/, uint_t & numOutside, uint_t & /*numIndeterminate*/, uint_t & /*numBranch*/ ) const override { ++numOutside; }
+   void volumes( KahanAccumulator & /*insideVolume*/, KahanAccumulator & outsideVolume, KahanAccumulator & /*indeterminateVolume*/, Scalar volume ) const override { outsideVolume += volume; }
 };
 
    
diff --git a/src/gpu/HostFieldAllocator.h b/src/gpu/HostFieldAllocator.h
index 8b24c3a47cd06dbf97a5ef07177a4f152f3fb509..e6a97c061927642c223125f708ba550074ff7f81 100644
--- a/src/gpu/HostFieldAllocator.h
+++ b/src/gpu/HostFieldAllocator.h
@@ -34,10 +34,10 @@ namespace gpu
 
    //*******************************************************************************************************************
    /*!
-   * Allocator that allocates a CPU! field using gpuHostAlloc without padding
+   * Allocator that allocates a CPU! field using gpuHostAlloc without padding.
    *
-   * Uses gpuHostAlloc for the allocation - which allocates page-locked memory that is faster to transfer to the GPU
-   * This allocator should be used for CPU fields that are often transferred to GPU and back
+   * Uses gpuHostAlloc for the allocation - which allocates page-locked memory that is faster to transfer to the GPU.
+   * This allocator should be used for CPU fields that are often transferred to GPU and back.
    *
    * \ingroup gpu
    *
@@ -47,10 +47,10 @@ namespace gpu
    class HostFieldAllocator : public field::FieldAllocator<T>
    {
    public:
-      virtual ~HostFieldAllocator() = default;
+      ~HostFieldAllocator() override = default;
 
-      virtual T * allocateMemory (  uint_t size0, uint_t size1, uint_t size2, uint_t size3,
-                                    uint_t & allocSize1, uint_t & allocSize2, uint_t & allocSize3 )
+      T * allocateMemory (  uint_t size0, uint_t size1, uint_t size2, uint_t size3,
+                            uint_t & allocSize1, uint_t & allocSize2, uint_t & allocSize3 ) override
       {
          WALBERLA_NON_DEVICE_SECTION()
          {
@@ -65,7 +65,7 @@ namespace gpu
          return (T*)(result);
       }
 
-      virtual T * allocateMemory ( uint_t size )
+      T * allocateMemory ( uint_t size ) override
       {
          WALBERLA_NON_DEVICE_SECTION()
          {
@@ -77,7 +77,7 @@ namespace gpu
          return (T*)(result);
       }
 
-      virtual void deallocate(T *& values) {
+      void deallocate(T *& values) override {
          WALBERLA_NON_DEVICE_SECTION() {
             WALBERLA_ABORT(__FUNCTION__ << "Using GPU method without WALBERLA_BUILD_WITH_GPU_SUPPORT being enabled.")
          }
diff --git a/src/lbm/communication/SparsePdfFieldPackInfo.h b/src/lbm/communication/SparsePdfFieldPackInfo.h
index 6b4a86af6073ad113d47f0f8fcb067066a74508e..aebdd204c47667f991c9386dc6843e808a476b90 100644
--- a/src/lbm/communication/SparsePdfFieldPackInfo.h
+++ b/src/lbm/communication/SparsePdfFieldPackInfo.h
@@ -68,7 +68,7 @@ public:
    SparsePdfFieldPackInfo( const BlockDataID & pdfFieldId, const BlockDataID & flagFieldId, FlagUID flag, bool flagFieldConstant )
       : pdfFieldId_( pdfFieldId ), flagFieldId_( flagFieldId ), flag_( flag ), flagFieldConstant_( flagFieldConstant ) {}
 
-   virtual ~SparsePdfFieldPackInfo() {}
+   ~SparsePdfFieldPackInfo() override = default;
 
    bool constantDataExchange() const { return flagFieldConstant_; }
    bool threadsafeReceiving()  const { return true; }
diff --git a/src/mesa_pd/vtk/ConvexPolyhedron/data_sources/FaceDataSource.h b/src/mesa_pd/vtk/ConvexPolyhedron/data_sources/FaceDataSource.h
index 4ab4de70f5f4fe4650165e6cb3f6d386d91f6149..c9f0af18551cfd266f2e22b8f5bd841a49d84901 100644
--- a/src/mesa_pd/vtk/ConvexPolyhedron/data_sources/FaceDataSource.h
+++ b/src/mesa_pd/vtk/ConvexPolyhedron/data_sources/FaceDataSource.h
@@ -40,7 +40,7 @@ public:
                         const ParticleIdxFacePropertyManager<MeshType> & faceToParticleIdxManager,
                         shared_ptr<walberla::mesa_pd::data::ParticleStorage> ps) = 0;
 
-   virtual ~FaceDataSource() {}
+   virtual ~FaceDataSource() = default;
 
 protected:
    std::string name_;
diff --git a/src/mesa_pd/vtk/ConvexPolyhedron/data_sources/OutputSelectorFaceDataSource.h b/src/mesa_pd/vtk/ConvexPolyhedron/data_sources/OutputSelectorFaceDataSource.h
index 02c5fec6bc04b991db03342fc70bbf2fd6db6066..c1de1ca54fd7453280971e050a3a7975b037ddc7 100644
--- a/src/mesa_pd/vtk/ConvexPolyhedron/data_sources/OutputSelectorFaceDataSource.h
+++ b/src/mesa_pd/vtk/ConvexPolyhedron/data_sources/OutputSelectorFaceDataSource.h
@@ -44,14 +44,14 @@ public:
 
    OutputSelectorFaceDataSource(const std::string& name, Selector selector) : Base(name), selector_(selector) { }
 
-   virtual uint_t numComponents() {
+   uint_t numComponents() override {
       return uint_t(1);
    }
 
    using Base::getData;
-   virtual void getData( const MeshType &, const Faces & faces, std::vector<Type> & data,
-                         const ParticleIdxFacePropertyManager<MeshType> & faceToParticleIdxManager,
-                         shared_ptr<walberla::mesa_pd::data::ParticleStorage> ps) {
+   void getData( const MeshType &, const Faces & faces, std::vector<Type> & data,
+                 const ParticleIdxFacePropertyManager<MeshType> & faceToParticleIdxManager,
+                 shared_ptr<walberla::mesa_pd::data::ParticleStorage> ps) override {
       for (const auto & face: faces) {
          size_t particleIdx = faceToParticleIdxManager[face];
          auto p = (*ps)[particleIdx];
@@ -79,14 +79,14 @@ public:
 
    OutputSelectorFaceDataSource(const std::string& name, Selector selector) : Base(name), selector_(selector) { }
 
-   virtual uint_t numComponents() {
+   uint_t numComponents() override {
       return uint_t(3);
    }
 
    using Base::getData;
-   virtual void getData( const MeshType &, const Faces & faces, std::vector<Type> & data,
-                         const ParticleIdxFacePropertyManager<MeshType> & faceToParticleIdxManager,
-                         shared_ptr<walberla::mesa_pd::data::ParticleStorage> ps) {
+   void getData( const MeshType &, const Faces & faces, std::vector<Type> & data,
+                 const ParticleIdxFacePropertyManager<MeshType> & faceToParticleIdxManager,
+                 shared_ptr<walberla::mesa_pd::data::ParticleStorage> ps) override {
       for (const auto & face: faces) {
          size_t particleIdx = faceToParticleIdxManager[face];
          auto p = (*ps)[particleIdx];
diff --git a/src/mesa_pd/vtk/ConvexPolyhedron/data_sources/VertexDataSource.h b/src/mesa_pd/vtk/ConvexPolyhedron/data_sources/VertexDataSource.h
index 41adedfd914abb90426df5c6e4a06fad86011265..cc8524635fda4f62fa3c544d2f41bfac8642e8d8 100644
--- a/src/mesa_pd/vtk/ConvexPolyhedron/data_sources/VertexDataSource.h
+++ b/src/mesa_pd/vtk/ConvexPolyhedron/data_sources/VertexDataSource.h
@@ -39,7 +39,7 @@ public:
          const ParticleIdxVertexPropertyManager<MeshType> & vertexToParticleIdxManager,
          shared_ptr<walberla::mesa_pd::data::ParticleStorage> ps) = 0;
 
-   virtual ~VertexDataSource() {}
+   virtual ~VertexDataSource() = default;
 
 protected:
    std::string name_;