big refactor and added less support