Index: src/rt/opt.c
===================================================================
--- src/rt/opt.c	(revision 54149)
+++ src/rt/opt.c	(working copy)
@@ -50,8 +50,7 @@
 size_t		width = 0;		/* # of pixels in X */
 size_t		height = 0;		/* # of lines in Y */
 
-
-/***** Variables shared with viewing model *** */
+/***** Variables shared with viewing model *****/
 int		doubles_out = 0;	/* u_char or double .pix output file */
 fastf_t		azimuth = 0.0, elevation = 0.0;
 int		lightmodel = 0;		/* Select lighting model */
@@ -143,7 +142,7 @@
 double		haze[3] = { 0.8, 0.9, 0.99 };	      /* color of the haze */
 int             do_kut_plane = 0;
 plane_t         kut_plane;
-
+fastf_t		tmpcol[4] = {0.0, 0.0, 0.0, 0.0};	/* if -t is passed, the temporary rgb values will be stored here */
 double units = 1.0;
 int default_units = 1;
 int model_units = 0;
@@ -187,7 +186,7 @@
 
 
 #define GETOPT_STR	\
-	".:,:@:a:b:c:d:e:f:g:h:ij:k:l:n:o:p:q:rs:tu:v:w:x:A:BC:D:E:F:G:H:IJ:K:MN:O:P:Q:RST:U:V:WX:!:+:"
+	".:,:@:a:b:c:d:e:f:g:h:ij:k:l:m::n:o:p:q:rs:t:u:v:w:x:A:BC:D:E:F:G:H:IJ:K:MN:O:P:Q:RST:U:V:WX:!:+:"
 
     while ( (c=bu_getopt( argc, (char * const *)argv, GETOPT_STR )) != -1 )  {
 	switch ( c )  {
@@ -270,6 +269,41 @@
 	    case 'c':
 		(void)rt_do_cmd( (struct rt_i *)0, bu_optarg, rt_cmdtab );
 		break;
+	    case 'm':       /* set an object's color temporarily */
+		tmpcol[0] = 1.0;      /* first index of tmpcol works as a flag */
+		register char *cp = bu_optarg;
+		/* parse our rgb values */
+		tmpcol[1] = atoi(cp);
+		while ( (*cp >= '0' && *cp <= '9') )  cp++;
+		while ( *cp && (*cp < '0' || *cp > '9') ) cp++;
+		tmpcol[2] = atoi(cp);
+		while ( (*cp >= '0' && *cp <= '9') )  cp++;
+		while ( *cp && (*cp < '0' || *cp > '9') ) cp++;
+		tmpcol[3] = atoi(cp);
+		if ( tmpcol[1] < 0 || tmpcol[1] > 255 )  tmpcol[1] = 255; /* RED   */
+		if ( tmpcol[2] < 0 || tmpcol[2] > 255 )  tmpcol[2] = 255; /* GREEN */
+		if ( tmpcol[3] < 0 || tmpcol[3] > 255 )  tmpcol[3] = 255; /* BLUE  */	
+		if (tmpcol[1] == 0)
+		    tmpcol[1] = 0.0;				
+		else
+		    tmpcol[1] = tmpcol[1] / 255.0;
+
+		if (tmpcol[2] == 0)
+		    tmpcol[2] = 0.0;
+		else
+		    tmpcol[2] = tmpcol[2] / 255.0;
+
+		if (tmpcol[3] == 0)
+		    tmpcol[3] = 0.0;
+		else
+		    tmpcol[3] = tmpcol[3] / 255.0;
+		break;
 	    case 'C':
 	    {
 		char		buf[128];
Index: src/rt/worker.c
===================================================================
--- src/rt/worker.c	(revision 54149)
+++ src/rt/worker.c	(working copy)
@@ -56,7 +56,6 @@
 
 extern fastf_t** timeTable_init(int x, int y);
 extern int timeTable_input(int x, int y, fastf_t t, fastf_t **timeTable);
-
 extern int query_x;
 extern int query_y;
 extern int Query_one_pixel;
Index: src/rt/view.c
===================================================================
--- src/rt/view.c	(revision 54149)
+++ src/rt/view.c	(working copy)
@@ -70,6 +70,7 @@
     bu_log("Options:\n");
     bu_log(" -r		Report overlaps (default)\n");
     bu_log(" -R		Do not report overlaps\n");
+    bu_log(" -m		Set an object's color temporarily\n");
     bu_log(" -M		Read matrix+commands on stdin\n");
     bu_log(" -o model.pix	Output .pix format file (default is window)\n");
     bu_log(" -s #		Square grid size in pixels (default is 512)\n");
@@ -89,12 +90,12 @@
 
 extern FBIO *fbp;			/* Framebuffer handle */
 
-extern int curframe;		/* from main.c */
+extern int curframe;			/* from main.c */
 extern fastf_t frame_delta_t;		/* from main.c */
 extern double airdensity;		/* from opt.c */
-extern double haze[3];		/* from opt.c */
-extern int do_kut_plane;           /* from opt.c */
-extern plane_t kut_plane;              /* from opt.c */
+extern double haze[3];			/* from opt.c */
+extern int do_kut_plane;		/* from opt.c */
+extern plane_t kut_plane;		/* from opt.c */
 vect_t kut_norm;
 struct soltab *kut_soltab = NULL;
 extern struct icv_image_file *bif;
@@ -203,7 +204,6 @@
     bu_semaphore_release(BU_SEM_SYSCALL);
 #endif
 
-
     if (rpt_dist)
 	htond(dist, (unsigned char *)&(ap->a_dist), 1);
 
Index: src/rt/main.c
===================================================================
--- src/rt/main.c	(revision 54149)
+++ src/rt/main.c	(working copy)
@@ -90,6 +90,10 @@
 extern int	interactive;		/* human is watching results */
 /***** end variables shared with do.c *****/
 
+/***** variables shared with opt.c *****/
+extern struct resource	resource[];
+extern fastf_t tmpcol[];		
+/***** end variables shared with opt.c *****/
 
 extern fastf_t	rt_dist_tol;		/* Value for rti_tol.dist */
 extern fastf_t	rt_perp_tol;		/* Value for rti_tol.perp */
@@ -97,8 +101,6 @@
 
 extern struct command_tab	rt_cmdtab[];
 
-extern struct resource	resource[];	/* from opt.c */
-
 int	save_overlaps=0;	/* flag for setting rti_save_overlaps */
 
 
@@ -351,6 +353,18 @@
 	bu_log("rt:  rt_dirbuild(%s) failure\n", title_file);
 	return 2;
     }
+    
+    /* Overwrite region colors if a temp color was set */
+    if (tmpcol[0] == 0.0) {
+	struct region *regp;
+	for (BU_LIST_FOR(regp, region, &(rtip->HeadRegion))) {
+	    regp->reg_mater.ma_color[0] = tmpcol[1];
+	    regp->reg_mater.ma_color[1] = tmpcol[2];
+	    regp->reg_mater.ma_color[2] = tmpcol[3];
+	    bu_log("applying temp color: %g, %g, %g", tmpcol[1], tmpcol[2], tmpcol[3]);
+	}
+    }
+
     APP.a_rt_i = rtip;
     (void)rt_get_timer(&times, NULL);
     if (rt_verbosity & VERBOSE_MODELTITLE)
@@ -432,7 +446,6 @@
 	    return 14;
 	}
     }
-
     /*
      *  Initialize all the per-CPU memory resources.
      *  The number of processors can change at runtime, init them all.
@@ -449,7 +462,6 @@
 #ifdef SIGINFO
     (void)signal(SIGINFO, siginfo_handler);
 #endif
-
     if (!matflag) {
 	int frame_retval;
 
