Index: code/freespace2/freespace.cpp
===================================================================
--- code/freespace2/freespace.cpp	(revision 10918)
+++ code/freespace2/freespace.cpp	(working copy)
@@ -1025,6 +1025,7 @@
 	control_config_clear_used_status();
 	collide_ship_ship_sounds_init();
 	Missiontime = 0;
+	Skybox_timestamp = game_get_overall_frametime();
 	Pre_player_entry = 1;			//	Means the player has not yet entered.
 	Entry_delay_time = 0;			//	Could get overwritten in mission read.
 	observer_init();
Index: code/freespace2/freespace.h
===================================================================
--- code/freespace2/freespace.h	(revision 10918)
+++ code/freespace2/freespace.h	(working copy)
@@ -37,6 +37,7 @@
 extern float flFrametime;
 extern fix Missiontime;
 extern int Last_frame_timestamp; // A timestamp for when the previous frame ended
+extern fix Skybox_timestamp;	// A timestamp for animated skyboxes -MageKing17
 
 // 0 - 4
 extern int Game_skill_level;
Index: code/globalincs/systemvars.cpp
===================================================================
--- code/globalincs/systemvars.cpp	(revision 10918)
+++ code/globalincs/systemvars.cpp	(working copy)
@@ -17,6 +17,7 @@
 
 
 fix Missiontime;
+fix Skybox_timestamp;
 fix Frametime;
 int	Framecount=0;
 
Index: code/globalincs/systemvars.h
===================================================================
--- code/globalincs/systemvars.h	(revision 10918)
+++ code/globalincs/systemvars.h	(working copy)
@@ -80,6 +80,7 @@
 } vci;
 
 extern fix Missiontime;
+extern fix Skybox_timestamp;
 extern fix Frametime;
 extern int Framecount;
 
Index: code/model/model.h
===================================================================
--- code/model/model.h	(revision 10918)
+++ code/model/model.h	(working copy)
@@ -846,7 +846,7 @@
 
 // Renders a model and all it's submodels.
 // See MR_? defines for values for flags
-void model_render(int model_num, matrix *orient, vec3d * pos, uint flags = MR_NORMAL, int objnum = -1, int lighting_skip = -1, int *replacement_textures = NULL);
+void model_render(int model_num, matrix *orient, vec3d * pos, uint flags = MR_NORMAL, int objnum = -1, int lighting_skip = -1, int *replacement_textures = NULL, const bool is_skybox = false);
 
 // Renders just one particular submodel on a model.
 // See MR_? defines for values for flags
Index: code/model/modelinterp.cpp
===================================================================
--- code/model/modelinterp.cpp	(revision 10918)
+++ code/model/modelinterp.cpp	(working copy)
@@ -761,15 +761,6 @@
 	texture_info *tglow = &tmap->textures[TM_GLOW_TYPE];
 	int rt_begin_index = tmap_num*TM_NUM_TYPES;
 
-	// Goober5000
-	Interp_base_frametime = 0;
-	if (Interp_objnum >= 0)
-	{
-		object *objp = &Objects[Interp_objnum];
-		if (objp->type == OBJ_SHIP)
-			Interp_base_frametime = Ships[objp->instance].base_texture_anim_frametime;
-	}
-
 	int is_invisible = 0;
 
 	if (Interp_warp_bitmap < 0) {
@@ -1958,7 +1949,7 @@
 	dc_printf("model_darkening set to %.1f\n", Interp_depth_scale);
 }
 
-void model_render(int model_num, matrix *orient, vec3d * pos, uint flags, int objnum, int lighting_skip, int *replacement_textures)
+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;
 	// replacement textures - Goober5000
@@ -1997,6 +1988,20 @@
 		cull = gr_set_cull(0);
 	}
 
+	// Goober5000
+	Interp_base_frametime = 0;
+
+	if (objnum >= 0) {
+		object *objp = &Objects[objnum];
+
+		if (objp->type == OBJ_SHIP) {
+			Interp_base_frametime = Ships[objp->instance].base_texture_anim_frametime;
+		}
+	} else if (is_skybox) {
+		Interp_base_frametime = Skybox_timestamp;
+	}
+
+
 	Interp_objnum = objnum;
 
 	if ( flags & MR_NO_LIGHTING )	{
@@ -2980,13 +2985,6 @@
 		cull = gr_set_cull(1);
 	}
 
-	// Goober5000
-	Interp_base_frametime = 0;
-
-	if ( (objp != NULL) && (objp->type == OBJ_SHIP) ) {
-		Interp_base_frametime = Ships[objp->instance].base_texture_anim_frametime;
-	}
-
 	if ( !(Interp_flags & MR_NO_LIGHTING) ) {
 		gr_set_lighting(true, true);
 	}
Index: code/parse/sexp.cpp
===================================================================
--- code/parse/sexp.cpp	(revision 10918)
+++ code/parse/sexp.cpp	(working copy)
@@ -639,7 +639,7 @@
 	{ "nebula-change-storm",			OP_NEBULA_CHANGE_STORM,					1,	1,			SEXP_ACTION_OPERATOR,	},	// phreak
 	{ "nebula-toggle-poof",				OP_NEBULA_TOGGLE_POOF,					2,	2,			SEXP_ACTION_OPERATOR,	},	// phreak
 	{ "nebula-change-pattern",			OP_NEBULA_CHANGE_PATTERN,				1,	1,			SEXP_ACTION_OPERATOR,	},	// Axem
-	{ "set-skybox-model",				OP_SET_SKYBOX_MODEL,					1,	7,			SEXP_ACTION_OPERATOR,	},	// taylor
+	{ "set-skybox-model",				OP_SET_SKYBOX_MODEL,					1,	8,			SEXP_ACTION_OPERATOR,	},	// taylor
 	{ "set-skybox-orientation",			OP_SET_SKYBOX_ORIENT,					3,	3,			SEXP_ACTION_OPERATOR,	},	// Goober5000
 	{ "set-ambient-light",				OP_SET_AMBIENT_LIGHT,					3,	3,			SEXP_ACTION_OPERATOR,	},	// Karajorma
 
@@ -16611,8 +16611,15 @@
 	strcpy_s(new_skybox_model, CTEXT(n));
 	int new_skybox_model_flags = DEFAULT_NMODEL_FLAGS;
 
+	// check if we need to reset the animated texture timestamp
+	n = CDR(n);
+	if (n == -1 || !is_sexp_true(n)) {
+		Skybox_timestamp = game_get_overall_frametime();
+	}
+
+	if (n != -1) n = CDR(n);
+
 	// gather any flags
-	n = CDR(n);
 	while (n != -1) {
 		// this should check all entries in Skybox_flags
 		if ( !stricmp("add-lighting", CTEXT(n) )) {
@@ -27038,7 +27045,9 @@
 		case OP_SET_SKYBOX_MODEL:
 			if (argnum == 0)
 				return OPF_SKYBOX_MODEL_NAME;
-			else if (argnum <= 7)
+			else if (argnum == 1)
+				return OPF_BOOL;
+			else
 				return OPF_SKYBOX_FLAGS;
 
 		case OP_SET_SKYBOX_ORIENT:
@@ -32626,7 +32635,8 @@
 	{ OP_SET_SKYBOX_MODEL, "set-skybox-model\r\n"
 		"\tSets the current skybox model.  Takes 1-7 arguments\r\n"
 		"\t1:\tModel filename (with .pof extension) to switch to\r\n"
-		"\t2-7:\tSet or unset the following skyboxes flags\r\n"
+		"\t2:\tKeep skybox animated texture timestamp (optional, defaults to false)\r\n"
+		"\t3-8:\tSet or unset the following skyboxes flags\r\n"
 		"\t\t\tadd-lighting, no-transparency, add-zbuffer\r\n"
 		"\t\t\tadd-culling, no-glowmaps, force-clamp\r\n\r\n"
 		"Note: If the model filename is set to \"default\" with no extension then it will switch to the mission supplied default skybox."
Index: code/starfield/starfield.cpp
===================================================================
--- code/starfield/starfield.cpp	(revision 10918)
+++ code/starfield/starfield.cpp	(working copy)
@@ -2152,7 +2152,7 @@
 	// draw the model at the player's eye with no z-buffering
 	model_set_alpha(1.0f);
 
-	model_render(Nmodel_num, &Nmodel_orient, &Eye_position, Nmodel_flags);
+	model_render(Nmodel_num, &Nmodel_orient, &Eye_position, Nmodel_flags, -1, -1, NULL, true);
 
 	if (Nmodel_bitmap >= 0) {
 		model_set_forced_texture(-1);
