Why do we need to split `edgeTypes` and `3gTypes`?