first pass at generic skeleton