method implimintation