This method does too much logic ...