diff --git a/tools/rgb2565/to565.c b/tools/rgb2565/to565.c
index 01d14aa..abf9cdb 100644
--- a/tools/rgb2565/to565.c
+++ b/tools/rgb2565/to565.c
@@ -13,20 +13,24 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-	      
+	
 #include <stdio.h>
 #include <stdlib.h>
 #include <unistd.h>
 #include <string.h>
 
-#define to565(r,g,b) \
+#define to565(r,g,b)                                            \
     ((((r) >> 3) << 11) | (((g) >> 2) << 5) | ((b) >> 3))
 
+#define from565_r(x) ((((x) >> 11) & 0x1f) * 255 / 31)
+#define from565_g(x) ((((x) >> 5) & 0x3f) * 255 / 63)
+#define from565_b(x) (((x) & 0x1f) * 255 / 31)
+
 void to_565_raw(void)
 {
     unsigned char in[3];
     unsigned short out;
-    
+
     while(read(0, in, 3) == 3) {
         out = to565(in[0],in[1],in[2]);
         write(1, &out, 2);
@@ -34,6 +38,66 @@
     return;
 }
 
+void to_565_raw_dither(int width)
+{
+    unsigned char in[3];
+    unsigned short out;
+    int i = 0;
+    int e;
+
+    int* error = malloc((width+2) * 3 * sizeof(int));
+    int* next_error = malloc((width+2) * 3 * sizeof(int));
+    memset(error, 0, (width+2) * 3 * sizeof(int));
+    memset(next_error, 0, (width+2) * 3 * sizeof(int));
+    error += 3;        // array goes from [-3..((width+1)*3+2)]
+    next_error += 3;
+
+    while(read(0, in, 3) == 3) {
+        int r = in[0] + error[i*3+0];
+        int rb = (r < 0) ? 0 : ((r > 255) ? 255 : r);
+
+        int g = in[1] + error[i*3+1];
+        int gb = (g < 0) ? 0 : ((g > 255) ? 255 : g);
+
+        int b = in[2] + error[i*3+2];
+        int bb = (b < 0) ? 0 : ((b > 255) ? 255 : b);
+
+        out = to565(rb, gb, bb);
+        write(1, &out, 2);
+
+#define apply_error(ch) {                                               \
+            next_error[(i-1)*3+ch] += e * 3 / 16;                       \
+            next_error[(i)*3+ch] += e * 5 / 16;                         \
+            next_error[(i+1)*3+ch] += e * 1 / 16;                       \
+            error[(i+1)*3+ch] += e - ((e*1/16) + (e*3/16) + (e*5/16));  \
+        }
+
+        e = r - from565_r(out);
+        apply_error(0);
+
+        e = g - from565_g(out);
+        apply_error(1);
+
+        e = b - from565_b(out);
+        apply_error(2);
+
+#undef apply_error
+
+        ++i;
+        if (i == width) {
+            // error <- next_error; next_error <- 0
+            int* temp = error; error = next_error; next_error = temp;
+            memset(next_error, 0, (width+1) * 3 * sizeof(int));
+            i = 0;
+        }
+    }
+
+    free(error-3);
+    free(next_error-3);
+
+    return;
+}
+
 void to_565_rle(void)
 {
     unsigned char in[3];
@@ -66,10 +130,14 @@
 
 int main(int argc, char **argv)
 {
-    if ((argc > 1) && (!strcmp(argv[1],"-rle"))) {
+    if ((argc == 2) && (!strcmp(argv[1],"-rle"))) {
         to_565_rle();
     } else {
-        to_565_raw();
+        if (argc > 2 && (!strcmp(argv[1], "-w"))) {
+            to_565_raw_dither(atoi(argv[2]));
+        } else {
+            to_565_raw();
+        }
     }
     return 0;
 }
