reorder abstract classes
add user and magic constants detection