diff --git a/CMakeLists.txt b/CMakeLists.txt
index bb879ae5903e582e32e8444c35cb843384ddce74..5847810bd2f1014492401bd83e3ff213fc5ce582 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -21,7 +21,7 @@ if (NOT CMAKE_BUILD_TYPE)
     set (CMAKE_BUILD_TYPE RELEASE CACHE STRING
          "Choose the type of build, options are: None Debug Release."
          FORCE)
-#elseif("CMAKE_BUILD_TYPE" STREQUAL "Debug")
+elseif("CMAKE_BUILD_TYPE" STREQUAL "Debug")
     #TODO rewrite to use add_compile_definitions
 endif (NOT CMAKE_BUILD_TYPE)
 
@@ -39,15 +39,15 @@ endif()
 set(CMAKE_CXX_STANDARD 17)
 
 #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}" )
-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mbig-obj")
+
 if( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel" )
     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -xHost" )
-elseif( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC" )
+elseif( "${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC" ) 
     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W0 /bigobj")
     add_compile_options("/D _SCL_SECURE_NO_WARNINGS")
     add_compile_options("/D_CRT_SECURE_NO_WARNINGS")
-#elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MINGW")
-#    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mbig-obj")
+elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MINGW")
+    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mbig-obj")
 else()
     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
 endif()
@@ -71,9 +71,9 @@ set(Boost_DEBUG ON)
 find_package(
     Boost
 
-    COMPONENTS
-        system
-        serialization
+    COMPONENTS 
+        system 
+        serialization 
         random
 )
 
@@ -127,5 +127,4 @@ if("${BUILD_LIB}" STREQUAL "no")
 
 endif()
 
-add_subdirectory(${SRC_DIR} ${PROJECT_BINARY_DIR})
-message("first cmake done")
+add_subdirectory(${SRC_DIR} ${PROJECT_BINARY_DIR})
\ No newline at end of file
diff --git a/build.bat b/build.bat
index ef30bdbb252c74569412e11dc83fd85e68ecbb98..afdd8fd32a6364578630880d145aedee4d867a98 100644
--- a/build.bat
+++ b/build.bat
@@ -5,7 +5,7 @@ set CLEAN_AFTER=no
 call clean.bat
 
 cd build_scripts\windows
-call win_download_dependencies
+
 set DEPENDENCIES_LINK_TYPE=static
 call win_VS_build_x64_debug.bat
 cd ..\..
diff --git a/build_scripts/windows/win_VS_build_x64_debug.bat b/build_scripts/windows/win_VS_build_x64_debug.bat
index 0ee776a497f70126e16c5f59d7e16691d6181172..21cd7c8d931386a211e54c34c14fe2132457acd0 100644
--- a/build_scripts/windows/win_VS_build_x64_debug.bat
+++ b/build_scripts/windows/win_VS_build_x64_debug.bat
@@ -9,9 +9,17 @@ set "BUILD_TESTS="
 set "BUILD_LIB="
 set "BUILD_SOMETHING="
 set "BUILD_SOMETHING_LIB="
+set "BOOST_ROOT="
+set "LIB4NEURO_INCLUDE_DIR="
+set "MAKEFILE_GENERATOR="
+set "LINK_TYPE="
+set "CLEAN_AF="
 
 rem call VsDevCmd.bat
 
+set BOOST_ROOT=%cd%..\..\external_dependencies\boost
+set LIB4NEURO_INCLUDE_DIR=%cd%..\..\include
+
 rem Should we rebuild BOOST? (yes/no)
 set REBUILD_BOOST=no
 
@@ -21,11 +29,21 @@ set BUILD_EXAMPLES=yes
 rem Should we build the unit-tests? (yes/no)
 set BUILD_TESTS=yes
 
-rem Should we build the lib4neuro library? (yes)
+rem Should we build the lib4neuro library? (yes/no)
 set BUILD_LIB=yes
 
 rem **********************DO NOT CHANGE BEYOND THIS LINE****************************************
 
+set LINK_TYPE=static
+IF "%DEPENDENCIES_LINK_TYPE%" == "shared" (
+	set LINK_TYPE=shared
+)
+
+set CLEAN_AF=yes
+IF "%CLEAN_AFTER%"=="no" (
+	set CLEAN_AF=no
+)
+
 set BUILD_SOMETHING=no
 set BUILD_SOMETHING_LIB=no
 
@@ -35,18 +53,21 @@ IF "%BUILD_LIB%"=="yes" (
     echo Lib4neuro will be built in 'build\lib\'
 	set BUILD_SOMETHING=yes
 	set BUILD_SOMETHING_LIB=yes
+	call win_clean_lib.bat
 )
 
 IF "%BUILD_TESTS%"=="yes" (
     echo Lib4neuro unit tests will be built in 'build\unit-tests'
 	set BUILD_SOMETHING=yes
 	set BUILD_SOMETHING_LIB=yes
+	call win_clean_tests.bat
 )
 
 IF "%BUILD_EXAMPLES%"=="yes" (
     echo Lib4neuro examples will be built in 'build\examples'
 	set BUILD_SOMETHING=yes
 	set BUILD_SOMETHING_LIB=yes
+	call win_clean_examples.bat
 )
 
 IF "%REBUILD_BOOST%"=="yes" (
@@ -69,88 +90,48 @@ IF "%REBUILD_BOOST%"=="yes" (
 
 	cd external_dependencies\boost
 
-    echo "DEPENDENCIES_LINK_TYPE %DEPENDENCIES_LINK_TYPE%"
-	
-    .\b2 --layout=system variant=debug link=static address-model=64 --with-system --with-serialization --with-random || exit 1
+   .\b2 --layout=system variant=debug link=%LINK_TYPE% address-model=64 --with-system --with-serialization --with-random || goto error_occured_boost
 
 	cd ..\..\build_scripts\windows
-
-    echo "LIBRARIES BOOST:"
-    dir ..\..\external_dependencies\boost\stage\lib
-
 )
 
 IF "%BUILD_SOMETHING_LIB%"=="yes" (
-	
-	IF "%BUILD_LIB%"=="yes" (
-		call win_clean_lib.bat
-	)
-
-	IF "%BUILD_EXAMPLES%"=="yes" (
-		call win_clean_examples.bat
-	)
-	
-	IF "%BUILD_TESTS%"=="yes" (
-		call win_clean_tests.bat
-	)
-	
-	title Building the 'lib4neuro' project for Debug (preparing makefiles)
+	title Building the 'lib4neuro' project for Debug [preparing makefiles]
 	
 	rem C++ compiler (Requires Visual Studio 2017)
 	set CXX_COMPILER=cl
 	set C_COMPILER=cl
 
 	set MAKEFILE_GENERATOR="Visual Studio 15 2017 Win64"
-
-	cd ..\..
-	cmake -G "Visual Studio 15 2017 Win64" -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_COMPILER=%CXX_COMPILER% -DCMAKE_C_COMPILER=%C_COMPILER% -DBOOST_LIBRARYDIR=%BOOST_LIBRARYDIR% -DBOOST_INCLUDEDIR=%BOOST_INCLUDEDIR% -DBUILD_TESTS=%BUILD_TESTS% -DBUILD_EXAMPLES=%BUILD_EXAMPLES% -DBUILD_LIB=%BUILD_LIB% -DLIB4NEURO_DIR=build\lib -DDEPENDENCIES_LINK_TYPE=static . || exit 1
 	
-	title Building the 'lib4neuro' project for Debug (building)
-	(cmake --build .) && (echo "Build complete.") || exit 1
+	cd ..\..
+	cmake -G "Visual Studio 15 2017 Win64" -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_COMPILER=%CXX_COMPILER% -DCMAKE_C_COMPILER=%C_COMPILER% -DBOOST_ROOT=%BOOST_ROOT% -DBOOST_LIBRARYDIR=%BOOST_LIBRARYDIR% -DBOOST_INCLUDEDIR=%BOOST_INCLUDEDIR% -DBUILD_TESTS=%BUILD_TESTS% -DBUILD_EXAMPLES=%BUILD_EXAMPLES% -DBUILD_LIB=%BUILD_LIB% -DLIB4NEURO_DIR=build\lib -DDEPENDENCIES_LINK_TYPE=%LINK_TYPE% -DLIB4NEURO_INCLUDE_DIR=%LIB4NEURO_INCLUDE_DIR% . || goto error_occured_lib
+	title Building the 'lib4neuro' project for Debug [building]
+	cmake --build . --config Debug && echo "Build complete." || goto error_occured_lib
 
 	cd build_scripts\windows
-	
-	IF "%BUILD_LIB%"=="yes" (
-		cd ..\..
-		
-		rem Moving LIB files around to have a neater structure
-		xcopy /y build\bin\Debug\lib4neuro.dll build\lib 2>NUL
-		xcopy /y build\lib\Debug\lib4neuro.lib build\lib 2>NUL
-
-		rmdir /s /q "build\lib\Debug" 2> NUL
-		rmdir /s /q "build\libboost_unit_test.dir" 2> NUL
-		
-		cd build_scripts\windows
-	)
-
-	IF "%BUILD_EXAMPLES%"=="yes" (
-		cd ..\..
-		
-		rem Moving EXAMPLE files around to have a neater structure
-		mkdir build\tmp
-		xcopy /y build\examples\bin\Debug\*.exe build\tmp 2>NUL
-		rmdir /s /q "build\examples" 2> NUL
-		move build\tmp build\examples
-		
-		xcopy /y build\lib\*.dll build\examples 2>NUL
-		
-		cd build_scripts\windows
-	)
-	
-	IF "%BUILD_TESTS%"=="yes" (
-		cd ..\..
-		
-		rem Moving EXAMPLE files around to have a neater structure
-		mkdir build\tmp
-		xcopy /y build\unit-tests\bin\Debug\*.exe build\tmp 2>NUL
-		rmdir /s /q "build\unit-tests" 2> NUL
-		move build\tmp build\unit-tests
-
-		xcopy /y build\lib\*.dll build\unit-tests 2>NUL
-		
-		cd build_scripts\windows
-	)
-	
-	call win_clean_garbage.bat
 )
+goto final_goto
+
+:error_occured_lib
+cd build_scripts\windows
+goto final_goto_error
+
+:error_occured_boost
+cd ..\..\build_scripts\windows
+goto final_goto_error
+
+
+:final_goto_error
+IF "%CLEAN_AF%"=="yes" IF "%BUILD_LIB%"=="yes" call win_clean_after_lib.bat
+IF "%CLEAN_AF%"=="yes" IF "%BUILD_EXAMPLES%"=="yes" call win_clean_after_examples.bat
+IF "%CLEAN_AF%"=="yes" IF "%BUILD_TESTS%"=="yes" call win_clean_after_tests.bat
+IF "%CLEAN_AF%"=="yes" IF "%BUILD_SOMETHING_LIB%"=="yes"  call win_clean_garbage.bat
+exit 1
+
 
+:final_goto
+IF "%CLEAN_AF%"=="yes" IF "%BUILD_LIB%"=="yes" call win_clean_after_lib.bat
+IF "%CLEAN_AF%"=="yes" IF "%BUILD_EXAMPLES%"=="yes" call win_clean_after_examples.bat
+IF "%CLEAN_AF%"=="yes" IF "%BUILD_TESTS%"=="yes" call win_clean_after_tests.bat
+IF "%CLEAN_AF%"=="yes" IF "%BUILD_SOMETHING_LIB%"=="yes"  call win_clean_garbage.bat
\ No newline at end of file
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index f8b8677e3721ac487e3f43379619aa53ba167124..3cb39aff25e574c1f7f7274f2ea128bbbe2d885b 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -1,6 +1,4 @@
 
-message("second cmake done")
-
 if ("${BUILD_TESTS}" STREQUAL "yes")
 	add_subdirectory(tests unit-tests)
 endif ()
@@ -37,15 +35,15 @@ if ("${BUILD_LIB}" STREQUAL "yes")
 	add_library(lib4neuro SHARED
 		Neuron/Neuron.cpp
 		Neuron/NeuronBinary.cpp
-        	Neuron/NeuronConstant.cpp
+		Neuron/NeuronConstant.cpp
 		Neuron/NeuronLinear.cpp
 		Neuron/NeuronLogistic.cpp        
 		Network/NeuralNetwork.cpp        
 		Network/NeuralNetworkSum.cpp        
 		NetConnection/ConnectionFunctionGeneral.cpp        
 		NetConnection/ConnectionFunctionIdentity.cpp        
-        	LearningMethods/ParticleSwarm.cpp
-        	LearningMethods/GradientDescent.cpp
+        LearningMethods/ParticleSwarm.cpp
+        LearningMethods/GradientDescent.cpp
 		DataSet/DataSet.cpp
 		ErrorFunction/ErrorFunctions.cpp
 		Solvers/DESolver.cpp
@@ -101,4 +99,3 @@ if ("${BUILD_LIB}" STREQUAL "yes")
     )
 
 endif ()
-
diff --git a/src/tests/Particle_test.cpp b/src/tests/Particle_test.cpp
index bcd3a1ce039810f2f34ba76c3f146b62cf4420ee..e59d075a4c131cc9312e48614fab240406b4c380 100644
--- a/src/tests/Particle_test.cpp
+++ b/src/tests/Particle_test.cpp
@@ -47,7 +47,6 @@ BOOST_AUTO_TEST_CASE(Particle_construction_test) {
         MOCK_EXPECT(error.get_dimension).once().returns(5);
         MOCK_EXPECT(error.eval).once().returns(0.8);
         BOOST_CHECK_NO_THROW(Particle(&error, &domain_bound));
-        mock::verify( error );
 }
 
 BOOST_AUTO_TEST_CASE(Particle_get_coordinate_test) {
@@ -61,7 +60,17 @@ BOOST_AUTO_TEST_CASE(Particle_get_coordinate_test) {
         Particle particle2(&error, &domain_bound);
 
         BOOST_CHECK(*particle1.get_coordinate() != *particle2.get_coordinate());
-        mock::verify( error );
+}
+
+BOOST_AUTO_TEST_CASE(Particle_get_optimal_value_test) {
+        std::vector<double> domain_bound{1, 2, 3, 4, 5};
+        mock_Error error;
+
+        MOCK_EXPECT(error.get_dimension).returns(5);
+        MOCK_EXPECT(error.eval).returns(0.8);
+
+        Particle particle1(&error, &domain_bound);
+        BOOST_CHECK_EQUAL(0.8, particle1.get_optimal_value());
 }
 
 //Random