methods implementation