diff --git a/src/GridGenerator/StreetPointFinder/StreetPointFinder.cpp b/src/GridGenerator/StreetPointFinder/StreetPointFinder.cpp
index 9b6808e1c4fd5156debcf6107d3e4c62d111c706..05aef5d5e227c47024e46f406a5f45e3ee5383c0 100644
--- a/src/GridGenerator/StreetPointFinder/StreetPointFinder.cpp
+++ b/src/GridGenerator/StreetPointFinder/StreetPointFinder.cpp
@@ -471,7 +471,3 @@ void StreetPointFinder::writeMappingFile(std::string gridPath)
 	*logging::out << logging::Logger::INFO_INTERMEDIATE << "done!\n";
 }
 
-void StreetPointFinder::dummy()
-{
-	int a = 5;
-}
\ No newline at end of file
diff --git a/src/GridGenerator/StreetPointFinder/StreetPointFinder.h b/src/GridGenerator/StreetPointFinder/StreetPointFinder.h
index f5dec13e9b9d2c09aaad776ec12bea0c34ac926e..177a4cbd2000585e4e0f78c284628915c484507a 100644
--- a/src/GridGenerator/StreetPointFinder/StreetPointFinder.h
+++ b/src/GridGenerator/StreetPointFinder/StreetPointFinder.h
@@ -6,8 +6,6 @@
 #include "Core/PointerDefinitions.h"
 #include "Core/DataTypes.h"
 
-//#include "Core/Logger/Logger.h"
-
 #include <VirtualFluidsDefinitions.h>
 
 class Grid;
@@ -59,10 +57,6 @@ struct VF_PUBLIC StreetPointFinder
     void writeSimulationFileSorted( std::string gridPath, real concentration, uint numberOfLevels, uint level );
 
     void writeMappingFile( std::string gridPath );
-
-
-
-	void dummy();
 };
 
 
diff --git a/src/Traffic/Junction/JunctionRandom.cpp b/src/Traffic/Junction/JunctionRandom.cpp
index 8a1a941ed11f5756a8711f572870cd0e2bf3839d..fd81128047ad0a2e50a3ebabd0a6e9d057fd60d7 100644
--- a/src/Traffic/Junction/JunctionRandom.cpp
+++ b/src/Traffic/Junction/JunctionRandom.cpp
@@ -1,11 +1,13 @@
 #include "JunctionRandom.h"
 
-//#include <iostream>
+#include <iostream>
 #include <algorithm>
 
 #include "TrafficMovement.h"
-//#include "Utilities/invalidInput_error.h"
-//#include "Utilities/VectorHelper.h"
+
+#include "Utilities/invalidInput_error.h"
+#include "Utilities/VectorHelper.h"
+#include "Utilities/safe_casting.h"
 
 
 JunctionRandom::JunctionRandom(const std::vector<uint> &inCellIndices, const std::vector<uint> &outCellIndices)
@@ -13,7 +15,7 @@ JunctionRandom::JunctionRandom(const std::vector<uint> &inCellIndices, const std
 	data.inCellIndices = inCellIndices;
 	data.outCellIndices = outCellIndices;
 
-	uint inRoads = inCellIndices.size();
+	uint inRoads = castSizeT_Uint(inCellIndices.size());
 
 	data.carCanEnter.resize(inRoads);
 	std::fill(data.carCanEnter.begin(), data.carCanEnter.end(), true);
@@ -69,7 +71,7 @@ uint JunctionRandom::getInCellsVectorIndex(uint cellIndex)
 
 		if (it != data.inCellIndices.end())
 		{
-			return distance(data.inCellIndices.begin(), it);
+			return static_cast <uint> (distance(data.inCellIndices.begin(), it));
 		}
 
 		throw std::runtime_error("The passed cell is not an incoming cell to this junction.");
diff --git a/src/Traffic/Junction/JunctionRandom.h b/src/Traffic/Junction/JunctionRandom.h
index 416d03e7f1a4fdee0723b6e67deaf7f3b28b146d..574e6098e6a42608fc3f76d9cf4c783951ca27cc 100644
--- a/src/Traffic/Junction/JunctionRandom.h
+++ b/src/Traffic/Junction/JunctionRandom.h
@@ -1,8 +1,8 @@
 #pragma once
-#include <VirtualFluidsDefinitions.h>
-
 #include <random> 
 #include <vector>
+
+#include <VirtualFluidsDefinitions.h>
 #include "Core/DataTypes.h"
 
 #include "Junction.h"
diff --git a/src/Traffic/Output/CarDisplay.cpp b/src/Traffic/Output/CarDisplay.cpp
index 6a22d2ae0aa82203bb8e91b63c8398bd809760c3..6543a9ca18897b6ca39f14e8434466c423c65297 100644
--- a/src/Traffic/Output/CarDisplay.cpp
+++ b/src/Traffic/Output/CarDisplay.cpp
@@ -1,10 +1,19 @@
 #include "CarDisplay.h"
 
+#include <fstream>
+#include <iostream>
+#include <iomanip>	//formatting output streams
+#include <windows.h> //for colourful console output
+#include <stdexcept>
+
+#include "Utilities/VectorHelper.h"
+#include "Utilities/safe_casting.h"
+
 CarDisplay::CarDisplay(std::vector<int> **pcurrent, const uint safetyDistance):
 	safetyDistance{ safetyDistance }
 {
 	this->ppcurrent = pcurrent;
-	roadLength = (*pcurrent)->size();
+	roadLength = castSizeT_Uint((*pcurrent)->size());
 }
 
 
diff --git a/src/Traffic/Output/CarDisplay.h b/src/Traffic/Output/CarDisplay.h
index 34e84fb7d1a8cdc503eb4d701d9359123d76851c..5c7f4a643919e9d9d13ad65cc8440e12dbc42b08 100644
--- a/src/Traffic/Output/CarDisplay.h
+++ b/src/Traffic/Output/CarDisplay.h
@@ -1,19 +1,13 @@
 #pragma once
 #include <VirtualFluidsDefinitions.h>
 
-#include <fstream>
-#include <iostream>
 #include <vector>
 #include <memory>
-#include <iomanip>	//formatting output streams
-#include <windows.h> //for colourful console output
-#include <stdexcept>
 
 #include "Sink/Sink.h"
 #include "Source/Source.h"
 #include "Junction/Junction.h"
 
-#include "Utilities/VectorHelper.h"
 
 class VF_PUBLIC CarDisplay {
 public:
diff --git a/src/Traffic/Output/ConcBySpeedAndAcceleration.cpp b/src/Traffic/Output/ConcBySpeedAndAcceleration.cpp
index 6305b2fe4c9b89b6b195020f2f9ebe9ba421c9c0..17d54719ba00bdb2db248c7b5b4f9b23a9418bf5 100644
--- a/src/Traffic/Output/ConcBySpeedAndAcceleration.cpp
+++ b/src/Traffic/Output/ConcBySpeedAndAcceleration.cpp
@@ -1,20 +1,30 @@
 #include "ConcBySpeedAndAcceleration.h"
 
+#include <iostream>
+
 ConcBySpeedAndAcceleration::ConcBySpeedAndAcceleration(uint roadlength, uint maxSpeed)
 {
+	std::cout << "using ConcBySpeedAndAcceleration::concentration for concentrations" << std::endl;
 	concentration.resize(roadlength);
-	this->maxAcceleration = static_cast<real>(maxAcceleration);
 	this->maxSpeed = static_cast<real>(maxSpeed);
 }
 
 
 ConcBySpeedAndAcceleration::ConcBySpeedAndAcceleration(uint roadlength, real * concArrayStart, uint maxSpeed)
 {
-	useLBMConcArray = true;
-	this->roadLength = roadlength;
-	this->concArrayStart = concArrayStart;
-	this->maxAcceleration = static_cast<real>(maxAcceleration);
-	this->maxSpeed = static_cast<real>(maxSpeed);
+	if (concArrayStart == nullptr) {
+		std::cout << "using ConcBySpeedAndAcceleration::concentration for concentrations" << std::endl;
+		concentration.resize(roadlength);
+		this->maxSpeed = static_cast<real>(maxSpeed);
+	}
+	else {
+		std::cout << "using passed array for concentrations" << std::endl;
+		useLBMConcArray = true;
+		this->roadLength = roadlength;
+		this->concArrayStart = concArrayStart;
+		this->maxSpeed = static_cast<real>(maxSpeed);
+	}
+
 }
 
 //
@@ -53,7 +63,7 @@ real ConcBySpeedAndAcceleration::chooseConc(uint oldSpeed, uint speed)
 		return 0.75f;
 	else if (speed < oldSpeed) //Brake
 		return 0.45f;
-	else 
+	else
 		std::cerr << "couldn't choose driving state in ConcentrationBySpeedAndAcceleration::chooseConc" << std::endl;
 	return -1.0f;
 }
diff --git a/src/Traffic/Output/ConcBySpeedAndAcceleration.h b/src/Traffic/Output/ConcBySpeedAndAcceleration.h
index 5fcc5568c3ea313d4ef0ad1ac0f1987382e6d887..bfd26c958cef69dcb41a26c866539b748f45e327 100644
--- a/src/Traffic/Output/ConcBySpeedAndAcceleration.h
+++ b/src/Traffic/Output/ConcBySpeedAndAcceleration.h
@@ -1,5 +1,4 @@
 #pragma once
-#include <VirtualFluidsDefinitions.h>
 
 #include "ConcentrationOutwriter.h"
 
@@ -20,6 +19,5 @@ private:
 
 private:
 	real maxSpeed = 0;
-	real maxAcceleration;
 };
 
diff --git a/src/Traffic/Output/ConcentrationByPosition.cpp b/src/Traffic/Output/ConcentrationByPosition.cpp
index 39c6a07ad97ac1ea4c3004704839a91856427580..4fe7926da27b3a8e796f3716dc5ec7f195f786bf 100644
--- a/src/Traffic/Output/ConcentrationByPosition.cpp
+++ b/src/Traffic/Output/ConcentrationByPosition.cpp
@@ -1,17 +1,26 @@
 #include "ConcentrationByPosition.h"
 
-
+#include <iostream>
 
 ConcentrationByPosition::ConcentrationByPosition(uint roadlength, uint maxSpeed)
 {
+	std::cout << "using ConcentrationByPosition::concentration for concentrations" << std::endl;
 	concentration.resize(roadlength);
 }
 
 ConcentrationByPosition::ConcentrationByPosition(uint roadlength, real * concArrayStart, uint maxSpeed)
 {
-	useLBMConcArray = true;
-	this->roadLength = roadLength;
-	this->concArrayStart = concArrayStart;
+	if (concArrayStart == nullptr) {
+		std::cout << "using ConcentrationByPosition::concentration for concentrations" << std::endl;
+		concentration.resize(roadlength);
+	}
+	else {
+		std::cout << "using passed array for concentrations" << std::endl;
+		useLBMConcArray = true;
+		this->roadLength = roadLength;
+		this->concArrayStart = concArrayStart;
+	}
+
 }
 
 //void ConcentrationByPosition::calculateConcFromCarDistribution(const std::vector<int>& currentCarDistribution)
diff --git a/src/Traffic/Output/ConcentrationByPosition.h b/src/Traffic/Output/ConcentrationByPosition.h
index 939ef58fa1b821727b11bcff172bc719f5b3aa74..d87ded6d87f27f3062e7b767a108454eea336b6e 100644
--- a/src/Traffic/Output/ConcentrationByPosition.h
+++ b/src/Traffic/Output/ConcentrationByPosition.h
@@ -1,5 +1,4 @@
 #pragma once
-#include <VirtualFluidsDefinitions.h>
 
 #include "ConcentrationOutwriter.h"
 
diff --git a/src/Traffic/Output/ConcentrationOutwriter.cpp b/src/Traffic/Output/ConcentrationOutwriter.cpp
index bd2f03914de3836b1c911b1f32102748bea4797e..6b6301d3bcba5e18ec30567f35facbcaff73e824 100644
--- a/src/Traffic/Output/ConcentrationOutwriter.cpp
+++ b/src/Traffic/Output/ConcentrationOutwriter.cpp
@@ -1,5 +1,8 @@
 #include "ConcentrationOutwriter.h"
 
+#include <iostream>
+#include <iomanip>	//formatting output streams
+#include <windows.h> //for colourful console output
 
 void ConcentrationOutwriter::resetConcentrations()
 {
@@ -7,7 +10,7 @@ void ConcentrationOutwriter::resetConcentrations()
 		for (real* p = concArrayStart; p < concArrayStart + roadLength; ++p)
 			*p = 0.0;
 	else
-		std::fill(concentration.begin(), concentration.end(), 0.0);
+		std::fill(concentration.begin(), concentration.end(), 0.0f);
 }
 
 
diff --git a/src/Traffic/Output/ConcentrationOutwriter.h b/src/Traffic/Output/ConcentrationOutwriter.h
index 2df13490736f52cf73b0eb94c360a1f6626cd915..8908b508ced02f270952a4819bbccac9c7063108 100644
--- a/src/Traffic/Output/ConcentrationOutwriter.h
+++ b/src/Traffic/Output/ConcentrationOutwriter.h
@@ -1,9 +1,6 @@
 #pragma once
 
 #include <vector>
-#include <iostream>
-#include <iomanip>	//formatting output streams
-#include <windows.h> //for colourful console output
 
 #include <VirtualFluidsDefinitions.h>
 #include "Core/DataTypes.h"
diff --git a/src/Traffic/RoadNetwork/RoadMaker.cpp b/src/Traffic/RoadNetwork/RoadMaker.cpp
index bdd8822cdb33fcc4fa07ac246a4b879551c31b1f..b9b84f65e231e8540ad27b0ad6f96ce8cf17107d 100644
--- a/src/Traffic/RoadNetwork/RoadMaker.cpp
+++ b/src/Traffic/RoadNetwork/RoadMaker.cpp
@@ -1,5 +1,8 @@
 #include "RoadMaker.h"
 
+#include "Utilities/VectorHelper.h"
+#include "Utilities/invalidInput_error.h"
+#include "Utilities/safe_casting.h"
 
 //random vehicle Distribution
 RoadMaker::RoadMaker(const uint roadLength, const uint maxVelocity, uint vehicleLength, const real vehicleDensity)
@@ -24,7 +27,7 @@ RoadMaker::RoadMaker(const uint roadLength, const uint maxVelocity, uint vehicle
 //given vehicle distribution
 RoadMaker::RoadMaker(const std::vector<int> vehicleDistribution, const uint maxVelocity, uint vehicleLength)
 {
-	this->roadLength = vehicleDistribution.size();
+	this->roadLength = castSizeT_Uint(vehicleDistribution.size());
 
 	this->maxVelocity = maxVelocity;
 	initVehicleLength(vehicleLength);
@@ -168,7 +171,7 @@ void RoadMaker::setJunctionAsNeighbor(std::unique_ptr<Junction> & junction)
 {
 	//set the junction as neighbor of the incoming cells
 
-	int junctionIndex = -1000 - junctions.size(); //value range: -1000 to -1999
+	int junctionIndex = -1000 - castSizeT_Int(junctions.size()); //value range: -1000 to -1999
 	std::vector<uint> inCells = junction->getInCellIndices();
 
 	try {
@@ -221,7 +224,7 @@ void RoadMaker::setSinkAsNeighbor(std::unique_ptr<Sink> & sink)
 {
 	//set the sink as neighbor of the incoming cell
 
-	int sinkIndex = -2000 - sinks.size(); //value range: -2000 to -2999
+	int sinkIndex = -2000 - castSizeT_Int(sinks.size()); //value range: -2000 to -2999
 	uint sinkCell = sink->getIndex();
 
 	if (sinkCell >= roadLength) throw invalidInput_error("The index of a sink ist greater than the roadLength.");
diff --git a/src/Traffic/RoadNetwork/RoadMaker.h b/src/Traffic/RoadNetwork/RoadMaker.h
index 52569b745a50cc413750bc2a0f10a7e1700aa22a..5029d922b7963e432d9ead25c51aa9cd29475451 100644
--- a/src/Traffic/RoadNetwork/RoadMaker.h
+++ b/src/Traffic/RoadNetwork/RoadMaker.h
@@ -1,8 +1,10 @@
  #pragma once
 #include <random>
+
 #include "RoadNetworkData.h"
+
 #include "Utilities/RandomHelper.h"
-#include <VirtualFluidsDefinitions.h>
+
 
 struct VF_PUBLIC RoadMaker :
 	public RoadNetworkData
diff --git a/src/Traffic/RoadNetwork/RoadNetworkData.h b/src/Traffic/RoadNetwork/RoadNetworkData.h
index c744b08bda928b3775067a284ed7dcd4138b9978..1a19822bf4d1d303a262abdbc77809d46880011a 100644
--- a/src/Traffic/RoadNetwork/RoadNetworkData.h
+++ b/src/Traffic/RoadNetwork/RoadNetworkData.h
@@ -2,11 +2,9 @@
 #include <memory>
 #include <vector>
 
-#include "Utilities/VectorHelper.h"
-#include "Utilities/invalidInput_error.h"
-
 #include <VirtualFluidsDefinitions.h>
 
+
 #include "Source/Source.h"
 #include "Sink/Sink.h"
 #include "Junction/Junction.h"
diff --git a/src/Traffic/Sink/Sink.h b/src/Traffic/Sink/Sink.h
index ce75f248afce93b217a80b079ab42ac1fbe18bac..4954b40eb6992b45f2b35d6b7f2369426ed63680 100644
--- a/src/Traffic/Sink/Sink.h
+++ b/src/Traffic/Sink/Sink.h
@@ -1,7 +1,6 @@
 #pragma once
 
 #include "SinkData.h"
-#include <VirtualFluidsDefinitions.h>
 
 class VF_PUBLIC Sink
 {
diff --git a/src/Traffic/Sink/SinkData.h b/src/Traffic/Sink/SinkData.h
index 08f4c633c8d6c40ff0e3a21c47ef369be49debfa..fe573691cfc78af999b6efc8a817df3c0ebfb311 100644
--- a/src/Traffic/Sink/SinkData.h
+++ b/src/Traffic/Sink/SinkData.h
@@ -1,7 +1,5 @@
 #pragma once
 
-#include <memory>
-#include <vector>
 #include <VirtualFluidsDefinitions.h>
 #include "Core/DataTypes.h"
 
diff --git a/src/Traffic/Sink/SinkRandom.cpp b/src/Traffic/Sink/SinkRandom.cpp
index 2d7894104d1324be8e5d63928a668cadd4909407..63a792ac2dc7f2a03d78852e43de68c563ff19eb 100644
--- a/src/Traffic/Sink/SinkRandom.cpp
+++ b/src/Traffic/Sink/SinkRandom.cpp
@@ -1,6 +1,6 @@
 #include "SinkRandom.h"
 
-
+#include "Utilities/invalidInput_error.h"
 
 SinkRandom::SinkRandom(uint sinkIndex, real sinkBlockedPossibility)
 {
diff --git a/src/Traffic/Sink/SinkRandom.h b/src/Traffic/Sink/SinkRandom.h
index bbb5399529b4008f066b5ab8b288d14403af5999..ed7426103b034f2e5f1549e169844897c0abadf0 100644
--- a/src/Traffic/Sink/SinkRandom.h
+++ b/src/Traffic/Sink/SinkRandom.h
@@ -1,13 +1,11 @@
 #pragma once
 
-#include <VirtualFluidsDefinitions.h>
-
 #include <iostream>
 #include <random>
 
-#include "Utilities/RandomHelper.h"
 #include "Sink.h"
-#include "Utilities/invalidInput_error.h"
+
+#include "Utilities/RandomHelper.h"
 
 class VF_PUBLIC SinkRandom:
 	public Sink
diff --git a/src/Traffic/TrafficMovement.cpp b/src/Traffic/TrafficMovement.cpp
index 7a5beff95b852671563e6f3f328d218ab7140152..47f046157792216770bb89b06d92707ee302243a 100644
--- a/src/Traffic/TrafficMovement.cpp
+++ b/src/Traffic/TrafficMovement.cpp
@@ -1,5 +1,13 @@
 #include "TrafficMovement.h"
 
+#include <iostream>
+#include <stdexcept>
+
+#include "Utilities/invalidInput_error.h"
+#include "Utilities/VectorHelper.h"
+#include "Utilities/RandomHelper.h"
+#include "Output/ConcentrationOutwriter.h"
+#include "Output/CarDisplay.h"
 
 TrafficMovement::TrafficMovement(std::unique_ptr<RoadNetworkData> road, const real dawdlePossibility)
 {
diff --git a/src/Traffic/TrafficMovement.h b/src/Traffic/TrafficMovement.h
index 8551fa74cd843aa814add5570826dcb66b42f60b..f3f9a354d5c8902e3ade4c5e908905789b5c9172 100644
--- a/src/Traffic/TrafficMovement.h
+++ b/src/Traffic/TrafficMovement.h
@@ -1,22 +1,18 @@
 #pragma once
-#include <VirtualFluidsDefinitions.h>
-
-#include <iostream>
 
 #include <vector>
 #include <random> 
 #include <memory>
-#include <stdexcept>
 
-#include "Utilities/invalidInput_error.h"
-#include "Utilities/VectorHelper.h"
-#include "Utilities/RandomHelper.h"
+#include <VirtualFluidsDefinitions.h>
+#include "Core/DataTypes.h"
+
 #include "RoadNetwork/RoadNetworkData.h"
-#include "Output/ConcentrationOutwriter.h"
-#include "Output/CarDisplay.h"
 
+class ConcentrationOutwriter;
+class CarDisplay;
 
-class VF_PUBLIC TrafficMovement 
+class VF_PUBLIC TrafficMovement
 {
 public:
 	TrafficMovement(std::unique_ptr<RoadNetworkData> road, const real dawdlePossibility);
@@ -90,7 +86,7 @@ private:
 
 	std::vector<int> *pcurrent;
 	std::vector<int> *pnext;
-	std::vector<int> *pdummy; 
+	std::vector<int> *pdummy;
 
 	real dawdlePossibility;
 
diff --git a/src/Traffic/TrafficMovementFactory.cpp b/src/Traffic/TrafficMovementFactory.cpp
index 9c61a149630c4e83d458c21f9fecd159ec51980b..5c0f71378b39038a7f85ed8257ea65455369b171 100644
--- a/src/Traffic/TrafficMovementFactory.cpp
+++ b/src/Traffic/TrafficMovementFactory.cpp
@@ -1,7 +1,7 @@
 #include "TrafficMovementFactory.h"
 
+#include <iostream>
 
-//#include "GridGenerator/StreetPointFinder/StreetPointFinder.h"
 #include "GridGenerator/StreetPointFinder/JunctionReader.h"
 #include "GridGenerator/StreetPointFinder/SourceReader.h"
 #include "GridGenerator/StreetPointFinder/SinkReader.h"
@@ -13,13 +13,14 @@
 #include "Sink/SinkRandom.h"
 #include "Output/ConcentrationByPosition.h"
 #include "Output/ConcBySpeedAndAcceleration.h"
+#include "Utilities/safe_casting.h"
 
 
 TrafficMovementFactory::TrafficMovementFactory()
 {
 }
 
-void TrafficMovementFactory::initTrafficMovement(real * pconcArrayStart, uint concArraySize)
+void TrafficMovementFactory::initTrafficMovement(real * pconcArrayStart)
 {
 	//Variables
 
@@ -47,7 +48,7 @@ void TrafficMovementFactory::initTrafficMovement(real * pconcArrayStart, uint co
 
 	//calculate RoadLength
 	uint roadLength = 0;
-	uint numberOfStreets = finder.streets.size();
+	uint numberOfStreets = castSizeT_Uint(finder.streets.size());
 	for (uint i = 0; i < numberOfStreets; i++) {
 		roadLength += finder.streets[i].numberOfCells;
 	}
@@ -86,8 +87,7 @@ void TrafficMovementFactory::initTrafficMovement(real * pconcArrayStart, uint co
 
 
 	//init ConcentrationOutwriter
-	std::unique_ptr<ConcentrationOutwriter> writer = std::make_unique<ConcBySpeedAndAcceleration>(ConcBySpeedAndAcceleration(simulator->getRoadLength(), simulator->getMaxVelocity()));
-	//std::unique_ptr<ConcentrationOutwriter> writer = std::make_unique<ConcentrationByPosition>(ConcentrationByPosition(simulator->getRoadLength()), pconcArrayStart, concArraySize);
+	std::unique_ptr<ConcentrationOutwriter> writer = std::make_unique<ConcBySpeedAndAcceleration>(ConcBySpeedAndAcceleration(simulator->getRoadLength(), pconcArrayStart));
 	simulator->setConcentrationOutwriter(move(writer));
 
 	//prepare writing to vtk
@@ -99,9 +99,9 @@ void TrafficMovementFactory::initTrafficMovement(real * pconcArrayStart, uint co
 
 }
 
-void TrafficMovementFactory::calculateTimestep(uint step)
+void TrafficMovementFactory::calculateTimestep(uint step, uint stepForVTK)
 {
 	simulator->calculateTimestep(step);
 	simulator->visualizeVehicleLengthForVTK();
-	finder.writeVTK(outputPath + outputFilename + "_" + std::to_string(step) + ".vtk", *cars);
+	finder.writeVTK(outputPath + outputFilename + "_" + std::to_string(stepForVTK) + ".vtk", *cars);
 }
\ No newline at end of file
diff --git a/src/Traffic/TrafficMovementFactory.h b/src/Traffic/TrafficMovementFactory.h
index 622276364e9455ddcb82cabd16dde4a7510c955a..4db4d0104fce089c14dbca322ddc4a88c4912056 100644
--- a/src/Traffic/TrafficMovementFactory.h
+++ b/src/Traffic/TrafficMovementFactory.h
@@ -1,7 +1,6 @@
 # pragma once
 //#include <VirtualFluidsDefinitions.h>
 
-#include <iostream>
 #include <vector>
 #include <memory>
 
@@ -15,8 +14,8 @@ class VF_PUBLIC TrafficMovementFactory {
 public:
 	TrafficMovementFactory();
 	~TrafficMovementFactory() {};
-	void initTrafficMovement(real * pconcArrayStart = nullptr, uint concArraySize = 0);
-	void calculateTimestep(uint step);
+	void initTrafficMovement(real * pconcArrayStart = nullptr);
+	void calculateTimestep(uint step, uint stepForVTK);
 
 
 private:
diff --git a/src/Traffic/Utilities/VectorHelper.h b/src/Traffic/Utilities/VectorHelper.h
index bda0acf9edcaba1193b6ba22dc465ffdafe8848c..21161e670f70bbe0be69c9ae39000916359afa73 100644
--- a/src/Traffic/Utilities/VectorHelper.h
+++ b/src/Traffic/Utilities/VectorHelper.h
@@ -1,13 +1,13 @@
 #pragma once
-#include <VirtualFluidsDefinitions.h>
-#include "Core/DataTypes.h"
-
 #include <vector>
 #include <iostream>
 
 #include <windows.h> //for colourful console output
 #include <iomanip>	//formatting output streams
 
+#include <VirtualFluidsDefinitions.h>
+#include "Core/DataTypes.h"
+
 class VF_PUBLIC VectorHelper
 {
 public:
diff --git a/src/Traffic/Utilities/safe_casting.h b/src/Traffic/Utilities/safe_casting.h
new file mode 100644
index 0000000000000000000000000000000000000000..1e921f9df4751efd9813eeef270a40a6e6671650
--- /dev/null
+++ b/src/Traffic/Utilities/safe_casting.h
@@ -0,0 +1,21 @@
+#pragma once
+
+#include <stdexcept>
+#include "Core/DataTypes.h"
+
+
+static uint castSizeT_Uint(size_t number) {
+	if (number > UINT_MAX)
+	{
+		throw std::overflow_error("number is larger than UINT_MAX");
+	}
+	return static_cast<uint>(number);
+}
+
+static int castSizeT_Int(size_t number) {
+	if (number > INT_MAX)
+	{
+		throw std::overflow_error("number is larger than INT_MAX");
+	}
+	return static_cast<uint>(number);
+}
\ No newline at end of file
diff --git a/src/VirtualFluids_GPU/LBM/Simulation.cpp b/src/VirtualFluids_GPU/LBM/Simulation.cpp
index b163b32f5a3c94b1b6609c7f4b64c4937de35f3f..85de964767a3d2e436556ed79054e771ceaacff7 100644
--- a/src/VirtualFluids_GPU/LBM/Simulation.cpp
+++ b/src/VirtualFluids_GPU/LBM/Simulation.cpp
@@ -63,6 +63,8 @@
 #include "Output/DataWriter.h"
 #include "Kernel/KernelFactory/KernelFactory.h"
 #include "Kernel/Kernel.h"
+//////////////////////////////////////////////////////////////////////////
+#include "Traffic/TrafficMovementFactory.h"
 
 Simulation::Simulation()
 {
@@ -172,6 +174,11 @@ void Simulation::init(SPtr<Parameter> para, SPtr<GridProvider> gridProvider, std
    ////////////////////////////////////////////////////////////////////////////
 
 
+   //////////////////////////////////////////////////////////////////////////
+   //Init Traffic by Anna
+   //////////////////////////////////////////////////////////////////////////
+   factory = new TrafficMovementFactory();
+   factory->initTrafficMovement(/*para->getParH(0)->c*/);
 
 
    //////////////////////////////////////////////////////////////////////////
@@ -1057,6 +1064,11 @@ void Simulation::run()
       //         //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
 
+			  ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+				//Calculate Traffic by Anna
+				if (t % 100 == 0)
+					factory->calculateTimestep(t/100, t);
+			  ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
 			   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 			   ////// comp
@@ -1086,7 +1098,7 @@ void Simulation::run()
                QADDirichletDev27( para->getParD(0)->numberofthreads,      para->getParD(0)->nx,					para->getParD(0)->ny,
 								  para->getParD(0)->d0SP.f[0],            para->getParD(0)->d27.f[0],			para->getParD(0)->TempVel.tempPulse,  
 								  para->getParD(0)->diffusivity,          para->getParD(0)->concIndex,			para->getParD(0)->QGeom.q27[0], 
-								  para->getParD(0)->numberOfPointsConc,   para->getParD(0)->numberOfPointsConc, para->getParD(0)->omega,
+								  para->getParD(0)->QGeom.kQ,             para->getParD(0)->numberOfPointsConc, para->getParD(0)->omega,
 								  para->getParD(0)->neighborX_SP,         para->getParD(0)->neighborY_SP,		para->getParD(0)->neighborZ_SP,
 								  para->getParD(0)->size_Mat_SP,          para->getParD(0)->evenOrOdd);
                getLastCudaError("QADDirichletDev27 execution failed");
diff --git a/src/VirtualFluids_GPU/LBM/Simulation.h b/src/VirtualFluids_GPU/LBM/Simulation.h
index e5345fe2af137b480a02255990b73fb86826969f..73e350a5b17e27e8b2f7609cb6bfcb824b47f5b7 100644
--- a/src/VirtualFluids_GPU/LBM/Simulation.h
+++ b/src/VirtualFluids_GPU/LBM/Simulation.h
@@ -21,6 +21,7 @@ class RestartPostprocessor;
 class ForceCalculations;
 class DataWriter;
 class Kernel;
+class TrafficMovementFactory;
 
 
 class VF_PUBLIC Simulation
@@ -89,6 +90,7 @@ protected:
 	////////////////////////////////////////////////////////////////////////////
 	EnstrophyAnalyzer *enstrophyWriter;
 	////////////////////////////////////////////////////////////////////////////
+	TrafficMovementFactory *factory;
 
  };
 #endif
diff --git a/targets/apps/LBM/TrafficTest/TrafficTest.cpp b/targets/apps/LBM/TrafficTest/TrafficTest.cpp
index 3369ed6b6cde7aa5f77945fbe34d24d07ec89170..cf974aa7a2bc0eb42fc272b0629906ba4ac609df 100644
--- a/targets/apps/LBM/TrafficTest/TrafficTest.cpp
+++ b/targets/apps/LBM/TrafficTest/TrafficTest.cpp
@@ -12,21 +12,21 @@
 
 int main()
 {
-		uint numberOfTimesteps = 50;
+		uint numberOfTimesteps = 5;
 
 
 		//Logger
+		logging::Logger::addStream(&std::cout);
+		logging::Logger::setDebugLevel(logging::Logger::Level::INFO_LOW);
+		logging::Logger::timeStamp(logging::Logger::ENABLE);
+		logging::Logger::enablePrintedRankNumbers(logging::Logger::ENABLE);
 
-		//logging::Logger::addStream(&std::cout);
-		//logging::Logger::setDebugLevel(logging::Logger::Level::INFO_LOW);
-		//logging::Logger::timeStamp(logging::Logger::ENABLE);
-		//logging::Logger::enablePrintedRankNumbers(logging::Logger::ENABLE);
 
 		TrafficMovementFactory factory = TrafficMovementFactory();
 		factory.initTrafficMovement();
 
 		for (uint step = 1; step <= numberOfTimesteps; step++) {
-			factory.calculateTimestep(step);
+			factory.calculateTimestep(step,step);
 		}
 
 		std::cout << std::endl << std::endl;
diff --git a/targets/libs/VirtualFluids_GPU/CMakeLists.txt b/targets/libs/VirtualFluids_GPU/CMakeLists.txt
index 0a5661ab452449c08f2510c555c551fed39967f2..c350a2be2fef02cd87dc3d0db31c4aec6223f107 100644
--- a/targets/libs/VirtualFluids_GPU/CMakeLists.txt
+++ b/targets/libs/VirtualFluids_GPU/CMakeLists.txt
@@ -3,16 +3,18 @@ setTargetNameToFolderName(${CMAKE_CURRENT_LIST_DIR})
 set(linkDirectories "")
 
 IF(MSVC)
-  set(libsToLink ws2_32 GridGenerator VirtualFluidsBasics Core) # ws_32 throws an error on Phoenix
+  set(libsToLink ws2_32 GridGenerator VirtualFluidsBasics Core Traffic) # ws_32 throws an error on Phoenix
 ELSE(MSVC)
-  set(libsToLink GridGenerator VirtualFluidsBasics Core)
+  set(libsToLink GridGenerator VirtualFluidsBasics Core Traffic)
 ENDIF(MSVC)
 
 set(includeDirectories ${CMAKE_SOURCE_DIR}/src/${targetName}
                        ${CMAKE_SOURCE_DIR}/src
                        ${CMAKE_SOURCE_DIR}/src/GridGenerator
                        ${CMAKE_SOURCE_DIR}/src/VirtualFluidsBasics
-                       ${CMAKE_SOURCE_DIR}/src/Core )
+                       ${CMAKE_SOURCE_DIR}/src/Core 
+					   ${CMAKE_SOURCE_DIR}/src/Traffic 
+					   )
 
 #glob files and save in MY_SRCS
 include(CMakePackage.cmake)