diff --git a/src/ui/script_ui.cpp b/src/ui/script_ui.cpp
index 790d599aa..9cc7de4d1 100644
--- a/src/ui/script_ui.cpp
+++ b/src/ui/script_ui.cpp
@@ -539,6 +539,7 @@ local SCM CclDefineUI(SCM list)
 {
     SCM value;
     SCM temp;
+    SCM sublist;
     char* str;
     int	x;
     int	y;
@@ -676,8 +677,6 @@ local SCM CclDefineUI(SCM list)
     value=gh_car(list);
     list=gh_cdr(list);
     if( gh_eq_p(value,gh_symbol2scm("resources")) ) {
-	SCM sublist;
-
 	sublist=gh_car(list);
 	list=gh_cdr(list);
 	while( !gh_null_p(sublist) ) {
@@ -995,98 +994,94 @@ local SCM CclDefineUI(SCM list)
     //
     //	Get the cursors definitions.
     //
-    temp=gh_car(list);
+    value=gh_car(list);
     list=gh_cdr(list);
-
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    str=gh_scm2newstr(value,NULL);
-    free(ui->Point.Name);
-    ui->Point.Name=str;
-
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    str=gh_scm2newstr(value,NULL);
-    free(ui->Glass.Name);
-    ui->Glass.Name=str;
-
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    str=gh_scm2newstr(value,NULL);
-    free(ui->Cross.Name);
-    ui->Cross.Name=str;
-
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    str=gh_scm2newstr(value,NULL);
-    free(ui->YellowHair.Name);
-    ui->YellowHair.Name=str;
-
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    str=gh_scm2newstr(value,NULL);
-    free(ui->GreenHair.Name);
-    ui->GreenHair.Name=str;
-
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    str=gh_scm2newstr(value,NULL);
-    free(ui->RedHair.Name);
-    ui->RedHair.Name=str;
-
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    str=gh_scm2newstr(value,NULL);
-    free(ui->Scroll.Name);
-    ui->Scroll.Name=str;
-
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    str=gh_scm2newstr(value,NULL);
-    free(ui->ArrowE.Name);
-    ui->ArrowE.Name=str;
-
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    str=gh_scm2newstr(value,NULL);
-    free(ui->ArrowNE.Name);
-    ui->ArrowNE.Name=str;
-
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    str=gh_scm2newstr(value,NULL);
-    free(ui->ArrowN.Name);
-    ui->ArrowN.Name=str;
-
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    str=gh_scm2newstr(value,NULL);
-    free(ui->ArrowNW.Name);
-    ui->ArrowNW.Name=str;
-
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    str=gh_scm2newstr(value,NULL);
-    free(ui->ArrowW.Name);
-    ui->ArrowW.Name=str;
-
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    str=gh_scm2newstr(value,NULL);
-    free(ui->ArrowSW.Name);
-    ui->ArrowSW.Name=str;
-
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    str=gh_scm2newstr(value,NULL);
-    free(ui->ArrowS.Name);
-    ui->ArrowS.Name=str;
-
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    str=gh_scm2newstr(value,NULL);
-    free(ui->ArrowSE.Name);
-    ui->ArrowSE.Name=str;
+    if( gh_eq_p(value,gh_symbol2scm("cursors")) ) {
+	sublist=gh_car(list);
+	list=gh_cdr(list);
+	while( !gh_null_p(sublist) ) {
+	    value=gh_car(sublist);
+	    sublist=gh_cdr(sublist);
+	    if( gh_eq_p(value,gh_symbol2scm("point")) ) {
+		value=gh_car(sublist);
+		sublist=gh_cdr(sublist);
+		free(ui->Point.Name);
+		ui->Point.Name=gh_scm2newstr(value,NULL);
+	    } else if( gh_eq_p(value,gh_symbol2scm("glass")) ) {
+		value=gh_car(sublist);
+		sublist=gh_cdr(sublist);
+		free(ui->Glass.Name);
+		ui->Glass.Name=gh_scm2newstr(value,NULL);
+	    } else if( gh_eq_p(value,gh_symbol2scm("cross")) ) {
+		value=gh_car(sublist);
+		sublist=gh_cdr(sublist);
+		free(ui->Cross.Name);
+		ui->Cross.Name=gh_scm2newstr(value,NULL);
+	    } else if( gh_eq_p(value,gh_symbol2scm("yellow")) ) {
+		value=gh_car(sublist);
+		sublist=gh_cdr(sublist);
+		free(ui->YellowHair.Name);
+		ui->YellowHair.Name=gh_scm2newstr(value,NULL);
+	    } else if( gh_eq_p(value,gh_symbol2scm("green")) ) {
+		value=gh_car(sublist);
+		sublist=gh_cdr(sublist);
+		free(ui->GreenHair.Name);
+		ui->GreenHair.Name=gh_scm2newstr(value,NULL);
+	    } else if( gh_eq_p(value,gh_symbol2scm("red")) ) {
+		value=gh_car(sublist);
+		sublist=gh_cdr(sublist);
+		free(ui->RedHair.Name);
+		ui->RedHair.Name=gh_scm2newstr(value,NULL);
+	    } else if( gh_eq_p(value,gh_symbol2scm("scroll")) ) {
+		value=gh_car(sublist);
+		sublist=gh_cdr(sublist);
+		free(ui->Scroll.Name);
+		ui->Scroll.Name=gh_scm2newstr(value,NULL);
+	    } else if( gh_eq_p(value,gh_symbol2scm("arrow-e")) ) {
+		value=gh_car(sublist);
+		sublist=gh_cdr(sublist);
+		free(ui->ArrowE.Name);
+		ui->ArrowE.Name=gh_scm2newstr(value,NULL);
+	    } else if( gh_eq_p(value,gh_symbol2scm("arrow-ne")) ) {
+		value=gh_car(sublist);
+		sublist=gh_cdr(sublist);
+		free(ui->ArrowNE.Name);
+		ui->ArrowNE.Name=gh_scm2newstr(value,NULL);
+	    } else if( gh_eq_p(value,gh_symbol2scm("arrow-n")) ) {
+		value=gh_car(sublist);
+		sublist=gh_cdr(sublist);
+		free(ui->ArrowN.Name);
+		ui->ArrowN.Name=gh_scm2newstr(value,NULL);
+	    } else if( gh_eq_p(value,gh_symbol2scm("arrow-nw")) ) {
+		value=gh_car(sublist);
+		sublist=gh_cdr(sublist);
+		free(ui->ArrowNW.Name);
+		ui->ArrowNW.Name=gh_scm2newstr(value,NULL);
+	    } else if( gh_eq_p(value,gh_symbol2scm("arrow-w")) ) {
+		value=gh_car(sublist);
+		sublist=gh_cdr(sublist);
+		free(ui->ArrowW.Name);
+		ui->ArrowW.Name=gh_scm2newstr(value,NULL);
+	    } else if( gh_eq_p(value,gh_symbol2scm("arrow-sw")) ) {
+		value=gh_car(sublist);
+		sublist=gh_cdr(sublist);
+		free(ui->ArrowSW.Name);
+		ui->ArrowSW.Name=gh_scm2newstr(value,NULL);
+	    } else if( gh_eq_p(value,gh_symbol2scm("arrow-s")) ) {
+		value=gh_car(sublist);
+		sublist=gh_cdr(sublist);
+		free(ui->ArrowS.Name);
+		ui->ArrowS.Name=gh_scm2newstr(value,NULL);
+	    } else if( gh_eq_p(value,gh_symbol2scm("arrow-se")) ) {
+		value=gh_car(sublist);
+		sublist=gh_cdr(sublist);
+		free(ui->ArrowSE.Name);
+		ui->ArrowSE.Name=gh_scm2newstr(value,NULL);
+	    } else {
+		errl("Unsupported tag",value);
+	    }
+	}
+    }
 
     //
     //	Panels
@@ -1178,759 +1173,6 @@ local SCM CclDefineUI(SCM list)
     return SCM_UNSPECIFIED;
 }
 
-/**
-**	Define the look+feel of the user interface.
-**
-**	@param list	Tagged list of the user interface configuration.
-*/
-local SCM CclDefineNewUI(SCM list)
-{
-    SCM value;
-    //SCM temp;
-    char* str;
-    int	x;
-    int	y;
-    int i;
-    UI* ui;
-    void* v;
-
-    //	Get identifier
-    value=gh_car(list);
-    list=gh_cdr(list);
-    str=gh_scm2newstr(value,NULL);	// race name
-    value=gh_car(list);
-    list=gh_cdr(list);
-    x=gh_scm2int(value);		// width
-    value=gh_car(list);
-    list=gh_cdr(list);
-    y=gh_scm2int(value);		// height
-
-    // Find slot: new or redefinition
-    ui=NULL;
-    i=0;
-    if( UI_Table ) {
-	for( ; UI_Table[i]; ++i ) {
-	    if( UI_Table[i]->Width==x && UI_Table[i]->Height==y
-		    && !strcmp(UI_Table[i]->Name,str) ) {
-		DebugLevel0Fn("Warning redefining %s %dx%d\n" _C_ str _C_
-			x _C_ y);
-		ui=UI_Table[i];
-		break;
-	    }
-	}
-    }
-    if( !ui ) {				// New user interface config
-	ui=calloc(1,sizeof(UI));
-	v=malloc(sizeof(UI*)*(i+2));
-	memcpy(v,UI_Table,i*sizeof(UI*));
-	free(UI_Table);
-	UI_Table=v;
-	UI_Table[i]=ui;
-	UI_Table[i+1]=NULL;
-    }
-
-    free(ui->Name);
-    ui->Name=str;
-    ui->Width=x;
-    ui->Height=y;
-
-    //
-    //	Some value defaults
-    //
-
-    // This save the setup values FIXME: They are set by CCL.
-
-    ui->Contrast=TheUI.Contrast;
-    ui->Brightness=TheUI.Brightness;
-    ui->Saturation=TheUI.Saturation;
-
-    ui->MouseScroll=TheUI.MouseScroll;
-    ui->KeyScroll=TheUI.KeyScroll;
-    ui->ReverseMouseMove=TheUI.ReverseMouseMove;
-
-    ui->WarpX=-1;
-    ui->WarpY=-1;
-
-    ui->MouseAdjust=TheUI.MouseAdjust;
-    ui->MouseScale=TheUI.MouseScale;
-
-    ui->OriginalResources=TheUI.OriginalResources;
-
-    //
-    //	Now the real values.
-    //
-    while ( !gh_null_p(list) ) {
-	value=gh_car(list);
-	list=gh_cdr(list);
-	if( gh_eq_p(value,gh_symbol2scm("normal-font-color")) ) {
-	    value=gh_car(list);
-	    list=gh_cdr(list);
-	    ui->NormalFontColor=gh_scm2newstr(value,NULL);
-	} else if( gh_eq_p(value,gh_symbol2scm("reverse-font-color")) ) {
-	    value=gh_car(list);
-	    list=gh_cdr(list);
-	    ui->ReverseFontColor=gh_scm2newstr(value,NULL);
-	} else if( gh_eq_p(value,gh_symbol2scm("filler")) ) {
-	    value=gh_car(list);
-	    list=gh_cdr(list);
-	} else if( gh_eq_p(value,gh_symbol2scm("resources")) ) {
-	    value=gh_car(list);
-	    list=gh_cdr(list);
-	} else if( gh_eq_p(value,gh_symbol2scm("info-panel")) ) {
-	    value=gh_car(list);
-	    list=gh_cdr(list);
-	} else if( gh_eq_p(value,gh_symbol2scm("button-panel")) ) {
-	    value=gh_car(list);
-	    list=gh_cdr(list);
-	} else if( gh_eq_p(value,gh_symbol2scm("map-area")) ) {
-	    value=gh_car(list);
-	    list=gh_cdr(list);
-	} else if( gh_eq_p(value,gh_symbol2scm("menu-button")) ) {
-	    value=gh_car(list);
-	    list=gh_cdr(list);
-	} else if( gh_eq_p(value,gh_symbol2scm("minimap")) ) {
-	    value=gh_car(list);
-	    list=gh_cdr(list);
-	} else if( gh_eq_p(value,gh_symbol2scm("status-line")) ) {
-	    value=gh_car(list);
-	    list=gh_cdr(list);
-	} else if( gh_eq_p(value,gh_symbol2scm("buttons")) ) {
-	    value=gh_car(list);
-	    list=gh_cdr(list);
-	} else if( gh_eq_p(value,gh_symbol2scm("buttons-2")) ) {
-	    value=gh_car(list);
-	    list=gh_cdr(list);
-	} else if( gh_eq_p(value,gh_symbol2scm("cursors")) ) {
-	    value=gh_car(list);
-	    list=gh_cdr(list);
-	} else if( gh_eq_p(value,gh_symbol2scm("panels")) ) {
-	    value=gh_car(list);
-	    list=gh_cdr(list);
-	} else {
-	    errl("Unsupported tag",value);
-	}
-    }
-
-#if 0
-    //	Filler 1
-    temp=gh_car(list);
-    list=gh_cdr(list);
-
-    if( !gh_list_p(temp) ) {
-	fprintf(stderr,"list expected\n");
-	return SCM_UNSPECIFIED;
-    }
-
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    str=gh_scm2newstr(value,NULL);
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    x=gh_scm2int(value);
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    y=gh_scm2int(value);
-
-    free(ui->Filler1.File);
-    ui->Filler1.File=str;
-    ui->Filler1X=x;
-    ui->Filler1Y=y;
-
-    //	Resource
-    temp=gh_car(list);
-    list=gh_cdr(list);
-
-    if( !gh_list_p(temp) ) {
-	fprintf(stderr,"list expected\n");
-	return SCM_UNSPECIFIED;
-    }
-
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    str=gh_scm2newstr(value,NULL);
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    x=gh_scm2int(value);
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    y=gh_scm2int(value);
-
-    free(ui->Resource.File);
-    ui->Resource.File=str;
-    ui->ResourceX=x;
-    ui->ResourceY=y;
-
-    //
-    //	Parse icons
-    //
-    for( i=1; i<MaxCosts; ++i ) {
-	// icon
-	temp=gh_car(list);
-	list=gh_cdr(list);
-
-	if( gh_null_p(temp) ) {
-	    free(ui->Resources[i].Icon.File);
-	    ui->Resources[i].Icon.File=NULL;
-	    ui->Resources[i].Icon.Graphic=NULL;
-	    ui->Resources[i].IconRow=0;
-	    ui->Resources[i].IconX=0;
-	    ui->Resources[i].IconY=0;
-	    ui->Resources[i].IconW=0;
-	    ui->Resources[i].IconH=0;
-	    ui->Resources[i].TextX=0;
-	    ui->Resources[i].TextY=0;
-	    continue;
-	}
-
-	if( !gh_list_p(temp) ) {
-	    fprintf(stderr,"list expected\n");
-	    return SCM_UNSPECIFIED;
-	}
-
-	value=gh_car(temp);
-	temp=gh_cdr(temp);
-	str=gh_scm2newstr(value,NULL);
-	free(ui->Resources[i].Icon.File);
-	ui->Resources[i].Icon.File=str;
-
-	value=gh_car(temp);
-	temp=gh_cdr(temp);
-	x=gh_scm2int(value);
-	ui->Resources[i].IconRow=x;
-
-	value=gh_car(temp);
-	temp=gh_cdr(temp);
-	x=gh_scm2int(value);
-	ui->Resources[i].IconX=x;
-
-	value=gh_car(temp);
-	temp=gh_cdr(temp);
-	y=gh_scm2int(value);
-	ui->Resources[i].IconY=y;
-
-	value=gh_car(temp);
-	temp=gh_cdr(temp);
-	x=gh_scm2int(value);
-	ui->Resources[i].IconW=x;
-
-	value=gh_car(temp);
-	temp=gh_cdr(temp);
-	y=gh_scm2int(value);
-	ui->Resources[i].IconH=y;
-
-	value=gh_car(temp);
-	temp=gh_cdr(temp);
-	x=gh_scm2int(value);
-	ui->Resources[i].TextX=x;
-
-	value=gh_car(temp);
-	temp=gh_cdr(temp);
-	y=gh_scm2int(value);
-	ui->Resources[i].TextY=y;
-    }
-
-    //	Food icon
-    temp=gh_car(list);
-    list=gh_cdr(list);
-
-    if( !gh_list_p(temp) ) {
-	fprintf(stderr,"list expected\n");
-	return SCM_UNSPECIFIED;
-    }
-
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    str=gh_scm2newstr(value,NULL);
-    free(ui->FoodIcon.File);
-    ui->FoodIcon.File=str;
-
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    i=gh_scm2int(value);
-    ui->FoodIconRow=i;
-
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    x=gh_scm2int(value);
-    ui->FoodIconX=x;
-
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    y=gh_scm2int(value);
-    ui->FoodIconY=y;
-
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    x=gh_scm2int(value);
-    ui->FoodIconW=x;
-
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    y=gh_scm2int(value);
-    ui->FoodIconH=y;
-
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    x=gh_scm2int(value);
-    ui->FoodTextX=x;
-
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    y=gh_scm2int(value);
-    ui->FoodTextY=y;
-
-    //	Score icon
-    temp=gh_car(list);
-    list=gh_cdr(list);
-
-    if( !gh_list_p(temp) ) {
-	fprintf(stderr,"list expected\n");
-	return SCM_UNSPECIFIED;
-    }
-
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    str=gh_scm2newstr(value,NULL);
-    free(ui->ScoreIcon.File);
-    ui->ScoreIcon.File=str;
-
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    i=gh_scm2int(value);
-    ui->ScoreIconRow=i;
-
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    x=gh_scm2int(value);
-    ui->ScoreIconX=x;
-
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    y=gh_scm2int(value);
-    ui->ScoreIconY=y;
-
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    x=gh_scm2int(value);
-    ui->ScoreIconW=x;
-
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    y=gh_scm2int(value);
-    ui->ScoreIconH=y;
-
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    x=gh_scm2int(value);
-    ui->ScoreTextX=x;
-
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    y=gh_scm2int(value);
-    ui->ScoreTextY=y;
-
-    //	InfoPanel
-    temp=gh_car(list);
-    list=gh_cdr(list);
-
-    if( !gh_list_p(temp) ) {
-	fprintf(stderr,"list expected\n");
-	return SCM_UNSPECIFIED;
-    }
-
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    str=gh_scm2newstr(value,NULL);
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    x=gh_scm2int(value);
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    y=gh_scm2int(value);
-
-    free(ui->InfoPanel.File);
-    ui->InfoPanel.File=str;
-    ui->InfoPanelX=x;
-    ui->InfoPanelY=y;
-
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    x=gh_scm2int(value);
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    y=gh_scm2int(value);
-    ui->InfoPanelW=x;
-    ui->InfoPanelH=y;
-
-    // Completed bar
-    temp=gh_car(list);
-    list=gh_cdr(list);
-
-    if( !gh_list_p(temp) ) {
-	fprintf(stderr,"list expected\n");
-	return SCM_UNSPECIFIED;
-    }
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    i=gh_scm2int(value);
-    ui->CompleteBarColor=i;
-
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    x=gh_scm2int(value);
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    y=gh_scm2int(value);
-    ui->CompleteBarX=x;
-    ui->CompleteBarY=y;
-
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    x=gh_scm2int(value);
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    y=gh_scm2int(value);
-    ui->CompleteTextX=x;
-    ui->CompleteTextY=y;
-
-    //	ButtonPanel
-    temp=gh_car(list);
-    list=gh_cdr(list);
-
-    if( !gh_list_p(temp) ) {
-	fprintf(stderr,"list expected\n");
-	return SCM_UNSPECIFIED;
-    }
-
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    str=gh_scm2newstr(value,NULL);
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    x=gh_scm2int(value);
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    y=gh_scm2int(value);
-
-    free(ui->ButtonPanel.File);
-    ui->ButtonPanel.File=str;
-    ui->ButtonPanelX=x;
-    ui->ButtonPanelY=y;
-
-    // The map
-    temp=gh_car(list);
-    list=gh_cdr(list);
-
-    if( !gh_list_p(temp) ) {
-	fprintf(stderr,"list expected\n");
-	return SCM_UNSPECIFIED;
-    }
-
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    x=gh_scm2int(value);
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    y=gh_scm2int(value);
-    ui->MapArea.X=x;
-    ui->MapArea.Y=y;
-    if ( ui->MapArea.X < 0 || ui->MapArea.Y < 0 ) {
-	fprintf(stderr,"map top-left point expected\n");
-	return SCM_UNSPECIFIED;
-    }
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    x=gh_scm2int(value);
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    y=gh_scm2int(value);
-    //StephanR: note that the bottom-right point is one pixel off
-    ui->MapArea.EndX = x-1;
-    ui->MapArea.EndY = y-1;
-    if ( x < 1 || y < 1 || ui->MapArea.EndX < ui->MapArea.X ||
-				ui->MapArea.EndY < ui->MapArea.Y ) {
-	fprintf(stderr,"map bottom-right point expected\n");
-	return SCM_UNSPECIFIED;
-    }
-
-    //	MenuButton
-    temp=gh_car(list);
-    list=gh_cdr(list);
-
-    if( !gh_list_p(temp) ) {
-	fprintf(stderr,"list expected\n");
-	return SCM_UNSPECIFIED;
-    }
-
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    str=gh_scm2newstr(value,NULL);
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    x=gh_scm2int(value);
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    y=gh_scm2int(value);
-
-    free(ui->MenuButton.File);
-    ui->MenuButton.File=str;
-    ui->MenuButtonX=x;
-    ui->MenuButtonY=y;
-
-    //	Minimap
-    temp=gh_car(list);
-    list=gh_cdr(list);
-
-    if( !gh_list_p(temp) ) {
-	fprintf(stderr,"list expected\n");
-	return SCM_UNSPECIFIED;
-    }
-
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    str=gh_scm2newstr(value,NULL);
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    x=gh_scm2int(value);
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    y=gh_scm2int(value);
-
-    free(ui->Minimap.File);
-    ui->Minimap.File=str;
-    ui->MinimapX=x;
-    ui->MinimapY=y;
-
-    //	StatusLine
-    temp=gh_car(list);
-    list=gh_cdr(list);
-
-    if( !gh_list_p(temp) ) {
-	fprintf(stderr,"list expected\n");
-	return SCM_UNSPECIFIED;
-    }
-
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    str=gh_scm2newstr(value,NULL);
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    x=gh_scm2int(value);
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    y=gh_scm2int(value);
-
-    free(ui->StatusLine.File);
-    ui->StatusLine.File=str;
-    ui->StatusLineX=x;
-    ui->StatusLineY=y;
-
-    // Buttons
-    for( i=0; i<MaxButtons; ++i ) {
-	temp=gh_car(list);
-	list=gh_cdr(list);
-
-	if( !gh_list_p(temp) ) {
-	    fprintf(stderr,"list expected\n");
-	    return SCM_UNSPECIFIED;
-	}
-	value=gh_car(temp);
-	temp=gh_cdr(temp);
-	x=gh_scm2int(value);
-	ui->Buttons[i].X=x;
-
-	value=gh_car(temp);
-	temp=gh_cdr(temp);
-	y=gh_scm2int(value);
-	ui->Buttons[i].Y=y;
-
-	value=gh_car(temp);
-	temp=gh_cdr(temp);
-	x=gh_scm2int(value);
-	ui->Buttons[i].Width=x;
-
-	value=gh_car(temp);
-	temp=gh_cdr(temp);
-	y=gh_scm2int(value);
-	ui->Buttons[i].Height=y;
-    }
-    for( i=0; i<6; ++i ) {
-	temp=gh_car(list);
-	list=gh_cdr(list);
-
-	if( !gh_list_p(temp) ) {
-	    fprintf(stderr,"list expected\n");
-	    return SCM_UNSPECIFIED;
-	}
-	value=gh_car(temp);
-	temp=gh_cdr(temp);
-	x=gh_scm2int(value);
-	ui->Buttons2[i].X=x;
-
-	value=gh_car(temp);
-	temp=gh_cdr(temp);
-	y=gh_scm2int(value);
-	ui->Buttons2[i].Y=y;
-
-	value=gh_car(temp);
-	temp=gh_cdr(temp);
-	x=gh_scm2int(value);
-	ui->Buttons2[i].Width=x;
-
-	value=gh_car(temp);
-	temp=gh_cdr(temp);
-	y=gh_scm2int(value);
-	ui->Buttons2[i].Height=y;
-    }
-
-    //
-    //	Get the cursors definitions.
-    //
-    temp=gh_car(list);
-    list=gh_cdr(list);
-
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    str=gh_scm2newstr(value,NULL);
-    free(ui->Point.Name);
-    ui->Point.Name=str;
-
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    str=gh_scm2newstr(value,NULL);
-    free(ui->Glass.Name);
-    ui->Glass.Name=str;
-
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    str=gh_scm2newstr(value,NULL);
-    free(ui->Cross.Name);
-    ui->Cross.Name=str;
-
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    str=gh_scm2newstr(value,NULL);
-    free(ui->YellowHair.Name);
-    ui->YellowHair.Name=str;
-
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    str=gh_scm2newstr(value,NULL);
-    free(ui->GreenHair.Name);
-    ui->GreenHair.Name=str;
-
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    str=gh_scm2newstr(value,NULL);
-    free(ui->RedHair.Name);
-    ui->RedHair.Name=str;
-
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    str=gh_scm2newstr(value,NULL);
-    free(ui->Scroll.Name);
-    ui->Scroll.Name=str;
-
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    str=gh_scm2newstr(value,NULL);
-    free(ui->ArrowE.Name);
-    ui->ArrowE.Name=str;
-
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    str=gh_scm2newstr(value,NULL);
-    free(ui->ArrowNE.Name);
-    ui->ArrowNE.Name=str;
-
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    str=gh_scm2newstr(value,NULL);
-    free(ui->ArrowN.Name);
-    ui->ArrowN.Name=str;
-
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    str=gh_scm2newstr(value,NULL);
-    free(ui->ArrowNW.Name);
-    ui->ArrowNW.Name=str;
-
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    str=gh_scm2newstr(value,NULL);
-    free(ui->ArrowW.Name);
-    ui->ArrowW.Name=str;
-
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    str=gh_scm2newstr(value,NULL);
-    free(ui->ArrowSW.Name);
-    ui->ArrowSW.Name=str;
-
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    str=gh_scm2newstr(value,NULL);
-    free(ui->ArrowS.Name);
-    ui->ArrowS.Name=str;
-
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    str=gh_scm2newstr(value,NULL);
-    free(ui->ArrowSE.Name);
-    ui->ArrowSE.Name=str;
-
-    //
-    //	Panels
-    //
-    temp=gh_car(list);
-    list=gh_cdr(list);
-
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    str=gh_scm2newstr(value,NULL);
-    free(ui->GameMenuPanel.File);
-    ui->GameMenuPanel.File=str;
-
-    temp=gh_car(list);
-    list=gh_cdr(list);
-
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    str=gh_scm2newstr(value,NULL);
-    free(ui->Menu1Panel.File);
-    ui->Menu1Panel.File=str;
-
-    temp=gh_car(list);
-    list=gh_cdr(list);
-
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    str=gh_scm2newstr(value,NULL);
-    free(ui->Menu2Panel.File);
-    ui->Menu2Panel.File=str;
-
-    temp=gh_car(list);
-    list=gh_cdr(list);
-
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    str=gh_scm2newstr(value,NULL);
-    free(ui->VictoryPanel.File);
-    ui->VictoryPanel.File=str;
-
-    temp=gh_car(list);
-    list=gh_cdr(list);
-
-    value=gh_car(temp);
-    temp=gh_cdr(temp);
-    str=gh_scm2newstr(value,NULL);
-    free(ui->ScenarioPanel.File);
-    ui->ScenarioPanel.File=str;
-#endif
-
-    return SCM_UNSPECIFIED;
-}
-
 /**
 **	Define the viewports.
 **
@@ -3600,7 +2842,6 @@ global void UserInterfaceCclRegister(void)
     gh_new_procedureN("define-cursor",CclDefineCursor);
     gh_new_procedure1_0("set-game-cursor!",CclSetGameCursor);
     gh_new_procedureN("define-ui",CclDefineUI);
-    gh_new_procedureN("define-new-ui",CclDefineNewUI);
     gh_new_procedureN("define-viewports",CclDefineViewports);
 
     gh_new_procedure1_0("set-grab-mouse!", CclSetGrabMouse);
diff --git a/src/ui/ui.cpp b/src/ui/ui.cpp
index 91ad5b09b..672f32e01 100644
--- a/src/ui/ui.cpp
+++ b/src/ui/ui.cpp
@@ -286,12 +286,12 @@ global void LoadUserInterface(void)
 **	@param file	Save file handle
 **	@param ui	User interface to save
 */
-local void OldSaveUi(FILE* file,const UI* ui)
+local void SaveUi(FILE* file,const UI* ui)
 {
     int i;
     MenuPanel* menupanel;
 
-    fprintf(file,"(define-old-ui '%s %d %d\t; Selector\n",
+    fprintf(file,"(define-ui '%s %d %d\t; Selector\n",
 	    ui->Name,ui->Width,ui->Height);
     fprintf(file,"  ; Filler 1\n");
     fprintf(file,"  (list \"%s\" %d %d)\n",
@@ -364,24 +364,24 @@ local void OldSaveUi(FILE* file,const UI* ui)
 		ui->Buttons2[i].Width,ui->Buttons2[i].Height);
     }
 
-    fprintf(file,"  ; Cursors\n");
-    fprintf(file,"  (list");
-    fprintf(file," '%s",ui->Point.Name);
-    fprintf(file," '%s",ui->Glass.Name);
-    fprintf(file," '%s\n",ui->Cross.Name);
-    fprintf(file,"    '%s",ui->YellowHair.Name);
-    fprintf(file," '%s",ui->GreenHair.Name);
-    fprintf(file,"    '%s\n",ui->RedHair.Name);
-    fprintf(file,"    '%s\n",ui->Scroll.Name);
+    fprintf(file, "\n  'cursors '(");
+    fprintf(file, "\n    point %s", ui->Point.Name);
+    fprintf(file, "\n    glass %s", ui->Glass.Name);
+    fprintf(file, "\n    cross %s", ui->Cross.Name);
+    fprintf(file, "\n    yellow %s", ui->YellowHair.Name);
+    fprintf(file, "\n    green %s", ui->GreenHair.Name);
+    fprintf(file, "\n    red %s", ui->RedHair.Name);
+    fprintf(file, "\n    scroll %s", ui->Scroll.Name);
 
-    fprintf(file,"    '%s",ui->ArrowE.Name);
-    fprintf(file," '%s",ui->ArrowNE.Name);
-    fprintf(file," '%s",ui->ArrowN.Name);
-    fprintf(file," '%s\n",ui->ArrowNW.Name);
-    fprintf(file,"    '%s",ui->ArrowW.Name);
-    fprintf(file," '%s",ui->ArrowSW.Name);
-    fprintf(file," '%s",ui->ArrowS.Name);
-    fprintf(file," '%s)\n",ui->ArrowSE.Name);
+    fprintf(file, "\n    arrow-e %s", ui->ArrowE.Name);
+    fprintf(file, "\n    arrow-ne %s", ui->ArrowNE.Name);
+    fprintf(file, "\n    arrow-n %s", ui->ArrowN.Name);
+    fprintf(file, "\n    arrow-nw %s", ui->ArrowNW.Name);
+    fprintf(file, "\n    arrow-w %s", ui->ArrowW.Name);
+    fprintf(file, "\n    arrow-sw %s", ui->ArrowSW.Name);
+    fprintf(file, "\n    arrow-s %s", ui->ArrowS.Name);
+    fprintf(file, "\n    arrow-se %s", ui->ArrowSE.Name);
+    fprintf(file, ")\n");
 
     menupanel=ui->MenuPanels;
     while( menupanel ) {
@@ -395,123 +395,6 @@ local void OldSaveUi(FILE* file,const UI* ui)
     fprintf(file," )\n\n");
 }
 
-#if 0
-/**
-**	Save the UI structure.
-**
-**	@param file	Save file handle
-**	@param ui	User interface to save
-*/
-local void NewSaveUi(FILE * file, const UI * ui)
-{
-    int i;
-
-    fprintf(file, "(define-ui '%s %d %d\t; Selector\n",
-	ui->Name, ui->Width, ui->Height);
-
-    fprintf(file, "  'normal-font-color '%s 'reverse-font-color '%s\n",
-	ui->NormalFontColor, ui->ReverseFontColor);
-
-    for( i=0; i<TheUI.NumFillers; ++i ) {
-	fprintf(file, "  'filler '(pos (%d %d) image \"%s\")\n",
-	    ui->FillerX[i], ui->FillerY[i], ui->Filler[i].File);
-    }
-
-    fprintf(file, "  'resources '(pos (%d %d) image \"%s\"",
-	ui->ResourceX, ui->ResourceY, ui->Resource.File);
-    for (i = 1; i < MaxCosts; ++i) {
-	// FIXME: use slot 0 for time displays!
-	fprintf(file, "\n    %s (icon-pos (%d %d) icon-file \"%s\"\n",
-	    DefaultResourceNames[i],
-	    ui->Resources[i].IconX, ui->Resources[i].IconY,
-	    ui->Resources[i].Icon.File);
-	fprintf(file,"      icon-frame %d icon-size (%d %d) text-pos (%d %d))",
-	    ui->Resources[i].IconRow,
-	    ui->Resources[i].IconW, ui->Resources[i].IconH,
-	    ui->Resources[i].TextX, ui->Resources[i].TextY);
-    }
-    fprintf(file, "\n    food (icon-pos (%d %d) icon-file \"%s\"\n",
-	ui->FoodIconX, ui->FoodIconY, ui->FoodIcon.File);
-    fprintf(file,"      icon-frame %d icon-size (%d %d) text-pos (%d %d))",
-	ui->FoodIconRow,
-	ui->FoodIconW, ui->FoodIconH, ui->FoodTextX, ui->FoodTextY);
-    fprintf(file, "\n    score (icon-pos (%d %d) icon-file \"%s\"\n",
-	ui->ScoreIconX, ui->ScoreIconY, ui->ScoreIcon.File);
-    fprintf(file,"      icon-frame %d icon-size (%d %d) text-pos (%d %d))",
-	ui->ScoreIconRow,
-	ui->ScoreIconW, ui->ScoreIconH, ui->ScoreTextX, ui->ScoreTextY);
-    fprintf(file, ")\n");
-
-    fprintf(file, "  'info-panel '(pos (%d %d) image \"%s\"\n",
-	ui->InfoPanelX, ui->InfoPanelY,
-	ui->InfoPanel.File);
-    fprintf(file, "    size (%d %d)\n",
-	ui->InfoPanelW, ui->InfoPanelH);
-
-    fprintf(file, "    complete-bar (color %d pos (%d %d) text-pos (%d %d)))\n",
-	ui->CompleteBarColor,
-	ui->CompleteBarX, ui->CompleteBarY,
-	ui->CompleteTextX, ui->CompleteTextY);
-
-    fprintf(file, "  'button-panel '(pos (%d %d) image \"%s\")\n",
-	ui->ButtonPanelX, ui->ButtonPanelY, ui->ButtonPanel.File);
-
-    fprintf(file, "  'map-area '(pos (%d %d) size (%d %d))\n",
-	ui->MapArea.X, ui->MapArea.Y,
-	ui->MapArea.EndX + 1, ui->MapArea.EndY + 1);
-
-    fprintf(file, "  'menu-button '(pos (%d %d) image \"%s\")\n",
-	ui->MenuButtonX, ui->MenuButtonY, ui->MenuButton.File);
-
-    fprintf(file, "  'minimap '(pos (%d %d) image \"%s\" 'viewport-color %d)\n",
-	ui->MinimapX, ui->MinimapY, ui->Minimap.File, ui->ViewportCursorColor);
-
-    fprintf(file, "  'status-line '(pos (%d %d) image \"%s\")\n",
-	ui->StatusLineX, ui->StatusLineY, ui->StatusLine.File);
-
-    fprintf(file, "; 0 Menu 1-9 Info 10-19 Button\n");
-    fprintf(file, "  'buttons '(");
-    for (i = 0; i < MaxButtons; ++i) {
-	fprintf(file, "\n    (pos (%3d %3d) size (%4d %3d))",
-	    ui->Buttons[i].X, ui->Buttons[i].Y,
-	    ui->Buttons[i].Width, ui->Buttons[i].Height);
-    }
-
-    fprintf(file, ")\n; 0-5 Training\n");
-    fprintf(file, "  'buttons-2 '(");
-    for (i = 0; i < 6; ++i) {
-	fprintf(file, "\n    (pos (%3d %3d) size (%4d %3d))",
-	    ui->Buttons2[i].X, ui->Buttons2[i].Y,
-	    ui->Buttons2[i].Width, ui->Buttons2[i].Height);
-    }
-
-    fprintf(file, ")\n  'cursors '(point %s\n", ui->Point.Name);
-    fprintf(file, "    glass %s\n", ui->Glass.Name);
-    fprintf(file, "    cross %s\n", ui->Cross.Name);
-    fprintf(file, "    yellow %s\n", ui->YellowHair.Name);
-    fprintf(file, "    green %s\n", ui->GreenHair.Name);
-    fprintf(file, "    red %s\n", ui->RedHair.Name);
-    fprintf(file, "    scroll %s\n", ui->Scroll.Name);
-
-    fprintf(file, "    arrow-e %s\n", ui->ArrowE.Name);
-    fprintf(file, "    arrow-ne %s\n", ui->ArrowNE.Name);
-    fprintf(file, "    arrow-n %s\n", ui->ArrowN.Name);
-    fprintf(file, "    arrow-nw %s\n", ui->ArrowNW.Name);
-    fprintf(file, "    arrow-w %s\n", ui->ArrowW.Name);
-    fprintf(file, "    arrow-sw %s\n", ui->ArrowSW.Name);
-    fprintf(file, "    arrow-s %s\n", ui->ArrowS.Name);
-    fprintf(file, "    arrow-se %s)\n", ui->ArrowSE.Name);
-
-    fprintf(file, "  'panels '(game-menu \"%s\"\n", ui->GameMenuPanel.File);
-    fprintf(file, "    menu-1 \"%s\"\n", ui->Menu1Panel.File);
-    fprintf(file, "    menu-2 \"%s\"\n", ui->Menu2Panel.File);
-    fprintf(file, "    victory \"%s\"\n", ui->VictoryPanel.File);
-    fprintf(file, "    scenario \"%s\")", ui->ScenarioPanel.File);
-
-    fprintf(file, " )\n\n");
-}
-#endif
-
 /**
 **	Save the viewports.
 **
@@ -560,8 +443,7 @@ global void SaveUserInterface(FILE* file)
 	    TheUI.OriginalResources ? "#t" : "#f");
 
     // Save the current UI
-    OldSaveUi(file,&TheUI);
-    // NewSaveUi(file,&TheUI);
+    SaveUi(file,&TheUI);
     SaveViewports(file,&TheUI);
 }