{ "fn", ArgString, (void *) &appData.pgnName[0], FALSE, INVALID },
   { "secondPgnName", ArgString, (void *) &appData.pgnName[1], FALSE, (ArgIniType) "" },
   { "sn", ArgString, (void *) &appData.pgnName[1], FALSE, INVALID },
+  { "absoluteAnalysisScores", ArgBoolean, (void *) &appData.whitePOV, TRUE, FALSE },
 
 #if ZIPPY
   { "zippyTalk", ArgBoolean, (void *) &appData.zippyTalk, FALSE, (ArgIniType) ZIPPY_TALK },
 
        buf[index] = 0;
        if(lineStart == 0 && gameMode == AnalyzeMode && (multi = MultiPV(&first)) >= 0) {
                int n = first.option[multi].value;
-               if(origIndex < 10) { if(n>1) n--; } else if(origIndex > index - 6) n++;
+               if(origIndex > 17 && origIndex < 24) { if(n>1) n--; } else if(origIndex > index - 6) n++;
                snprintf(buf2, MSG_SIZ, "option MultiPV=%d\n", n);
                if(first.option[multi].value != n) SendToProgram(buf2, &first);
                first.option[multi].value = n;
                *start = *end = 0;
-               return TRUE;
+               return FALSE;
        }
        ParsePV(buf+startPV, FALSE, gameMode != AnalyzeMode);
        *start = startPV; *end = index-1;
 
     Boolean markers;    /* [HGM] markers   */
     Boolean pieceMenu;
     Boolean sweepSelect;
+    Boolean whitePOV;
 
     char *tourneyFile;
     char *processes;
 
         DoClearMemo(which); nrVariations[which] = 0;
         header[0] = NULLCHAR;
         if(gameMode == AnalyzeMode && (multi = MultiPV(&first)) >= 0) {
-            snprintf(header, MSG_SIZ, "\t\t\t\tfewer / Multi-PV setting = %d / more\n",
-                                       first.option[multi].value);
+            snprintf(header, MSG_SIZ, "\t%s viewpoint\t\tfewer / Multi-PV setting = %d / more\n",
+                                       appData.whitePOV ? "white" : "mover", first.option[multi].value);
             InsertIntoMemo( which, header, 0);
         } else
         if(appData.ponderNextMove && lastLine[which][0]) {
 //    int isPondering = FALSE;
 
     char s_label[MAX_NAME_LENGTH + 32];
-
+    int h;
     char * name = ed->name;
 
     /* Label */
         }
 
         /* Score */
-        if( ed->score > 0 ) {
-         snprintf( s_score, sizeof(s_score)/sizeof(s_score[0]), "+%.2f", ed->score / 100.0 );
+        h = (gameMode == AnalyzeMode && appData.whitePOV && !WhiteOnMove(currentMove) ? -1 : 1) * ed->score;
+        if( h > 0 ) {
+         snprintf( s_score, sizeof(s_score)/sizeof(s_score[0]), "+%.2f", h / 100.0 );
         }
         else {
-         snprintf( s_score, sizeof(s_score)/sizeof(s_score[0]), "%.2f", ed->score / 100.0 );
+         snprintf( s_score, sizeof(s_score)/sizeof(s_score[0]), "%.2f", h / 100.0 );
         }
 
         /* Time */