diff --git a/components/synedit/languages/syneditstrconst.ca.po b/components/synedit/languages/syneditstrconst.ca.po
index b27ce4fb16..d65e0d9e32 100644
--- a/components/synedit/languages/syneditstrconst.ca.po
+++ b/components/synedit/languages/syneditstrconst.ca.po
@@ -519,6 +519,10 @@ msgstr ""
 msgid "Drag Selection"
 msgstr ""
 
+#: syneditstrconst.syns_emcstartdragmove_opt
+msgid "Caret on up if not dragged, No Caret on up if not dragged"
+msgstr ""
+
 #: syneditstrconst.syns_emcstartlineselections
 msgid "Line Selection"
 msgstr ""
diff --git a/components/synedit/languages/syneditstrconst.cs.po b/components/synedit/languages/syneditstrconst.cs.po
index a9ef869182..43d4303128 100644
--- a/components/synedit/languages/syneditstrconst.cs.po
+++ b/components/synedit/languages/syneditstrconst.cs.po
@@ -519,6 +519,10 @@ msgstr "Výběr sloupce"
 msgid "Drag Selection"
 msgstr "Uchop výběr"
 
+#: syneditstrconst.syns_emcstartdragmove_opt
+msgid "Caret on up if not dragged, No Caret on up if not dragged"
+msgstr ""
+
 #: syneditstrconst.syns_emcstartlineselections
 msgid "Line Selection"
 msgstr "Výběr řádky"
diff --git a/components/synedit/languages/syneditstrconst.de.po b/components/synedit/languages/syneditstrconst.de.po
index a89eda8422..ed3dd39e37 100644
--- a/components/synedit/languages/syneditstrconst.de.po
+++ b/components/synedit/languages/syneditstrconst.de.po
@@ -522,6 +522,10 @@ msgstr "Spaltenmodus"
 msgid "Drag Selection"
 msgstr "Auswahl verschieben"
 
+#: syneditstrconst.syns_emcstartdragmove_opt
+msgid "Caret on up if not dragged, No Caret on up if not dragged"
+msgstr ""
+
 #: syneditstrconst.syns_emcstartlineselections
 msgid "Line Selection"
 msgstr "Zeilenmodus"
diff --git a/components/synedit/languages/syneditstrconst.es.po b/components/synedit/languages/syneditstrconst.es.po
index 253df40d94..8d9bfff3e3 100644
--- a/components/synedit/languages/syneditstrconst.es.po
+++ b/components/synedit/languages/syneditstrconst.es.po
@@ -517,6 +517,10 @@ msgstr "Selección de columna"
 msgid "Drag Selection"
 msgstr "Arrastre la selección"
 
+#: syneditstrconst.syns_emcstartdragmove_opt
+msgid "Caret on up if not dragged, No Caret on up if not dragged"
+msgstr ""
+
 #: syneditstrconst.syns_emcstartlineselections
 msgid "Line Selection"
 msgstr "Selección de línea"
diff --git a/components/synedit/languages/syneditstrconst.fi.po b/components/synedit/languages/syneditstrconst.fi.po
index afc944610f..9511e9777e 100644
--- a/components/synedit/languages/syneditstrconst.fi.po
+++ b/components/synedit/languages/syneditstrconst.fi.po
@@ -512,6 +512,10 @@ msgstr "Sarakevalinta"
 msgid "Drag Selection"
 msgstr "Vedä valinta"
 
+#: syneditstrconst.syns_emcstartdragmove_opt
+msgid "Caret on up if not dragged, No Caret on up if not dragged"
+msgstr ""
+
 #: syneditstrconst.syns_emcstartlineselections
 msgid "Line Selection"
 msgstr "Rivivalinta"
diff --git a/components/synedit/languages/syneditstrconst.fr.po b/components/synedit/languages/syneditstrconst.fr.po
index 3e80f02065..f7dd4f5232 100644
--- a/components/synedit/languages/syneditstrconst.fr.po
+++ b/components/synedit/languages/syneditstrconst.fr.po
@@ -518,6 +518,10 @@ msgstr ""
 msgid "Drag Selection"
 msgstr ""
 
+#: syneditstrconst.syns_emcstartdragmove_opt
+msgid "Caret on up if not dragged, No Caret on up if not dragged"
+msgstr ""
+
 #: syneditstrconst.syns_emcstartlineselections
 msgid "Line Selection"
 msgstr ""
diff --git a/components/synedit/languages/syneditstrconst.he.po b/components/synedit/languages/syneditstrconst.he.po
index d56f47060a..7e587b4d65 100644
--- a/components/synedit/languages/syneditstrconst.he.po
+++ b/components/synedit/languages/syneditstrconst.he.po
@@ -517,6 +517,10 @@ msgstr "בחירת עמודה"
 msgid "Drag Selection"
 msgstr "גרור את הבחירה"
 
+#: syneditstrconst.syns_emcstartdragmove_opt
+msgid "Caret on up if not dragged, No Caret on up if not dragged"
+msgstr ""
+
 #: syneditstrconst.syns_emcstartlineselections
 msgid "Line Selection"
 msgstr "בחירת שורה"
diff --git a/components/synedit/languages/syneditstrconst.hu.po b/components/synedit/languages/syneditstrconst.hu.po
index 5ce74a43f8..a9ae90707b 100644
--- a/components/synedit/languages/syneditstrconst.hu.po
+++ b/components/synedit/languages/syneditstrconst.hu.po
@@ -519,6 +519,10 @@ msgstr "Oszlop kijelölés"
 msgid "Drag Selection"
 msgstr "Kijelölés húzása"
 
+#: syneditstrconst.syns_emcstartdragmove_opt
+msgid "Caret on up if not dragged, No Caret on up if not dragged"
+msgstr ""
+
 #: syneditstrconst.syns_emcstartlineselections
 msgid "Line Selection"
 msgstr "Sor kijelölés"
diff --git a/components/synedit/languages/syneditstrconst.id.po b/components/synedit/languages/syneditstrconst.id.po
index 456ce15f4d..6574f170ea 100644
--- a/components/synedit/languages/syneditstrconst.id.po
+++ b/components/synedit/languages/syneditstrconst.id.po
@@ -522,6 +522,10 @@ msgstr ""
 msgid "Drag Selection"
 msgstr ""
 
+#: syneditstrconst.syns_emcstartdragmove_opt
+msgid "Caret on up if not dragged, No Caret on up if not dragged"
+msgstr ""
+
 #: syneditstrconst.syns_emcstartlineselections
 msgid "Line Selection"
 msgstr ""
diff --git a/components/synedit/languages/syneditstrconst.it.po b/components/synedit/languages/syneditstrconst.it.po
index f484c85650..8905a51d97 100644
--- a/components/synedit/languages/syneditstrconst.it.po
+++ b/components/synedit/languages/syneditstrconst.it.po
@@ -520,6 +520,10 @@ msgstr "Scegli colonna"
 msgid "Drag Selection"
 msgstr "Trascina la selezione"
 
+#: syneditstrconst.syns_emcstartdragmove_opt
+msgid "Caret on up if not dragged, No Caret on up if not dragged"
+msgstr ""
+
 #: syneditstrconst.syns_emcstartlineselections
 msgid "Line Selection"
 msgstr "Selezione riga"
diff --git a/components/synedit/languages/syneditstrconst.lt.po b/components/synedit/languages/syneditstrconst.lt.po
index ffbf1af239..dc9cc2880c 100644
--- a/components/synedit/languages/syneditstrconst.lt.po
+++ b/components/synedit/languages/syneditstrconst.lt.po
@@ -520,6 +520,10 @@ msgstr "Stulpelio žymėjimas"
 msgid "Drag Selection"
 msgstr "Vilkti atranką"
 
+#: syneditstrconst.syns_emcstartdragmove_opt
+msgid "Caret on up if not dragged, No Caret on up if not dragged"
+msgstr ""
+
 #: syneditstrconst.syns_emcstartlineselections
 msgid "Line Selection"
 msgstr "Eilutės žymėjimas"
diff --git a/components/synedit/languages/syneditstrconst.nl.po b/components/synedit/languages/syneditstrconst.nl.po
index 5db5902d10..9196af6602 100644
--- a/components/synedit/languages/syneditstrconst.nl.po
+++ b/components/synedit/languages/syneditstrconst.nl.po
@@ -519,6 +519,10 @@ msgstr ""
 msgid "Drag Selection"
 msgstr ""
 
+#: syneditstrconst.syns_emcstartdragmove_opt
+msgid "Caret on up if not dragged, No Caret on up if not dragged"
+msgstr ""
+
 #: syneditstrconst.syns_emcstartlineselections
 msgid "Line Selection"
 msgstr ""
diff --git a/components/synedit/languages/syneditstrconst.pl.po b/components/synedit/languages/syneditstrconst.pl.po
index 47612b12f4..5bc29c4600 100644
--- a/components/synedit/languages/syneditstrconst.pl.po
+++ b/components/synedit/languages/syneditstrconst.pl.po
@@ -523,6 +523,10 @@ msgstr ""
 msgid "Drag Selection"
 msgstr ""
 
+#: syneditstrconst.syns_emcstartdragmove_opt
+msgid "Caret on up if not dragged, No Caret on up if not dragged"
+msgstr ""
+
 #: syneditstrconst.syns_emcstartlineselections
 msgid "Line Selection"
 msgstr "Zaznaczenie wiersza"
diff --git a/components/synedit/languages/syneditstrconst.po b/components/synedit/languages/syneditstrconst.po
index 42382cf940..9fcd0b3aac 100644
--- a/components/synedit/languages/syneditstrconst.po
+++ b/components/synedit/languages/syneditstrconst.po
@@ -509,6 +509,10 @@ msgstr ""
 msgid "Drag Selection"
 msgstr ""
 
+#: syneditstrconst.syns_emcstartdragmove_opt
+msgid "Caret on up if not dragged, No Caret on up if not dragged"
+msgstr ""
+
 #: syneditstrconst.syns_emcstartlineselections
 msgid "Line Selection"
 msgstr ""
diff --git a/components/synedit/languages/syneditstrconst.pt_BR.po b/components/synedit/languages/syneditstrconst.pt_BR.po
index 553285f07b..af587bdc69 100644
--- a/components/synedit/languages/syneditstrconst.pt_BR.po
+++ b/components/synedit/languages/syneditstrconst.pt_BR.po
@@ -518,6 +518,10 @@ msgstr "Seleção Coluna"
 msgid "Drag Selection"
 msgstr "Arrastar Seleção"
 
+#: syneditstrconst.syns_emcstartdragmove_opt
+msgid "Caret on up if not dragged, No Caret on up if not dragged"
+msgstr ""
+
 #: syneditstrconst.syns_emcstartlineselections
 msgid "Line Selection"
 msgstr "Seleção Linha"
diff --git a/components/synedit/languages/syneditstrconst.ru.po b/components/synedit/languages/syneditstrconst.ru.po
index a427a75d88..78f205218f 100644
--- a/components/synedit/languages/syneditstrconst.ru.po
+++ b/components/synedit/languages/syneditstrconst.ru.po
@@ -518,6 +518,10 @@ msgstr "Выделение столбца"
 msgid "Drag Selection"
 msgstr "Перетаскивание выделенного"
 
+#: syneditstrconst.syns_emcstartdragmove_opt
+msgid "Caret on up if not dragged, No Caret on up if not dragged"
+msgstr ""
+
 #: syneditstrconst.syns_emcstartlineselections
 msgid "Line Selection"
 msgstr "Выбор строки"
diff --git a/components/synedit/languages/syneditstrconst.uk.po b/components/synedit/languages/syneditstrconst.uk.po
index 68eebfe888..76127aa650 100644
--- a/components/synedit/languages/syneditstrconst.uk.po
+++ b/components/synedit/languages/syneditstrconst.uk.po
@@ -520,6 +520,10 @@ msgstr "Вибір Стовпчика"
 msgid "Drag Selection"
 msgstr "Вибір Перетягування"
 
+#: syneditstrconst.syns_emcstartdragmove_opt
+msgid "Caret on up if not dragged, No Caret on up if not dragged"
+msgstr ""
+
 #: syneditstrconst.syns_emcstartlineselections
 msgid "Line Selection"
 msgstr "Вибір Рядка"
diff --git a/components/synedit/languages/syneditstrconst.zh_CN.po b/components/synedit/languages/syneditstrconst.zh_CN.po
index a50ce5099c..0e416b8edf 100644
--- a/components/synedit/languages/syneditstrconst.zh_CN.po
+++ b/components/synedit/languages/syneditstrconst.zh_CN.po
@@ -522,6 +522,10 @@ msgstr ""
 msgid "Drag Selection"
 msgstr ""
 
+#: syneditstrconst.syns_emcstartdragmove_opt
+msgid "Caret on up if not dragged, No Caret on up if not dragged"
+msgstr ""
+
 #: syneditstrconst.syns_emcstartlineselections
 msgid "Line Selection"
 msgstr ""
diff --git a/components/synedit/synedit.pp b/components/synedit/synedit.pp
index 4b67fff274..bb8f49ae9d 100644
--- a/components/synedit/synedit.pp
+++ b/components/synedit/synedit.pp
@@ -188,7 +188,7 @@ type
     // Mouse-states
     sfLeftGutterClick, sfRightGutterClick,
     sfInClick, sfDblClicked, sfTripleClicked, sfQuadClicked,
-    sfWaitForDragging, sfIsDragging, sfWaitForMouseSelecting, sfMouseSelecting, sfMouseDoneSelecting,
+    sfWaitForDragging, sfWaitForDraggingNoCaret, sfIsDragging, sfWaitForMouseSelecting, sfMouseSelecting, sfMouseDoneSelecting,
     sfIgnoreUpClick,
     sfSelChanged
     );                                           //mh 2000-10-30
@@ -3205,6 +3205,8 @@ begin
         begin
           if SelAvail and (SelectionMode = smNormal) then begin
             Include(fStateFlags, sfWaitForDragging);
+            if AnAction.Option = emcoNotDragedNoCaretOnUp then
+              Include(fStateFlags, sfWaitForDraggingNoCaret);
             MouseCapture := True;
             ResetMouseCapture := False;
           end
@@ -3441,7 +3443,7 @@ begin
   fStateFlags := fStateFlags - [sfDblClicked, sfTripleClicked, sfQuadClicked,
                                 sfLeftGutterClick, sfRightGutterClick,
                                 sfWaitForMouseSelecting, sfMouseSelecting, sfMouseDoneSelecting,
-                                sfWaitForDragging, sfIgnoreUpClick
+                                sfWaitForDragging, sfWaitForDraggingNoCaret, sfIgnoreUpClick
                                ];
 
   Include(fStateFlags, sfInClick);
@@ -3516,7 +3518,7 @@ begin
       or (Abs(fMouseDownY - Y) >= GetSystemMetrics(SM_CYDRAG))
     then begin
       FStateFlags := FStateFlags
-                   -[sfWaitForDragging, sfWaitForMouseSelecting, sfMouseSelecting]
+                   -[sfWaitForDragging, sfWaitForDraggingNoCaret, sfWaitForMouseSelecting, sfMouseSelecting]
                    + [sfIsDragging];
       FBlockSelection.StickyAutoExtend := False;
       //debugln('TCustomSynEdit.MouseMove BeginDrag');
@@ -3724,7 +3726,7 @@ begin
     CType := ccSingle;
   fStateFlags:=fStateFlags - [sfInClick, sfDblClicked,sfTripleClicked,sfQuadClicked];
 
-  if sfWaitForDragging in fStateFlags then
+  if fStateFlags * [sfWaitForDragging, sfWaitForDraggingNoCaret] = [sfWaitForDragging] then
   begin
     ComputeCaret(X, Y);
     SetBlockBegin(LogicalCaretXY);
diff --git a/components/synedit/syneditmousecmds.pp b/components/synedit/syneditmousecmds.pp
index e248f76841..61002d48ac 100644
--- a/components/synedit/syneditmousecmds.pp
+++ b/components/synedit/syneditmousecmds.pp
@@ -157,6 +157,7 @@ type
     property IgnoreUpClick: Boolean read FIgnoreUpClick write SetIgnoreUpClick  default False; // only for mouse down
     property Option: TSynEditorMouseCommandOpt read FOption write SetOption     default 0;
     property Option2: Integer read FOption2 write SetOption2                    default 0;
+    // Priority: 0 = highest / MaxInt = lowest
     property Priority: TSynEditorMouseCommandOpt read FPriority write SetPriority default 0;
   end;
 
@@ -313,6 +314,9 @@ const
   emcoMouseLinkShow           =  TSynEditorMouseCommandOpt(0);
   emcoMouseLinkHide           =  TSynEditorMouseCommandOpt(1);
 
+  emcoNotDragedSetCaretOnUp   = TSynEditorMouseCommandOpt(0);
+  emcoNotDragedNoCaretOnUp    = TSynEditorMouseCommandOpt(1);
+
   emcoCodeFoldCollapsOne      = TSynEditorMouseCommandOpt(0);
   emcoCodeFoldCollapsAll      = TSynEditorMouseCommandOpt(1);
   emcoCodeFoldCollapsAtCaret  = TSynEditorMouseCommandOpt(2);
@@ -480,6 +484,7 @@ begin
     emcStartLineSelectionsNoneEmpty:   Result := SYNS_emcSelection_opt;
     emcSelectLine:            Result := SYNS_emcSelectLine_opt;
     emcMouseLink:             Result := SYNS_emcMouseLink_opt;
+    emcStartDragMove:         Result := SYNS_emcStartDragMove_opt;
     emcCodeFoldCollaps:       Result := SYNS_emcCodeFoldCollaps_opt;
     emcCodeFoldExpand:        Result := SYNS_emcCodeFoldExpand_opt;
     emcContextMenu:           Result := SYNS_emcContextMenuCaretMove_opt;
diff --git a/components/synedit/syneditstrconst.pp b/components/synedit/syneditstrconst.pp
index 2ff8670510..17e6b1cefe 100644
--- a/components/synedit/syneditstrconst.pp
+++ b/components/synedit/syneditstrconst.pp
@@ -411,6 +411,7 @@ resourcestring
   SYNS_emcPasteSelection           = 'Quick Paste Selection';
   SYNS_emcMouseLink                = 'Source Link';
   SYNS_emcMouseLink_opt            = 'Underline,yes, no';
+  SYNS_emcStartDragMove_opt        = 'Caret on up if not dragged, No Caret on up if not dragged';
   SYNS_emcContextMenu              = 'Popup Menu';
   SYNS_emcBreakPointToggle         = 'Toggle Breakpoint';
   SYNS_emcCodeFoldCollaps          = 'Fold Code';
diff --git a/components/synedit/synpluginmulticaret.pp b/components/synedit/synpluginmulticaret.pp
index f46f863f2f..81b77aa78e 100644
--- a/components/synedit/synpluginmulticaret.pp
+++ b/components/synedit/synpluginmulticaret.pp
@@ -1522,6 +1522,7 @@ begin
   Result := False;
 
   if AnAction.Command = emcPluginMultiCaretToggleCaret then begin
+    Result := True;
     i := Carets.FindCaretIdx(AnInfo.NewCaret.BytePos, AnInfo.NewCaret.LinePos);
     if i >= 0 then
       RemoveCaret(i)
diff --git a/ide/editoroptions.pp b/ide/editoroptions.pp
index 447fac970c..d9d051280f 100644
--- a/ide/editoroptions.pp
+++ b/ide/editoroptions.pp
@@ -3494,7 +3494,7 @@ procedure TEditorMouseOptions.ResetTextToDefault;
         mbaContextMenuTab:
             AddCommand(emcContextMenu, True,       AButton, AClickCount, ADir, AShift, AShiftMask, emcoSelectionCaretMoveOutside, 0, 2);
         mbaMultiCaretToggle:
-            AddCommand(emcPluginMultiCaretToggleCaret, True,       AButton, AClickCount, ADir, AShift, AShiftMask, 0, 0, 0);
+            AddCommand(emcPluginMultiCaretToggleCaret, False, AButton, AClickCount, ADir, AShift, AShiftMask);
       end;
     end;
   end;
@@ -3685,8 +3685,9 @@ begin
 
   if FTextDrag then
     with FSelActions do begin
-      AddCommand(emcStartDragMove, False, mbXLeft, ccSingle, cdDown, [], []);
+      AddCommand(emcStartDragMove, False, mbXLeft, ccSingle, cdDown, [], [], emcoNotDragedNoCaretOnUp);
     end;
+    FTextActions.AddCommand(emcNone, True, mbXLeft, ccSingle, cdUp, [], [], 0, 99);
 end;
 
 procedure TEditorMouseOptions.ResetToUserScheme;