diff --git a/CMakeLists.txt b/CMakeLists.txt
index cf2f298164628566da23532b8339f2313ac57dab..50986d0a927c0d890d300be952a458f552bb0ed8 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -4,23 +4,35 @@ cmake_minimum_required(VERSION 2.6)
 # Project name
 project( OGS-6 )
 
-# Set cmake module path 
+# Set cmake module path
 SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH}
   "${CMAKE_SOURCE_DIR}/scripts/cmake/cmake"
   "${CMAKE_SOURCE_DIR}/scripts/cmake")
 
-# Set cmake module path 
-#SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/CMakeConfiguration")
+INCLUDE(GetCompilerInfoString)
+
+# Finds
+FIND_PACKAGE(OpenMP)
+IF(OPENMP_FOUND)
+	SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
+	SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
+ENDIF()
 
 ### For GNU C/CXX
 IF(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_GNUCC)
+		get_gcc_version(GCC_VERSION)
         IF( NOT CMAKE_BUILD_TYPE STREQUAL "Debug" )
                 MESSAGE(STATUS "Set GCC release flags")
-                SET(CMAKE_CXX_FLAGS "-O3 -march=native -mtune=native -msse4.2 -DNDEBUG")
+				IF(APPLE AND GCC_VERSION VERSION_LESS "4.3" AND NOT "${CMAKE_GENERATOR}" STREQUAL "Xcode" )
+					# -march=native does not work here when on normal gcc compiler
+					# see http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33144
+					SET(CMAKE_CXX_FLAGS "-O3 -mtune=native -msse4.2 -DNDEBUG")
+				ELSE()
+                	SET(CMAKE_CXX_FLAGS "-O3 -march=native -mtune=native -msse4.2 -DNDEBUG")
+				ENDIF()
         ENDIF()
         # -g
         SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated -Wall -Wextra -fno-nonansi-builtins")
-        SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp")
         ADD_DEFINITIONS(
                 -DGCC
         )
diff --git a/MathLib/LinAlg/Solvers/CGParallel.cpp b/MathLib/LinAlg/Solvers/CGParallel.cpp
index c752961e30d9b2aaebc671dfe508f6cb0aebdbcb..bdfa4cfb32ca3967c03b9ca0b115ab1ea66b0b7c 100644
--- a/MathLib/LinAlg/Solvers/CGParallel.cpp
+++ b/MathLib/LinAlg/Solvers/CGParallel.cpp
@@ -7,7 +7,9 @@
 
 #include <limits>
 
+#ifdef _OPENMP
 #include <omp.h>
+#endif
 
 #include "MathTools.h"
 #include "blas.h"
diff --git a/MathLib/LinAlg/Sparse/CRSMatrixDiagPrecond.h b/MathLib/LinAlg/Sparse/CRSMatrixDiagPrecond.h
index 51982a1f93e9d1b8525cd4bc5c30f8172be5156e..cce05d48ad6da4df17c730bcc5fc388472f5b4cc 100644
--- a/MathLib/LinAlg/Sparse/CRSMatrixDiagPrecond.h
+++ b/MathLib/LinAlg/Sparse/CRSMatrixDiagPrecond.h
@@ -1,7 +1,9 @@
 #ifndef CRSMATRIXDIAGPRECOND_H
 #define CRSMATRIXDIAGPRECOND_H
 
-//#include <omp.h>
+#ifdef _OPENMP
+#include <omp.h>
+#endif
 
 #include "CRSMatrix.h"
 #include "sparse.h"
diff --git a/MathLib/LinAlg/Sparse/amuxCRS.cpp b/MathLib/LinAlg/Sparse/amuxCRS.cpp
index 99c77eafc6705704bb23b3a8035ea9a7d9fa540a..04a7528e87807bab1288429e78adacd1774ccf81 100644
--- a/MathLib/LinAlg/Sparse/amuxCRS.cpp
+++ b/MathLib/LinAlg/Sparse/amuxCRS.cpp
@@ -7,7 +7,9 @@
 
 #include "amuxCRS.h"
 #include <cstddef>
+#ifdef _OPENMP
 #include <omp.h>
+#endif
 #ifdef HAVE_PTHREADS
 #include <pthread.h>
 #endif
diff --git a/MathLib/MathTools.h b/MathLib/MathTools.h
index 4a9d2b804f9272a0c531be13973088508f023d34..ea6109150ae3bd4970c703f83c3dc57be3b9eaff 100644
--- a/MathLib/MathTools.h
+++ b/MathLib/MathTools.h
@@ -12,7 +12,9 @@
 #include <cmath>
 #include <limits>
 
+#ifdef _OPENMP
 #include <omp.h>
+#endif
 
 #include "Point.h"
 
diff --git a/SimpleTests/MatrixTests/MatMult.cpp b/SimpleTests/MatrixTests/MatMult.cpp
index 62c76e74d84b0888a961b29b004d6091e23b3270..6266c0365f2048345493b7d7e466fb38bbdb8121 100644
--- a/SimpleTests/MatrixTests/MatMult.cpp
+++ b/SimpleTests/MatrixTests/MatMult.cpp
@@ -2,7 +2,6 @@
 #include <iostream>
 #include <cmath>
 #include <limits>
-#include <omp.h>
 #include <cstdlib>
 #include "sparse.h"
 #include "LinAlg/Sparse/CRSMatrix.h"
@@ -11,6 +10,10 @@
 #include "RunTimeTimer.h"
 #include "CPUTimeTimer.h"
 
+#ifdef _OPENMP
+#include <omp.h>
+#endif
+
 int main(int argc, char *argv[])
 {
 	if (argc < 4) {
diff --git a/SimpleTests/SolverTests/BiCGStabDiagPrecond.cpp b/SimpleTests/SolverTests/BiCGStabDiagPrecond.cpp
index 5bdd39217dd510daf5bf18265d41c98c183d0cc1..43cf9cc247f70d2e023cde62af3239f7c495f869 100644
--- a/SimpleTests/SolverTests/BiCGStabDiagPrecond.cpp
+++ b/SimpleTests/SolverTests/BiCGStabDiagPrecond.cpp
@@ -2,7 +2,6 @@
 #include <iostream>
 #include <cmath>
 #include <cstdlib>
-#include <omp.h>
 #include "LinAlg/Solvers/BiCGStab.h"
 #include "LinAlg/Sparse/CRSMatrixDiagPrecond.h"
 #include "sparse.h"
@@ -10,6 +9,10 @@
 #include "RunTimeTimer.h"
 #include "CPUTimeTimer.h"
 
+#ifdef _OPENMP
+#include <omp.h>
+#endif
+
 int main(int argc, char *argv[])
 {
 	if (argc != 4) {
diff --git a/SimpleTests/SolverTests/ConjugateGradientDiagonalPreconditioned.cpp b/SimpleTests/SolverTests/ConjugateGradientDiagonalPreconditioned.cpp
index d533628c4194028a1f4227372053dd540a065740..30700aa9524c204d1043504c44ab8ca85d99ce1c 100644
--- a/SimpleTests/SolverTests/ConjugateGradientDiagonalPreconditioned.cpp
+++ b/SimpleTests/SolverTests/ConjugateGradientDiagonalPreconditioned.cpp
@@ -2,7 +2,6 @@
 #include <iostream>
 #include <cmath>
 #include <cstdlib>
-#include <omp.h>
 #include "LinAlg/Solvers/CG.h"
 #include "LinAlg/Sparse/CRSMatrixDiagPrecond.h"
 #include "sparse.h"
@@ -10,6 +9,10 @@
 #include "RunTimeTimer.h"
 #include "CPUTimeTimer.h"
 
+#ifdef _OPENMP
+#include <omp.h>
+#endif
+
 int main(int argc, char *argv[])
 {
 	if (argc != 4) {
diff --git a/SimpleTests/SolverTests/ConjugateGradientUnpreconditioned.cpp b/SimpleTests/SolverTests/ConjugateGradientUnpreconditioned.cpp
index 1f0c4cb92b1fc5ea10b796b4d998ca64e60ac861..96ead4200cfefbc8748f32f50f0a11acc05b01fa 100644
--- a/SimpleTests/SolverTests/ConjugateGradientUnpreconditioned.cpp
+++ b/SimpleTests/SolverTests/ConjugateGradientUnpreconditioned.cpp
@@ -1,12 +1,15 @@
 #include <fstream>
 #include <iostream>
-#include <omp.h>
 #include "LinAlg/Solvers/CG.h"
 #include "LinAlg/Sparse/CRSMatrix.h"
 #include "sparse.h"
 #include "vector_io.h"
 //#include "timeMeasurement.h"
 
+#ifdef _OPENMP
+#include <omp.h>
+#endif
+
 int main(int argc, char *argv[])
 {
 	(void) argc;