add shake and safeValueCast