First working draft.  Projectiong needs to be implemented