introduce more generic structure