diff --git a/caca/caca.h b/caca/caca.h
index 861cbf6..2ce8303 100644
--- a/caca/caca.h
+++ b/caca/caca.h
@@ -87,23 +87,10 @@ extern "C"
 {
 #endif
 
-/** \brief User event types.
- *
- *  Event types returned by caca_get_event().
- */
-enum caca_event_type
-{
-    CACA_EVENT_NONE =          0x0000, /**< No event. */
-
-    CACA_EVENT_KEY_PRESS =     0x0001, /**< A key was pressed. */
-    CACA_EVENT_KEY_RELEASE =   0x0002, /**< A key was released. */
-    CACA_EVENT_MOUSE_PRESS =   0x0004, /**< A mouse button was pressed. */
-    CACA_EVENT_MOUSE_RELEASE = 0x0008, /**< A mouse button was released. */
-    CACA_EVENT_MOUSE_MOTION =  0x0010, /**< The mouse was moved. */
-    CACA_EVENT_RESIZE =        0x0020, /**< The window was resized. */
-
-    CACA_EVENT_ANY =           0xffff  /**< Bitmask for any event. */
-};
+/** \e libcaca context */
+typedef struct caca caca_t;
+/** event structure */
+typedef struct caca_event caca_event_t;
 
 /** \brief User events.
  *
@@ -138,7 +125,20 @@ enum caca_event_type
  */
 struct caca_event
 {
-    enum caca_event_type type;
+    enum caca_event_type
+    {
+        CACA_EVENT_NONE =          0x0000, /**< No event. */
+
+        CACA_EVENT_KEY_PRESS =     0x0001, /**< A key was pressed. */
+        CACA_EVENT_KEY_RELEASE =   0x0002, /**< A key was released. */
+        CACA_EVENT_MOUSE_PRESS =   0x0004, /**< A mouse button was pressed. */
+        CACA_EVENT_MOUSE_RELEASE = 0x0008, /**< A mouse button was released. */
+        CACA_EVENT_MOUSE_MOTION =  0x0010, /**< The mouse was moved. */
+        CACA_EVENT_RESIZE =        0x0020, /**< The window was resized. */
+
+        CACA_EVENT_ANY =           0xffff  /**< Bitmask for any event. */
+    } type;
+
     union
     {
         struct { unsigned int x, y, button; } mouse;
@@ -194,9 +194,7 @@ enum caca_key
     CACA_KEY_F15 = 0x128  /**< The F15 key. */
 };
 
-typedef struct caca_context caca_t;
-
-/** \defgroup basic Basic functions
+/** \defgroup caca Basic libcaca functions
  *
  *  These functions provide the basic \e libcaca routines for driver
  *  initialisation, system information retrieval and configuration.
@@ -218,7 +216,7 @@ int caca_set_window_title(caca_t *kk, char const *);
  *  clicks.
  *
  *  @{ */
-int caca_get_event(caca_t *kk, unsigned int, struct caca_event *, int);
+int caca_get_event(caca_t *kk, unsigned int, caca_event_t *, int);
 unsigned int caca_get_mouse_x(caca_t *kk);
 unsigned int caca_get_mouse_y(caca_t *kk);
 void caca_set_mouse(caca_t *kk, int);
diff --git a/caca/caca_internals.h b/caca/caca_internals.h
index d450cda..fdeb11b 100644
--- a/caca/caca_internals.h
+++ b/caca/caca_internals.h
@@ -25,6 +25,8 @@ typedef long int intptr_t;
 typedef long unsigned int uintptr_t;
 #endif
 
+typedef struct caca_timer caca_timer_t;
+
 #if !defined(_DOXYGEN_SKIP_ME)
 #   define EVENTBUF_LEN 10
 #endif
@@ -88,7 +90,7 @@ struct caca_timer
 };
 
 /* Internal caca context */
-struct caca_context
+struct caca
 {
     /* A link to our cucul canvas */
     cucul_t *qq;
@@ -106,7 +108,7 @@ struct caca_context
         unsigned int (* get_window_height) (caca_t *);
         void (* display) (caca_t *);
         void (* handle_resize) (caca_t *);
-        int (* get_event) (caca_t *, struct caca_event *);
+        int (* get_event) (caca_t *, caca_event_t *);
         void (* set_mouse) (caca_t *, int);
     } drv;
 
@@ -125,20 +127,20 @@ struct caca_context
 
     /* Framerate handling */
     unsigned int delay, rendertime;
-    struct caca_timer timer;
+    caca_timer_t timer;
     int lastticks;
 
     struct events
     {
 #if defined(USE_SLANG) || defined(USE_NCURSES) || defined(USE_CONIO) || defined(USE_GL)
-        struct caca_event buf[EVENTBUF_LEN];
+        caca_event_t buf[EVENTBUF_LEN];
         int queue;
 #endif
 #if defined(USE_SLANG) || defined(USE_NCURSES)
-        struct caca_timer key_timer;
+        caca_timer_t key_timer;
         unsigned int last_key_ticks;
         unsigned int autorepeat_ticks;
-        struct caca_event last_key_event;
+        caca_event_t last_key_event;
 #endif
 #if defined(USE_WIN32)
 		unsigned char not_empty_struct;
@@ -148,13 +150,13 @@ struct caca_context
 
 /* Internal timer functions */
 extern void _caca_sleep(unsigned int);
-extern unsigned int _caca_getticks(struct caca_timer *);
+extern unsigned int _caca_getticks(caca_timer_t *);
 
 /* Internal event functions */
 extern void _caca_handle_resize(caca_t *);
 #if defined(USE_SLANG) || defined(USE_NCURSES) || defined(USE_CONIO) || defined(USE_GL)
-extern void _push_event(caca_t *, struct caca_event *);
-extern int _pop_event(caca_t *, struct caca_event *);
+extern void _push_event(caca_t *, caca_event_t *);
+extern int _pop_event(caca_t *, caca_event_t *);
 #endif
 
 #endif /* __CACA_INTERNALS_H__ */
diff --git a/caca/driver_conio.c b/caca/driver_conio.c
index 0eff198..ff34e96 100644
--- a/caca/driver_conio.c
+++ b/caca/driver_conio.c
@@ -119,10 +119,10 @@ static void conio_handle_resize(caca_t *kk)
     kk->resize.h = kk->qq->height;
 }
 
-static int conio_get_event(caca_t *kk, struct caca_event *ev)
+static int conio_get_event(caca_t *kk, caca_event_t *ev)
 {
     unsigned char ch;
-    struct caca_event release;
+    caca_event_t release;
 
     if(!_conio_kbhit())
     {
diff --git a/caca/driver_gl.c b/caca/driver_gl.c
index 1916a1c..233371a 100644
--- a/caca/driver_gl.c
+++ b/caca/driver_gl.c
@@ -323,7 +323,7 @@ static void gl_handle_resize(caca_t *kk)
     glMatrixMode(GL_MODELVIEW);
 }
 
-static int gl_get_event(caca_t *kk, struct caca_event *ev)
+static int gl_get_event(caca_t *kk, caca_event_t *ev)
 {
 #ifdef HAVE_GLUTCHECKLOOP
     glutCheckLoop();
diff --git a/caca/driver_ncurses.c b/caca/driver_ncurses.c
index e5e6d77..154f729 100644
--- a/caca/driver_ncurses.c
+++ b/caca/driver_ncurses.c
@@ -224,7 +224,7 @@ static void ncurses_handle_resize(caca_t *kk)
     kk->resize.h = kk->qq->height;
 }
 
-static int ncurses_get_event(caca_t *kk, struct caca_event *ev)
+static int ncurses_get_event(caca_t *kk, caca_event_t *ev)
 {
     int intkey;
 
diff --git a/caca/driver_raw.c b/caca/driver_raw.c
index 6459572..ab1a760 100644
--- a/caca/driver_raw.c
+++ b/caca/driver_raw.c
@@ -84,7 +84,7 @@ static void raw_handle_resize(caca_t *kk)
     ;
 }
 
-static int raw_get_event(caca_t *kk, struct caca_event *ev)
+static int raw_get_event(caca_t *kk, caca_event_t *ev)
 {
     ev->type = CACA_EVENT_NONE;
     return 0;
diff --git a/caca/driver_slang.c b/caca/driver_slang.c
index 67e3d2c..11b44c8 100644
--- a/caca/driver_slang.c
+++ b/caca/driver_slang.c
@@ -252,7 +252,7 @@ static void slang_handle_resize(caca_t *kk)
         SLsmg_reinit_smg();
 }
 
-static int slang_get_event(caca_t *kk, struct caca_event *ev)
+static int slang_get_event(caca_t *kk, caca_event_t *ev)
 {
     int intkey;
 
diff --git a/caca/driver_vga.c b/caca/driver_vga.c
index 8d38ea1..0593422 100644
--- a/caca/driver_vga.c
+++ b/caca/driver_vga.c
@@ -132,7 +132,7 @@ static void vga_handle_resize(caca_t *kk)
     kk->resize.h = kk->qq->height;
 }
 
-static int vga_get_event(caca_t *kk, struct caca_event *ev)
+static int vga_get_event(caca_t *kk, caca_event-t *ev)
 {
     /* FIXME */
     ev->type = CACA_EVENT_NONE;
diff --git a/caca/driver_win32.c b/caca/driver_win32.c
index beeb98d..da976a3 100644
--- a/caca/driver_win32.c
+++ b/caca/driver_win32.c
@@ -233,7 +233,7 @@ static void win32_handle_resize(caca_t *kk)
     kk->resize.h = kk->qq->height;
 }
 
-static int win32_get_event(caca_t *kk, struct caca_event *ev)
+static int win32_get_event(caca_t *kk, caca_event_t *ev)
 {
     INPUT_RECORD rec;
     DWORD num;
diff --git a/caca/driver_x11.c b/caca/driver_x11.c
index 661d084..86053b0 100644
--- a/caca/driver_x11.c
+++ b/caca/driver_x11.c
@@ -404,7 +404,7 @@ static void x11_handle_resize(caca_t *kk)
     kk->drv.p->pixmap = new_pixmap;
 }
 
-static int x11_get_event(caca_t *kk, struct caca_event *ev)
+static int x11_get_event(caca_t *kk, caca_event_t *ev)
 {
     XEvent xevent;
     char key;
diff --git a/caca/event.c b/caca/event.c
index 5ff2f0d..478bf8b 100644
--- a/caca/event.c
+++ b/caca/event.c
@@ -26,8 +26,8 @@
 #include "caca.h"
 #include "caca_internals.h"
 
-static int _get_next_event(caca_t *, struct caca_event *);
-static int _lowlevel_event(caca_t *, struct caca_event *);
+static int _get_next_event(caca_t *, caca_event_t *);
+static int _lowlevel_event(caca_t *, caca_event_t *);
 
 #if !defined(_DOXYGEN_SKIP_ME)
 /* If no new key was pressed after AUTOREPEAT_THRESHOLD usec, assume the
@@ -57,9 +57,9 @@ static int _lowlevel_event(caca_t *, struct caca_event *);
  *  \return The next matching event in the queue, or 0 if no event is pending.
  */
 int caca_get_event(caca_t *kk, unsigned int event_mask,
-                   struct caca_event *ev, int timeout)
+                   caca_event_t *ev, int timeout)
 {
-    struct caca_timer timer;
+    caca_timer_t timer;
     int usec = 0;
 
     if(!event_mask)
@@ -141,7 +141,7 @@ unsigned int caca_get_mouse_y(caca_t *kk)
  * XXX: The following functions are local.
  */
 
-static int _get_next_event(caca_t *kk, struct caca_event *ev)
+static int _get_next_event(caca_t *kk, caca_event_t *ev)
 {
 #if defined(USE_SLANG) || defined(USE_NCURSES)
     unsigned int ticks;
@@ -223,7 +223,7 @@ static int _get_next_event(caca_t *kk, struct caca_event *ev)
 #endif
 }
 
-static int _lowlevel_event(caca_t *kk, struct caca_event *ev)
+static int _lowlevel_event(caca_t *kk, caca_event_t *ev)
 {
 #if defined(USE_SLANG) || defined(USE_NCURSES) || defined(USE_CONIO)
     int ret = _pop_event(kk, ev);
@@ -236,7 +236,7 @@ static int _lowlevel_event(caca_t *kk, struct caca_event *ev)
 }
 
 #if defined(USE_SLANG) || defined(USE_NCURSES) || defined(USE_CONIO) || defined(USE_GL)
-void _push_event(caca_t *kk, struct caca_event *ev)
+void _push_event(caca_t *kk, caca_event_t *ev)
 {
     if(!ev->type || kk->events.queue == EVENTBUF_LEN)
         return;
@@ -244,7 +244,7 @@ void _push_event(caca_t *kk, struct caca_event *ev)
     kk->events.queue++;
 }
 
-int _pop_event(caca_t *kk, struct caca_event *ev)
+int _pop_event(caca_t *kk, caca_event_t *ev)
 {
     int i;
 
diff --git a/caca/time.c b/caca/time.c
index f7ecade..95a316e 100644
--- a/caca/time.c
+++ b/caca/time.c
@@ -45,7 +45,7 @@ void _caca_sleep(unsigned int usec)
 #endif
 }
 
-unsigned int _caca_getticks(struct caca_timer *timer)
+unsigned int _caca_getticks(caca_timer_t *timer)
 {
 #if defined(HAVE_GETTIMEOFDAY)
     struct timeval tv;
diff --git a/cucul/cucul.c b/cucul/cucul.c
index c621d12..e6d3d65 100644
--- a/cucul/cucul.c
+++ b/cucul/cucul.c
@@ -72,6 +72,15 @@ cucul_t * cucul_create(unsigned int width, unsigned int height)
     return qq;
 }
 
+/** \brief Load a memory area into a canvas.
+ *
+ *  This function loads a memory area containing an exported canvas into
+ *  a new \e libcucul canvas.
+ *
+ *  \param data The memory area to be loaded into a canvas.
+ *  \param size The length of the memory area.
+ *  \return A libcucul canvas, or NULL in case of error.
+ */
 cucul_t *cucul_load(void *data, unsigned int size)
 {
     cucul_t *qq;
@@ -227,11 +236,36 @@ void cucul_free(cucul_t *qq)
     free(qq);
 }
 
-struct cucul_buffer * cucul_create_export(cucul_t *qq, char const *format)
+/** \brief Export a canvas into a foreign format.
+ *
+ *  This function exports a libcucul canvas into various foreign formats such
+ *  as ANSI art, HTML, IRC colours, etc. One should use cucul_get_buffer_data()
+ *  and cucul_get_buffer_size() to access the buffer contents. The allocated
+ *  data is valid until cucul_free_buffer() is called.
+ *
+ *  Valid values for \e format are:
+ *
+ *  \li \e "ansi": export ANSI art (CP437 charset with ANSI colour codes).
+ *
+ *  \li \e "html": export an HTML page with CSS information.
+ *
+ *  \li \e "html3": export an HTML table that should be compatible with
+ *      most navigators, including textmode ones.
+ *
+ *  \li \e "irc": export UTF-8 text with mIRC colour codes.
+ *
+ *  \li \e "ps": export a PostScript document.
+ *
+ *  \li \e "svg": export an SVG document.
+ *
+ *  \param qq A libcucul canvas
+ *  \param format A string describing the requested output format.
+ */
+cucul_buffer_t * cucul_create_export(cucul_t *qq, char const *format)
 {
-    struct cucul_buffer *ex;
+    cucul_buffer_t *ex;
 
-    ex = malloc(sizeof(struct cucul_buffer));
+    ex = malloc(sizeof(cucul_buffer_t));
 
     if(!strcasecmp("ansi", format))
         _cucul_get_ansi(qq, ex);
@@ -279,10 +313,43 @@ char const * const * cucul_get_export_list(void)
     return list;
 }
 
-void cucul_free_export(struct cucul_buffer *ex)
+/** \brief Get the buffer size.
+ *
+ *  This function returns the length (in bytes) of the memory area stored
+ *  in the given \e libcucul buffer.
+ *
+ *  \param buf A \e libcucul buffer
+ *  \return The buffer data length.
+ */
+unsigned long int cucul_get_buffer_size(cucul_buffer_t *buf)
+{
+    return buf->size;
+}
+
+/** \brief Get the buffer data.
+ *
+ *  This function returns a pointer to the memory area stored in the given
+ *  \e libcucul buffer.
+ *
+ *  \param buf A \e libcucul buffer
+ *  \return A pointer to the buffer memory area.
+ */
+void * cucul_get_buffer_data(cucul_buffer_t *buf)
+{
+    return buf->data;
+}
+
+/** \brief Free a buffer.
+ *
+ *  This function frees the structures associated with the given
+ *  \e libcucul buffer.
+ *
+ *  \param buf A \e libcucul buffer
+ */
+void cucul_free_buffer(cucul_buffer_t *buf)
 {
-    free(ex->data);
-    free(ex);
+    free(buf->data);
+    free(buf);
 }
 
 /*
diff --git a/cucul/cucul.h b/cucul/cucul.h
index 970456d..e2c8301 100644
--- a/cucul/cucul.h
+++ b/cucul/cucul.h
@@ -31,13 +31,16 @@ extern "C"
 {
 #endif
 
-typedef struct cucul_context cucul_t;
-
-struct cucul_buffer
-{
-    unsigned int size;
-    char *data;
-};
+/** \e libcucul context */
+typedef struct cucul cucul_t;
+/** sprite structure */
+typedef struct cucul_sprite cucul_sprite_t;
+/** dither structure */
+typedef struct cucul_dither cucul_dither_t;
+/** data buffer structure */
+typedef struct cucul_buffer cucul_buffer_t;
+/** font structure */
+typedef struct cucul_font cucul_font_t;
 
 /** \defgroup colour Colour definitions
  *
@@ -64,7 +67,7 @@ struct cucul_buffer
 #define CUCUL_COLOR_TRANSPARENT 0x20 /**< The transparent colour. */
 /*  @} */
 
-/** \defgroup basic Basic functions
+/** \defgroup cucul Basic libcucul functions
  *
  *  These functions provide the basic \e libcaca routines for library
  *  initialisation, system information retrieval and configuration.
@@ -78,6 +81,16 @@ unsigned int cucul_get_height(cucul_t *);
 void cucul_free(cucul_t *);
 /*  @} */
 
+/** \defgroup buffer Buffer handling
+ *
+ *  These functions provide methods to handle libcucul buffers.
+ *
+ *  @{ */
+unsigned long int cucul_get_buffer_size(cucul_buffer_t *);
+void * cucul_get_buffer_data(cucul_buffer_t *);
+void cucul_free_buffer(cucul_buffer_t *);
+/*  @} */
+
 /** \defgroup canvas Canvas drawing
  *
  *  These functions provide low-level character printing routines and
@@ -144,15 +157,14 @@ unsigned int cucul_sqrt(unsigned int);
  *  and rendering.
  *
  *  @{ */
-struct cucul_sprite;
-struct cucul_sprite * cucul_load_sprite(char const *);
-int cucul_get_sprite_frames(struct cucul_sprite const *);
-int cucul_get_sprite_width(struct cucul_sprite const *, int);
-int cucul_get_sprite_height(struct cucul_sprite const *, int);
-int cucul_get_sprite_dx(struct cucul_sprite const *, int);
-int cucul_get_sprite_dy(struct cucul_sprite const *, int);
-void cucul_draw_sprite(cucul_t *, int, int, struct cucul_sprite const *, int);
-void cucul_free_sprite(struct cucul_sprite *);
+cucul_sprite_t * cucul_load_sprite(char const *);
+int cucul_get_sprite_frames(cucul_sprite_t const *);
+int cucul_get_sprite_width(cucul_sprite_t const *, int);
+int cucul_get_sprite_height(cucul_sprite_t const *, int);
+int cucul_get_sprite_dx(cucul_sprite_t const *, int);
+int cucul_get_sprite_dy(cucul_sprite_t const *, int);
+void cucul_draw_sprite(cucul_t *, int, int, cucul_sprite_t const *, int);
+void cucul_free_sprite(cucul_sprite_t *);
 /*  @} */
 
 /** \defgroup dither Bitmap dithering
@@ -161,29 +173,28 @@ void cucul_free_sprite(struct cucul_sprite *);
  *  rendering.
  *
  *  @{ */
-struct cucul_dither;
-struct cucul_dither *cucul_create_dither(unsigned int, unsigned int,
+cucul_dither_t *cucul_create_dither(unsigned int, unsigned int,
                                          unsigned int, unsigned int,
                                          unsigned int, unsigned int,
                                          unsigned int, unsigned int);
-void cucul_set_dither_palette(struct cucul_dither *,
+void cucul_set_dither_palette(cucul_dither_t *,
                               unsigned int r[], unsigned int g[],
                               unsigned int b[], unsigned int a[]);
-void cucul_set_dither_brightness(struct cucul_dither *, float);
-void cucul_set_dither_gamma(struct cucul_dither *, float);
-void cucul_set_dither_contrast(struct cucul_dither *, float);
-void cucul_set_dither_invert(struct cucul_dither *, int);
-void cucul_set_dither_antialias(struct cucul_dither *, char const *);
-char const * const * cucul_get_dither_antialias_list(struct cucul_dither const *);
-void cucul_set_dither_color(struct cucul_dither *, char const *);
-char const * const * cucul_get_dither_color_list(struct cucul_dither const *);
-void cucul_set_dither_charset(struct cucul_dither *, char const *);
-char const * const * cucul_get_dither_charset_list(struct cucul_dither const *);
-void cucul_set_dither_mode(struct cucul_dither *, char const *);
-char const * const * cucul_get_dither_mode_list(struct cucul_dither const *);
+void cucul_set_dither_brightness(cucul_dither_t *, float);
+void cucul_set_dither_gamma(cucul_dither_t *, float);
+void cucul_set_dither_contrast(cucul_dither_t *, float);
+void cucul_set_dither_invert(cucul_dither_t *, int);
+void cucul_set_dither_antialias(cucul_dither_t *, char const *);
+char const * const * cucul_get_dither_antialias_list(cucul_dither_t const *);
+void cucul_set_dither_color(cucul_dither_t *, char const *);
+char const * const * cucul_get_dither_color_list(cucul_dither_t const *);
+void cucul_set_dither_charset(cucul_dither_t *, char const *);
+char const * const * cucul_get_dither_charset_list(cucul_dither_t const *);
+void cucul_set_dither_mode(cucul_dither_t *, char const *);
+char const * const * cucul_get_dither_mode_list(cucul_dither_t const *);
 void cucul_dither_bitmap(cucul_t *, int, int, int, int,
-                         struct cucul_dither const *, void *);
-void cucul_free_dither(struct cucul_dither *);
+                         cucul_dither_t const *, void *);
+void cucul_free_dither(cucul_dither_t *);
 /*  @} */
 
 /** \defgroup font Font handling
@@ -192,25 +203,23 @@ void cucul_free_dither(struct cucul_dither *);
  *  canvas to bitmap rendering.
  *
  *  @{ */
-struct cucul_font;
-struct cucul_font *cucul_load_font(void const *, unsigned int);
+cucul_font_t *cucul_load_font(void const *, unsigned int);
 char const * const * cucul_get_font_list(void);
-unsigned int cucul_get_font_width(struct cucul_font *);
-unsigned int cucul_get_font_height(struct cucul_font *);
-void cucul_render_canvas(cucul_t *, struct cucul_font *, unsigned char *,
+unsigned int cucul_get_font_width(cucul_font_t *);
+unsigned int cucul_get_font_height(cucul_font_t *);
+void cucul_render_canvas(cucul_t *, cucul_font_t *, unsigned char *,
                          unsigned int, unsigned int, unsigned int);
-void cucul_free_font(struct cucul_font *);
+void cucul_free_font(cucul_font_t *);
 /*  @} */
 
 /** \defgroup exporter Exporters to various formats
  *
  *  These functions export the current canvas to various text formats. It
- *  is necessary to call cucul_free_export() to dispose of the data.
+ *  is necessary to call cucul_free_buffer() to dispose of the data.
  *
  *  @{ */
-struct cucul_buffer * cucul_create_export(cucul_t *, char const *);
+cucul_buffer_t * cucul_create_export(cucul_t *, char const *);
 char const * const * cucul_get_export_list(void);
-void cucul_free_export(struct cucul_buffer *);
 /*  @} */
 
 #ifdef __cplusplus
diff --git a/cucul/cucul_internals.h b/cucul/cucul_internals.h
index b9aaba8..df7efbd 100644
--- a/cucul/cucul_internals.h
+++ b/cucul/cucul_internals.h
@@ -25,7 +25,7 @@ typedef long int intptr_t;
 typedef long unsigned int uintptr_t;
 #endif
 
-struct cucul_context
+struct cucul
 {
     /* Context size */
     unsigned int width, height;
@@ -40,6 +40,12 @@ struct cucul_context
     unsigned int refcount;
 };
 
+struct cucul_buffer
+{
+    unsigned long int size;
+    char *data;
+};
+
 /* Bitmap functions */
 extern int _cucul_init_dither(void);
 extern int _cucul_end_dither(void);
@@ -62,11 +68,11 @@ uint8_t _cucul_argb32_to_ansi4bg(uint32_t);
 void _cucul_argb32_to_argb4(uint32_t, uint8_t[8]);
 
 /* Export functions */
-extern void _cucul_get_ansi(cucul_t *, struct cucul_buffer *);
-extern void _cucul_get_html(cucul_t *, struct cucul_buffer *);
-extern void _cucul_get_html3(cucul_t *, struct cucul_buffer *);
-extern void _cucul_get_irc(cucul_t *, struct cucul_buffer *);
-extern void _cucul_get_ps(cucul_t *, struct cucul_buffer *);
-extern void _cucul_get_svg(cucul_t *, struct cucul_buffer *);
+extern void _cucul_get_ansi(cucul_t *, cucul_buffer_t *);
+extern void _cucul_get_html(cucul_t *, cucul_buffer_t *);
+extern void _cucul_get_html3(cucul_t *, cucul_buffer_t *);
+extern void _cucul_get_irc(cucul_t *, cucul_buffer_t *);
+extern void _cucul_get_ps(cucul_t *, cucul_buffer_t *);
+extern void _cucul_get_svg(cucul_t *, cucul_buffer_t *);
 
 #endif /* __CUCUL_INTERNALS_H__ */
diff --git a/cucul/dither.c b/cucul/dither.c
index 146a442..ff903c9 100644
--- a/cucul/dither.c
+++ b/cucul/dither.c
@@ -118,7 +118,7 @@ struct cucul_dither
     int rmask, gmask, bmask, amask;
     int rright, gright, bright, aright;
     int rleft, gleft, bleft, aleft;
-    void (*get_hsv)(struct cucul_dither *, char *, int, int);
+    void (*get_hsv)(cucul_dither_t *, char *, int, int);
     int red[256], green[256], blue[256], alpha[256];
     float gamma;
     int gammatab[4097];
@@ -163,7 +163,7 @@ struct cucul_dither
 static void mask2shift(unsigned int, int *, int *);
 static float gammapow(float x, float y);
 
-static void get_rgba_default(struct cucul_dither const *, uint8_t *, int, int,
+static void get_rgba_default(cucul_dither_t const *, uint8_t *, int, int,
                              unsigned int *);
 
 /* Dithering methods */
@@ -245,19 +245,19 @@ static inline void rgb2hsv_default(int r, int g, int b,
  *  \param amask Bitmask for alpha values.
  *  \return Dither object, or NULL upon error.
  */
-struct cucul_dither *cucul_create_dither(unsigned int bpp, unsigned int w,
-                                         unsigned int h, unsigned int pitch,
-                                         unsigned int rmask, unsigned int gmask,
-                                         unsigned int bmask, unsigned int amask)
+cucul_dither_t *cucul_create_dither(unsigned int bpp, unsigned int w,
+                                    unsigned int h, unsigned int pitch,
+                                    unsigned int rmask, unsigned int gmask,
+                                    unsigned int bmask, unsigned int amask)
 {
-    struct cucul_dither *d;
+    cucul_dither_t *d;
     int i;
 
     /* Minor sanity test */
     if(!w || !h || !pitch || bpp > 32 || bpp < 8)
         return NULL;
 
-    d = malloc(sizeof(struct cucul_dither));
+    d = malloc(sizeof(cucul_dither_t));
     if(!d)
         return NULL;
 
@@ -330,7 +330,7 @@ struct cucul_dither *cucul_create_dither(unsigned int bpp, unsigned int w,
  *  \param blue Array of 256 blue values.
  *  \param alpha Array of 256 alpha values.
  */
-void cucul_set_dither_palette(struct cucul_dither *d,
+void cucul_set_dither_palette(cucul_dither_t *d,
                               unsigned int red[], unsigned int green[],
                               unsigned int blue[], unsigned int alpha[])
 {
@@ -367,7 +367,7 @@ void cucul_set_dither_palette(struct cucul_dither *d,
  *  \param d Dither object.
  *  \param brightness brightness value.
  */
-void cucul_set_dither_brightness(struct cucul_dither *d, float brightness)
+void cucul_set_dither_brightness(cucul_dither_t *d, float brightness)
 {
     /* FIXME */
 }
@@ -379,7 +379,7 @@ void cucul_set_dither_brightness(struct cucul_dither *d, float brightness)
  *  \param d Dither object.
  *  \param gamma Gamma value.
  */
-void cucul_set_dither_gamma(struct cucul_dither *d, float gamma)
+void cucul_set_dither_gamma(cucul_dither_t *d, float gamma)
 {
     /* FIXME: we don't need 4096 calls to gammapow(), we can just compute
      * 128 of them and do linear interpolation for the rest. This will
@@ -402,7 +402,7 @@ void cucul_set_dither_gamma(struct cucul_dither *d, float gamma)
  *  \param d Dither object.
  *  \param value 0 for normal behaviour, 1 for invert
  */
-void cucul_set_dither_invert(struct cucul_dither *d, int value)
+void cucul_set_dither_invert(cucul_dither_t *d, int value)
 {
     d->invert = value ? 1 : 0;
 }
@@ -414,7 +414,7 @@ void cucul_set_dither_invert(struct cucul_dither *d, int value)
  *  \param d Dither object.
  *  \param contrast contrast value.
  */
-void cucul_set_dither_contrast(struct cucul_dither *d, float contrast)
+void cucul_set_dither_contrast(cucul_dither_t *d, float contrast)
 {
     /* FIXME */
 }
@@ -433,7 +433,7 @@ void cucul_set_dither_contrast(struct cucul_dither *d, float contrast)
  *  \param str A string describing the antialiasing method that will be used
  *         for the dithering.
  */
-void cucul_set_dither_antialias(struct cucul_dither *d, char const *str)
+void cucul_set_dither_antialias(cucul_dither_t *d, char const *str)
 {
     if(!strcasecmp(str, "none"))
         d->antialias = 0;
@@ -453,7 +453,7 @@ void cucul_set_dither_antialias(struct cucul_dither *d, char const *str)
  *  \return An array of strings.
  */
 char const * const *
-    cucul_get_dither_antialias_list(struct cucul_dither const *d)
+    cucul_get_dither_antialias_list(cucul_dither_t const *d)
 {
     static char const * const list[] =
     {
@@ -491,7 +491,7 @@ char const * const *
  *  \param str A string describing the colour set that will be used
  *         for the dithering.
  */
-void cucul_set_dither_color(struct cucul_dither *d, char const *str)
+void cucul_set_dither_color(cucul_dither_t *d, char const *str)
 {
     if(!strcasecmp(str, "mono"))
         d->color_mode = COLOR_MODE_MONO;
@@ -521,7 +521,7 @@ void cucul_set_dither_color(struct cucul_dither *d, char const *str)
  *  \return An array of strings.
  */
 char const * const *
-    cucul_get_dither_color_list(struct cucul_dither const *d)
+    cucul_get_dither_color_list(cucul_dither_t const *d)
 {
     static char const * const list[] =
     {
@@ -556,7 +556,7 @@ char const * const *
  *  \param str A string describing the characters that need to be used
  *         for the dithering.
  */
-void cucul_set_dither_charset(struct cucul_dither *d, char const *str)
+void cucul_set_dither_charset(cucul_dither_t *d, char const *str)
 {
     if(!strcasecmp(str, "shades"))
     {
@@ -586,8 +586,7 @@ void cucul_set_dither_charset(struct cucul_dither *d, char const *str)
  *  \param d Dither object.
  *  \return An array of strings.
  */
-char const * const *
-    cucul_get_dither_charset_list(struct cucul_dither const *d)
+char const * const * cucul_get_dither_charset_list(cucul_dither_t const *d)
 {
     static char const * const list[] =
     {
@@ -622,7 +621,7 @@ char const * const *
  *  \param str A string describing the method that needs to be used
  *         for the dithering.
  */
-void cucul_set_dither_mode(struct cucul_dither *d, char const *str)
+void cucul_set_dither_mode(cucul_dither_t *d, char const *str)
 {
     if(!strcasecmp(str, "none"))
     {
@@ -673,8 +672,7 @@ void cucul_set_dither_mode(struct cucul_dither *d, char const *str)
  *  \param d Dither object.
  *  \return An array of strings.
  */
-char const * const *
-    cucul_get_dither_mode_list(struct cucul_dither const *d)
+char const * const * cucul_get_dither_mode_list(cucul_dither_t const *d)
 {
     static char const * const list[] =
     {
@@ -704,7 +702,7 @@ char const * const *
  *  \param pixels Bitmap's pixels.
  */
 void cucul_dither_bitmap(cucul_t *qq, int x1, int y1, int x2, int y2,
-                         struct cucul_dither const *d, void *pixels)
+                         cucul_dither_t const *d, void *pixels)
 {
     int *floyd_steinberg, *fs_r, *fs_g, *fs_b;
     int fs_length;
@@ -955,7 +953,7 @@ void cucul_dither_bitmap(cucul_t *qq, int x1, int y1, int x2, int y2,
  *
  *  \param d Dither object.
  */
-void cucul_free_dither(struct cucul_dither *d)
+void cucul_free_dither(cucul_dither_t *d)
 {
     if(!d)
         return;
@@ -1056,7 +1054,7 @@ static float gammapow(float x, float y)
 #endif
 }
 
-static void get_rgba_default(struct cucul_dither const *d, uint8_t *pixels,
+static void get_rgba_default(cucul_dither_t const *d, uint8_t *pixels,
                              int x, int y, unsigned int *rgba)
 {
     uint32_t bits;
diff --git a/cucul/export_ansi.c b/cucul/export_ansi.c
index fe2d25d..59645db 100644
--- a/cucul/export_ansi.c
+++ b/cucul/export_ansi.c
@@ -35,7 +35,7 @@
  *                  able to cut/paste the result to a function like printf
  *  \return buffer containing generated ANSI codes as a big string
  */
-void _cucul_get_ansi(cucul_t *qq, struct cucul_buffer *ex)
+void _cucul_get_ansi(cucul_t *qq, cucul_buffer_t *ex)
 {
     static int const palette[] =
     {
diff --git a/cucul/export_html.c b/cucul/export_html.c
index dd00d38..c5be03c 100644
--- a/cucul/export_html.c
+++ b/cucul/export_html.c
@@ -32,7 +32,7 @@
  *  This function generates and returns the HTML representation of
  *  the current image.
  */
-void _cucul_get_html(cucul_t *qq, struct cucul_buffer *ex)
+void _cucul_get_html(cucul_t *qq, cucul_buffer_t *ex)
 {
     static int const palette[] =
     {
@@ -111,7 +111,7 @@ void _cucul_get_html(cucul_t *qq, struct cucul_buffer *ex)
  *  Won't work under gecko (mozilla rendering engine) unless you set
  *  a correct header.
  */
-void _cucul_get_html3(cucul_t *qq, struct cucul_buffer *ex)
+void _cucul_get_html3(cucul_t *qq, cucul_buffer_t *ex)
 {
     static int const palette[] =
     {
diff --git a/cucul/export_irc.c b/cucul/export_irc.c
index 6c564b2..b910ff7 100644
--- a/cucul/export_irc.c
+++ b/cucul/export_irc.c
@@ -32,7 +32,7 @@
  *  This function generates and returns an IRC representation of
  *  the current image.
  */
-void _cucul_get_irc(cucul_t *qq, struct cucul_buffer *ex)
+void _cucul_get_irc(cucul_t *qq, cucul_buffer_t *ex)
 {
     static int const palette[] =
     {
diff --git a/cucul/export_ps.c b/cucul/export_ps.c
index 198fec7..aff1d23 100644
--- a/cucul/export_ps.c
+++ b/cucul/export_ps.c
@@ -57,7 +57,7 @@ static char const *ps_header =
  *  This function generates and returns a Postscript representation of
  *  the current image.
  */
-void _cucul_get_ps(cucul_t *qq, struct cucul_buffer *ex)
+void _cucul_get_ps(cucul_t *qq, cucul_buffer_t *ex)
 {
     static char const * const palette[] =
     {
diff --git a/cucul/export_svg.c b/cucul/export_svg.c
index f0aaa60..0840322 100644
--- a/cucul/export_svg.c
+++ b/cucul/export_svg.c
@@ -42,7 +42,7 @@ static char const svg_header[] =
  *  This function generates and returns a SVG representation of
  *  the current image.
  */
-void _cucul_get_svg(cucul_t *qq, struct cucul_buffer *ex)
+void _cucul_get_svg(cucul_t *qq, cucul_buffer_t *ex)
 {
     static int const palette[] =
     {
diff --git a/cucul/font.c b/cucul/font.c
index 1975f48..abf912a 100644
--- a/cucul/font.c
+++ b/cucul/font.c
@@ -106,9 +106,9 @@ DECLARE_UNPACKGLYPH(1)
  *  \param size The size of the memory area, or 0 if the font name is given.
  *  \return A font handle or NULL in case of error.
  */
-struct cucul_font *cucul_load_font(void const *data, unsigned int size)
+cucul_font_t *cucul_load_font(void const *data, unsigned int size)
 {
-    struct cucul_font *f;
+    cucul_font_t *f;
     unsigned int i;
 
     if(size == 0)
@@ -124,7 +124,7 @@ struct cucul_font *cucul_load_font(void const *data, unsigned int size)
     if(size < sizeof(struct font_header))
         return NULL;
 
-    f = malloc(sizeof(struct cucul_font));
+    f = malloc(sizeof(cucul_font_t));
     f->private = (void *)(uintptr_t)data;
 
     memcpy(&f->header, f->private + 8, sizeof(struct font_header));
@@ -221,7 +221,7 @@ char const * const * cucul_get_font_list(void)
  *  \param f The font, as returned by \e cucul_load_font()
  *  \return The maximum glyph width.
  */
-unsigned int cucul_get_font_width(struct cucul_font *f)
+unsigned int cucul_get_font_width(cucul_font_t *f)
 {
     return f->header.width;
 }
@@ -233,7 +233,7 @@ unsigned int cucul_get_font_width(struct cucul_font *f)
  *  \param f The font, as returned by \e cucul_load_font()
  *  \return The maximum glyph height.
  */
-unsigned int cucul_get_font_height(struct cucul_font *f)
+unsigned int cucul_get_font_height(cucul_font_t *f)
 {
     return f->header.height;
 }
@@ -247,7 +247,7 @@ unsigned int cucul_get_font_height(struct cucul_font *f)
  *
  *  \param f The font, as returned by \e cucul_load_font()
  */
-void cucul_free_font(struct cucul_font *f)
+void cucul_free_font(cucul_font_t *f)
 {
     free(f->glyph_list);
     free(f->block_list);
@@ -273,7 +273,7 @@ void cucul_free_font(struct cucul_font *f)
  *  \param height The height (in pixels) of the image buffer
  *  \param pitch The pitch (in bytes) of an image buffer line.
  */
-void cucul_render_canvas(cucul_t *qq, struct cucul_font *f,
+void cucul_render_canvas(cucul_t *qq, cucul_font_t *f,
                          unsigned char *buf, unsigned int width,
                          unsigned int height, unsigned int pitch)
 {
diff --git a/cucul/sprite.c b/cucul/sprite.c
index 1d4c538..ae84c24 100644
--- a/cucul/sprite.c
+++ b/cucul/sprite.c
@@ -47,17 +47,17 @@ struct cucul_sprite
  *  \param file The filename.
  *  \return The sprite, or NULL if an error occured.
  */
-struct cucul_sprite *cucul_load_sprite(char const *file)
+cucul_sprite_t *cucul_load_sprite(char const *file)
 {
     char buf[BUFSIZ];
-    struct cucul_sprite *sprite;
+    cucul_sprite_t *sprite;
     FILE *fd;
 
     fd = fopen(file, "r");
     if(fd == NULL)
         return NULL;
 
-    sprite = malloc(sizeof(struct cucul_sprite));
+    sprite = malloc(sizeof(cucul_sprite_t));
     if(sprite == NULL)
         goto sprite_alloc_failed;
 
@@ -167,7 +167,7 @@ sprite_alloc_failed:
  *  \param sprite The sprite.
  *  \return The number of frames.
  */
-int cucul_get_sprite_frames(struct cucul_sprite const *sprite)
+int cucul_get_sprite_frames(cucul_sprite_t const *sprite)
 {
     if(sprite == NULL)
         return 0;
@@ -181,7 +181,7 @@ int cucul_get_sprite_frames(struct cucul_sprite const *sprite)
  *  \param f The frame index.
  *  \return The width of the given frame of the sprite.
  */
-int cucul_get_sprite_width(struct cucul_sprite const *sprite, int f)
+int cucul_get_sprite_width(cucul_sprite_t const *sprite, int f)
 {
     if(sprite == NULL)
         return 0;
@@ -198,7 +198,7 @@ int cucul_get_sprite_width(struct cucul_sprite const *sprite, int f)
  *  \param f The frame index.
  *  \return The height of the given frame of the sprite.
  */
-int cucul_get_sprite_height(struct cucul_sprite const *sprite, int f)
+int cucul_get_sprite_height(cucul_sprite_t const *sprite, int f)
 {
     if(sprite == NULL)
         return 0;
@@ -215,7 +215,7 @@ int cucul_get_sprite_height(struct cucul_sprite const *sprite, int f)
  *  \param f The frame index.
  *  \return The X coordinate of the given frame's handle.
  */
-int cucul_get_sprite_dx(struct cucul_sprite const *sprite, int f)
+int cucul_get_sprite_dx(cucul_sprite_t const *sprite, int f)
 {
     if(sprite == NULL)
         return 0;
@@ -232,7 +232,7 @@ int cucul_get_sprite_dx(struct cucul_sprite const *sprite, int f)
  *  \param f The frame index.
  *  \return The Y coordinate of the given frame's handle.
  */
-int cucul_get_sprite_dy(struct cucul_sprite const *sprite, int f)
+int cucul_get_sprite_dy(cucul_sprite_t const *sprite, int f)
 {
     if(sprite == NULL)
         return 0;
@@ -253,7 +253,7 @@ int cucul_get_sprite_dy(struct cucul_sprite const *sprite, int f)
  *  \param f The frame index.
  *  \return void
  */
-void cucul_draw_sprite(cucul_t *qq, int x, int y, struct cucul_sprite const *sprite, int f)
+void cucul_draw_sprite(cucul_t *qq, int x, int y, cucul_sprite_t const *sprite, int f)
 {
     int i, j;
     unsigned int oldfg, oldbg;
@@ -292,7 +292,7 @@ void cucul_draw_sprite(cucul_t *qq, int x, int y, struct cucul_sprite const *spr
  *  \param sprite The sprite to be freed.
  *  \return void
  */
-void cucul_free_sprite(struct cucul_sprite *sprite)
+void cucul_free_sprite(cucul_sprite_t *sprite)
 {
     int i;
 
diff --git a/src/aafire.c b/src/aafire.c
index 7fc2e80..4b625e4 100644
--- a/src/aafire.c
+++ b/src/aafire.c
@@ -42,7 +42,7 @@
 static cucul_t *qq;
 static caca_t *kk;
 static int XSIZ, YSIZ;
-static struct cucul_dither *cucul_dither;
+static cucul_dither_t *cucul_dither;
 static char *bitmap;
 static int pause = 0;
 #else
@@ -265,7 +265,7 @@ game (void)
 #endif
     {
 #ifdef LIBCACA
-      struct caca_event ev;
+      caca_event_t ev;
       if(caca_get_event(kk, CACA_EVENT_KEY_PRESS, &ev, 0))
         {
           switch(ev.data.key.c)
diff --git a/src/cacaball.c b/src/cacaball.c
index 245ff13..87333f0 100644
--- a/src/cacaball.c
+++ b/src/cacaball.c
@@ -46,7 +46,7 @@ int main(int argc, char **argv)
     unsigned int r[256], g[256], b[256], a[256];
     float d[METABALLS], di[METABALLS], dj[METABALLS], dk[METABALLS];
     unsigned int x[METABALLS], y[METABALLS];
-    struct cucul_dither *cucul_dither;
+    cucul_dither_t *cucul_dither;
     float i = 10.0, j = 17.0, k = 11.0;
     int p, frame = 0, pause = 0;
     double frameOffset[360 + 80];
@@ -92,7 +92,7 @@ int main(int argc, char **argv)
     /* Go ! */
     for(;;)
     {
-        struct caca_event ev;
+        caca_event_t ev;
         if(caca_get_event(kk, CACA_EVENT_KEY_PRESS, &ev, 0))
         {
             switch(ev.data.key.c)
diff --git a/src/cacamoir.c b/src/cacamoir.c
index 6a6c089..546234d 100644
--- a/src/cacamoir.c
+++ b/src/cacamoir.c
@@ -39,7 +39,7 @@ int main (int argc, char **argv)
 {
     cucul_t *qq; caca_t *kk;
     unsigned int red[256], green[256], blue[256], alpha[256];
-    struct cucul_dither *dither;
+    cucul_dither_t *dither;
     int i, x, y, frame = 0, pause = 0;
 
     qq = cucul_create(0, 0);
@@ -68,7 +68,7 @@ int main (int argc, char **argv)
     /* Main loop */
     for(;;)
     {
-        struct caca_event ev;
+        caca_event_t ev;
         if(caca_get_event(kk, CACA_EVENT_KEY_PRESS, &ev, 0))
         {
             switch(ev.data.key.c)
diff --git a/src/cacaplas.c b/src/cacaplas.c
index 5566500..2044011 100644
--- a/src/cacaplas.c
+++ b/src/cacaplas.c
@@ -43,7 +43,7 @@ int main (int argc, char **argv)
     cucul_t *qq, *qq2, *mask; caca_t *kk;
     unsigned int red[256], green[256], blue[256], alpha[256];
     double r[3], R[6];
-    struct cucul_dither *dither;
+    cucul_dither_t *dither;
     int i, x, y, frame = 0, pause = 0;
 
     qq = cucul_create(0, 0);
@@ -84,7 +84,7 @@ int main (int argc, char **argv)
     /* Main loop */
     for(;;) 
     {
-        struct caca_event ev;
+        caca_event_t ev;
         if(caca_get_event(kk, CACA_EVENT_KEY_PRESS, &ev, 0))
         {
             switch(ev.data.key.c)
diff --git a/src/cacaplay.c b/src/cacaplay.c
index 9c79a3a..9c6bdc0 100644
--- a/src/cacaplay.c
+++ b/src/cacaplay.c
@@ -26,7 +26,7 @@
 int main(int argc, char **argv)
 {
     struct stat statbuf;
-    struct caca_event ev;
+    caca_event_t ev;
     cucul_t *qq;
     caca_t *kk;
     void *buffer;
diff --git a/src/cacaserver.c b/src/cacaserver.c
index 62037c4..c65fbc8 100644
--- a/src/cacaserver.c
+++ b/src/cacaserver.c
@@ -105,7 +105,9 @@ struct server
     char prefix[sizeof(INIT_PREFIX)];
 
     cucul_t *qq;
-    struct cucul_buffer *ex;
+    cucul_buffer_t *buffer;
+    unsigned long int buflen;
+    void *bufdata;
 
     int client_count;
     struct client *clients;
@@ -183,7 +185,7 @@ int main(void)
     }
 
     server->qq = NULL;
-    server->ex = NULL;
+    server->buffer = NULL;
 
     /* Ignore SIGPIPE */
     server->sigpipe_handler = signal(SIGPIPE, SIG_IGN);
@@ -230,16 +232,16 @@ int main(void)
             continue; /* Load error */
 
         /* Free the previous export buffer, if any */
-        if(server->ex)
+        if(server->buffer)
         {
-            cucul_free_export(server->ex);
-            server->ex = NULL;
+            cucul_free_buffer(server->buffer);
+            server->buffer = NULL;
         }
 
         /* Get ANSI representation of the image and skip the end-of buffer
          * linefeed ("\r\n\0", 3 bytes) */
-        server->ex = cucul_create_export(server->qq, "ansi");
-        server->ex->size -= 3;
+        server->buffer = cucul_create_export(server->qq, "ansi");
+        server->buflen -= 3;
 
         for(i = 0; i < server->client_count; i++)
         {
@@ -266,8 +268,8 @@ int main(void)
         server->clients[i].fd = -1;
     }
 
-    if(server->ex)
-        cucul_free_export(server->ex);
+    if(server->buffer)
+        cucul_free_buffer(server->buffer);
 
     /* Restore SIGPIPE handler */
     signal(SIGPIPE, server->sigpipe_handler);
@@ -395,7 +397,7 @@ static int send_data(struct server *server, struct client *c)
     }
 
     /* No error, there's just nothing to send yet */
-    if(!server->ex)
+    if(!server->buffer)
         return 0;
 
     /* If we have backlog, send the backlog */
@@ -420,7 +422,7 @@ static int send_data(struct server *server, struct client *c)
         {
             c->start += ret;
 
-            if(c->stop - c->start + strlen(ANSI_PREFIX) + server->ex->size
+            if(c->stop - c->start + strlen(ANSI_PREFIX) + server->buflen
                 > OUTBUFFER)
             {
                 /* Overflow! Empty buffer and start again */
@@ -431,7 +433,7 @@ static int send_data(struct server *server, struct client *c)
             }
 
             /* Need to move? */
-            if(c->stop + strlen(ANSI_PREFIX) + server->ex->size > OUTBUFFER)
+            if(c->stop + strlen(ANSI_PREFIX) + server->buflen > OUTBUFFER)
             {
                 memmove(c->outbuf, c->outbuf + c->start, c->stop - c->start);
                 c->stop -= c->start;
@@ -440,8 +442,8 @@ static int send_data(struct server *server, struct client *c)
 
             memcpy(c->outbuf + c->stop, ANSI_PREFIX, strlen(ANSI_PREFIX));
             c->stop += strlen(ANSI_PREFIX);
-            memcpy(c->outbuf + c->stop, server->ex->data, server->ex->size);
-            c->stop += server->ex->size;
+            memcpy(c->outbuf + c->stop, server->bufdata, server->buflen);
+            c->stop += server->buflen;
 
             return 0;
         }
@@ -461,7 +463,7 @@ static int send_data(struct server *server, struct client *c)
 
     if(ret < (ssize_t)strlen(ANSI_PREFIX))
     {
-        if(strlen(ANSI_PREFIX) + server->ex->size > OUTBUFFER)
+        if(strlen(ANSI_PREFIX) + server->buflen > OUTBUFFER)
         {
             /* Overflow! Empty buffer and start again */
             memcpy(c->outbuf, ANSI_RESET, strlen(ANSI_RESET));
@@ -472,14 +474,14 @@ static int send_data(struct server *server, struct client *c)
 
         memcpy(c->outbuf, ANSI_PREFIX, strlen(ANSI_PREFIX) - ret);
         c->stop = strlen(ANSI_PREFIX) - ret;
-        memcpy(c->outbuf + c->stop, server->ex->data, server->ex->size);
-        c->stop += server->ex->size;
+        memcpy(c->outbuf + c->stop, server->bufdata, server->buflen);
+        c->stop += server->buflen;
 
         return 0;
     }
 
     /* Send actual data */
-    ret = nonblock_write(c->fd, server->ex->data, server->ex->size);
+    ret = nonblock_write(c->fd, server->bufdata, server->buflen);
     if(ret == -1)
     {
         if(errno == EAGAIN)
@@ -488,9 +490,9 @@ static int send_data(struct server *server, struct client *c)
             return -1;
     }
 
-    if(ret < (int)server->ex->size)
+    if(ret < (int)server->buflen)
     {
-        if(server->ex->size > OUTBUFFER)
+        if(server->buflen > OUTBUFFER)
         {
             /* Overflow! Empty buffer and start again */
             memcpy(c->outbuf, ANSI_RESET, strlen(ANSI_RESET));
@@ -499,8 +501,8 @@ static int send_data(struct server *server, struct client *c)
             return 0;
         }
 
-        memcpy(c->outbuf, server->ex->data, server->ex->size - ret);
-        c->stop = server->ex->size - ret;
+        memcpy(c->outbuf, server->bufdata, server->buflen - ret);
+        c->stop = server->buflen - ret;
 
         return 0;
     }
diff --git a/src/cacaview.c b/src/cacaview.c
index 020c5b2..9c96fcf 100644
--- a/src/cacaview.c
+++ b/src/cacaview.c
@@ -123,7 +123,7 @@ int main(int argc, char **argv)
     /* Go ! */
     while(!quit)
     {
-        struct caca_event ev;
+        caca_event_t ev;
         unsigned int const event_mask = CACA_EVENT_KEY_PRESS
                                       | CACA_EVENT_RESIZE
                                       | CACA_EVENT_MOUSE_PRESS;
diff --git a/src/img2irc.c b/src/img2irc.c
index 4c9f3b6..b50cef8 100644
--- a/src/img2irc.c
+++ b/src/img2irc.c
@@ -24,7 +24,7 @@ int main(int argc, char **argv)
 {
     /* libcucul context */
     cucul_t *qq;
-    struct cucul_buffer *export;
+    cucul_buffer_t *export;
     struct image *i;
     int cols = 56, lines;
 
@@ -59,8 +59,9 @@ int main(int argc, char **argv)
     unload_image(i);
 
     export = cucul_create_export(qq, "irc");
-    fwrite(export->data, export->size, 1, stdout);
-    cucul_free_export(export);
+    fwrite(cucul_get_buffer_data(export),
+           cucul_get_buffer_size(export), 1, stdout);
+    cucul_free_buffer(export);
 
     cucul_free(qq);
 
diff --git a/test/colors.c b/test/colors.c
index ca0622b..6247e20 100644
--- a/test/colors.c
+++ b/test/colors.c
@@ -24,7 +24,7 @@ int main(int argc, char **argv)
 {
     cucul_t *qq;
     caca_t *kk;
-    struct caca_event ev;
+    caca_event_t ev;
     int i, j;
 
     qq = cucul_create(0, 0);
diff --git a/test/demo.c b/test/demo.c
index ac23025..35a6a23 100644
--- a/test/demo.c
+++ b/test/demo.c
@@ -35,7 +35,7 @@ static void demo_render(void);
 int bounds = 0;
 int outline = 0;
 int dithering = 0;
-struct cucul_sprite *sprite = NULL;
+cucul_sprite_t *sprite = NULL;
 
 cucul_t *qq;
 caca_t *kk;
@@ -71,7 +71,7 @@ int main(int argc, char **argv)
     /* Go ! */
     while(!quit)
     {
-        struct caca_event ev;
+        caca_event_t ev;
         int menu = 0, mouse = 0, xmouse = 0, ymouse = 0;
 
         while(caca_get_event(kk, CACA_EVENT_ANY, &ev, 0))
@@ -483,7 +483,7 @@ static void demo_sprites(void)
 #if 0
 static void demo_render(void)
 {
-    struct cucul_dither *dither;
+    cucul_dither_t *dither;
     //short buffer[256*256];
     //short *dest = buffer;
     int buffer[256*256];
@@ -513,7 +513,7 @@ static void draw_circle(int *buffer, int xo, int yo, int r, int mask, int val);
 
 static void demo_render(void)
 {
-    struct cucul_dither *dither;
+    cucul_dither_t *dither;
     int buffer[256*256];
     int *dest;
     int x, y, z, xo, yo;
diff --git a/test/dithering.c b/test/dithering.c
index 15885f4..6968910 100644
--- a/test/dithering.c
+++ b/test/dithering.c
@@ -34,7 +34,7 @@ char density[] = " -,+:;o&%w$W@#";
 
 int main(void)
 {
-    struct caca_event ev;
+    caca_event_t ev;
     cucul_t *qq;
     caca_t *kk;
     int neara, dista, nearb, distb, dist;
diff --git a/test/event.c b/test/event.c
index 0ad14cd..c3aa3d7 100644
--- a/test/event.c
+++ b/test/event.c
@@ -23,11 +23,11 @@
 static cucul_t *qq;
 static caca_t *kk;
 
-static void print_event(int, int, struct caca_event *);
+static void print_event(int, int, caca_event_t *);
 
 int main(int argc, char **argv)
 {
-    struct caca_event *events;
+    caca_event_t *events;
     int i, h, quit;
 
     qq = cucul_create(0, 0);
@@ -47,12 +47,12 @@ int main(int argc, char **argv)
 
     caca_display(kk);
 
-    events = malloc(h * sizeof(struct caca_event));
-    memset(events, 0, h * sizeof(struct caca_event));
+    events = malloc(h * sizeof(caca_event_t));
+    memset(events, 0, h * sizeof(caca_event_t));
 
     for(quit = 0; quit < 4; )
     {
-        struct caca_event ev;
+        caca_event_t ev;
         static char const * quit_string[] = { "", "q", "qu", "qui", "quit" };
         int ret = caca_get_event(kk, CACA_EVENT_ANY, &ev, -1);
 
@@ -74,7 +74,7 @@ int main(int argc, char **argv)
                     quit = 0;
             }
 
-            memmove(events + 1, events, (h - 1) * sizeof(struct caca_event));
+            memmove(events + 1, events, (h - 1) * sizeof(caca_event_t));
             events[0] = ev;
 
             ret = caca_get_event(kk, CACA_EVENT_ANY, &ev, 0);
@@ -106,7 +106,7 @@ int main(int argc, char **argv)
     return 0;
 }
 
-static void print_event(int x, int y, struct caca_event *ev)
+static void print_event(int x, int y, caca_event_t *ev)
 {
     int character;
 
diff --git a/test/export.c b/test/export.c
index 10f213a..6596cee 100644
--- a/test/export.c
+++ b/test/export.c
@@ -35,8 +35,8 @@ uint32_t pixels[256*256];
 int main(int argc, char *argv[])
 {
     cucul_t *qq;
-    struct cucul_dither *dither;
-    struct cucul_buffer *buffer;
+    cucul_dither_t *dither;
+    cucul_buffer_t *buffer;
     int x, y;
 
     if(argc != 2)
@@ -90,8 +90,9 @@ int main(int argc, char *argv[])
     cucul_putstr(qq, WIDTH / 2 - 7, HEIGHT / 2, "    LIBCACA    ");
 
     buffer = cucul_create_export(qq, argv[1]);
-    fwrite(buffer->data, buffer->size, 1, stdout);
-    cucul_free_export(buffer);
+    fwrite(cucul_get_buffer_data(buffer),
+           cucul_get_buffer_size(buffer), 1, stdout);
+    cucul_free_buffer(buffer);
 
     cucul_free(qq);
 
diff --git a/test/font.c b/test/font.c
index 3dd7fa8..f0dc229 100644
--- a/test/font.c
+++ b/test/font.c
@@ -36,9 +36,9 @@ int main(int argc, char *argv[])
 {
     cucul_t *qq;
     caca_t *kk;
-    struct cucul_font *f;
-    struct cucul_dither *d;
-    struct caca_event ev;
+    cucul_font_t *f;
+    cucul_dither_t *d;
+    caca_event_t ev;
     unsigned char *buf;
     unsigned int w, h;
     char const * const * fonts;
diff --git a/test/gamma.c b/test/gamma.c
index af3029c..e195e26 100644
--- a/test/gamma.c
+++ b/test/gamma.c
@@ -33,10 +33,10 @@ uint32_t buffer[256 * 4];
 
 int main(void)
 {
-    struct caca_event ev;
+    caca_event_t ev;
     cucul_t *qq, *gg, *mask;
     caca_t *kk;
-    struct cucul_dither *left, *right;
+    cucul_dither_t *left, *right;
     float gam = 1.0;
     int x;
 
diff --git a/test/hsv.c b/test/hsv.c
index 50ba489..1a6cfcf 100644
--- a/test/hsv.c
+++ b/test/hsv.c
@@ -28,11 +28,11 @@ uint32_t buffer[256*256];
 
 int main(void)
 {
-    struct caca_event ev;
+    caca_event_t ev;
     cucul_t *qq;
     caca_t *kk;
 
-    struct cucul_dither *dither;
+    cucul_dither_t *dither;
     int x, y;
 
     qq = cucul_create(0, 0);
diff --git a/test/spritedit.c b/test/spritedit.c
index 5a1d36a..dcdd509 100644
--- a/test/spritedit.c
+++ b/test/spritedit.c
@@ -26,7 +26,7 @@ int main(int argc, char **argv)
     caca_t *kk;
 
     int quit = 0;
-    struct cucul_sprite *sprite;
+    cucul_sprite_t *sprite;
     int frame = 0;
     unsigned char play = 0;
     unsigned int delay = 0;
@@ -57,7 +57,7 @@ int main(int argc, char **argv)
     /* Go ! */
     while(!quit)
     {
-        struct caca_event ev;
+        caca_event_t ev;
         int xa, ya, xb, yb;
         char buf[BUFSIZ];
 
diff --git a/test/transform.c b/test/transform.c
index c10fedd..533af51 100644
--- a/test/transform.c
+++ b/test/transform.c
@@ -49,7 +49,7 @@ static char const *duck[] =
 
 int main(void)
 {
-    struct caca_event ev;
+    caca_event_t ev;
     cucul_t *qq, *normal, *flip, *flop, *rotate;
     caca_t *kk;
     int i;
diff --git a/test/unicode.c b/test/unicode.c
index 52dbedb..d1e4db3 100644
--- a/test/unicode.c
+++ b/test/unicode.c
@@ -26,7 +26,7 @@ typedef unsigned int uint32_t;
 
 int main(void)
 {
-    struct caca_event ev;
+    caca_event_t ev;
     cucul_t *qq;
     caca_t *kk;