diff --git a/toonz/sources/tnztools/bluredbrush.cpp b/toonz/sources/tnztools/bluredbrush.cpp
index ff463e3..44f5214 100644
--- a/toonz/sources/tnztools/bluredbrush.cpp
+++ b/toonz/sources/tnztools/bluredbrush.cpp
@@ -51,10 +51,12 @@ void putOnRasterCM(const TRasterCM32P &out, const TRaster32P &in, int styleId,
           continue;
         }
         bool sameStyleId = styleId == outPix->getInk();
+        // line with lock alpha : use original pixel's tone
         // line with the same style : multiply tones
         // line with different style : pick darker tone
-        int tone = sameStyleId ? outPix->getTone() * (255 - inPix->m) / 255
-                               : std::min(255 - inPix->m, outPix->getTone());
+        int tone = lockAlpha     ? outPix->getTone()
+                   : sameStyleId ? outPix->getTone() * (255 - inPix->m) / 255
+                                 : std::min(255 - inPix->m, outPix->getTone());
         int ink  = !sameStyleId && outPix->getTone() < 255 - inPix->m
                        ? outPix->getInk()
                        : styleId;
diff --git a/toonz/sources/tnztools/mypainttoonzbrush.cpp b/toonz/sources/tnztools/mypainttoonzbrush.cpp
index deb9b04..cbf0728 100644
--- a/toonz/sources/tnztools/mypainttoonzbrush.cpp
+++ b/toonz/sources/tnztools/mypainttoonzbrush.cpp
@@ -32,10 +32,12 @@ void putOnRasterCM(const TRasterCM32P &out, const TRaster32P &in, int styleId,
         continue;
       }
       bool sameStyleId = styleId == outPix->getInk();
+      // line with lock alpha : use original pixel's tone
       // line with the same style : multiply tones
       // line with different style : pick darker tone
-      int tone = sameStyleId ? outPix->getTone() * (255 - inPix->m) / 255
-                             : std::min(255 - inPix->m, outPix->getTone());
+      int tone = lockAlpha     ? outPix->getTone()
+                 : sameStyleId ? outPix->getTone() * (255 - inPix->m) / 255
+                               : std::min(255 - inPix->m, outPix->getTone());
       int ink = !sameStyleId && outPix->getTone() < 255 - inPix->m
                     ? outPix->getInk()
                     : styleId;
diff --git a/toonz/sources/toonzlib/rasterstrokegenerator.cpp b/toonz/sources/toonzlib/rasterstrokegenerator.cpp
index cb9edf8..aaec5af 100644
--- a/toonz/sources/toonzlib/rasterstrokegenerator.cpp
+++ b/toonz/sources/toonzlib/rasterstrokegenerator.cpp
@@ -215,7 +215,8 @@ void RasterStrokeGenerator::placeOver(const TRasterCM32P &out,
           }
         }
         if (inTone <= outTone) {
-          *outPix = TPixelCM32(inPix->getInk(), outPix->getPaint(), inTone);
+          *outPix = TPixelCM32(inPix->getInk(), outPix->getPaint(),
+                               m_modifierLockAlpha ? outTone : inTone);
         }
       }
       if (m_task == ERASE) {