Updated Layer 3(doesn't compile yet)