diff --git a/.gitignore b/.gitignore
index 259148f..0da26e3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -30,3 +30,4 @@
 *.exe
 *.out
 *.app
+TextEditor.cpp.bak
diff --git a/TextEditor.cpp b/TextEditor.cpp
index 1f03e9c..0266ecd 100644
--- a/TextEditor.cpp
+++ b/TextEditor.cpp
@@ -43,6 +43,9 @@
 	, mSelectionMode(SelectionMode::Normal)
 	, mCheckComments(true)
 	, mLastClick(-1.0f)
+	, mHandleKeyboardInputs(true)
+	, mHandleMouseInputs(true)
+	, mIgnoreImGuiChild(false)
 {
 	SetPalette(GetDarkPalette());
 	SetLanguageDefinition(LanguageDefinition::HLSL());
@@ -461,7 +464,7 @@
 
 	if (ImGui::IsWindowFocused())
 	{
-		if (ImGui::IsWindowHovered())
+		if (ImGui::IsWindowHovered() && !ImGui::IsAnyItemHovered() && !ImGui::IsAnyItemFocused())
 			ImGui::SetMouseCursor(ImGuiMouseCursor_TextInput);
 		//ImGui::CaptureKeyboardFromApp(true);
 
@@ -836,16 +839,22 @@
 
 	ImGui::PushStyleColor(ImGuiCol_ChildWindowBg, ImGui::ColorConvertU32ToFloat4(mPalette[(int)PaletteIndex::Background]));
 	ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(0.0f, 0.0f));
-	ImGui::BeginChild(aTitle, aSize, aBorder, ImGuiWindowFlags_HorizontalScrollbar | ImGuiWindowFlags_AlwaysHorizontalScrollbar | ImGuiWindowFlags_NoMove);
-	ImGui::PushAllowKeyboardFocus(true);
+	if( !mIgnoreImGuiChild)
+		ImGui::BeginChild(aTitle, aSize, aBorder, ImGuiWindowFlags_HorizontalScrollbar | ImGuiWindowFlags_AlwaysHorizontalScrollbar | ImGuiWindowFlags_NoMove);
+	
+	if (mHandleKeyboardInputs) {
+		HandleKeyboardInputs();
+		ImGui::PushAllowKeyboardFocus(true);
+	}
 
-	HandleKeyboardInputs();
-	HandleMouseInputs();
+	if( mHandleMouseInputs)    HandleMouseInputs();
+
 	ColorizeInternal();
 	Render();
 
-	ImGui::PopAllowKeyboardFocus();
-	ImGui::EndChild();
+	if (mHandleKeyboardInputs) ImGui::PopAllowKeyboardFocus();
+
+	if( !mIgnoreImGuiChild) ImGui::EndChild();
 	ImGui::PopStyleVar();
 	ImGui::PopStyleColor();
 
@@ -935,6 +944,9 @@
 				end.mColumn = (int)mLines[end.mLine].size();
 			}
 
+			if (end.mColumn >= (int)mLines[end.mLine].size())
+				end.mColumn = (int)mLines[end.mLine].size() - 1;
+
 			u.mRemovedStart = start;
 			u.mRemovedEnd = end;
 			u.mRemoved = GetText(start, end);
@@ -978,6 +990,8 @@
 
 			if (modified)
 			{
+				assert(mLines.size() > start.mLine && mLines[start.mLine].size() > start.mColumn);
+				assert(mLines.size() > end.mLine && mLines[end.mLine].size() > end.mColumn);
 				u.mAddedStart = start;
 				u.mAddedEnd = end;
 				u.mAdded = GetText(start, end);
@@ -1949,7 +1963,6 @@
 			}
 		}
 		mCheckComments = false;
-		return;
 	}
 
 	if (mColorRangeMin < mColorRangeMax)
diff --git a/TextEditor.h b/TextEditor.h
index 66df7eb..cfc68d5 100644
--- a/TextEditor.h
+++ b/TextEditor.h
@@ -206,6 +206,10 @@
 	Coordinates GetCursorPosition() const { return GetActualCursorCoordinates(); }
 	void SetCursorPosition(const Coordinates& aPosition);
 
+	void SetHandleMouseInputs    (bool aValue){ mHandleMouseInputs    = aValue;}
+	void SetHandleKeyboardInputs (bool aValue){ mHandleKeyboardInputs = aValue;}
+	void SetImGuiChildIgnored    (bool aValue){ mIgnoreImGuiChild     = aValue;}
+
 	void InsertText(const std::string& aValue);
 	void InsertText(const char* aValue);
 
@@ -335,6 +339,9 @@
 	bool mCursorPositionChanged;
 	int mColorRangeMin, mColorRangeMax;
 	SelectionMode mSelectionMode;
+	bool mHandleKeyboardInputs;
+	bool mHandleMouseInputs;
+	bool mIgnoreImGuiChild;
 
 	Palette mPaletteBase;
 	Palette mPalette;
