modules can now specify middleware