diff --git a/auxlib.go b/auxlib.go
index <HASH>..<HASH> 100644
--- a/auxlib.go
+++ b/auxlib.go
@@ -48,6 +48,8 @@ func (ls *LState) CheckString(n int) string {
 	v := ls.Get(n)
 	if lv, ok := v.(LString); ok {
 		return string(lv)
+	} else if LVCanConvToString(v) {
+		return ls.ToString(n)
 	}
 	ls.TypeError(n, LTString)
 	return ""
diff --git a/auxlib_test.go b/auxlib_test.go
index <HASH>..<HASH> 100644
--- a/auxlib_test.go
+++ b/auxlib_test.go
@@ -49,9 +49,11 @@ func TestCheckString(t *testing.T) {
 		L.Push(LString("aaa"))
 		errorIfNotEqual(t, "aaa", L.CheckString(2))
 		L.Push(LNumber(10))
-		L.CheckString(3)
+		errorIfNotEqual(t, "10", L.CheckString(3))
+		L.Push(L.NewTable())
+		L.CheckString(4)
 		return 0
-	}, "string expected, got number")
+	}, "string expected, got table")
 }
 
 func TestCheckBool(t *testing.T) {
LState.CheckString should cast number to string and return