first pass at components