improved component API