added applicative functionality