diff --git a/win/vncviewer/CConn.cxx b/win/vncviewer/CConn.cxx
index 53a16d0..4a9b341 100644
--- a/win/vncviewer/CConn.cxx
+++ b/win/vncviewer/CConn.cxx
@@ -158,7 +158,6 @@
     window->setDisableWinKeys(options.disableWinKeys);
     window->setShowToolbar(options.showToolbar);
     window->printScale();
-    window->setDesktopScaleFilter(options.scaleFilter);
     if (options.autoScaling) {
       window->setAutoScaling(true);
     } else {
diff --git a/win/vncviewer/CConnOptions.cxx b/win/vncviewer/CConnOptions.cxx
index 3af422e..ea0941e 100644
--- a/win/vncviewer/CConnOptions.cxx
+++ b/win/vncviewer/CConnOptions.cxx
@@ -123,10 +123,6 @@
 static IntParameter scale("Scale", 
                           "Scale local copy of the remote desktop, in percent",
                           100);
-static IntParameter scaleFilter("ScaleFilter", 
-                                "Filter used for the remote desktop scaling. "
-                                "0 = Nearest Neighbor, 1 = Bilinear, 2 = Bicubic, 3 = Sinc.",
-                                rfb::defaultScaleFilter);
 
 CConnOptions::CConnOptions()
 : useLocalCursor(::useLocalCursor), useDesktopResize(::useDesktopResize),
@@ -138,7 +134,7 @@
 emulate3(::emulate3), monitor(::monitor.getData()), showToolbar(::showToolbar),
 customCompressLevel(::customCompressLevel), compressLevel(::compressLevel), 
 noJpeg(::noJpeg), qualityLevel(::qualityLevel), passwordFile(::passwordFile.getData()),
-autoReconnect(::autoReconnect), autoScaling(::autoScaling), scale(::scale), scaleFilter(::scaleFilter)
+autoReconnect(::autoReconnect), autoScaling(::autoScaling), scale(::scale)
 {
   if (autoSelect) {
     preferredEncoding = encodingZRLE;
@@ -280,11 +276,6 @@
             autoScaling = atoi(value.buf);
           } else if (stricmp(name.buf, "Scale") == 0) {
             scale = atoi(value.buf);
-          } else if (stricmp(name.buf, "ScaleFilter") == 0) {
-            int scaleFilterID = atoi(value.buf);
-            if (scaleFilterID > rfb::scaleFilterMaxNumber || scaleFilterID < 0 ) {
-              scaleFilter = rfb::defaultScaleFilter;
-            } else scaleFilter = scaleFilterID;
           }
         }
       }
@@ -368,7 +359,6 @@
     fprintf(f, "QualityLevel=%d\n", qualityLevel);
     fprintf(f, "AutoScaling=%d\n", (int)autoScaling);
     fprintf(f, "Scale=%d\n", scale);
-    fprintf(f, "ScaleFilter=%d\n", scaleFilter);
     fclose(f); f=0;
 
     setConfigFileName(filename);
@@ -410,7 +400,6 @@
   key.setInt(_T("QualityLevel"), qualityLevel);
   key.setBool(_T("AutoScaling"), autoScaling);
   key.setInt(_T("Scale"), scale);
-  key.setInt(_T("ScaleFilter"), scaleFilter);
 }
 
 
@@ -474,7 +463,6 @@
   qualityLevel = o.qualityLevel;
   autoScaling = o.autoScaling;
   scale = o.scale;
-  scaleFilter = o.scaleFilter;
 
   return *this;
 }
diff --git a/win/vncviewer/CConnOptions.h b/win/vncviewer/CConnOptions.h
index 0b8b2bf..51ab78a 100644
--- a/win/vncviewer/CConnOptions.h
+++ b/win/vncviewer/CConnOptions.h
@@ -68,7 +68,6 @@
       bool acceptBell;
       bool autoScaling;
       int scale;
-      unsigned int scaleFilter;
       CharArray userName;
       void setUserName(const char* user);
       PlainPasswd password;
diff --git a/win/vncviewer/OptionsDialog.cxx b/win/vncviewer/OptionsDialog.cxx
index 962767f..826781d 100644
--- a/win/vncviewer/OptionsDialog.cxx
+++ b/win/vncviewer/OptionsDialog.cxx
@@ -176,14 +176,6 @@
     } else {
       SetDlgItemInt(handle, IDC_COMBO_SCALE, dlg->options.scale, FALSE);
     }
-    HWND hScaleFilterCombo = GetDlgItem(handle, IDC_COMBO_SCALE_FILTER);
-    SendMessage(hScaleFilterCombo, CB_RESETCONTENT, 0, 0);
-    ScaleFilters scaleFilters;
-    for (i = 0; i <= rfb::scaleFilterMaxNumber; i++) {
-      SendMessage(hScaleFilterCombo, CB_ADDSTRING, (WPARAM)0, (LPARAM)(int FAR*)scaleFilters[i].name);
-    }
-    SendMessage(hScaleFilterCombo, CB_SETCURSEL, (WPARAM)dlg->options.scaleFilter, (LPARAM)0);
-    if (dlg->options.scale == 100 && !dlg->options.autoScaling) enableItem(IDC_COMBO_SCALE_FILTER, 0);
   }
   virtual bool onOk() {
     dlg->options.shared = isItemChecked(IDC_CONN_SHARED);
@@ -205,12 +197,6 @@
         dlg->options.autoScaling = true;
       }
     }
-    int scaleFilterID = SendMessage(GetDlgItem(handle, IDC_COMBO_SCALE_FILTER), CB_GETCURSEL, 0, 0);
-    if (scaleFilterID != rfb::scaleFilterBilinear &&  scaleFilterID != rfb::scaleFilterBicubic) {
-      MsgBox(handle, "Now supported only bilinear and bicubic scale filters.", MB_OK);
-    } else {
-      dlg->options.scaleFilter = SendMessage(GetDlgItem(handle, IDC_COMBO_SCALE_FILTER), CB_GETCURSEL, 0, 0);
-    }
     ((ViewerOptions*)propSheet)->setChanged();
     return true;
   }
@@ -225,8 +211,6 @@
         } else {
           GetDlgItemText(handle, IDC_COMBO_SCALE, scaleStr, 20);
         }
-        if (strcmp(scaleStr, "100") == 0) enableItem(IDC_COMBO_SCALE_FILTER, 0);
-        else enableItem(IDC_COMBO_SCALE_FILTER, 1);
         return true;
       }
     }
diff --git a/win/vncviewer/resource.h b/win/vncviewer/resource.h
index 362d56e..5bc4bdc 100644
--- a/win/vncviewer/resource.h
+++ b/win/vncviewer/resource.h
@@ -123,8 +123,6 @@
 #define IDC_STATIC_SCALE                1097
 #define IDC_COMBO_SCALE                 1098
 #define IDC_STATIC_PERCENT              1099
-#define IDC_COMBO_SCALE_FILTER          1100
-#define IDC_SCALE_FILTER                1101
 #define ID_TOOLBAR                      40002
 #define ID_CLOSE                        40003
 #define ID_OPTIONS                      40004
diff --git a/win/vncviewer/vncviewer.rc b/win/vncviewer/vncviewer.rc
index ae479c1..e2064b3 100644
--- a/win/vncviewer/vncviewer.rc
+++ b/win/vncviewer/vncviewer.rc
@@ -234,12 +234,8 @@
                     WS_TABSTOP,106,25,103,15
     COMBOBOX        IDC_COMBO_SCALE,138,40,42,134,CBS_DROPDOWN | CBS_SORT | 
                     WS_VSCROLL | WS_TABSTOP
-    COMBOBOX        IDC_COMBO_SCALE_FILTER,138,70,71,113,CBS_DROPDOWNLIST | 
-                    WS_VSCROLL | WS_TABSTOP
     LTEXT           "Scale by:",IDC_STATIC_SCALE,106,40,32,15,SS_CENTERIMAGE
     LTEXT           "%",IDC_STATIC_PERCENT,185,40,24,15,SS_CENTERIMAGE
-    LTEXT           "With filter:",IDC_SCALE_FILTER,138,55,71,15,
-                    SS_CENTERIMAGE
 END
 
 IDD_INPUTS DIALOG DISCARDABLE  0, 0, 186, 162
