diff --git a/src/blockforest/BlockForest.cpp b/src/blockforest/BlockForest.cpp
index 50ebc8c27db75b4f309cec7ef6cebb9620c0e0d1..495da585dd97ab39679cebdd38e1267c1c44e018 100644
--- a/src/blockforest/BlockForest.cpp
+++ b/src/blockforest/BlockForest.cpp
@@ -74,7 +74,7 @@ void BlockForest::BlockInformation::getAllBlocks( std::vector< shared_ptr< IBloc
 
       std::stack< std::pair< const Node *, BlockID > > stack;
 
-      stack.push( std::make_pair( nodes_[i].get(), BlockID( i, treeIdMarker ) ) );
+      stack.emplace( nodes_[i].get(), BlockID( i, treeIdMarker ) );
 
       while( !stack.empty() ) {
 
@@ -85,7 +85,7 @@ void BlockForest::BlockInformation::getAllBlocks( std::vector< shared_ptr< IBloc
 
          if( !node.first->children_.empty() ) {
             for( uint_t c = 8; c-- != 0; )
-               stack.push( std::make_pair( node.first->children_[c].get(), BlockID( node.second, c ) ) );
+               stack.emplace( node.first->children_[c].get(), BlockID( node.second, c ) );
          }
          else {
             blocks.push_back( make_shared< BlockID >( node.second ) );
@@ -2540,7 +2540,7 @@ void BlockForest::update( PhantomBlockForest & phantomForest )
          if( phantom->sourceBlockHasTheSameSize() || phantom->sourceBlockIsLarger() )
          {
             WALBERLA_ASSERT( blocksToUnpack.find( block ) == blocksToUnpack.end() );
-            blocksToUnpack[ block ].push_back( std::make_pair( state, &(*buffer) ) );
+            blocksToUnpack[ block ].emplace_back( state, &(*buffer) );
          }
          else
          {
diff --git a/src/core/config/Config.cpp b/src/core/config/Config.cpp
index 6b5899e9b414d0aa1885c5ffacb2c54e74d32af9..75a9cf41127ce25f633796fbbe3e37a0c2b6182c 100644
--- a/src/core/config/Config.cpp
+++ b/src/core/config/Config.cpp
@@ -224,7 +224,7 @@ void Config::parseFromFile( const char* filename, Block& block, unsigned int lev
       }
 
       //Adding the line to the input string
-      lineNumbers.push_back( Pair( input.tellp(), lineCounter ) );
+      lineNumbers.emplace_back( input.tellp(), lineCounter );
       input << line << "\n";
    }
 
@@ -572,7 +572,7 @@ void Config::Block::getBlocks( const std::string& key, Blocks& blocks, size_t mi
    size_t c = 0;
    for( List::const_iterator it=blocks_.begin(); it!=blocks_.end(); ++it ) {
       if( string_icompare( key, it->getKey() ) == 0 ) {
-         blocks.push_back( BlockHandle( &*it ) );
+         blocks.emplace_back( &*it );
          ++c;
       }
    }
@@ -595,7 +595,7 @@ void Config::Block::getBlocks( const std::string& key, Blocks& blocks, size_t mi
 void Config::Block::getBlocks( Blocks& blocks ) const
 {
    for( List::const_iterator it=blocks_.begin(); it!=blocks_.end(); ++it ) {
-      blocks.push_back( BlockHandle( &*it ) );
+      blocks.emplace_back( &*it );
    }
 }
 //**********************************************************************************************************************
@@ -610,7 +610,7 @@ void Config::Block::getBlocks( Blocks& blocks ) const
 void Config::Block::getWritableBlocks( std::vector<Block*> & blocks )
 {
    for( List::iterator it=blocks_.begin(); it!=blocks_.end(); ++it ) {
-      blocks.push_back( &*it );
+      blocks.emplace_back( &*it );
    }
 }
 //**********************************************************************************************************************
@@ -630,7 +630,7 @@ void Config::Block::getWritableBlocks( const std::string & key, std::vector<Bloc
    size_t c = 0;
    for( List::iterator it=blocks_.begin(); it!=blocks_.end(); ++it ) {
       if( string_icompare( key, it->getKey() ) == 0 ) {
-         blocks.push_back(  &*it );
+         blocks.emplace_back( &*it );
          ++c;
       }
    }
@@ -676,7 +676,7 @@ bool Config::Block::addParameter( const std::string& key, const std::string& val
  */
 Config::Block& Config::Block::createBlock( const std::string& key )
 {
-   blocks_.push_back( Block( key ) );
+   blocks_.emplace_back( key );
    return *blocks_.rbegin();
 }
 //**********************************************************************************************************************
diff --git a/src/gather/CellGatherPackInfo.impl.h b/src/gather/CellGatherPackInfo.impl.h
index ff3e1dcdd687c077773494a0ea30c9d5717cb4dc..0ff0f32eaeee6778dfef72663148175619f4ac0c 100644
--- a/src/gather/CellGatherPackInfo.impl.h
+++ b/src/gather/CellGatherPackInfo.impl.h
@@ -99,7 +99,7 @@ void CellGatherPackInfo<Field_T,CC>::unpackData( mpi::RecvBuffer & buffer )
 
    for( size_t i=0; i< nrPoints; ++i )
    {
-      receivedData.push_back(std::vector<real_t>(fieldSize+1)); //+1 because we also store t value as first entry
+      receivedData.emplace_back(std::vector<real_t>(fieldSize+1)); //+1 because we also store t value as first entry
       std::vector<real_t> & pointVec = receivedData[receivedData.size()-1];
 
       uint_t t;
diff --git a/src/gather/CurveGatherPackInfo.impl.h b/src/gather/CurveGatherPackInfo.impl.h
index 0039b2a05cb1f3c16adb1ab427bb8ae925fc9923..10d480015f911a61858c682f41613021a6a39178 100644
--- a/src/gather/CurveGatherPackInfo.impl.h
+++ b/src/gather/CurveGatherPackInfo.impl.h
@@ -185,7 +185,7 @@ void CurveGatherPackInfo<GlF,IP>::unpackData( mpi::RecvBuffer & buffer )
 
    for( size_t i=0; i< nrPoints; ++i )
    {
-      receivedData.push_back(std::vector<real_t>(fieldSize+1)); //+1 because we also store t value as first entry
+      receivedData.emplace_back(std::vector<real_t>(fieldSize+1)); //+1 because we also store t value as first entry
       std::vector<real_t> & pointVec = receivedData[receivedData.size()-1];
 
       real_t t;
diff --git a/src/mesa_pd/collision_detection/EPA.cpp b/src/mesa_pd/collision_detection/EPA.cpp
index 70c39daeea9ff9c2686df4a9043255c6be127cea..240b3e93857a20e9bea653a8f3605d14bbf7b3a2 100644
--- a/src/mesa_pd/collision_detection/EPA.cpp
+++ b/src/mesa_pd/collision_detection/EPA.cpp
@@ -142,7 +142,7 @@ void EPA::EPA_Triangle::silhouette( size_t index, const Vec3& w,
    if (!obsolete_) {
       real_t test = (closest_ * w);
       if (test < sqrDist_) {
-         edgeBuffer.push_back(EPA_Edge(this, index));
+         edgeBuffer.emplace_back(this, index);
       }
       else {
          obsolete_ = true; // Facet is visible
@@ -271,7 +271,7 @@ bool EPA::doEPA( Support &geom1,
 
    for(EPA_EntryBuffer::iterator it=entryBuffer.begin(); it != entryBuffer.end(); ++it) {
       if(it->isClosestInternal()) {
-         entryHeap.push_back(&(*it));
+         entryHeap.emplace_back(&(*it));
       }
    }
 
@@ -402,7 +402,7 @@ bool EPA::doEPA( Support &geom1,
          }
 
          EPA_EdgeBuffer::const_iterator it = edgeBuffer.begin();
-         entryBuffer.push_back(EPA_Triangle(it->getEnd(), it->getStart(), epaVolume.size()-1, epaVolume));
+         entryBuffer.emplace_back(it->getEnd(), it->getStart(), epaVolume.size()-1, epaVolume);
 
          EPA_Triangle* firstTriangle = &(entryBuffer.back());
          //if it is expanding candidate add to heap
@@ -416,7 +416,7 @@ bool EPA::doEPA( Support &geom1,
                && firstTriangle->getSqrDist() > lowerBoundSqr
                && firstTriangle->getSqrDist() < upperBoundSqr)
          {
-            entryHeap.push_back(firstTriangle);
+            entryHeap.emplace_back(firstTriangle);
             std::push_heap(entryHeap.begin(), entryHeap.end(), EPA::EPA_TriangleComp());
          }
 
@@ -431,7 +431,7 @@ bool EPA::doEPA( Support &geom1,
                break;
             }
 
-            entryBuffer.push_back(EPA_Triangle(it->getEnd(), it->getStart(), epaVolume.size()-1, epaVolume));
+            entryBuffer.emplace_back(it->getEnd(), it->getStart(), epaVolume.size()-1, epaVolume);
             EPA_Triangle* newTriangle = &(entryBuffer.back());
 
             //std::cerr << "Considering Triangle (" << newTriangle->getSqrDist() << ") {"  << (*newTriangle)[0] <<  "," << (*newTriangle)[1] <<  ","<< (*newTriangle)[2] << "} ("<< epaVolume[(*newTriangle)[0]] * newTriangle->getNormal() << ")" << std::endl;
@@ -446,7 +446,7 @@ bool EPA::doEPA( Support &geom1,
                   &&  newTriangle->getSqrDist() > lowerBoundSqr
                   &&  newTriangle->getSqrDist() < upperBoundSqr)
             {
-               entryHeap.push_back(newTriangle);
+               entryHeap.emplace_back(newTriangle);
                std::push_heap(entryHeap.begin(), entryHeap.end(), EPA::EPA_TriangleComp());
             }
 
@@ -572,11 +572,11 @@ inline void EPA::createInitialSimplex( size_t numPoints,
       //check for containment inside
       if(originInTetrahedron(epaVolume[0], epaVolume[2], epaVolume[3], epaVolume[4]) || originInTetrahedron(epaVolume[1], epaVolume[2], epaVolume[3], epaVolume[4]) ){
          //insert triangle 1
-         entryBuffer.push_back(EPA_Triangle(1, 2, 3, epaVolume)); //[0] up->ccw1->ccw2
+         entryBuffer.emplace_back(1, 2, 3, epaVolume); //[0] up->ccw1->ccw2
          //insert triangle 2
-         entryBuffer.push_back(EPA_Triangle(1, 3, 4, epaVolume)); //[1] up->ccw2->ccw3
+         entryBuffer.emplace_back(1, 3, 4, epaVolume); //[1] up->ccw2->ccw3
          //insert triangle 3
-         entryBuffer.push_back(EPA_Triangle(1, 4, 2, epaVolume)); //[2] up->ccw3->ccw1
+         entryBuffer.emplace_back(1, 4, 2, epaVolume); //[2] up->ccw3->ccw1
 
          //link these 3 triangles
          entryBuffer[0].link(2, &(entryBuffer[1]), 0); //edge up->ccw1
@@ -585,11 +585,11 @@ inline void EPA::createInitialSimplex( size_t numPoints,
 
 
          //insert triangle 4
-         entryBuffer.push_back(EPA_Triangle(0, 2, 4, epaVolume)); //[3] down->ccw1->ccw3
+         entryBuffer.emplace_back(0, 2, 4, epaVolume); //[3] down->ccw1->ccw3
          //insert triangle 5
-         entryBuffer.push_back(EPA_Triangle(0, 4, 3, epaVolume)); //[4] down->ccw3->ccw2
+         entryBuffer.emplace_back(0, 4, 3, epaVolume); //[4] down->ccw3->ccw2
          //insert triangle 6
-         entryBuffer.push_back(EPA_Triangle(0, 3, 2, epaVolume)); //[5] down->ccw2->ccw1
+         entryBuffer.emplace_back(0, 3, 2, epaVolume); //[5] down->ccw2->ccw1
 
          //link these 3 triangles
          entryBuffer[3].link(2, &(entryBuffer[4]), 0); //edge down->ccw3
@@ -643,11 +643,11 @@ inline void EPA::createInitialSimplex( size_t numPoints,
       else {
          //Build the hexahedron as it is convex
          //insert triangle 1
-         entryBuffer.push_back(EPA_Triangle(3, 2, 1, epaVolume)); //[0] support1->A->B
+         entryBuffer.emplace_back(3, 2, 1, epaVolume); //[0] support1->A->B
          //insert triangle 2
-         entryBuffer.push_back(EPA_Triangle(3, 1, 0, epaVolume)); //[1] support1->B->C
+         entryBuffer.emplace_back(3, 1, 0, epaVolume); //[1] support1->B->C
          //insert triangle 3
-         entryBuffer.push_back(EPA_Triangle(3, 0, 2, epaVolume)); //[2] support1->C->A
+         entryBuffer.emplace_back(3, 0, 2, epaVolume); //[2] support1->C->A
 
          //link these 3 triangles
          entryBuffer[0].link(2, &(entryBuffer[1]), 0); //edge support1->A
@@ -656,11 +656,11 @@ inline void EPA::createInitialSimplex( size_t numPoints,
 
 
          //insert triangle 4
-         entryBuffer.push_back(EPA_Triangle(4, 2, 0, epaVolume)); //[3] support2->A->C
+         entryBuffer.emplace_back(4, 2, 0, epaVolume); //[3] support2->A->C
          //insert triangle 5
-         entryBuffer.push_back(EPA_Triangle(4, 0, 1, epaVolume)); //[4] support2->C->B
+         entryBuffer.emplace_back(4, 0, 1, epaVolume); //[4] support2->C->B
          //insert triangle 6
-         entryBuffer.push_back(EPA_Triangle(4, 1, 2, epaVolume)); //[5] support2->B->A
+         entryBuffer.emplace_back(4, 1, 2, epaVolume); //[5] support2->B->A
 
          //link these 3 triangles
          entryBuffer[3].link(2, &(entryBuffer[4]), 0); //edge support2->C
@@ -768,13 +768,13 @@ inline void EPA::createInitialTetrahedron( size_t top,
                                            EPA_EntryBuffer& entryBuffer )
 {
    //insert triangle 1
-   entryBuffer.push_back(EPA_Triangle(top, frontLeft, frontRight, epaVolume)); //[0] vorne
+   entryBuffer.emplace_back(top, frontLeft, frontRight, epaVolume); //[0] vorne
    //insert triangle 2
-   entryBuffer.push_back(EPA_Triangle(top, frontRight, back, epaVolume)); //[1] rechts hinten
+   entryBuffer.emplace_back(top, frontRight, back, epaVolume); //[1] rechts hinten
    //insert triangle 3
-   entryBuffer.push_back(EPA_Triangle(top, back, frontLeft, epaVolume)); //[2] links hinten
+   entryBuffer.emplace_back(top, back, frontLeft, epaVolume); //[2] links hinten
    //insert triangle 4
-   entryBuffer.push_back(EPA_Triangle(back, frontRight, frontLeft, epaVolume)); //[3] unten
+   entryBuffer.emplace_back(back, frontRight, frontLeft, epaVolume); //[3] unten
 
    //make links between the triangles
    entryBuffer[0].link(0, &(entryBuffer[2]), 2); //Kante vorne links
diff --git a/src/pe/ccd/SimpleCCD.cpp b/src/pe/ccd/SimpleCCD.cpp
index c9af4591633a3984a696f575081e9c26fe0a6d0c..02cd8860f860dea4f176f814501284e6898cd38b 100644
--- a/src/pe/ccd/SimpleCCD.cpp
+++ b/src/pe/ccd/SimpleCCD.cpp
@@ -62,9 +62,9 @@ PossibleContacts& SimpleCCD::generatePossibleContacts( WcTimingTree* tt ){
          if (!((*it1)->hasInfiniteMass() && (*it2)->hasInfiniteMass()))
          {
             if ( (*it1)->getSystemID() > (*it2)->getSystemID() )
-               contacts_.push_back(std::make_pair(*it2, *it1));
+               contacts_.emplace_back(*it2, *it1);
             else
-               contacts_.push_back(std::make_pair(*it1, *it2));
+               contacts_.emplace_back(*it1, *it2);
          }
       }
 
@@ -73,9 +73,9 @@ PossibleContacts& SimpleCCD::generatePossibleContacts( WcTimingTree* tt ){
          if (!((*it1)->hasInfiniteMass() && it2->hasInfiniteMass()))
          {
             if ( (*it1)->getSystemID() > it2->getSystemID() )
-               contacts_.push_back(std::make_pair(it2.getBodyID(), *it1));
+               contacts_.emplace_back(it2.getBodyID(), *it1);
             else
-               contacts_.push_back(std::make_pair(*it1, it2.getBodyID()));
+               contacts_.emplace_back(*it1, it2.getBodyID());
          }
       }
    }
diff --git a/src/pe/collision/EPA.cpp b/src/pe/collision/EPA.cpp
index e8d54f178d8e46392fee521524f988eb41b1dd53..26264c277df17ececc30f57cbce9de618963b204 100644
--- a/src/pe/collision/EPA.cpp
+++ b/src/pe/collision/EPA.cpp
@@ -150,7 +150,7 @@ void EPA::EPA_Triangle::silhouette( size_t index, const Vec3& w,
    if (!obsolete_) {
       real_t test = (closest_ * w);
       if (test < sqrDist_) {
-         edgeBuffer.push_back(EPA_Edge(this, index));
+         edgeBuffer.emplace_back(this, index);
       }
       else {
          obsolete_ = true; // Facet is visible
@@ -259,7 +259,7 @@ bool EPA::doEPA( GeomPrimitive &geom1, GeomPrimitive &geom2, const GJK& gjk, Vec
 
    for(EPA_EntryBuffer::iterator it=entryBuffer.begin(); it != entryBuffer.end(); ++it) {
       if(it->isClosestInternal()) {
-         entryHeap.push_back(&(*it));
+         entryHeap.emplace_back(&(*it));
       }
    }
 
@@ -390,7 +390,7 @@ bool EPA::doEPA( GeomPrimitive &geom1, GeomPrimitive &geom2, const GJK& gjk, Vec
          }
 
          EPA_EdgeBuffer::const_iterator it = edgeBuffer.begin();
-         entryBuffer.push_back(EPA_Triangle(it->getEnd(), it->getStart(), epaVolume.size()-1, epaVolume));
+         entryBuffer.emplace_back(it->getEnd(), it->getStart(), epaVolume.size()-1, epaVolume);
 
          EPA_Triangle* firstTriangle = &(entryBuffer.back());
          //if it is expanding candidate add to heap
@@ -404,7 +404,7 @@ bool EPA::doEPA( GeomPrimitive &geom1, GeomPrimitive &geom2, const GJK& gjk, Vec
                && firstTriangle->getSqrDist() > lowerBoundSqr
                && firstTriangle->getSqrDist() < upperBoundSqr)
          {
-            entryHeap.push_back(firstTriangle);
+            entryHeap.emplace_back(firstTriangle);
             std::push_heap(entryHeap.begin(), entryHeap.end(), EPA::EPA_TriangleComp());
          }
 
@@ -419,7 +419,7 @@ bool EPA::doEPA( GeomPrimitive &geom1, GeomPrimitive &geom2, const GJK& gjk, Vec
                break;
             }
 
-            entryBuffer.push_back(EPA_Triangle(it->getEnd(), it->getStart(), epaVolume.size()-1, epaVolume));
+            entryBuffer.emplace_back(it->getEnd(), it->getStart(), epaVolume.size()-1, epaVolume);
             EPA_Triangle* newTriangle = &(entryBuffer.back());
 
             //std::cerr << "Considering Triangle (" << newTriangle->getSqrDist() << ") {"  << (*newTriangle)[0] <<  "," << (*newTriangle)[1] <<  ","<< (*newTriangle)[2] << "} ("<< epaVolume[(*newTriangle)[0]] * newTriangle->getNormal() << ")" << std::endl;
@@ -434,7 +434,7 @@ bool EPA::doEPA( GeomPrimitive &geom1, GeomPrimitive &geom2, const GJK& gjk, Vec
                   &&  newTriangle->getSqrDist() > lowerBoundSqr
                   &&  newTriangle->getSqrDist() < upperBoundSqr)
             {
-               entryHeap.push_back(newTriangle);
+               entryHeap.emplace_back(newTriangle);
                std::push_heap(entryHeap.begin(), entryHeap.end(), EPA::EPA_TriangleComp());
             }
 
@@ -555,11 +555,11 @@ inline void EPA::createInitialSimplex( size_t numPoints, GeomPrimitive &geom1, G
       //check for containment inside
       if(originInTetrahedron(epaVolume[0], epaVolume[2], epaVolume[3], epaVolume[4]) || originInTetrahedron(epaVolume[1], epaVolume[2], epaVolume[3], epaVolume[4]) ){
          //insert triangle 1
-         entryBuffer.push_back(EPA_Triangle(1, 2, 3, epaVolume)); //[0] up->ccw1->ccw2
+         entryBuffer.emplace_back(1, 2, 3, epaVolume); //[0] up->ccw1->ccw2
          //insert triangle 2
-         entryBuffer.push_back(EPA_Triangle(1, 3, 4, epaVolume)); //[1] up->ccw2->ccw3
+         entryBuffer.emplace_back(1, 3, 4, epaVolume); //[1] up->ccw2->ccw3
          //insert triangle 3
-         entryBuffer.push_back(EPA_Triangle(1, 4, 2, epaVolume)); //[2] up->ccw3->ccw1
+         entryBuffer.emplace_back(1, 4, 2, epaVolume); //[2] up->ccw3->ccw1
 
          //link these 3 triangles
          entryBuffer[0].link(2, &(entryBuffer[1]), 0); //edge up->ccw1
@@ -568,11 +568,11 @@ inline void EPA::createInitialSimplex( size_t numPoints, GeomPrimitive &geom1, G
 
 
          //insert triangle 4
-         entryBuffer.push_back(EPA_Triangle(0, 2, 4, epaVolume)); //[3] down->ccw1->ccw3
+         entryBuffer.emplace_back(0, 2, 4, epaVolume); //[3] down->ccw1->ccw3
          //insert triangle 5
-         entryBuffer.push_back(EPA_Triangle(0, 4, 3, epaVolume)); //[4] down->ccw3->ccw2
+         entryBuffer.emplace_back(0, 4, 3, epaVolume); //[4] down->ccw3->ccw2
          //insert triangle 6
-         entryBuffer.push_back(EPA_Triangle(0, 3, 2, epaVolume)); //[5] down->ccw2->ccw1
+         entryBuffer.emplace_back(0, 3, 2, epaVolume); //[5] down->ccw2->ccw1
 
          //link these 3 triangles
          entryBuffer[3].link(2, &(entryBuffer[4]), 0); //edge down->ccw3
@@ -626,11 +626,11 @@ inline void EPA::createInitialSimplex( size_t numPoints, GeomPrimitive &geom1, G
       else {
          //Build the hexahedron as it is convex
          //insert triangle 1
-         entryBuffer.push_back(EPA_Triangle(3, 2, 1, epaVolume)); //[0] support1->A->B
+         entryBuffer.emplace_back(3, 2, 1, epaVolume); //[0] support1->A->B
          //insert triangle 2
-         entryBuffer.push_back(EPA_Triangle(3, 1, 0, epaVolume)); //[1] support1->B->C
+         entryBuffer.emplace_back(3, 1, 0, epaVolume); //[1] support1->B->C
          //insert triangle 3
-         entryBuffer.push_back(EPA_Triangle(3, 0, 2, epaVolume)); //[2] support1->C->A
+         entryBuffer.emplace_back(3, 0, 2, epaVolume); //[2] support1->C->A
 
          //link these 3 triangles
          entryBuffer[0].link(2, &(entryBuffer[1]), 0); //edge support1->A
@@ -639,11 +639,11 @@ inline void EPA::createInitialSimplex( size_t numPoints, GeomPrimitive &geom1, G
 
 
          //insert triangle 4
-         entryBuffer.push_back(EPA_Triangle(4, 2, 0, epaVolume)); //[3] support2->A->C
+         entryBuffer.emplace_back(4, 2, 0, epaVolume); //[3] support2->A->C
          //insert triangle 5
-         entryBuffer.push_back(EPA_Triangle(4, 0, 1, epaVolume)); //[4] support2->C->B
+         entryBuffer.emplace_back(4, 0, 1, epaVolume); //[4] support2->C->B
          //insert triangle 6
-         entryBuffer.push_back(EPA_Triangle(4, 1, 2, epaVolume)); //[5] support2->B->A
+         entryBuffer.emplace_back(4, 1, 2, epaVolume); //[5] support2->B->A
 
          //link these 3 triangles
          entryBuffer[3].link(2, &(entryBuffer[4]), 0); //edge support2->C
@@ -748,13 +748,13 @@ inline void EPA::createInitialTetrahedron( size_t top, size_t frontLeft, size_t
                                            EPA_EntryBuffer& entryBuffer )
 {
    //insert triangle 1
-   entryBuffer.push_back(EPA_Triangle(top, frontLeft, frontRight, epaVolume)); //[0] vorne
+   entryBuffer.emplace_back(top, frontLeft, frontRight, epaVolume); //[0] vorne
    //insert triangle 2
-   entryBuffer.push_back(EPA_Triangle(top, frontRight, back, epaVolume)); //[1] rechts hinten
+   entryBuffer.emplace_back(top, frontRight, back, epaVolume); //[1] rechts hinten
    //insert triangle 3
-   entryBuffer.push_back(EPA_Triangle(top, back, frontLeft, epaVolume)); //[2] links hinten
+   entryBuffer.emplace_back(top, back, frontLeft, epaVolume); //[2] links hinten
    //insert triangle 4
-   entryBuffer.push_back(EPA_Triangle(back, frontRight, frontLeft, epaVolume)); //[3] unten
+   entryBuffer.emplace_back(back, frontRight, frontLeft, epaVolume); //[3] unten
 
    //make links between the triangles
    entryBuffer[0].link(0, &(entryBuffer[2]), 2); //Kante vorne links