Index: Include/com/bstring.ab
===================================================================
--- Include/com/bstring.ab	(revision 267)
+++ Include/com/bstring.ab	(revision 272)
@@ -8,9 +8,5 @@
 
 Class BString
-	Sub Init(s As PCSTR, len As DWord)
-		Dim lenBS = MultiByteToWideChar(CP_THREAD_ACP, 0, s, len As Long, 0, 0)
-		bs = SysAllocStringLen(0, lenBS)
-		MultiByteToWideChar(CP_THREAD_ACP, 0, s, len As Long, bs, lenBS)
-	End Sub
+	'Inherits System.IDisposable, System.ICloneable
 Public
 	Sub BString()
@@ -22,5 +18,5 @@
 	End Sub
 
-	Sub BString(ByRef s As BString)
+	Sub BString(s As BString)
 		Init(s.bs, s.Length)
 	End Sub
@@ -44,5 +40,5 @@
 	End Sub
 
-	Sub BString(ByRef s As String)
+	Sub BString(s As String)
 		Init(s.StrPtr, s.Length As DWord)
 	End Sub
@@ -52,5 +48,5 @@
 	End Sub
 
-	Sub Assign(ByRef bstr As BString)
+	Sub Assign(bstr As BString)
 		Clear()
 		Init(bstr, bstr.Length)
@@ -70,4 +66,12 @@
 		BString.Copy(Copy, bs)
 	End Function
+
+	/*Override*/ Function Clone() As BString
+		Return New BString(This)
+	End Function
+
+	/*Override*/ Sub Dispose()
+		Clear()
+	End Sub
 
 	Sub Clear()
@@ -134,4 +138,10 @@
 	bs As BSTR
 
+	Sub Init(s As PCSTR, len As DWord)
+		Dim lenBS = MultiByteToWideChar(CP_THREAD_ACP, 0, s, len As Long, 0, 0)
+		bs = SysAllocStringLen(0, lenBS)
+		MultiByteToWideChar(CP_THREAD_ACP, 0, s, len As Long, bs, lenBS)
+	End Sub
+
 	Static Sub Copy(ByRef dst As BSTR, ByVal src As BSTR)
 		dst = SysAllocStringLen(src, SysStringLen(src))
