user implementation