diff --git a/code/modules/mob/living/carbon/human/login.dm b/code/modules/mob/living/carbon/human/login.dm
index 80d6f00288b..14372e6c976 100644
--- a/code/modules/mob/living/carbon/human/login.dm
+++ b/code/modules/mob/living/carbon/human/login.dm
@@ -1,5 +1,9 @@
/mob/living/carbon/human/Login()
..()
+
+ if(species && species.ventcrawler)
+ src << "You can ventcrawl! Use alt+click on vents to quickly travel about the station."
+ update_pipe_vision()
update_hud()
ticker.mode.update_all_synd_icons() //This proc only sounds CPU-expensive on paper. It is O(n^2), but the outer for-loop only iterates through syndicates, which are only prsenet in nuke rounds and even when they exist, there's usually 6 of them.
return
diff --git a/code/modules/mob/living/login.dm b/code/modules/mob/living/login.dm
index 66abaefee4b..3d107d3857a 100644
--- a/code/modules/mob/living/login.dm
+++ b/code/modules/mob/living/login.dm
@@ -8,10 +8,6 @@
player_logged = 0
//Vents
- if(ishuman(src))
- var/mob/living/carbon/human/H
- if(H.species.ventcrawler)
- src << "You can ventcrawl! Use alt+click on vents to quickly travel about the station."
if(ventcrawler)
src << "You can ventcrawl! Use alt+click on vents to quickly travel about the station."
//Should update regardless of if we can ventcrawl, since we can end up in pipes in other ways.