use delegate instead of live