updated with first cut at layer3