diff --git a/src/aparapi/com.amd.aparapi.jni/build.xml b/src/aparapi/com.amd.aparapi.jni/build.xml
index 7df8d34e07d6148006ad3cf1a246e681f75764d3..b1731fbaf09e913d0ba25a1126bfb8da4fe4ae28 100644
--- a/src/aparapi/com.amd.aparapi.jni/build.xml
+++ b/src/aparapi/com.amd.aparapi.jni/build.xml
@@ -627,6 +627,8 @@ First consider editing the properties in build.properties
          <arg value="src/cpp/runKernel/KernelArg.cpp" />
          <arg value="src/cpp/runKernel/ProfileInfo.cpp" />
          <arg value="src/cpp/runKernel/Range.cpp" />
+      	<!-- !!! oren change -> platform config settings -->
+         <arg value="src/cpp/runKernel/ConfigSettings.cpp" />
          <arg value="src/cpp/invoke/OpenCLJNI.cpp" />
          <arg value="src/cpp/invoke/OpenCLArgDescriptor.cpp" />
          <arg value="src/cpp/invoke/OpenCLMem.cpp" />
diff --git a/src/aparapi/com.amd.aparapi.jni/build_altera_ocl_v15.xml b/src/aparapi/com.amd.aparapi.jni/build_altera_ocl_v15.xml
index 941105fd9da22370c28291c8a7dc55453c1387e3..2f96bf452d8daf5662f3066d57ce885ecbb32233 100644
--- a/src/aparapi/com.amd.aparapi.jni/build_altera_ocl_v15.xml
+++ b/src/aparapi/com.amd.aparapi.jni/build_altera_ocl_v15.xml
@@ -666,6 +666,8 @@ First consider editing the properties in build.properties
          <arg value="src/cpp/runKernel/KernelArg.cpp" />
          <arg value="src/cpp/runKernel/ProfileInfo.cpp" />
          <arg value="src/cpp/runKernel/Range.cpp" />
+      	<!-- !!! oren change -> platform config settings -->
+         <arg value="src/cpp/runKernel/ConfigSettings.cpp" />
          <arg value="src/cpp/invoke/OpenCLJNI.cpp" />
          <arg value="src/cpp/invoke/OpenCLArgDescriptor.cpp" />
          <arg value="src/cpp/invoke/OpenCLMem.cpp" />
diff --git a/src/aparapi/com.amd.aparapi.jni/build_intel_ocl.xml b/src/aparapi/com.amd.aparapi.jni/build_intel_ocl.xml
index 65ba29b88c581555865274a249520ba1d965af95..24177f84add00a61f685f72a2169ddf68d276e80 100644
--- a/src/aparapi/com.amd.aparapi.jni/build_intel_ocl.xml
+++ b/src/aparapi/com.amd.aparapi.jni/build_intel_ocl.xml
@@ -603,6 +603,8 @@ First consider editing the properties in build.properties
         <!-- !!! oren change -> add debug info, no optimizations 
          <arg value="-O3" />
         -->
+      	 <!-- !!! oren change -> add support for ISO C++ 2011 (C++0x) requires GCC 4.3 and later -->      	
+      	 <arg value="-std=c++0x" />
          <arg value="-O0" />
          <arg value="-g" />
          <arg value="-fPIC" />
@@ -625,6 +627,8 @@ First consider editing the properties in build.properties
          <arg value="src/cpp/runKernel/KernelArg.cpp" />
          <arg value="src/cpp/runKernel/ProfileInfo.cpp" />
          <arg value="src/cpp/runKernel/Range.cpp" />
+      	<!-- !!! oren change -> platform config settings -->
+         <arg value="src/cpp/runKernel/ConfigSettings.cpp" />
          <arg value="src/cpp/invoke/OpenCLJNI.cpp" />
          <arg value="src/cpp/invoke/OpenCLArgDescriptor.cpp" />
          <arg value="src/cpp/invoke/OpenCLMem.cpp" />
diff --git a/src/aparapi/com.amd.aparapi.jni/src/cpp/runKernel/Aparapi.cpp b/src/aparapi/com.amd.aparapi.jni/src/cpp/runKernel/Aparapi.cpp
index e9e5101e51cf08e3ea5fa73062ee6d2649220d33..0c1812626bcac623fc15cc1a87ccfb0d3b467e0e 100644
--- a/src/aparapi/com.amd.aparapi.jni/src/cpp/runKernel/Aparapi.cpp
+++ b/src/aparapi/com.amd.aparapi.jni/src/cpp/runKernel/Aparapi.cpp
@@ -1156,7 +1156,7 @@ inline char* getClassName(JNIEnv* jenv, JNIContext* jniContext, const char *optE
    char *charPtr = classNameStr;
    while(charPtr = strchr(charPtr,'$'))
    {
-	   *charPtr = BINARY_FILE_SEP;
+	   *charPtr = jniContext->platformConfigPtr->getFileSeperator();//BINARY_FILE_SEP;
 	   charPtr++;
    }
 
@@ -1287,10 +1287,11 @@ inline void outputOCLFile(JNIEnv* jenv, JNIContext* jniContext, const char *sour
 
 }
 
-inline void verifyFlow(jint &buildFlags)
+inline void verifyFlow(JNIContext* jniContext, jint &buildFlags)
 {
+	PlatformConfig::Ptr platformConfigPtr = jniContext->platformConfigPtr;
     // verify flow support is available
-    if(!(PLATFORM_FLOW_SUPPORT & buildFlags))
+    if(!(platformConfigPtr->getFlowSupport() & buildFlags))
     {
         fprintf(stderr, "!!! Error requested flow(%0xd) not available !!!\n",buildFlags);
         throw CLException(CL_INVALID_VALUE,"buildProgramJNI() -> bad request flow");
@@ -1298,7 +1299,7 @@ inline void verifyFlow(jint &buildFlags)
 
     // check/set if default flow is requested
     if(buildFlags==DEFAULT_FLOW)
-    	buildFlags = PLATFORM_DEFAULT_FLOW;
+    	buildFlags = platformConfigPtr->getDefaultFlowSupport();
 }
 
 JNI_JAVA(jlong, KernelRunnerJNI, buildProgramJNI)
@@ -1319,14 +1320,14 @@ JNI_JAVA(jlong, KernelRunnerJNI, buildProgramJNI)
 
         // !!! oren change ->
         // verify the flow and modify if need be
-        verifyFlow(buildFlags);
+        verifyFlow(jniContext,buildFlags);
 
 //#ifdef USE_BINARY_FILE
         if(buildFlags & com_amd_aparapi_internal_jni_KernelRunnerJNI_JNI_FLAG_BINARY_FLOW)
         {
           char *binFileFolder = getenv(BINARY_FOLDER_ENV_VAR);
           fprintf(stderr, "Bin Folder is %s\n",binFileFolder);
-          char *binFileName = getClassName(jenv,jniContext,BINARY_FILE_EXT);
+          char *binFileName = getClassName(jenv,jniContext,jniContext->platformConfigPtr->getBinFileExtension());//BINARY_FILE_EXT
           char *fullBinFilePath = buildFilePath(binFileFolder,binFileName);
           fprintf(stderr, "FullBinFilePath is %s\n",fullBinFilePath);
      	  jniContext->program = CLHelper::createProgramWithBinary(jenv, jniContext->context,  1, &jniContext->deviceId, fullBinFilePath, NULL, &status);
diff --git a/src/aparapi/com.amd.aparapi.jni/src/cpp/runKernel/ConfigSettings.cpp b/src/aparapi/com.amd.aparapi.jni/src/cpp/runKernel/ConfigSettings.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..0cd91ad6f5cb04c3075925cdcf9e637da83219c2
--- /dev/null
+++ b/src/aparapi/com.amd.aparapi.jni/src/cpp/runKernel/ConfigSettings.cpp
@@ -0,0 +1,29 @@
+#include "ConfigSettings.h"
+
+///
+// Specify the different platform configuration in this file
+//
+// Platform parameters can be set in the following format:
+// A. REGISTER_PLATFORM_CONFIG -> calls PlatformConfig(const char *name, int flowSupport, int defaultFlowSupport, const char *binFileExt, char fileSep)
+// B. REGISTER_PLATFORM_CONFIG_WITH_SEARCH_STR -> calls PlatformConfig(const char *name, const char *searchStr, int flowSupport, int defaultFlowSupport, const char *binFileExt, char fileSep)
+
+// ****************************************************************
+// Below is the default settings for any platform (unless specified otherwise in another specific configuration line)
+// Note that by default we have source and binary flows, source is the default flow, '.bcl' is the binary extension and '_' is the file separator
+// ****************************************************************
+REGISTER_PLATFORM_CONFIG(DEFAULT_PLATFORM_CONFIG_NAME, SOURCE_FLOW | BINARY_FLOW | DEFAULT_FLOW, SOURCE_FLOW, ".bcl", '_');
+// ****************************************************************
+// Altera OpenCL specific configuration
+// ****************************************************************
+REGISTER_PLATFORM_CONFIG(Altera, BINARY_FLOW | DEFAULT_FLOW, BINARY_FLOW, ".aocx",'.');
+// if you need a search string different then name use this form instead, it includes a search string
+//REGISTER_PLATFORM_CONFIG_WITH_SEARCH_STR(Altera, "Altera SDK for OpenCL", BINARY_FLOW | DEFAULT_FLOW, BINARY_FLOW, ".aocx",'.');
+// ****************************************************************
+// example for AMD ...
+// ****************************************************************
+REGISTER_PLATFORM_CONFIG(AMD,SOURCE_FLOW | BINARY_FLOW | DEFAULT_FLOW, SOURCE_FLOW, ".bcl", '.');
+// ****************************************************************
+// example for Intel ...
+// ****************************************************************
+REGISTER_PLATFORM_CONFIG(Intel,SOURCE_FLOW | BINARY_FLOW | DEFAULT_FLOW, SOURCE_FLOW, ".bcl", '.');
+
diff --git a/src/aparapi/com.amd.aparapi.jni/src/cpp/runKernel/ConfigSettings.h b/src/aparapi/com.amd.aparapi.jni/src/cpp/runKernel/ConfigSettings.h
index c002386f4839c5e218b5bda9e2e5467406bfe0e6..41260ed4d03d2dcc0542197853fe5287d986c1f2 100644
--- a/src/aparapi/com.amd.aparapi.jni/src/cpp/runKernel/ConfigSettings.h
+++ b/src/aparapi/com.amd.aparapi.jni/src/cpp/runKernel/ConfigSettings.h
@@ -3,9 +3,10 @@
 
 // !!! oren changes ->
 // configuration settings for building platform specific code
-// TODO: consider moving parts of this to a configuration file later on and load settings dynamically
+// TODO: consider moving parts of this to a configuration file lateron and load settings dynamically
 
 #include <string>
+#include <cstring>
 #include <map>
 #include <tuple>
 #include <memory>
@@ -13,7 +14,6 @@
 // use values from JNI config
 #include "com_amd_aparapi_internal_jni_KernelRunnerJNI.h"
 
-
 // auto output kernel.cl file
 #define OUTPUT_OCL_FILE
 // allows defining an alternative folder where bin files should be loaded from
@@ -28,18 +28,53 @@
 #define DEFAULT_FLOW  com_amd_aparapi_internal_jni_KernelRunnerJNI_JNI_FLAG_DEFAULT_FLOW
 ///////////////////////////
 
-#define FILE_EXT_LENGTH 8
+//#define FILE_EXT_LENGTH 8
 
 class PlatformConfig
 {
 public:
-	PlatformConfig(int flowSupport, const char *fileExt, char fileSep)
+
+    typedef std::shared_ptr<PlatformConfig> Ptr;
+
+	PlatformConfig(const char *name, int flowSupport, int defaultFlowSupport, const char *binFileExt, char fileSep)
+    {
+		setName(name);
+		setSearchStr(name); // default search string is name!
+		setFlowSupport(flowSupport);
+		setDefaultFlowSupport(defaultFlowSupport);
+        setBinFileExtension(binFileExt);
+		setFileSeperator(fileSep);
+    }
+
+	PlatformConfig(const char *name, const char *searchStr, int flowSupport, int defaultFlowSupport, const char *binFileExt, char fileSep)
     {
+		setName(name);
+		setSearchStr(searchStr);
 		setFlowSupport(flowSupport);
-        setFileExtension(fileExt);
+		setDefaultFlowSupport(defaultFlowSupport);
+        setBinFileExtension(binFileExt);
 		setFileSeperator(fileSep);
     }
 
+	void setName(const char *name)
+	{
+		m_name = name;
+	}
+	const char *getName()
+	{
+		return m_name.c_str();
+	}
+
+	void setSearchStr(const char *searchStr)
+	{
+		m_searchStr = searchStr;
+	}
+
+	const char *getsearchStr()
+	{
+		return m_searchStr.c_str();
+	}
+
 	void setFlowSupport(int flowSupport)
 	{
 		m_flowSupport = flowSupport;
@@ -50,14 +85,24 @@ public:
 		return m_flowSupport;
 	}
 
-	void setFileExtension(const char *fileExt)
+	void setDefaultFlowSupport(int defaultFlowSupport)
+	{
+		m_defaultFlowSupport = defaultFlowSupport;
+	}
+
+	int getDefaultFlowSupport()
+	{
+		return m_defaultFlowSupport;
+	}
+
+	void setBinFileExtension(const char *binFileExt)
 	{
-		m_fileExt = fileExt;
+		m_binFileExt = binFileExt;
 	}
 
-	const char *getFileExtension()
+	const char *getBinFileExtension()
 	{
-		return m_fileExt.c_str();
+		return m_binFileExt.c_str();
 	}
 
 	void setFileSeperator(char fileSep)
@@ -73,17 +118,21 @@ public:
 protected:
 	// data
 	int m_flowSupport;
+	int m_defaultFlowSupport;
 	//char m_fileExt[FILE_EXT_LENGTH];
-	std::string m_fileExt;
+	std::string m_binFileExt;
 	char m_fileSep;
+	std::string m_name;
+	std::string m_searchStr; // platform name search string
 };
 
 class PlatformConfigFactory
 {
 public:
-	  typedef std::shared_ptr<PlatformConfig> PlatformConfigPtr;
-	  typedef std::pair<std::string,PlatformConfigPtr> PlatformConfigTuple;
-	  typedef std::map<std::string,PlatformConfigTuple> PlatformConfigMap;
+	  //typedef std::shared_ptr<PlatformConfig> PlatformConfigPtr;
+	  //typedef std::pair<std::string,PlatformConfigPtr> PlatformConfigTuple;
+	  //typedef std::map<std::string,PlatformConfigTuple> PlatformConfigMap;
+	  typedef std::map<std::string,PlatformConfig::Ptr> PlatformConfigMap;
 
 	  static PlatformConfigFactory &getPlatformConfigFactory()//openclManager *oclMgr)
 	  {
@@ -93,24 +142,49 @@ public:
 		  return *pcf;
 	  }
 
-	  bool registerPlatformConfig(const char *name, PlatformConfigPtr platformConfigPtr)
+	  bool registerPlatformConfig(const char *name, PlatformConfig::Ptr platformConfigPtr)
 	  {
-		  m_platformConfigMap[name]=PlatformConfigTuple(name,platformConfigPtr);
+		  //m_platformConfigMap[name]=PlatformConfigTuple(name,platformConfigPtr);
+		  m_platformConfigMap[name]=platformConfigPtr;
 		  return true;
 	  }
 
-#define REGISTER_PLLATFORM_CONFIG(name,platformConfigPtr) bool name##PlatformConfig=PlatformConfigFactory::getPlatformConfigFactory().register(#name,platformConfigPtr);
+#define REGISTER_PLATFORM_CONFIG_BASE(name,platformConfigPtr) bool name##PlatformConfig=PlatformConfigFactory::getPlatformConfigFactory().registerPlatformConfig(#name,PlatformConfig::Ptr(platformConfigPtr));
+#define REGISTER_PLATFORM_CONFIG(name,flowSupport,defaultFlowSupport,binFileExt,fileSep) REGISTER_PLATFORM_CONFIG_BASE(name, new PlatformConfig(#name,flowSupport,defaultFlowSupport,binFileExt,fileSep))
+#define REGISTER_PLATFORM_CONFIG_WITH_SEARCH_STR(name,searchStr,flowSupport,defaultFlowSupport,binFileExt,fileSep) REGISTER_PLATFORM_CONFIG_BASE(name, new PlatformConfig(#name,searchStr,flowSupport,defaultFlowSupport,binFileExt,fileSep))
 
+#define DEFAULT_PLATFORM_CONFIG_NAME DEFAULT_PCN
+#define NAME_TO_STR(s) #s
 
-	  PlatformConfigPtr findPlatformConfigByName(const char *name)
+	  PlatformConfig::Ptr findPlatformConfigByName(const char *name)
 	  {
 		  PlatformConfigMap::iterator itr = m_platformConfigMap.find(name);
 		          if (itr != m_platformConfigMap.end())
 		          {
-		              return itr->second.second;
+		              //return itr->second.second;
+		              return itr->second;
 		          }
 		          else
-		        	  return PlatformConfigPtr();
+		        	  return PlatformConfig::Ptr();
+	  }
+
+	  PlatformConfig::Ptr findPlatformConfigFromFullName(const char *fullPlatformName)
+	  {
+		  // Requires C++11 -> leave minimum compiler support at C++0x for now ...
+		  //for ( const auto &itr : m_platformConfigMap )
+		  for (PlatformConfigMap::iterator itr = m_platformConfigMap.begin(); itr != m_platformConfigMap.end(); itr++ )
+		  {
+		     if(std::strstr(fullPlatformName,itr->second->getsearchStr()))
+		    	 return itr->second;
+		  }
+
+		  // if not found search for default cplatform config
+    	  return  findPlatformConfigByName(NAME_TO_STR(DEFAULT_PLATFORM_CONFIG_NAME));
+	  }
+
+	  PlatformConfigMap &getConfigMap()
+	  {
+         return m_platformConfigMap;
 	  }
 
 	  // data
@@ -128,6 +202,7 @@ public:
 ///////////////////////////
 // Altera platform specific
 ///////////////////////////
+/*
 #ifdef ALTERA_OPENCL
   #define PLATFORM_FLOW_SUPPORT (SOURCE_FLOW | BINARY_FLOW | DEFAULT_FLOW)
   #define PLATFORM_DEFAULT_FLOW BINARY_FLOW
@@ -148,7 +223,7 @@ public:
   #define BINARY_FILE_EXT ".bcl"
   #define BINARY_FILE_SEP '.'
 #endif // ALTERA_OPENCL
-
+*/
 #endif // CONFIG_SETTINGS_H
 
 
diff --git a/src/aparapi/com.amd.aparapi.jni/src/cpp/runKernel/JNIContext.cpp b/src/aparapi/com.amd.aparapi.jni/src/cpp/runKernel/JNIContext.cpp
index db9a5cfa498bf8a51b54915f52bf8ad7a310cc35..f2d6fd8678de7d6891e36939faff48bbe5328f3e 100644
--- a/src/aparapi/com.amd.aparapi.jni/src/cpp/runKernel/JNIContext.cpp
+++ b/src/aparapi/com.amd.aparapi.jni/src/cpp/runKernel/JNIContext.cpp
@@ -29,6 +29,12 @@ JNIContext::JNIContext(JNIEnv *jenv, jobject _kernelObject, jobject _openCLDevic
    if (status == CL_SUCCESS){
       valid = JNI_TRUE;
    }
+
+   // !!! oren change -> setup platform configuration
+   char platformName[512]={""};
+   status = clGetPlatformInfo(platformId, CL_PLATFORM_NAME, sizeof(platformName), platformName, NULL);
+   platformConfigPtr = PlatformConfigFactory::getPlatformConfigFactory().findPlatformConfigFromFullName(platformName);
+
 }
 
 void JNIContext::dispose(JNIEnv *jenv, Config* config) {
diff --git a/src/aparapi/com.amd.aparapi.jni/src/cpp/runKernel/JNIContext.h b/src/aparapi/com.amd.aparapi.jni/src/cpp/runKernel/JNIContext.h
index e22c5ff418b446c83ab6730b089240803e2d1370..99ea7608a4f1ff3b99e22df55fc271c2ce1704d7 100644
--- a/src/aparapi/com.amd.aparapi.jni/src/cpp/runKernel/JNIContext.h
+++ b/src/aparapi/com.amd.aparapi.jni/src/cpp/runKernel/JNIContext.h
@@ -7,6 +7,8 @@
 #include "ProfileInfo.h"
 #include "com_amd_aparapi_internal_jni_KernelRunnerJNI.h"
 #include "Config.h"
+#include "ConfigSettings.h"
+
 
 class JNIContext {
 private: 
@@ -34,6 +36,8 @@ public:
    jint passes;
    ProfileInfo *exec;
    FILE* profileFile;
+   // !!! oren change
+   PlatformConfig::Ptr platformConfigPtr;
 
    JNIContext(JNIEnv *jenv, jobject _kernelObject, jobject _openCLDeviceObject, jint _flags);