random subjects added, and many refactoring