Index: code/parse/sexp.cpp
===================================================================
--- code/parse/sexp.cpp	(revision 9942)
+++ code/parse/sexp.cpp	(working copy)
@@ -21024,20 +21024,26 @@
 	return;
 }
 
-bool test_point_within_box(vec3d *test_point, vec3d *box_corner_1, vec3d *box_corner_2, object *reference_ship_obj)
+bool test_point_within_box(const vec3d *point_to_test, vec3d *box_corner_1, vec3d *box_corner_2, object *reference_ship_obj)
 {
+	// don't modify the input object!
+	vec3d test_point;
+	test_point.xyz.x = point_to_test->xyz.x;
+	test_point.xyz.y = point_to_test->xyz.y;
+	test_point.xyz.z = point_to_test->xyz.z;
+
 	// If reference_ship is specified, rotate test_point into its reference frame
 	if (reference_ship_obj != NULL) 
 	{
 		vec3d tempv;
-		vm_vec_sub(&tempv, test_point, &reference_ship_obj->pos);
-		vm_vec_unrotate(test_point, &tempv, &reference_ship_obj->orient);
+		vm_vec_sub(&tempv, &test_point, &reference_ship_obj->pos);
+		vm_vec_unrotate(&test_point, &tempv, &reference_ship_obj->orient);
 	}
 
 	// Check to see if the test point is within the specified box as defined by two extreme corners
-	return ((test_point->xyz.x >= box_corner_1->xyz.x && test_point->xyz.x <= box_corner_2->xyz.x) &&
-			(test_point->xyz.y >= box_corner_1->xyz.y && test_point->xyz.y <= box_corner_2->xyz.y) &&
-			(test_point->xyz.z >= box_corner_1->xyz.z && test_point->xyz.z <= box_corner_2->xyz.z));
+	return ((test_point.xyz.x >= box_corner_1->xyz.x && test_point.xyz.x <= box_corner_2->xyz.x) &&
+			(test_point.xyz.y >= box_corner_1->xyz.y && test_point.xyz.y <= box_corner_2->xyz.y) &&
+			(test_point.xyz.z >= box_corner_1->xyz.z && test_point.xyz.z <= box_corner_2->xyz.z));
 }
 
 int sexp_is_in_box(int n)
