diff --git a/montecarlo/vmc/inc/TMCtls.h b/montecarlo/vmc/inc/TMCtls.h
new file mode 100644
index 0000000000000000000000000000000000000000..95fea95a98b92f7ed2bf563f229450a5d11c8b25
--- /dev/null
+++ b/montecarlo/vmc/inc/TMCtls.h
@@ -0,0 +1,62 @@
+// @(#)root/vmc:$Id$
+// Author: Ivana Hrivnacova, 29/04/2014
+
+/*************************************************************************
+ * Copyright (C) 2014, Rene Brun and Fons Rademakers.                    *
+ * All rights reserved.                                                  *
+ *                                                                       *
+ * For the licensing terms see $ROOTSYS/LICENSE.                         *
+ * For the list of contributors see $ROOTSYS/README/CREDITS.             *
+ *************************************************************************/
+
+// ********************************************************************
+// * License and Disclaimer                                           *
+// *                                                                  *
+// * The  Geant4 software  is  copyright of the Copyright Holders  of *
+// * the Geant4 Collaboration.  It is provided  under  the terms  and *
+// * conditions of the Geant4 Software License,  included in the file *
+// * LICENSE and available at  http://cern.ch/geant4/license .  These *
+// * include a list of copyright holders.                             *
+// *                                                                  *
+// * Neither the authors of this software system, nor their employing *
+// * institutes,nor the agencies providing financial support for this *
+// * work  make  any representation or  warranty, express or implied, *
+// * regarding  this  software system or assume any liability for its *
+// * use.  Please see the license in the file  LICENSE  and URL above *
+// * for the full disclaimer and the limitation of liability.         *
+// *                                                                  *
+// * This  code  implementation is the result of  the  scientific and *
+// * technical work of the GEANT4 collaboration.                      *
+// * By using,  copying,  modifying or  distributing the software (or *
+// * any work based  on the software)  you  agree  to acknowledge its *
+// * use  in  resulting  scientific  publications,  and indicate your *
+// * acceptance of all terms of the Geant4 Software license.          *
+// ********************************************************************
+
+#ifndef ROOT_TMCtls
+#define ROOT_TMCtls
+
+// Thread Local Storage typedefs
+//
+// According to Geant4 tls.hh and G4Threading.hh
+
+// Always build with thread support but keep a possibility to introduce
+// a build option
+#define VMC_MULTITHREADED 1
+ 
+#if ( defined (VMC_MULTITHREADED) ) 
+  #if ( ( defined(__MACH__) && defined(__clang__) && defined(__x86_64__) ) || \
+        ( defined(__MACH__) && defined(__GNUC__) && __GNUC__>=4 && __GNUC_MINOR__>=7 ) || \
+        defined(__linux__) || defined(_AIX) ) && ( !defined(__CINT__) )
+      //  Multi-threaded build: for POSIX systems 
+      #include <pthread.h>
+      #define TMCThreadLocal __thread
+  #else
+      //#  error "No Thread Local Storage (TLS) technology supported for this platform. Use sequential build !"
+      #define TMCThreadLocal 
+  #endif
+#else
+  #define TMCThreadLocal 
+#endif
+
+#endif //ROOT_TMCtls
diff --git a/montecarlo/vmc/inc/TVirtualMC.h b/montecarlo/vmc/inc/TVirtualMC.h
index 0abf72c157ef11efd3b4d2c0fb992282c3b843cf..8df57cb8f0105d623ecd463dc98e075847c180d4 100644
--- a/montecarlo/vmc/inc/TVirtualMC.h
+++ b/montecarlo/vmc/inc/TVirtualMC.h
@@ -24,6 +24,7 @@
 #include "TMCProcess.h"
 #include "TMCParticleType.h"
 #include "TMCOptical.h"
+#include "TMCtls.h"
 #include "TVirtualMCApplication.h"
 #include "TVirtualMCStack.h"
 #include "TVirtualMCDecayer.h"
@@ -32,10 +33,6 @@
 #include "TString.h"
 #include "TError.h"
 
-#if defined(__linux__) && !defined(__CINT__)
-#include <pthread.h>
-#endif
-
 class TLorentzVector;
 class TGeoHMatrix;
 class TArrayI;
@@ -866,10 +863,10 @@ private:
    TVirtualMC(const TVirtualMC &mc);
    TVirtualMC & operator=(const TVirtualMC &);
 
-#if defined(__linux__) && !defined(__CINT__)
-   static __thread TVirtualMC*  fgMC; // Monte Carlo singleton instance
+#if !defined(__CINT__)
+   static TMCThreadLocal TVirtualMC*  fgMC; // Monte Carlo singleton instance
 #else
-   static          TVirtualMC*  fgMC; // Monte Carlo singleton instance
+   static                TVirtualMC*  fgMC; // Monte Carlo singleton instance
 #endif
 
    TVirtualMCStack*    fStack;   //! Particles stack
@@ -880,10 +877,10 @@ private:
    ClassDef(TVirtualMC,1)  //Interface to Monte Carlo
 };
 
-#if defined(__linux__) && !defined(__CINT__)
-R__EXTERN __thread TVirtualMC *gMC;
+#if !defined(__CINT__)
+R__EXTERN TMCThreadLocal TVirtualMC *gMC;
 #else
-R__EXTERN          TVirtualMC *gMC;
+R__EXTERN                TVirtualMC *gMC;
 #endif
 
 #endif //ROOT_TVirtualMC
diff --git a/montecarlo/vmc/inc/TVirtualMCApplication.h b/montecarlo/vmc/inc/TVirtualMCApplication.h
index cb1727400e6eb6ecfeb167e6a0fc61a2fe541516..07594afb6893cda5e8a5b8979004f3a2bd16f75a 100644
--- a/montecarlo/vmc/inc/TVirtualMCApplication.h
+++ b/montecarlo/vmc/inc/TVirtualMCApplication.h
@@ -25,9 +25,7 @@
 #include "TMath.h"
 #endif
 
-#if defined(__linux__) && !defined(__CINT__)
-#include <pthread.h>
-#endif
+#include "TMCtls.h"
 
 class TVirtualMCApplication : public TNamed {
 
@@ -112,10 +110,10 @@ public:
 
 private:
    // static data members
-#if defined(__linux__) && !defined(__CINT__)
-   static __thread TVirtualMCApplication* fgInstance; // singleton instance
+#if !defined(__CINT__)
+   static TMCThreadLocal TVirtualMCApplication* fgInstance; // singleton instance
 #else
-   static          TVirtualMCApplication* fgInstance; // singleton instance
+   static                TVirtualMCApplication* fgInstance; // singleton instance
 #endif
 
    ClassDef(TVirtualMCApplication,1)  //Interface to MonteCarlo application
diff --git a/montecarlo/vmc/src/TVirtualMC.cxx b/montecarlo/vmc/src/TVirtualMC.cxx
index b0bbbebec757f15eca26a464f48fca5014a3c38e..678427a8d4426988e67d263b65d2bfb0a7870740 100644
--- a/montecarlo/vmc/src/TVirtualMC.cxx
+++ b/montecarlo/vmc/src/TVirtualMC.cxx
@@ -26,13 +26,8 @@
 
 ClassImp(TVirtualMC)
 
-#if defined(__linux__) && !defined(__CINT__)
-__thread TVirtualMC* TVirtualMC::fgMC=0;
-__thread TVirtualMC* gMC;
-#else
-TVirtualMC* TVirtualMC::fgMC=0;
-TVirtualMC* gMC;
-#endif
+TMCThreadLocal TVirtualMC* TVirtualMC::fgMC=0;
+TMCThreadLocal TVirtualMC* gMC;
 
 //_____________________________________________________________________________
 TVirtualMC::TVirtualMC(const char *name, const char *title,
diff --git a/montecarlo/vmc/src/TVirtualMCApplication.cxx b/montecarlo/vmc/src/TVirtualMCApplication.cxx
index 0556c06dd07eb234501d090a7cbaffcca1b8042a..003392b0f6f7eab5f71241fdbc83e702c293fa07 100644
--- a/montecarlo/vmc/src/TVirtualMCApplication.cxx
+++ b/montecarlo/vmc/src/TVirtualMCApplication.cxx
@@ -20,11 +20,7 @@
 
 ClassImp(TVirtualMCApplication)
 
-#if defined(__linux__) && !defined(__CINT__)
-__thread TVirtualMCApplication* TVirtualMCApplication::fgInstance = 0;
-#else
-TVirtualMCApplication* TVirtualMCApplication::fgInstance = 0;
-#endif
+TMCThreadLocal TVirtualMCApplication* TVirtualMCApplication::fgInstance = 0;
 
 //_____________________________________________________________________________
 TVirtualMCApplication::TVirtualMCApplication(const char *name,