diff --git a/component/tesseract/buildout.cfg b/component/tesseract/buildout.cfg
index d81e19c84c95983f283cdd5c5691e92cc32b4f88..79e147d64eb4e587130e276c4aabd93dc50999ff 100644
--- a/component/tesseract/buildout.cfg
+++ b/component/tesseract/buildout.cfg
@@ -21,6 +21,7 @@ patch-options =
 patches =
   ${:_profile_base_location_}/tesseract-3.00-gcc-4.7-build.patch#ca80db3ec489c547b03f3ee48879c1b1
   ${:_profile_base_location_}/tesseract-3.01-remove-bom.patch#2e691858cb492b7c17d23bf0912b3d24
+  ${:_profile_base_location_}/tesseract-3.01-gcc6-ftbs.patch#f7a6140c0fe390b96fe753a70e9d59fd
 pre-configure =
   libtoolize -f -c
   aclocal -I ${libtool:location}/share/aclocal -I config
diff --git a/component/tesseract/tesseract-3.01-gcc6-ftbs.patch b/component/tesseract/tesseract-3.01-gcc6-ftbs.patch
new file mode 100644
index 0000000000000000000000000000000000000000..786e9f5b044199bb19daa3bddc93531e46a71e17
--- /dev/null
+++ b/component/tesseract/tesseract-3.01-gcc6-ftbs.patch
@@ -0,0 +1,100 @@
+commit 58e79a222e12280984ed19ab4d3bcac654e121fa
+Author: Arnaud Fontaine <arnaud.fontaine@nexedi.com>
+Date:   Fri Nov 4 19:10:13 2016 +0900
+
+    Fix compilation errors.
+
+diff --git a/cube/char_set.cpp b/cube/char_set.cpp
+index 3cf4798..6b29883 100644
+--- a/cube/char_set.cpp
++++ b/cube/char_set.cpp
+@@ -65,13 +65,13 @@ CharSet *CharSet::Create(TessdataManager *tessdata_manager,
+       !tessdata_manager->SeekToStart(TESSDATA_UNICHARSET)) {
+     fprintf(stderr, "Cube ERROR (CharSet::Create): could not find "
+             "either cube or tesseract unicharset\n");
+-    return false;
++    return NULL;
+   }
+   FILE *charset_fp = tessdata_manager->GetDataFilePtr();
+   if (!charset_fp) {
+     fprintf(stderr, "Cube ERROR (CharSet::Create): could not load "
+             "a unicharset\n");
+-    return false;
++    return NULL;
+   }
+ 
+   // If we found a cube unicharset separate from tesseract's, load it and
+@@ -84,7 +84,7 @@ CharSet *CharSet::Create(TessdataManager *tessdata_manager,
+     loaded = char_set->LoadSupportedCharList(charset_fp, NULL);
+   if (!loaded) {
+     delete char_set;
+-    return false;
++    return NULL;
+   }
+ 
+   char_set->init_ = true;
+diff --git a/cube/cube_line_segmenter.cpp b/cube/cube_line_segmenter.cpp
+index deee573..3f0b762 100644
+--- a/cube/cube_line_segmenter.cpp
++++ b/cube/cube_line_segmenter.cpp
+@@ -124,7 +124,7 @@ Pixa *CubeLineSegmenter::CrackLine(Pix *cracked_line_pix,
+ 
+   if (line_con_comps == NULL) {
+     delete []lines_pixa;
+-    return false;
++    return NULL;
+   }
+ 
+   // assign each conn comp to the a line based on its centroid
+@@ -142,7 +142,7 @@ Pixa *CubeLineSegmenter::CrackLine(Pix *cracked_line_pix,
+         delete []lines_pixa;
+         boxaDestroy(&line_con_comps);
+         pixaDestroy(&line_con_comps_pix);
+-        return false;
++        return NULL;
+       }
+     }
+ 
+@@ -413,14 +413,14 @@ Pix *CubeLineSegmenter::Pixa2Pix(Pixa *pixa, Box **dest_box,
+ 
+   (*dest_box) = boxCreate(min_x, min_y, max_x - min_x, max_y - min_y);
+   if ((*dest_box) == NULL) {
+-    return false;
++    return NULL;
+   }
+ 
+   // create the union pix
+   Pix *union_pix = pixCreate((*dest_box)->w, (*dest_box)->h, img_->d);
+   if (union_pix == NULL) {
+     boxDestroy(dest_box);
+-    return false;
++    return NULL;
+   }
+ 
+   // create a pix corresponding to the union of all pixs
+diff --git a/cube/cube_object.cpp b/cube/cube_object.cpp
+index 48bce64..b9a7113 100644
+--- a/cube/cube_object.cpp
++++ b/cube/cube_object.cpp
+@@ -165,7 +165,7 @@ WordAltList *CubeObject::Recognize(LangModel *lang_mod, bool word_mode) {
+       if (deslanted_beam_obj_ == NULL) {
+         fprintf(stderr, "Cube ERROR (CubeObject::Recognize): could not "
+                 "construct deslanted BeamSearch\n");
+-        return false;
++        return NULL;
+       }
+     }
+ 
+diff --git a/cube/word_list_lang_model.cpp b/cube/word_list_lang_model.cpp
+index 18f85c1..0f7f562 100644
+--- a/cube/word_list_lang_model.cpp
++++ b/cube/word_list_lang_model.cpp
+@@ -74,7 +74,7 @@ LangModEdge **WordListLangModel::GetEdges(CharAltList *alt_list,
+   // initialize if necessary
+   if (init_ == false) {
+     if (Init() == false) {
+-      return false;
++      return NULL;
+     }
+   }
+