diff --git a/doc/ethumb/class-ethumb.rst b/doc/ethumb/class-ethumb.rst
new file mode 100644
index 0000000..70b69b1
--- /dev/null
+++ b/doc/ethumb/class-ethumb.rst
@@ -0,0 +1,6 @@
+.. currentmodule:: efl.ethumb
+
+:class:`efl.ethumb.Ethumb` Class
+================================
+
+.. autoclass:: efl.ethumb.Ethumb
diff --git a/doc/ethumb/ethumb.rst b/doc/ethumb/ethumb.rst
index 88a5524..9f33fe0 100644
--- a/doc/ethumb/ethumb.rst
+++ b/doc/ethumb/ethumb.rst
@@ -1,28 +1,54 @@
+.. _ethumb_main_intro:
+
+
What is Ethumb?
-----------------
+===============
+Ethumb will use Evas to generate thumbnail images of given files. The API
+allows great customization of the generated files and also helps compling to
+FreeDesktop.Org Thumbnail Specification.
-How to use the Ethumb object
------------------------------
+(http://specifications.freedesktop.org/thumbnail-spec/thumbnail-spec-latest.html)
+
+However, thumbnailing can be an expensive process that will impact your
+application experience, blocking animations and user interaction during the
+generation. Another problem is that one should try to cache the thumbnails in
+a place that other applications can benefit from the file.
+
+:class:`~efl.ethumb_client.EthumbClient` exists to solve this. It will
+communicate with a server using standard D-Bus protocol. The server will use
+:class:`~efl.ethumb.Ethumb` itself to generate the thumbnail images and cache
+them using FreeDesktop.Org standard. It is recommended that most applications
+use :class:`~efl.ethumb_client.EthumbClient` instead of
+:class:`~efl.ethumb.Ethumb` directly.
+
+Another difference is that one :class:`~efl.ethumb.Ethumb` instance
+can only generate a single thumbnail at a given time, so you must implement
+some sort of queue mechanism if you need more than one. Instead
+:class:`~efl.ethumb_client.EthumbClient` is a able to receive more than one
+request at the same time.
+
+Recommended reading:
+
+ :class:`~efl.ethumb.Ethumb` to generate thumbnails in the local process.
+
+ :class:`~efl.ethumb_client.EthumbClient` to generate thumbnails using a
+ server (recommended).
API Reference
--------------
+=============
.. toctree::
- :maxdepth: 4
+ :titlesonly:
- ethumb_module
- pyethumb
- ethumb_client
+ module-ethumb.rst
Inheritance diagram
--------------------
+===================
-.. inheritance-diagram::
- efl.ethumb
- efl.ethumb_client
+.. inheritance-diagram:: efl.ethumb
:parts: 2
diff --git a/doc/ethumb/ethumb_client.rst b/doc/ethumb/ethumb_client.rst
deleted file mode 100644
index ebe7b15..0000000
--- a/doc/ethumb/ethumb_client.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-.. currentmodule:: efl.ethumb
-
-
-:class:`efl.ethumb_client.Client` Class
-========================================
-
-.. autoclass:: efl.ethumb_client.Client
diff --git a/doc/ethumb/ethumb_module.rst b/doc/ethumb/ethumb_module.rst
deleted file mode 100644
index a7189f9..0000000
--- a/doc/ethumb/ethumb_module.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-:mod:`efl.ethumb` Module
-========================
-
-.. automodule:: efl.ethumb
- :exclude-members: PyEthumb
diff --git a/doc/ethumb/module-ethumb.rst b/doc/ethumb/module-ethumb.rst
new file mode 100644
index 0000000..2891d11
--- /dev/null
+++ b/doc/ethumb/module-ethumb.rst
@@ -0,0 +1,11 @@
+diff --git doc/ethumb/ethumb_module.rst doc/ethumb/ethumb_module.rst
+deleted file mode 100644
+index a7189f9..0000000
+--- doc/ethumb/ethumb_module.rst
++++ /dev/null
+@@ -1,5 +0,0 @@
+-:mod:`efl.ethumb` Module
+-========================
+-
+-.. automodule:: efl.ethumb
+- :exclude-members: PyEthumb
diff --git a/doc/ethumb/pyethumb.rst b/doc/ethumb/pyethumb.rst
deleted file mode 100644
index 70e2bda..0000000
--- a/doc/ethumb/pyethumb.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-.. currentmodule:: efl.ethumb
-
-:class:`efl.ethumb.PyEthumb` Class
-==================================
-
-.. autoclass:: efl.ethumb.PyEthumb
-
-.. currentmodule:: efl.ethumb
-
diff --git a/doc/index.rst b/doc/index.rst
index ad626cb..206894f 100644
--- a/doc/index.rst
+++ b/doc/index.rst
@@ -62,6 +62,7 @@ Ethumb
======
.. toctree:: ethumb/ethumb.rst
+ :titlesonly:
Edje
diff --git a/efl/ethumb/__init__.py b/efl/ethumb/__init__.py
deleted file mode 100644
index d8d3e48..0000000
--- a/efl/ethumb/__init__.py
+++ /dev/null
@@ -1,30 +0,0 @@
-# Copyright (C) 2009 by ProFUSION embedded systems
-#
-# This file is part of Python-Ethumb.
-#
-# Python-Ethumb is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# Python-Ethumb is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public License
-# along with this Python-Ethumb. If not, see .
-
-from c_ethumb import init, shutdown, PyEthumb
-
-ETHUMB_THUMB_NORMAL = 0
-ETHUMB_THUMB_LARGE = 1
-
-ETHUMB_THUMB_FDO = 0
-ETHUMB_THUMB_JPEG = 1
-ETHUMB_THUMB_EET = 2
-
-ETHUMB_THUMB_KEEP_ASPECT = 0
-ETHUMB_THUMB_IGNORE_ASPECT = 1
-ETHUMB_THUMB_CROP = 2
-
diff --git a/efl/ethumb/efl.ethumb.pyx b/efl/ethumb/efl.ethumb.pyx
index 573f811..d9f3d5b 100644
--- a/efl/ethumb/efl.ethumb.pyx
+++ b/efl/ethumb/efl.ethumb.pyx
@@ -15,19 +15,616 @@
# You should have received a copy of the GNU Lesser General Public License
# along with this Python-EFL. If not, see .
+"""
+
+:mod:`efl.ethumb` Module
+########################
+
+
+Classes
+=======
+
+.. toctree::
+
+ class-ethumb.rst
+
+
+Enumerations
+============
+
+.. _Ethumb_Thumb_FDO_Size:
+
+Ethumb_Thumb_FDO_Size
+---------------------
+
+.. data:: ETHUMB_THUMB_NORMAL
+
+ 128x128 as defined by FreeDesktop.Org standard
+
+.. data:: ETHUMB_THUMB_LARGE
+
+ 256x256 as defined by FreeDesktop.Org standard
+
+
+.. _Ethumb_Thumb_Format:
+
+Ethumb_Thumb_Format
+-------------------
+
+.. data:: ETHUMB_THUMB_FDO
+
+ PNG as defined by FreeDesktop.Org standard.
+
+.. data:: ETHUMB_THUMB_JPEG
+
+ JPEGs are often smaller and faster to read/write.
+
+.. data:: ETHUMB_THUMB_EET
+
+ EFL's own storage system, supports key parameter.
+
+
+.. _Ethumb_Thumb_Aspect:
+
+Ethumb_Thumb_Aspect
+-------------------
+
+.. data:: ETHUMB_THUMB_KEEP_ASPECT
+
+ Keep original proportion between width and height
+
+.. data:: ETHUMB_THUMB_IGNORE_ASPECT
+
+ Ignore aspect and foce it to match thumbnail's width and height
+
+.. data:: ETHUMB_THUMB_CROP
+
+ keep aspect but crop (cut) the largest dimension
+
+
+.. _Ethumb_Thumb_Orientation:
+
+Ethumb_Thumb_Orientation
+------------------------
+
+.. data:: ETHUMB_THUMB_ORIENT_NONE
+
+ Keep orientation as pixel data is
+
+.. data:: ETHUMB_THUMB_ROTATE_90_CW
+
+ Rotate 90° clockwise
+
+.. data:: ETHUMB_THUMB_ROTATE_180
+
+ Rotate 180°
+
+.. data:: ETHUMB_THUMB_ROTATE_90_CCW
+
+ Rotate 90° counter-clockwise
+
+.. data:: ETHUMB_THUMB_FLIP_HORIZONTAL
+
+ Flip horizontally
+
+.. data:: ETHUMB_THUMB_FLIP_VERTICAL
+
+ Flip vertically
+
+.. data:: ETHUMB_THUMB_FLIP_TRANSPOSE
+
+ Transpose
+
+.. data:: ETHUMB_THUMB_FLIP_TRANSVERSE
+
+ Transverse
+
+.. data:: ETHUMB_THUMB_ORIENT_ORIGINAL
+
+ Use orientation from metadata (EXIF-only currently)
+
+
+Module level functions
+======================
+
+"""
+
+from libc.stdint cimport uintptr_t
+from cpython cimport Py_INCREF, Py_DECREF, PyUnicode_AsUTF8String
+
+from efl.eina cimport Eina_Bool
+from efl.utils.conversions cimport _ctouni
+from efl.c_ethumb cimport Ethumb as cEthumb, Ethumb_Thumb_FDO_Size, \
+ Ethumb_Thumb_Format, Ethumb_Thumb_Aspect, Ethumb_Thumb_Orientation, \
+ ethumb_init, ethumb_shutdown, \
+ ethumb_new, ethumb_free, ethumb_file_set, ethumb_file_get, ethumb_file_free, \
+ ethumb_thumb_path_set, ethumb_thumb_path_get, ethumb_exists, ethumb_generate, \
+ ethumb_frame_set, ethumb_frame_get, ethumb_thumb_dir_path_set, \
+ ethumb_thumb_dir_path_get, ethumb_thumb_category_set, \
+ ethumb_thumb_category_get, ethumb_thumb_fdo_set, ethumb_thumb_size_set, \
+ ethumb_thumb_size_get, ethumb_thumb_format_set, ethumb_thumb_format_get, \
+ ethumb_thumb_aspect_set, ethumb_thumb_aspect_get, ethumb_thumb_orientation_set, \
+ ethumb_thumb_orientation_get, ethumb_thumb_crop_align_set, \
+ ethumb_thumb_crop_align_get, ethumb_thumb_quality_set, ethumb_thumb_quality_get, \
+ ethumb_thumb_compress_set, ethumb_thumb_compress_get, \
+ ethumb_video_start_set, ethumb_video_start_get, ethumb_video_time_set, \
+ ethumb_video_time_get, ethumb_video_interval_set, ethumb_video_interval_get, \
+ ethumb_video_ntimes_set, ethumb_video_ntimes_get, ethumb_video_fps_set, \
+ ethumb_video_fps_get, ethumb_document_page_set, ethumb_document_page_get
+
import atexit
+import traceback
+
+
+cdef void _generate_cb(void *data, cEthumb *e, Eina_Bool success) with gil:
+ obj =