implemented different models