Index: Include/Classes/System/DateTime.ab
===================================================================
--- Include/Classes/System/DateTime.ab	(revision 234)
+++ Include/Classes/System/DateTime.ab	(revision 237)
@@ -157,5 +157,5 @@
 
 	Function DayOfWeek() As Long 'As DayOfWeek
-		Return (Ticks \ TimeSpan.TicksPerDay) Mod 7 - 1
+		Return ((Ticks \ TimeSpan.TicksPerDay) Mod 7) As Long - 1
 	End Function
 
Index: Include/Classes/System/Environment.ab
===================================================================
--- Include/Classes/System/Environment.ab	(revision 234)
+++ Include/Classes/System/Environment.ab	(revision 237)
@@ -1,4 +1,5 @@
 ' System/Environment.ab
 
+#require <api_psapi.sbp>
 #require <Classes/System/OperatingSystem.ab>
 
@@ -8,5 +9,5 @@
 
 	Static Function CommandLine() As String
-		If cmdLine = Nothing Then
+		If Object.ReferenceEquals(cmdLine, Nothing) Then
 #ifdef __STRING_IS_NOT_UNICODE
 			cmdLine = New String(GetCommandLineA())
@@ -51,5 +52,5 @@
 
 	Static Function OSVersion() As OperatingSystem
-		If osVer = Nothing Then
+		If Object.ReferenceEquals(osVer, Nothing) Then
 			Dim vi As OSVERSIONINFO
 			GetVersionEx(vi)
@@ -71,8 +72,8 @@
 
 	Static Function SystemDirectory() As String
-		If sysDir = Nothing Then
+		If Object.ReferenceEquals(sysDir, Nothing) Then
 			Dim size = GetSystemDirectory(0, 0)
-			Dim p = _System_malloc(SizeOf (TCHAR) * size)
-			Dim len = GetSystemDirectory(size, p)
+			Dim p = _System_malloc(SizeOf (TCHAR) * size) As PTSTR
+			Dim len = GetSystemDirectory(p, size)
 			sysDir = New String(p, len As Long)
 			_System_free(p)
@@ -94,12 +95,14 @@
 
 	Static Function WorkingSet() As Int64
-		Dim pGetProcessMemoryInfo As *Function(Process As HANDLE, ByRef mc As PPROCESS_MEMORY_COUNTERS, cb As DWord) As BOOL
+		TypeDef PFNGetProcessMemoryInfo = *Function(Process As HANDLE, ByRef mc As PROCESS_MEMORY_COUNTERS, cb As DWord) As BOOL
+		Dim pGetProcessMemoryInfo As PFNGetProcessMemoryInfo
 		Dim hmodPSAPI = LoadLibrary("PSAPI.DLL")
 		If hmodPSAPI = 0 Then Return 0
-		pGetProcessMemoryInfo = GetProcAddress(hmodPSAPI, ToMBStr("GetProcessMemoryInfo"))
+		pGetProcessMemoryInfo = GetProcAddress(hmodPSAPI, ToMBStr("GetProcessMemoryInfo")) As PFNGetProcessMemoryInfo
 		If pGetProcessMemoryInfo <> 0 Then
-			Dim mc As PPROCESS_MEMORY_COUNTERS
+			Dim mc As PROCESS_MEMORY_COUNTERS
 			If pGetProcessMemoryInfo(GetCurrentProcess(), mc, Len (mc)) <> FALSE Then
 				WorkingSet = mc.WorkingSetSize
+				
 			End If
 		End If
@@ -117,5 +120,5 @@
 		Dim src = ToTCStr(s)
 		Dim size = ExpandEnvironmentStrings(src, 0, 0)
-		Dim dst = _System_malloc(SizeOf (TCHAR) * size)
+		Dim dst = _System_malloc(SizeOf (TCHAR) * size) As PTSTR
 		ExpandEnvironmentStrings(src, dst, size)
 		ExpandEnvironmentVariables = New String(dst, size - 1)
Index: Include/Classes/System/Math.ab
===================================================================
--- Include/Classes/System/Math.ab	(revision 234)
+++ Include/Classes/System/Math.ab	(revision 237)
@@ -194,5 +194,5 @@
 
 	Static Function Floor(value As Double) As Long
-		return Int(value)
+		Return Int(value)
 	End Function
 
@@ -201,25 +201,24 @@
 	'GetType
 
-	Static Function IEEERemainder(value1 As Double, value2 As Double) As Double
-		Dim q As Double
-		If value2=0 then return _System_GetNaN()
-		q=value1/value2
-		If q<>Int(q) then
-			If q+0.5<>Int(q+0.5) then
-				q=Int(q+0.5)
-			ElseIf Int(q+0.5)=Int(q*2+1)/2 then
-				q=Int(q+0.5)
+	Static Function IEEERemainder(x As Double, y As Double) As Double
+		If y = 0 Then Return _System_GetNaN()
+		Dim q = x / y
+		If q <> Int(q) Then
+			If q + 0.5 <> Int(q + 0.5) Then
+				q = Int(q + 0.5)
+			ElseIf Int(q + 0.5) = Int(q * 2 + 1) / 2 Then
+				q = Int(q + 0.5)
 			Else
-				q=Int(q-0.5)
+				q = Int(q - 0.5)
 			End If
 		End If
-		If x-y*q=0 then
-			If x>0 then
-				return +0
+		If x - y * q = 0 Then
+			If x > 0 Then
+				Return +0
 			Else
-				return -0
+				Return -0
 			End If
 		Else
-			return x-y*q
+			Return x-y*q
 		End If
 	End Function
@@ -252,5 +251,5 @@
 
 	Static Function Log10(x As Double) As Double
-		Return Math.Log(x) / Math.Log(10)
+		Return Math.Log(x) / _System_Ln10
 	End Function
 
@@ -582,5 +581,5 @@
 
 	Static Function Truncate(x As Double) As Double
-		return Fix(x)
+		Return Fix(x)
 	End Function
 
@@ -611,4 +610,5 @@
 Const _System_HalfPI = (_System_PI * 0.5)
 Const _System_InverseHalfPI = (2 / _System_PI) '1 / (PI / 2)
+Const _System_Ln10 = 2.3025850929940456840179914546844 '10の自然対数
 
 #endif '__SYSTEM_MATH_AB__
Index: Include/Classes/System/Object.ab
===================================================================
--- Include/Classes/System/Object.ab	(revision 234)
+++ Include/Classes/System/Object.ab	(revision 237)
@@ -10,5 +10,6 @@
 	' 2つのオブジェクトが等しいかどうかを判断する
 	Virtual Function Equals( object As Object ) As Boolean
-		If This.GetHashCode() = object.GetHashCode() Then
+		If ObjPtr(This) = ObjPtr(object) Then
+'		If This.GetHashCode() = object.GetHashCode() Then
 			Return True
 		Else
@@ -16,9 +17,10 @@
 		End If
 	End Function
+	
 	Static Function Equals( objectA As Object, objectB As Object ) As Boolean
 		If ObjPtr(objectA) = NULL /*objectA = Nothing*/ Then
 			Return ObjPtr(objectB) = NULL 'objectB = Nothing
 		Else
-			Return objectA.Equals( objectB )
+			Return objectA.Equals(objectB)
 		End If
 	End Function
@@ -35,5 +37,5 @@
 	' ハッシュコードを取得する
 	Virtual Function GetHashCode() As Long
-		Return VarPtr( This ) As Long
+		Return ObjPtr( This ) As Long
 	End Function
 
Index: Include/Classes/System/OperatingSystem.ab
===================================================================
--- Include/Classes/System/OperatingSystem.ab	(revision 234)
+++ Include/Classes/System/OperatingSystem.ab	(revision 237)
@@ -17,13 +17,13 @@
 
 	Sub OperatingSystem(vi As OSVERSIONINFOA)
-		pf = vi.dwPlatformId As PlatformID,
+		pf = vi.dwPlatformId As PlatformID
 		ver = New Version(vi.dwMajorVersion, vi.dwMinorVersion, vi.dwBuildNumber)
-		sp = vi.szCSDVersion
+		sp = New String(vi.szCSDVersion As PCSTR)
 	End Sub
 
 	Sub OperatingSystem(vi As OSVERSIONINFOW)
-		pf = vi.dwPlatformId As PlatformID,
+		pf = vi.dwPlatformId As PlatformID
 		ver = New Version(vi.dwMajorVersion, vi.dwMinorVersion, vi.dwBuildNumber)
-		sp = vi.szCSDVersion
+		sp = New String(vi.szCSDVersion As PCSTR)
 	End Sub
 
Index: Include/Classes/System/String.ab
===================================================================
--- Include/Classes/System/String.ab	(revision 234)
+++ Include/Classes/System/String.ab	(revision 237)
@@ -184,14 +184,14 @@
 
 	Static Function CompareOrdinal(x As String, indexX As Long, y As String, indexY As Long, length As Long) As Long
-		If x = Nothing Then
-			If y = Nothing Then
+		If Object.ReferenceEquals(x, Nothing) Then
+			If Object.ReferenceEquals(y, Nothing) Then
 				Return 0
 			Else
 				Return -1
 			End If
-		ElseIf y = Nothing Then
+		ElseIf Object.ReferenceEquals(y, Nothing) Then
 			Return 1
 		End If
-		Return _System_StrCmpN(VarPtr(x.Chars[indexX]), VarPtr(y.Chars[indexY]), length)
+		Return _System_StrCmpN(VarPtr(x.Chars[indexX]), VarPtr(y.Chars[indexY]), length As SIZE_T)
 	End Function
 
@@ -344,8 +344,8 @@
 #ifdef __STRING_IS_NOT_UNICODE
 		With Concat
-			Dim lenA = MultiByteToWideChar(CP_THREAD_ACP, 0, text, len, 0, 0, 0, 0)
+			Dim lenA = WideCharToMultiByte(CP_THREAD_ACP, 0, text, len, 0, 0, 0, 0)
 			.AllocStringBuffer(m_Length + lenA)
 			memcpy(.Chars, This.Chars, m_Length)
-			MultiByteToWideChar(CP_THREAD_ACP, 0, text, len, VarPtr(.Chars[m_Length]), lenA, 0, 0)
+			WideCharToMultiByte(CP_THREAD_ACP, 0, text, len, VarPtr(.Chars[m_Length]), lenA, 0, 0)
 			.Chars[m_Length + lenA] = 0
 		End With
@@ -473,5 +473,5 @@
 		temp.AllocStringBuffer(length)
 		memcpy(temp.Chars, VarPtr(Chars[startIndex]), SizeOf (StrChar) * length)
-		Chars[m_Length] = 0
+		temp.Chars[m_Length] = 0
 		Return temp
 	End Function
@@ -527,8 +527,8 @@
 	End Function
 
-	Const Function Replace(oldStr As *StrChar, newStr As *StrChar)
+	Const Function Replace(oldStr As *StrChar, newStr As *StrChar) As String
 		If oldStr = 0 Then Debug 'Throw ArgumentNullException
 		If newStr = 0 Then newStr = ""
-		Return ReplaceCore(oldStr, lstrlen(oldStr), newStr, lstrlen(newStr)) As String
+		Return ReplaceCore(oldStr, lstrlen(oldStr), newStr, lstrlen(newStr)) 
 	End Function
 
Index: Include/Classes/System/Threading/Thread.ab
===================================================================
--- Include/Classes/System/Threading/Thread.ab	(revision 234)
+++ Include/Classes/System/Threading/Thread.ab	(revision 237)
@@ -52,5 +52,5 @@
 	End Sub
 
-	Sub Thread(hThread As HANDLE,dwThreadId As DWord,dummy As Long)
+	Sub Thread(hThread As HANDLE, dwThreadId As DWord, dummy As Long)
 		m_hThread=hThread
 		m_dwThreadId=dwThreadId
@@ -61,12 +61,7 @@
 
 
-	Function Equals( thread As Thread ) As Boolean
-		If m_dwThreadId = thread.m_dwThreadId Then
-			Return True
-		End If
-		Return False
-	End Function
-
-
+	Function Equals(thread As Thread) As Boolean
+		Return m_dwThreadId = thread.m_dwThreadId
+	End Function
 
 	'-----------------------
@@ -74,4 +69,5 @@
 	'-----------------------
 
+	
 	'Priority Property
 	Sub Priority(value As ThreadPriority)
@@ -87,4 +83,5 @@
 		Return m_dwThreadId
 	End Function
+
 
 
@@ -314,5 +311,5 @@
 
 	'カレントスレッドを取得
-	Function CurrentThread(ByRef obj_Thread As Thread) As BOOL
+	Function CurrentThread(ByRef obj_Thread As Thread) As Boolean
 		Dim dwNowThreadId As DWord
 		dwNowThreadId=GetCurrentThreadId()
@@ -322,9 +319,9 @@
 			If ppobj_Thread[i]->ThreadId=dwNowThreadId Then
 				obj_Thread.Thread(ByVal ppobj_Thread[i])
-				Return 1
-			End If
-		Next
-
-		Return 0
+				Return True
+			End If
+		Next
+
+		Return False
 	End Function
 
Index: Include/Classes/System/Threading/WaitHandle.ab
===================================================================
--- Include/Classes/System/Threading/WaitHandle.ab	(revision 234)
+++ Include/Classes/System/Threading/WaitHandle.ab	(revision 237)
@@ -63,12 +63,12 @@
 
 	Static Function SignalAndWait(ByRef toSignal As WaitHandle, ByRef toWaitOn As WaitHandle, millisecondsTimeout As Long, exitContext As BOOL) As BOOL
-		Dim pSignalObjectAndWait = GetProcAddress(GetModuleHandle("Kernel32.dll"), "SignalObjectAndWait") _
-			As *Function(hObjectToSignal As HANDLE, hObjectToWaitOn As HANDLE, dwMilliseconds As DWord, bAlertable As DWord) As DWord
+		TypeDef PFNSignalObjectAndWait = *Function(hObjectToSignal As HANDLE, hObjectToWaitOn As HANDLE, dwMilliseconds As DWord, bAlertable As DWord) As DWord
+		Dim pSignalObjectAndWait = GetProcAddress(GetModuleHandle("Kernel32.dll"), "SignalObjectAndWait") As PFNSignalObjectAndWait
 		If pSignalObjectAndWait = 0 Then
 			' PlatformNotSupportedException
 			Debug
-			ExitThread(0)
+			ExitThread(-1)
 		End If
-		Return WaitHandle.AfterWait(pSignalAndWait(toSignal.Handle, toWaitOn.Handle, millisecondsTimeout As DWord), 1)
+		Return WaitHandle.AfterWait(pSignalObjectAndWait(toSignal.Handle, toWaitOn.Handle, millisecondsTimeout As DWord, FALSE), 1)
 	End Function
 
