implement action functionality