diff --git a/MagickCore/opencl.c b/MagickCore/opencl.c
index 34ce742..10ac9a6 100644
--- a/MagickCore/opencl.c
+++ b/MagickCore/opencl.c
@@ -384,7 +384,7 @@
   MagickBooleanType GetMagickOpenCLEnvParam(MagickCLEnv clEnv, MagickOpenCLEnvParam param
                                           , size_t dataSize, void* data, ExceptionInfo* exception)
 {
-  MagickBooleanType
+  MagickBooleanType 
    status;
 
   magick_unreferenced(exception);
@@ -1870,6 +1870,8 @@
   return status;
 }
 
+
+#if 0
 static ds_status getNumDeviceWithEmptyScore(ds_profile* profile, unsigned int* num) {
   unsigned int i;
   if (profile == NULL || num==NULL)
@@ -1877,11 +1879,12 @@
   *num=0;
   for (i = 0; i < profile->numDevices; i++) {
     if (profile->devices[i].score == NULL) {
-      *num++;
+      (*num)++;
     }
   }
   return DS_SUCCESS;
 }
+#endif
 
 /*
  End of the OpenCL device selection infrastructure
@@ -2108,10 +2111,15 @@
   unsigned int bestDeviceIndex;
   AccelerateScoreType bestScore;
   char path[MaxTextExtent];
-
+  MagickBooleanType flag;
 
   LockDefaultOpenCLEnv();
 
+  /* Initially, just set OpenCL to off */
+  flag = MagickTrue;
+  SetMagickOpenCLEnvParamInternal(clEnv, MAGICK_OPENCL_ENV_PARAM_OPENCL_DISABLED
+    , sizeof(MagickBooleanType), &flag, exception);
+
   status = initDSProfile(&profile, IMAGEMAGICK_PROFILE_VERSION);
   if (status!=DS_SUCCESS) {
     (void) ThrowMagickException(exception, GetMagickModule(), ModuleFatalError, "Error when initializing the profile", "'%s'", ".");
@@ -2149,12 +2157,15 @@
   /* set up clEnv with the best device */
   if (profile->devices[bestDeviceIndex].type == DS_DEVICE_NATIVE_CPU) {
     /* CPU device */
-    MagickBooleanType flag = MagickTrue;
+    flag = MagickTrue;
     SetMagickOpenCLEnvParamInternal(clEnv, MAGICK_OPENCL_ENV_PARAM_OPENCL_DISABLED
                                   , sizeof(MagickBooleanType), &flag, exception);
   }
   else if (profile->devices[bestDeviceIndex].type == DS_DEVICE_OPENCL_DEVICE) {
     /* OpenCL device */
+    flag = MagickFalse;
+    SetMagickOpenCLEnvParamInternal(clEnv, MAGICK_OPENCL_ENV_PARAM_OPENCL_DISABLED
+      , sizeof(MagickBooleanType), &flag, exception);
     SetMagickOpenCLEnvParamInternal(clEnv, MAGICK_OPENCL_ENV_PARAM_DEVICE
       , sizeof(cl_device_id), &profile->devices[bestDeviceIndex].oclDeviceID,exception);
   }
@@ -2272,6 +2283,58 @@
 }
 
 
+MagickExport
+MagickBooleanType OpenCLThrowMagickException(ExceptionInfo *exception,
+  const char *module,const char *function,const size_t line,
+  const ExceptionType severity,const char *tag,const char *format,...) {
+  MagickBooleanType
+    status;
+
+  MagickCLEnv clEnv;
+
+  status = MagickTrue;
+
+  clEnv = GetDefaultOpenCLEnv();
+
+  assert(exception != (ExceptionInfo *) NULL);
+  assert(exception->signature == MagickSignature);
+
+  if (severity!=0) {
+    cl_device_type dType;
+    clGetDeviceInfo(clEnv->device,CL_DEVICE_TYPE ,sizeof(cl_device_type),&dType,NULL);
+    if (dType == CL_DEVICE_TYPE_CPU) {
+      char buffer[MaxTextExtent];
+      clGetPlatformInfo(clEnv->platform, CL_PLATFORM_NAME, MaxTextExtent, buffer, NULL);
+
+      /* Workaround for Intel OpenCL CPU runtime bug */
+      /* Turn off OpenCL when a problem is detected! */
+      if (strncmp(buffer, "Intel",5) == 0) {
+
+        InitImageMagickOpenCL(MAGICK_OPENCL_OFF, NULL, NULL, exception);
+      }
+    }
+  }
+
+#ifdef OPENCLLOG_ENABLED
+  {
+    va_list
+      operands;
+    va_start(operands,format);
+    status=ThrowMagickExceptionList(exception,module,function,line,severity,tag, format,operands);
+    va_end(operands);
+  }
+#else
+  magick_unreferenced(module);
+  magick_unreferenced(function);
+  magick_unreferenced(line);
+  magick_unreferenced(tag);
+  magick_unreferenced(format);
+#endif
+
+  return(status);
+}
+
+
 #else
 
 struct _MagickCLEnv {
@@ -2404,6 +2467,21 @@
   return MagickFalse;
 }
 
+
+MagickExport
+MagickBooleanType OpenCLThrowMagickException(ExceptionInfo *exception,
+  const char *module,const char *function,const size_t line,
+  const ExceptionType severity,const char *tag,const char *format,...) 
+{
+  magick_unreferenced(exception);
+  magick_unreferenced(module);
+  magick_unreferenced(function);
+  magick_unreferenced(line);
+  magick_unreferenced(severity);
+  magick_unreferenced(tag);
+  magick_unreferenced(format);
+  return(MagickFalse);
+}
 #endif /* MAGICKCORE_OPENCL_SUPPORT */
 
 char* openclCachedFilesDirectory;
@@ -2471,6 +2549,11 @@
   {
     if (message) {
       char path[MaxTextExtent];
+      unsigned long allocSize;
+
+      MagickCLEnv clEnv;
+
+      clEnv = GetDefaultOpenCLEnv();
 
       /*  dump the source into a file */
       (void) FormatLocaleString(path,MaxTextExtent,"%s%s%s"
@@ -2481,6 +2564,13 @@
       log = fopen(path, "ab");
       fwrite(message, sizeof(char), strlen(message), log);
       fwrite("\n", sizeof(char), 1, log);
+
+      if (clEnv->OpenCLInitialized && !clEnv->OpenCLDisabled)
+      {
+        allocSize = GetOpenCLDeviceMaxMemAllocSize(clEnv);
+        fprintf(log, "Devic Max Memory Alloc Size: %ld\n", allocSize);
+      }
+
       fclose(log);
     }
   }
@@ -2488,4 +2578,3 @@
   magick_unreferenced(message);
 #endif
 }
-