diff --git a/source/uCEFApplicationCore.pas b/source/uCEFApplicationCore.pas
index d8d2df90..102ed618 100644
--- a/source/uCEFApplicationCore.pas
+++ b/source/uCEFApplicationCore.pas
@@ -343,6 +343,7 @@ type
       procedure AddCustomCommandLineSwitches(var aKeys, aValues : TStringList); virtual;
       procedure AppendSwitch(var aKeys, aValues : TStringList; const aNewKey : ustring; const aNewValue : ustring = '');
       procedure ReplaceSwitch(var aKeys, aValues : TStringList; const aNewKey : ustring; const aNewValue : ustring = '');
+      procedure CleanupFeatures(var aKeys, aValues : TStringList; const aEnableKey, aDisableKey : string);
 
     public
       constructor Create;
@@ -1744,47 +1745,137 @@ end;
 
 procedure TCefApplicationCore.AppendSwitch(var aKeys, aValues : TStringList; const aNewKey, aNewValue : ustring);
 var
-  TempKey : ustring;
+  TempKey, TempHyphenatedKey : ustring;
   i : integer;
 begin
   if (copy(aNewKey, 1, 2) = '--') then
-    TempKey := copy(aNewKey, 3, length(aNewKey))
+    begin
+      TempHyphenatedKey := aNewKey;
+      TempKey           := copy(aNewKey, 3, length(aNewKey));
+    end
    else
-    TempKey := aNewKey;
+    begin
+      TempHyphenatedKey := '--' + aNewKey;
+      TempKey           := aNewKey;
+    end;
 
   i := aKeys.IndexOf(TempKey);
 
   if (i < 0) then
     begin
-      aKeys.Add(aNewKey);
-      aValues.Add(aNewValue);
+      i := aKeys.IndexOf(TempHyphenatedKey);
+
+      if (i < 0) then
+        begin
+          aKeys.Add(aNewKey);
+          aValues.Add(aNewValue);
+          exit;
+        end;
+    end;
+
+  if (length(aNewValue) > 0) then
+    begin
+      if (length(aValues[i]) > 0) then
+        aValues[i] := aValues[i] + ',' + aNewValue
+       else
+        aValues[i] := aNewValue;
+    end;
+end;
+
+procedure TCefApplicationCore.CleanupFeatures(var aKeys, aValues : TStringList; const aEnableKey, aDisableKey : string);
+var
+  i, j, k, n : integer;
+  TempEnabledValues, TempDisabledValues : TStringList;
+  TempEnableKey, TempHyphenatedEnableKey, TempDisableKey, TempHyphenatedDisableKey : ustring;
+begin
+  if (copy(aEnableKey, 1, 2) = '--') then
+    begin
+      TempHyphenatedEnableKey := aEnableKey;
+      TempEnableKey           := copy(aEnableKey, 3, length(aEnableKey));
     end
    else
-    if (length(aNewValue) > 0) then
-      begin
-        if (length(aValues[i]) > 0) then
-          aValues[i] := aValues[i] + ',' + aNewValue
-         else
-          aValues[i] := aNewValue;
-      end;
+    begin
+      TempHyphenatedEnableKey := '--' + aEnableKey;
+      TempEnableKey           := aEnableKey;
+    end;
+
+  if (copy(aDisableKey, 1, 2) = '--') then
+    begin
+      TempHyphenatedDisableKey := aDisableKey;
+      TempDisableKey           := copy(aDisableKey, 3, length(aDisableKey));
+    end
+   else
+    begin
+      TempHyphenatedDisableKey := '--' + aDisableKey;
+      TempDisableKey           := aDisableKey;
+    end;
+
+  i := aKeys.IndexOf(TempEnableKey);
+  if (i < 0) then i := aKeys.IndexOf(TempHyphenatedEnableKey);
+
+  j := aKeys.IndexOf(TempDisableKey);
+  if (j < 0) then j := aKeys.IndexOf(TempHyphenatedDisableKey);
+
+  if (i < 0) or (j < 0) then exit;
+
+  TempEnabledValues            := TStringList.Create;
+  TempDisabledValues           := TStringList.Create;
+  TempEnabledValues.CommaText  := aValues[i];
+  TempDisabledValues.CommaText := aValues[j];
+
+  k := 0;
+  while (k < TempDisabledValues.Count) do
+    begin
+      if (length(TempDisabledValues[k]) > 0) then
+        begin
+          n := TempEnabledValues.IndexOf(TempDisabledValues[k]);
+          if (n >= 0) then TempEnabledValues.Delete(n);
+        end;
+
+      inc(k);
+    end;
+
+  if (TempEnabledValues.Count > 0) then
+    aValues[i] := TempEnabledValues.CommaText
+   else
+    begin
+      aKeys.Delete(i);
+      aValues.Delete(i);
+    end;
+
+  FreeAndNil(TempEnabledValues);
+  FreeAndNil(TempDisabledValues);
 end;
 
 procedure TCefApplicationCore.ReplaceSwitch(var aKeys, aValues : TStringList; const aNewKey, aNewValue : ustring);
 var
-  TempKey : ustring;
+  TempKey, TempHyphenatedKey : ustring;
   i : integer;
 begin
   if (copy(aNewKey, 1, 2) = '--') then
-    TempKey := copy(aNewKey, 3, length(aNewKey))
+    begin
+      TempHyphenatedKey := aNewKey;
+      TempKey           := copy(aNewKey, 3, length(aNewKey));
+    end
    else
-    TempKey := aNewKey;
+    begin
+      TempHyphenatedKey := '--' + aNewKey;
+      TempKey           := aNewKey;
+    end;
 
   i := aKeys.IndexOf(TempKey);
 
   if (i < 0) then
     begin
-      aKeys.Add(aNewKey);
-      aValues.Add(aNewValue);
+      i := aKeys.IndexOf(TempHyphenatedKey);
+
+      if (i < 0) then
+        begin
+          aKeys.Add(aNewKey);
+          aValues.Add(aNewValue);
+        end
+       else
+        aValues[i] := aNewValue;
     end
    else
     aValues[i] := aNewValue;
@@ -1975,6 +2066,8 @@ begin
   if (length(FDisableFeatures) > 0) then
     AppendSwitch(aKeys, aValues, '--disable-features', FDisableFeatures);
 
+  CleanupFeatures(aKeys, aValues, '--enable-features', '--disable-features');
+
   // The list of Blink features you can enable is here :
   // https://cs.chromium.org/chromium/src/third_party/blink/renderer/platform/runtime_enabled_features.json5
   if (length(FEnableBlinkFeatures) > 0) then
@@ -1985,6 +2078,8 @@ begin
   if (length(FDisableBlinkFeatures) > 0) then
     AppendSwitch(aKeys, aValues, '--disable-blink-features', FDisableBlinkFeatures);
 
+  CleanupFeatures(aKeys, aValues, '--enable-blink-features', '--disable-blink-features');
+
   // The list of Blink settings you can modify is here :
   // https://source.chromium.org/chromium/chromium/src/+/master:third_party/blink/renderer/core/frame/settings.json5
   if (length(FBlinkSettings) > 0) then
diff --git a/source/uCEFBufferPanel.pas b/source/uCEFBufferPanel.pas
index 66ebacad..f418df1c 100644
--- a/source/uCEFBufferPanel.pas
+++ b/source/uCEFBufferPanel.pas
@@ -996,7 +996,14 @@ end;
 
 procedure TBufferPanel.BufferDraw(const aBitmap : TBitmap; const aSrcRect, aDstRect : TRect);
 begin
-  if (FBuffer <> nil) then FBuffer.Canvas.CopyRect(aDstRect, aBitmap.Canvas, aSrcRect);
+  if (FBuffer <> nil) and (aBitmap <> nil) then
+    begin
+      FBuffer.Canvas.Lock;
+      aBitmap.Canvas.Lock;
+      FBuffer.Canvas.CopyRect(aDstRect, aBitmap.Canvas, aSrcRect);
+      aBitmap.Canvas.UnLock;
+      FBuffer.Canvas.UnLock;
+    end;
 end;
 
 function TBufferPanel.UpdateBufferDimensions(aWidth, aHeight : integer) : boolean;
diff --git a/update_CEF4Delphi.json b/update_CEF4Delphi.json
index 040f46f9..18406ae6 100644
--- a/update_CEF4Delphi.json
+++ b/update_CEF4Delphi.json
@@ -2,7 +2,7 @@
   "UpdateLazPackages" : [
     {
       "ForceNotify" : true,
-      "InternalVersion" : 237,
+      "InternalVersion" : 238,
       "Name" : "cef4delphi_lazarus.lpk",
       "Version" : "88.1.4.0"
     }