added qr code generation. requires qrencode