diff --git a/core/fxcrt/bytestring.cpp b/core/fxcrt/bytestring.cpp
index 2b17975..4516f81 100644
--- a/core/fxcrt/bytestring.cpp
+++ b/core/fxcrt/bytestring.cpp
@@ -332,20 +332,6 @@
   m_pData->m_String[index] = c;
 }
 
-size_t ByteString::Insert(size_t index, char ch) {
-  const size_t cur_length = GetLength();
-  if (!IsValidLength(index))
-    return cur_length;
-
-  const size_t new_length = cur_length + 1;
-  ReallocBeforeWrite(new_length);
-  FXSYS_memmove(m_pData->m_String + index + 1, m_pData->m_String + index,
-                new_length - index);
-  m_pData->m_String[index] = ch;
-  m_pData->m_nDataLength = new_length;
-  return new_length;
-}
-
 std::optional<size_t> ByteString::Find(char ch, size_t start) const {
   if (!m_pData)
     return std::nullopt;
diff --git a/core/fxcrt/bytestring.h b/core/fxcrt/bytestring.h
index b985adc..20de629 100644
--- a/core/fxcrt/bytestring.h
+++ b/core/fxcrt/bytestring.h
@@ -102,10 +102,6 @@
 
   void SetAt(size_t index, char c);
 
-  size_t Insert(size_t index, char ch);
-  size_t InsertAtFront(char ch) { return Insert(0, ch); }
-  size_t InsertAtBack(char ch) { return Insert(GetLength(), ch); }
-
   void Reserve(size_t len);
 
   ByteString Substr(size_t offset) const;
diff --git a/core/fxcrt/string_template.cpp b/core/fxcrt/string_template.cpp
index f2be1ee..8eb95cf 100644
--- a/core/fxcrt/string_template.cpp
+++ b/core/fxcrt/string_template.cpp
@@ -101,6 +101,21 @@
 }
 
 template <typename T>
+size_t StringTemplate<T>::Insert(size_t index, T ch) {
+  const size_t cur_length = GetLength();
+  if (!IsValidLength(index)) {
+    return cur_length;
+  }
+  const size_t new_length = cur_length + 1;
+  ReallocBeforeWrite(new_length);
+  fxcrt::spanmove(m_pData->capacity_span().subspan(index + 1),
+                  m_pData->capacity_span().subspan(index, new_length - index));
+  m_pData->m_String[index] = ch;
+  m_pData->m_nDataLength = new_length;
+  return new_length;
+}
+
+template <typename T>
 size_t StringTemplate<T>::Delete(size_t index, size_t count) {
   if (!m_pData) {
     return 0;
diff --git a/core/fxcrt/string_template.h b/core/fxcrt/string_template.h
index b81aaef..4df22ce 100644
--- a/core/fxcrt/string_template.h
+++ b/core/fxcrt/string_template.h
@@ -104,6 +104,11 @@
   // to GetBuffer(), to indicate how much of the buffer was actually used.
   void ReleaseBuffer(size_t nNewLength);
 
+  // Returns size of string following insertion.
+  size_t Insert(size_t index, T ch);
+  size_t InsertAtFront(T ch) { return Insert(0, ch); }
+  size_t InsertAtBack(T ch) { return Insert(GetLength(), ch); }
+
   // Returns number of instances of `ch` removed.
   size_t Remove(T ch);
 
diff --git a/core/fxcrt/widestring.cpp b/core/fxcrt/widestring.cpp
index 79ffa10..cdbf47d 100644
--- a/core/fxcrt/widestring.cpp
+++ b/core/fxcrt/widestring.cpp
@@ -647,20 +647,6 @@
   return Substr(GetLength() - count, count);
 }
 
-size_t WideString::Insert(size_t index, wchar_t ch) {
-  const size_t cur_length = GetLength();
-  if (!IsValidLength(index))
-    return cur_length;
-
-  const size_t new_length = cur_length + 1;
-  ReallocBeforeWrite(new_length);
-  FXSYS_wmemmove(m_pData->m_String + index + 1, m_pData->m_String + index,
-                 new_length - index);
-  m_pData->m_String[index] = ch;
-  m_pData->m_nDataLength = new_length;
-  return new_length;
-}
-
 std::optional<size_t> WideString::Find(wchar_t ch, size_t start) const {
   if (!m_pData)
     return std::nullopt;
diff --git a/core/fxcrt/widestring.h b/core/fxcrt/widestring.h
index e671dd1..8c18b00 100644
--- a/core/fxcrt/widestring.h
+++ b/core/fxcrt/widestring.h
@@ -116,10 +116,6 @@
   WideString First(size_t count) const;
   WideString Last(size_t count) const;
 
-  size_t Insert(size_t index, wchar_t ch);
-  size_t InsertAtFront(wchar_t ch) { return Insert(0, ch); }
-  size_t InsertAtBack(wchar_t ch) { return Insert(GetLength(), ch); }
-
   void MakeLower();
   void MakeUpper();
 
