Index: code/model/modelinterp.cpp
===================================================================
--- code/model/modelinterp.cpp	(revision 11150)
+++ code/model/modelinterp.cpp	(working copy)
@@ -1952,6 +1952,8 @@
 void model_render(int model_num, matrix *orient, vec3d * pos, uint flags, int objnum, int lighting_skip, int *replacement_textures, const bool is_skybox)
 {
 	int cull = 0;
+
+	model_do_look_at(model_num);
 	// replacement textures - Goober5000
 	model_set_replacement_textures(replacement_textures);
 
Index: code/model/modelread.cpp
===================================================================
--- code/model/modelread.cpp	(revision 11150)
+++ code/model/modelread.cpp	(working copy)
@@ -1259,14 +1259,6 @@
 					}
 				}
 
-				// Sets can_move on submodels which are of a rotating type or which have such a parent somewhere down the hierarchy
-				if ( (pm->submodel[n].movement_type != MOVEMENT_TYPE_NONE)
-					|| strstr(props, "$triggered:") || strstr(props, "$rotate") || strstr(props, "$dumb_rotate:") || strstr(props, "$gun_rotation:") || strstr(props, "$gun_rotation") ) {
-					pm->submodel[n].can_move = true;
-				} else if (pm->submodel[n].parent > -1 && pm->submodel[pm->submodel[n].parent].can_move) {
-					pm->submodel[n].can_move = true;
-				}
-
 				if ( ( p = strstr(props, "$look_at:")) != NULL ) {
 					pm->submodel[n].movement_type = MOVEMENT_TYPE_LOOK_AT;
 					get_user_prop_value(p+9, pm->submodel[n].look_at);
@@ -1283,6 +1275,14 @@
 					pm->submodel[n].dumb_turn_rate = 0.0f;
 				}
 
+				// Sets can_move on submodels which are of a rotating type or which have such a parent somewhere down the hierarchy
+				if ( (pm->submodel[n].movement_type != MOVEMENT_TYPE_NONE)
+					|| strstr(props, "$triggered:") || strstr(props, "$rotate") || strstr(props, "$gun_rotation:") || strstr(props, "$gun_rotation") ) {
+					pm->submodel[n].can_move = true;
+				} else if (pm->submodel[n].parent > -1 && pm->submodel[pm->submodel[n].parent].can_move) {
+					pm->submodel[n].can_move = true;
+				}
+
 				if ( pm->submodel[n].name[0] == '\0' ) {
 					strcpy_s(pm->submodel[n].name, "unknown object name");
 				}
@@ -3472,7 +3472,7 @@
 		}
 
 		if (sm->look_at_num == -2) {
-			Warning( LOCATION, "Invalid submodel name given in $look_at: property in model file <%s>. (%s looking for %s)\n", pm->filename, pm->submodel->name, sm->look_at );
+			Warning( LOCATION, "Invalid submodel name given in $look_at: property in model file <%s>. (%s looking for %s)\n", pm->filename, sm->name, sm->look_at );
 			sm->look_at_num = -1; // Set to -1 to not break stuff
 		}
 	}
