large refactor; better module structure, better custom parsing method through subclassing