improving block abstractions, not working atm