I think should be a refactor here. All fire functions have same code algorithm. Maybe a generic private fire can resolve.