diff --git a/971CV/src/org/frc971/Recognizer2013.java b/971CV/src/org/frc971/Recognizer2013.java
index d2de431..0caf1f1 100644
--- a/971CV/src/org/frc971/Recognizer2013.java
+++ b/971CV/src/org/frc971/Recognizer2013.java
@@ -27,10 +27,6 @@
     // --- Constants that need to be tuned.
     static final double kRoughlyHorizontalSlope = Math.tan(Math.toRadians(30));
     static final double kRoughlyVerticalSlope = Math.tan(Math.toRadians(90 - 30));
-    private int min1Hue;
-    private int max1Hue;
-    private int min1Sat;
-    private int min1Val;
     static final int kHoleClosingIterations = 2;
     static final double kPolygonPercentFit = 12;
 
@@ -52,6 +48,8 @@
     private static final WPIColor candidateColor = WPIColor.BLUE;
     private static final WPIColor targetColor = new WPIColor(255, 0, 0);
 
+    private int min1Hue, max1Hue, min1Sat, min1Val;
+
     // Show intermediate images for parameter tuning.
     private final DebugCanvas thresholdedCanvas = new DebugCanvas("thresholded");
     private final DebugCanvas morphedCanvas = new DebugCanvas("morphed");
@@ -89,9 +87,9 @@
     @Override
     public int getHueMax() { return max1Hue - 1; }
     @Override
-    public int getSatMin() { return min1Sat - 1; }
+    public int getSatMin() { return min1Sat + 1; }
     @Override
-    public int getValMin() { return min1Val - 1; }
+    public int getValMin() { return min1Val + 1; }
 
     @Override
     public void showIntermediateStages(boolean enable) {
@@ -136,7 +134,6 @@
 
         // NOTE: Since red is at the end of the cyclic color space, you can OR
         // a threshold and an inverted threshold to match red pixels.
-        // TODO(jerry): Use tunable constants instead of literals.
         opencv_imgproc.cvThreshold(hue, bin, min1Hue, 255, opencv_imgproc.CV_THRESH_BINARY);
         opencv_imgproc.cvThreshold(hue, hue, max1Hue, 255, opencv_imgproc.CV_THRESH_BINARY_INV);
         opencv_imgproc.cvThreshold(sat, sat, min1Sat, 255, opencv_imgproc.CV_THRESH_BINARY);
@@ -157,11 +154,6 @@
         morphedCanvas.showImage(bin);
 
         // Find contours.
-        //
-        // TODO(jerry): Request contours as a two-level hierarchy (blobs and
-        // holes)? The targets have known sizes and their holes have known,
-        // smaller sizes. This matters for distance measurement. OTOH it's moot
-        // if/when we use the vertical stripes for distance measurement.
         WPIBinaryImage binWpi = DaisyExtensions.makeWPIBinaryImage(bin);
         WPIContour[] contours = daisyExtensions.findConvexContours(binWpi);
 
diff --git a/971CV/src/org/frc971/VisionTuner.java b/971CV/src/org/frc971/VisionTuner.java
index c231743..0a1e1e9 100644
--- a/971CV/src/org/frc971/VisionTuner.java
+++ b/971CV/src/org/frc971/VisionTuner.java
@@ -72,9 +72,9 @@
             public void stateChanged(ChangeEvent e) {
                 System.out.println("New HSV range ["
                         + hueMinSlider.getValue() + " .. "
-                        + hueMaxSlider.getValue() + "], ["
-                        + satMinSlider.getValue() + " .. 255], ["
-                        + valMinSlider.getValue() + " .. 255]");
+                        + hueMaxSlider.getValue() + "] "
+                        + satMinSlider.getValue() + "+ "
+                        + valMinSlider.getValue() + "+");
                 recognizer.setHSVRange(
                         hueMinSlider.getValue(), hueMaxSlider.getValue(),
                         satMinSlider.getValue(),
@@ -83,26 +83,32 @@
             }
         };
 
-        hueMinSlider.setValue(recognizer.getHueMin());
         hueMinSlider.setToolTipText("minimum HSV hue");
         hueMinSlider.setMaximum(255);
+        hueMinSlider.setValue(recognizer.getHueMin());
         panel.add(hueMinSlider);
 
-        hueMaxSlider.setValue(recognizer.getHueMax());
         hueMaxSlider.setToolTipText("maximum HSV hue");
         hueMaxSlider.setMaximum(255);
+        hueMaxSlider.setValue(recognizer.getHueMax());
         panel.add(hueMaxSlider);
 
-        satMinSlider.setValue(recognizer.getSatMin());
         satMinSlider.setToolTipText("minimum HSV color saturation");
         satMinSlider.setMaximum(255);
+        satMinSlider.setValue(recognizer.getSatMin());
         panel.add(satMinSlider);
 
-        valMinSlider.setValue(recognizer.getValMin());
         valMinSlider.setToolTipText("minimum HSV brightness value");
         valMinSlider.setMaximum(255);
+        valMinSlider.setValue(recognizer.getValMin());
         panel.add(valMinSlider);
 
+        System.out.println("Initial HSV range ["
+                + hueMinSlider.getValue() + " .. "
+                + hueMaxSlider.getValue() + "] "
+                + satMinSlider.getValue() + "+ "
+                + valMinSlider.getValue() + "+");
+
         hueMinSlider.addChangeListener(sliderListener);
         hueMaxSlider.addChangeListener(sliderListener);
         satMinSlider.addChangeListener(sliderListener);
