cached by static var.