removed support for boolean middleware (too weird), added halt flag to redirect()