added missing @Override + extracted factory method