seperated some complex methods