--- /dev/null
+diff -upNr epsilon.orig/src/lib/Epsilon.c epsilon/src/lib/Epsilon.c
+--- epsilon.orig/src/lib/Epsilon.c 2007-12-05 20:26:23.000000000 -0200
++++ epsilon/src/lib/Epsilon.c 2007-12-09 12:15:21.000000000 -0200
+@@ -23,6 +23,9 @@
+ #ifdef HAVE_EPEG_H
+ #include <Epeg.h>
+ #endif
++#define THUMB_HEIGHT_CANOLA 96
++#define THUMB_WIDTH_CANOLA 192
++#define THUMB_SIZE_CANOLA 192
+ #define THUMB_SIZE_NORMAL 128
+ #define THUMB_SIZE_LARGE 256
+ #define THUMB_SIZE_FAIL -1
+@@ -38,9 +41,11 @@
+
+ static char *PATH_DIR_LARGE = NULL;
+ static char *PATH_DIR_NORMAL = NULL;
++static char *PATH_DIR_CANOLA = NULL;
+ static char *PATH_DIR_FAIL = NULL;
+ static unsigned LEN_DIR_LARGE = 0;
+ static unsigned LEN_DIR_NORMAL = 0;
++static unsigned LEN_DIR_CANOLA = 0;
+ static unsigned LEN_DIR_FAIL = 0;
+
+
+@@ -153,6 +158,11 @@ epsilon_init (void)
+ PATH_DIR_NORMAL = strdup(buf);
+ LEN_DIR_NORMAL = strlen(buf);
+ }
++ if (!PATH_DIR_CANOLA) {
++ strncpy(buf + base_len, "/canola", PATH_MAX - base_len);
++ PATH_DIR_CANOLA = strdup(buf);
++ LEN_DIR_CANOLA = strlen(buf);
++ }
+ if (!PATH_DIR_FAIL) {
+ strncpy(buf + base_len, "/fail/epsilon", PATH_MAX - base_len);
+ PATH_DIR_FAIL = strdup(buf);
+@@ -161,6 +171,7 @@ epsilon_init (void)
+
+ ecore_file_mkpath(PATH_DIR_LARGE);
+ ecore_file_mkpath(PATH_DIR_NORMAL);
++ ecore_file_mkpath(PATH_DIR_CANOLA);
+ ecore_file_mkpath(PATH_DIR_FAIL);
+
+ plugins_mime = ecore_hash_new(ecore_str_hash, ecore_str_compare);
+@@ -446,6 +457,11 @@ _epsilon_file_name(unsigned thumb_size,
+ dir = PATH_DIR_NORMAL;
+ dir_len = LEN_DIR_NORMAL;
+ }
++ else if (thumb_size == THUMB_SIZE_CANOLA)
++ {
++ dir = PATH_DIR_CANOLA;
++ dir_len = LEN_DIR_CANOLA;
++ }
+ else
+ {
+ dir = PATH_DIR_FAIL;
+@@ -563,10 +579,10 @@ epsilon_generate (Epsilon * e)
+
+ if (!e || !e->src || !e->hash)
+ return (EPSILON_FAIL);
+-
++
+ tw = e->tw;
+ th = e->th;
+-
++
+ #ifdef HAVE_EPEG_H
+ len = strlen (e->src);
+ if ((len > 4) &&
+@@ -575,15 +591,16 @@ epsilon_generate (Epsilon * e)
+ _epsilon_file_name(e->tw, e->hash, "jpg", outfile, sizeof(outfile));
+ epeg_thumbnail_comments_get (im, &info);
+ epeg_size_get (im, &iw, &ih);
+- if (iw > ih)
++ /* XXX - hack to force fixed height in case of tw != th (canola) */
++ if (iw > ih && tw == th)
+ {
+- th = e->th * ((double) ih / (double) iw);
+- if (th < 1) th = 1;
++ th = ((unsigned long) e->tw * ih) / iw;
++ if (th < 1) th = 1;
+ }
+ else
+ {
+- tw = e->tw * ((double) iw / (double) ih);
+- if (tw < 1) tw = 1;
++ tw = ((unsigned long) e->th * iw) / ih;
++ if (tw < 1) tw = 1;
+ }
+ epeg_decode_size_set (im, tw, th);
+ epeg_quality_set (im, 100);
+@@ -738,7 +755,7 @@ void
+ epsilon_thumb_size(Epsilon *e, Epsilon_Thumb_Size size)
+ {
+ if (!e) return;
+-
++
+ switch (size)
+ {
+ case EPSILON_THUMB_NORMAL:
+@@ -749,7 +766,11 @@ epsilon_thumb_size(Epsilon *e, Epsilon_T
+ e->tw = THUMB_SIZE_LARGE;
+ e->th = THUMB_SIZE_LARGE;
+ break;
+- }
++ case EPSILON_THUMB_CANOLA:
++ e->tw = THUMB_WIDTH_CANOLA;
++ e->th = THUMB_HEIGHT_CANOLA;
++ break;
++ }
+ }
+
+
+diff -upNr epsilon.orig/src/lib/Epsilon.h epsilon/src/lib/Epsilon.h
+--- epsilon.orig/src/lib/Epsilon.h 2007-12-05 20:26:23.000000000 -0200
++++ epsilon/src/lib/Epsilon.h 2007-12-09 12:15:21.000000000 -0200
+@@ -58,7 +58,8 @@ typedef struct _Epsilon_Info Epsilon_Inf
+ enum _Epsilon_Thumb_Size
+ {
+ EPSILON_THUMB_NORMAL,
+- EPSILON_THUMB_LARGE
++ EPSILON_THUMB_LARGE,
++ EPSILON_THUMB_CANOLA
+ };
+
+ typedef enum _Epsilon_Thumb_Size Epsilon_Thumb_Size;
+diff -upNr epsilon.orig/src/lib/epsilon_thumb.c epsilon/src/lib/epsilon_thumb.c
+--- epsilon.orig/src/lib/epsilon_thumb.c 2007-12-05 20:26:23.000000000 -0200
++++ epsilon/src/lib/epsilon_thumb.c 2007-12-09 12:15:21.000000000 -0200
+@@ -218,6 +218,9 @@ epsilon_cb_server_data(void *data, int t
+ if (e->server != epsilon_server)
+ return 1;
+
++ if (!(e && e->data))
++ return 1;
++
+ msg = e->data;
+ Epsilon_Request *thumb;
+
+diff -upNr epsilon.orig/src/lib/exiftags/canon.c epsilon/src/lib/exiftags/canon.c
+--- epsilon.orig/src/lib/exiftags/canon.c 2007-12-05 20:26:23.000000000 -0200
++++ epsilon/src/lib/exiftags/canon.c 2007-12-09 12:15:21.000000000 -0200
+@@ -52,7 +52,7 @@
+ struct ccstm {
+ int32_t val;
+ struct descrip *table;
+- const char descr[];
++ const char *descr;
+ };
+
+