Added strategy pattern.. might be wrongly implemented, need to check this..