adding core functions