diff --git a/src/lib/icu/Compare.hxx b/src/lib/icu/Compare.hxx
index 6f4841739..3110d16aa 100644
--- a/src/lib/icu/Compare.hxx
+++ b/src/lib/icu/Compare.hxx
@@ -38,11 +38,11 @@ class IcuCompare {
 #ifdef _WIN32
 	/* Windows API functions work with wchar_t strings, so let's
 	   cache the MultiByteToWideChar() result for performance */
-	BasicAllocatedString<wchar_t> needle;
-#else
-	AllocatedString needle;
+	using AllocatedString = BasicAllocatedString<wchar_t>;
 #endif
 
+	AllocatedString needle;
+
 public:
 	IcuCompare():needle(nullptr) {}
 
@@ -50,12 +50,12 @@ public:
 
 	IcuCompare(const IcuCompare &src) noexcept
 		:needle(src
-			? src.needle.Clone()
+			? AllocatedString(src.needle)
 			: nullptr) {}
 
 	IcuCompare &operator=(const IcuCompare &src) noexcept {
 		needle = src
-			? src.needle.Clone()
+			? AllocatedString(src.needle)
 			: nullptr;
 		return *this;
 	}
diff --git a/src/util/AllocatedString.hxx b/src/util/AllocatedString.hxx
index e977712fc..9b2c5812a 100644
--- a/src/util/AllocatedString.hxx
+++ b/src/util/AllocatedString.hxx
@@ -71,6 +71,9 @@ public:
 	explicit BasicAllocatedString(const_pointer src)
 		:value(Duplicate(src)) {}
 
+	BasicAllocatedString(const BasicAllocatedString &src) noexcept
+		:BasicAllocatedString(Duplicate(src.value)) {}
+
 	BasicAllocatedString(BasicAllocatedString &&src) noexcept
 		:value(src.Steal()) {}
 
@@ -137,10 +140,6 @@ public:
 		return std::exchange(value, nullptr);
 	}
 
-	BasicAllocatedString Clone() const {
-		return BasicAllocatedString(Duplicate(*this));
-	}
-
 private:
 	static pointer Duplicate(string_view src) {
 		auto p = new value_type[src.size() + 1];
@@ -150,7 +149,7 @@ private:
 
 	static pointer Duplicate(const_pointer src) {
 		return src != nullptr
-			? Duplicate(std::string_view(src))
+			? Duplicate(string_view(src))
 			: nullptr;
 	}
 };