[Pkg-e-commits] [SCM] Enlightenment DR17 advanced canvas library branch, upstream-vcs, updated. 069f3cc6c93f253bffbc90289fe21d868f745bb6

cedric cedric at alioth.debian.org
Sat Jun 7 18:24:32 UTC 2008


The following commit has been merged in the upstream-vcs branch:
commit 69135724a7c3fb9454d4e05ad7a45674a2d61a98
Author: cedric <cedric>
Date:   Tue Jun 3 09:09:34 2008 +0000

            * Make RGBA_IMAGE_HAS_ALPHA and RGBA_IMAGE_ALPHA_SPARSE part of
            Image_Entry flag structure. This fix a bug with 16 bpp software engine.
    
            * Change image loader module API to take any Image_Entry. Same goes
            for evas_common_image_premul and evas_common_image_set_alpha_sparse.
    
            * Use new eet API: eet_data_image_read_to_surface.

diff --git a/src/lib/cache/evas_cache_image.c b/src/lib/cache/evas_cache_image.c
index 59731d6..5daa01c 100644
--- a/src/lib/cache/evas_cache_image.c
+++ b/src/lib/cache/evas_cache_image.c
@@ -604,6 +604,7 @@ evas_cache_image_copied_data(Evas_Cache_Image *cache, int w, int h, DATA32 *imag
    im = _evas_cache_image_entry_new(cache, NULL, 0, NULL, NULL, NULL, NULL);
    if (!im) return NULL;
    im->space = cspace;
+   im->flags.alpha = alpha;
 
    _evas_cache_image_entry_surface_alloc(cache, im, w, h);
 
@@ -629,6 +630,7 @@ evas_cache_image_data(Evas_Cache_Image *cache, int w, int h, DATA32 *image_data,
    im = _evas_cache_image_entry_new(cache, NULL, 0, NULL, NULL, NULL, NULL);
    im->w = w;
    im->h = h;
+   im->flags.alpha = alpha;
 
    if (cache->func.data(im, w, h, image_data, alpha, cspace) != 0)
      {
@@ -784,7 +786,6 @@ evas_cache_image_colorspace(Image_Entry *im, int cspace)
 
    cache = im->cache;
 
-   if (!im) return ;
    if (im->space == cspace) return ;
 
    im->space = cspace;
@@ -819,3 +820,16 @@ evas_cache_private_set(Evas_Cache_Image *cache, const void *data)
 
    cache->data = data;
 }
+
+EAPI DATA32 *
+evas_cache_image_pixels(Image_Entry *im)
+{
+   Evas_Cache_Image    *cache;
+
+   assert(im);
+   assert(im->cache);
+
+   cache = im->cache;
+
+   return cache->func.surface_pixels(im);
+}
diff --git a/src/lib/engines/common/evas_blend_main.c b/src/lib/engines/common/evas_blend_main.c
index de52a3b..ee23280 100644
--- a/src/lib/engines/common/evas_blend_main.c
+++ b/src/lib/engines/common/evas_blend_main.c
@@ -143,7 +143,7 @@ evas_common_gfx_func_composite_pixel_span_get(RGBA_Image *src, RGBA_Image *dst,
    RGBA_Gfx_Compositor  *comp;
    RGBA_Gfx_Func        func = NULL;
 
-   if (src && (!(src->flags & RGBA_IMAGE_HAS_ALPHA)))
+   if (src && (!src->cache_entry.flags.alpha))
      {
 	if (op == _EVAS_RENDER_BLEND)
 	   op = _EVAS_RENDER_COPY;
@@ -186,7 +186,7 @@ evas_common_gfx_func_composite_pixel_color_span_get(RGBA_Image *src, DATA32 col,
    RGBA_Gfx_Compositor  *comp;
    RGBA_Gfx_Func        func = NULL;
 
-   if ((src && (!(src->flags & RGBA_IMAGE_HAS_ALPHA))) && ((col & 0xff000000) == 0xff000000))
+   if ((src && (!src->cache_entry.flags.alpha)) && ((col & 0xff000000) == 0xff000000))
      {
 	if (op == _EVAS_RENDER_BLEND)
 	   op = _EVAS_RENDER_COPY;
@@ -231,12 +231,12 @@ evas_common_gfx_func_composite_pixel_mask_span_get(RGBA_Image *src, RGBA_Image *
 }
 
 RGBA_Gfx_Pt_Func
-evas_common_gfx_func_composite_pixel_pt_get(int src_flags, RGBA_Image *dst, int op)
+evas_common_gfx_func_composite_pixel_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst, int op)
 {
    RGBA_Gfx_Compositor  *comp;
    RGBA_Gfx_Pt_Func     func = NULL;
 
-   if (!(src_flags & RGBA_IMAGE_HAS_ALPHA))
+   if (!src_flags.alpha)
      {
 	if (op == _EVAS_RENDER_BLEND)
 	   op = _EVAS_RENDER_COPY;
@@ -274,12 +274,12 @@ evas_common_gfx_func_composite_color_pt_get(DATA32 col, RGBA_Image *dst, int op)
 }
 
 RGBA_Gfx_Pt_Func
-evas_common_gfx_func_composite_pixel_color_pt_get(int src_flags, DATA32 col, RGBA_Image *dst, int op)
+evas_common_gfx_func_composite_pixel_color_pt_get(Image_Entry_Flags src_flags, DATA32 col, RGBA_Image *dst, int op)
 {
    RGBA_Gfx_Compositor  *comp;
    RGBA_Gfx_Pt_Func     func = NULL;
 
-   if ((!(src_flags & RGBA_IMAGE_HAS_ALPHA)) && ((col & 0xff000000) == 0xff000000))
+   if ((!src_flags.alpha) && ((col & 0xff000000) == 0xff000000))
      {
 	if (op == _EVAS_RENDER_BLEND)
 	   op = _EVAS_RENDER_COPY;
@@ -310,7 +310,7 @@ evas_common_gfx_func_composite_mask_color_pt_get(DATA32 col, RGBA_Image *dst, in
 }
 
 RGBA_Gfx_Pt_Func
-evas_common_gfx_func_composite_pixel_mask_pt_get(int src_flags, RGBA_Image *dst, int op)
+evas_common_gfx_func_composite_pixel_mask_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst, int op)
 {
    RGBA_Gfx_Compositor  *comp;
    RGBA_Gfx_Pt_Func     func = NULL;
diff --git a/src/lib/engines/common/evas_gradient_main.c b/src/lib/engines/common/evas_gradient_main.c
index d64fa7a..1b54208 100644
--- a/src/lib/engines/common/evas_gradient_main.c
+++ b/src/lib/engines/common/evas_gradient_main.c
@@ -461,7 +461,7 @@ evas_common_gradient_draw(RGBA_Image *dst, RGBA_Draw_Context *dc,
 	  {
 	     direct_copy = 1;  buf_step = dst->cache_entry.w;
 	     if (gr->type.geometer->has_alpha(gr, dc->render_op))
-	       dst->flags |= RGBA_IMAGE_HAS_ALPHA;
+	        dst->cache_entry.flags.alpha = 1;
 	  }
 	else if ((dc->render_op == _EVAS_RENDER_BLEND) &&
 		 !gr->type.geometer->has_alpha(gr, dc->render_op))
@@ -474,12 +474,9 @@ evas_common_gradient_draw(RGBA_Image *dst, RGBA_Draw_Context *dc,
      {
 	argb_buf = evas_common_image_line_buffer_obtain(w);
 	if (!argb_buf)
-	  return;
-	if (gr->type.geometer->has_alpha(gr, dc->render_op))
-	  argb_buf->flags |= RGBA_IMAGE_HAS_ALPHA;
-	else
-	  argb_buf->flags &= ~RGBA_IMAGE_HAS_ALPHA;
-	
+	   return;
+	argb_buf->cache_entry.flags.alpha = gr->type.geometer->has_alpha(gr, dc->render_op) ? 1 : 0;
+
 	if (gr->type.geometer->has_mask(gr, dc->render_op))
 	  {
 	     alpha_buf = evas_common_image_alpha_line_buffer_obtain(w);
diff --git a/src/lib/engines/common/evas_image_data.c b/src/lib/engines/common/evas_image_data.c
index 27e51b6..c76917e 100644
--- a/src/lib/engines/common/evas_image_data.c
+++ b/src/lib/engines/common/evas_image_data.c
@@ -15,10 +15,7 @@ evas_common_rgba_image_from_data(Image_Entry* ie_dst, int w, int h, DATA32 *imag
 	dst->cache_entry.h = h;
 	dst->image.data = image_data;
 	dst->image.no_free = 1;
-	if (alpha)
-	  dst->flags |= RGBA_IMAGE_HAS_ALPHA;
-	else
-	  dst->flags &= ~RGBA_IMAGE_HAS_ALPHA;
+	dst->cache_entry.flags.alpha = alpha ? 1 : 0;
 	break;
       case EVAS_COLORSPACE_YCBCR422P601_PL:
       case EVAS_COLORSPACE_YCBCR422P709_PL:
@@ -46,10 +43,7 @@ evas_common_rgba_image_from_copied_data(Image_Entry* ie_dst, int w, int h, DATA3
    switch (cspace)
      {
      case EVAS_COLORSPACE_ARGB8888:
-	if (alpha)
-	  dst->flags |= RGBA_IMAGE_HAS_ALPHA;
-	else
-	  dst->flags &= ~RGBA_IMAGE_HAS_ALPHA;
+	dst->cache_entry.flags.alpha = alpha ? 1 : 0;
         if (image_data)
           memcpy(dst->image.data, image_data, w * h * sizeof(DATA32));
         break;
diff --git a/src/lib/engines/common/evas_image_load.c b/src/lib/engines/common/evas_image_load.c
index 7b80ecf..4706b03 100644
--- a/src/lib/engines/common/evas_image_load.c
+++ b/src/lib/engines/common/evas_image_load.c
@@ -33,7 +33,6 @@ int
 evas_common_load_rgba_image_module_from_file(Image_Entry *ie)
 {
    Evas_Image_Load_Func *evas_image_load_func = NULL;
-   RGBA_Image           *im = (RGBA_Image *) ie;
    const char           *loader = NULL;
    Evas_List            *l;
    Evas_Module          *em;
@@ -62,7 +61,7 @@ evas_common_load_rgba_image_module_from_file(Image_Entry *ie)
 	       {
 		  evas_module_use(em);
 		  evas_image_load_func = em->functions;
-		  if (evas_image_load_func->file_head(im, ie->file, ie->key))
+		  if (evas_image_load_func->file_head(ie, ie->file, ie->key))
 		    goto ok;
 	       }
 	  }
@@ -75,7 +74,7 @@ evas_common_load_rgba_image_module_from_file(Image_Entry *ie)
 	if (!evas_module_load(em)) continue;
         evas_image_load_func = em->functions;
 	evas_module_use(em);
-	if (evas_image_load_func->file_head(im, ie->file, ie->key))
+	if (evas_image_load_func->file_head(ie, ie->file, ie->key))
 	  {
 	     if (evas_modules != l)
 	       {
@@ -88,9 +87,9 @@ evas_common_load_rgba_image_module_from_file(Image_Entry *ie)
    return -1;
 
   ok:
-   im->info.module = (void*) em;
-   im->info.loader = (void*) evas_image_load_func;
-   evas_module_ref((Evas_Module*) im->info.module);
+   ie->info.module = (void*) em;
+   ie->info.loader = (void*) evas_image_load_func;
+   evas_module_ref((Evas_Module*) ie->info.module);
    return 0;
 }
 
@@ -98,18 +97,17 @@ int
 evas_common_load_rgba_image_data_from_file(Image_Entry *ie)
 {
    Evas_Image_Load_Func *evas_image_load_func = NULL;
-   RGBA_Image           *im = (RGBA_Image *) ie;
 
-   if (!im->info.module) return -1;
+   if (!ie->info.module) return -1;
    if (ie->flags.loaded) return -1;
 
-   evas_image_load_func = im->info.loader;
-   evas_module_use((Evas_Module*) im->info.module);
-   if (!evas_image_load_func->file_data(im, ie->file, ie->key))
+   evas_image_load_func = ie->info.loader;
+   evas_module_use((Evas_Module*) ie->info.module);
+   if (!evas_image_load_func->file_data(ie, ie->file, ie->key))
      return -1;
 
-   evas_module_unref((Evas_Module*) im->info.module);
-   im->info.module = NULL;
+   evas_module_unref((Evas_Module*) ie->info.module);
+   ie->info.module = NULL;
 
    return 0;
 }
diff --git a/src/lib/engines/common/evas_image_main.c b/src/lib/engines/common/evas_image_main.c
index 08cf902..d016cd5 100644
--- a/src/lib/engines/common/evas_image_main.c
+++ b/src/lib/engines/common/evas_image_main.c
@@ -32,6 +32,7 @@ static void              _evas_common_rgba_image_delete(Image_Entry *ie);
 
 static int               _evas_common_rgba_image_surface_alloc(Image_Entry *ie, int w, int h);
 static void              _evas_common_rgba_image_surface_delete(Image_Entry *ie);
+static DATA32           *_evas_common_rgba_image_surface_pixels(Image_Entry *ie);
 
 static void              _evas_common_rgba_image_unload(Image_Entry *im);
 
@@ -55,6 +56,7 @@ static const Evas_Cache_Image_Func      _evas_common_image_func =
   _evas_common_rgba_image_delete,
   _evas_common_rgba_image_surface_alloc,
   _evas_common_rgba_image_surface_delete,
+  _evas_common_rgba_image_surface_pixels,
   evas_common_load_rgba_image_module_from_file,
   _evas_common_rgba_image_unload,
   _evas_common_rgba_image_dirty_region,
@@ -128,7 +130,7 @@ _evas_common_rgba_image_delete(Image_Entry *ie)
    RGBA_Image   *im = (RGBA_Image *) ie;
 
    evas_common_pipe_free(im);
-   if (im->info.module) evas_module_unref((Evas_Module *)im->info.module);
+   if (ie->info.module) evas_module_unref((Evas_Module *)ie->info.module);
    /* memset the image to 0x99 because i recently saw a segv where an
     * seemed to be used BUT its contents were wrong - it looks like it was
     * overwritten by something from efreet - as there was an execute command
@@ -238,6 +240,14 @@ _evas_common_rgba_image_ram_usage(Image_Entry *ie)
    return 0;
 }
 
+static DATA32 *
+_evas_common_rgba_image_surface_pixels(Image_Entry *ie)
+{
+   RGBA_Image *im = (RGBA_Image *) ie;
+
+   return im->image.data;
+}
+
 #if 0
 void
 evas_common_image_surface_alpha_tiles_calc(RGBA_Surface *is, int tsize)
@@ -246,7 +256,7 @@ evas_common_image_surface_alpha_tiles_calc(RGBA_Surface *is, int tsize)
    DATA32 *ptr;
 
    if (is->spans) return;
-   if (!(is->im->flags & RGBA_IMAGE_HAS_ALPHA)) return;
+   if (!is->im->cache_entry.flags.alpha) return;
    /* FIXME: dont handle alpha only images yet */
    if ((is->im->flags & RGBA_IMAGE_ALPHA_ONLY)) return;
    if (tsize < 0) tsize = 0;
@@ -526,16 +536,17 @@ evas_common_image_alpha_line_buffer_release(RGBA_Image *im)
 }
 
 EAPI void
-evas_common_image_premul(RGBA_Image *im)
+evas_common_image_premul(Image_Entry *ie)
 {
    DATA32  *s, *se;
    DATA32  nas = 0;
 
-   if (!im || !im->image.data) return;
-   if (!(im->flags & RGBA_IMAGE_HAS_ALPHA)) return;
+   if (!ie) return ;
+   if (!evas_cache_image_pixels(ie)) return ;
+   if (!ie->flags.alpha) return;
 
-   s = im->image.data;
-   se = s + (im->cache_entry.w * im->cache_entry.h);
+   s = evas_cache_image_pixels(ie);
+   se = s + (ie->w * ie->h);
    while (s < se)
      {
 	DATA32  a = 1 + (*s >> 24);
@@ -546,21 +557,22 @@ evas_common_image_premul(RGBA_Image *im)
 	if ((a == 1) || (a == 256))
 	   nas++;
      }
-   if ((ALPHA_SPARSE_INV_FRACTION * nas) >= (im->cache_entry.w * im->cache_entry.h))
-	im->flags |= RGBA_IMAGE_ALPHA_SPARSE;
+   if ((ALPHA_SPARSE_INV_FRACTION * nas) >= (ie->w * ie->h))
+     ie->flags.alpha_sparse = 1;
 }
 
 EAPI void
-evas_common_image_set_alpha_sparse(RGBA_Image *im)
+evas_common_image_set_alpha_sparse(Image_Entry *ie)
 {
    DATA32  *s, *se;
    DATA32  nas = 0;
 
-   if (!im || !im->image.data) return;
-   if (!(im->flags & RGBA_IMAGE_HAS_ALPHA)) return;
+   if (!ie) return;
+   if (!evas_cache_image_pixels(ie)) return ;
+   if (!ie->flags.alpha) return;
 
-   s = im->image.data;
-   se = s + (im->cache_entry.w * im->cache_entry.h);
+   s = evas_cache_image_pixels(ie);
+   se = s + (ie->w * ie->h);
    while (s < se)
      {
 	DATA32  p = *s & 0xff000000;
@@ -569,6 +581,6 @@ evas_common_image_set_alpha_sparse(RGBA_Image *im)
 	   nas++;
 	s++;
      }
-   if ((ALPHA_SPARSE_INV_FRACTION * nas) >= (im->cache_entry.w * im->cache_entry.h))
-	im->flags |= RGBA_IMAGE_ALPHA_SPARSE;
+   if ((ALPHA_SPARSE_INV_FRACTION * nas) >= (ie->w * ie->h))
+     ie->flags.alpha_sparse = 1;
 }
diff --git a/src/lib/engines/common/evas_op_add_main_.c b/src/lib/engines/common/evas_op_add_main_.c
index ec56fc5..d31ad03 100644
--- a/src/lib/engines/common/evas_op_add_main_.c
+++ b/src/lib/engines/common/evas_op_add_main_.c
@@ -12,11 +12,11 @@ static RGBA_Gfx_Func op_add_pixel_color_span_get(RGBA_Image *src, DATA32 col, RG
 static RGBA_Gfx_Func op_add_mask_color_span_get(DATA32 col, RGBA_Image *dst, int pixels);
 static RGBA_Gfx_Func op_add_pixel_mask_span_get(RGBA_Image *src, RGBA_Image *dst, int pixels);
 
-static RGBA_Gfx_Pt_Func op_add_pixel_pt_get(int src_flags, RGBA_Image *dst);
+static RGBA_Gfx_Pt_Func op_add_pixel_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst);
 static RGBA_Gfx_Pt_Func op_add_color_pt_get(DATA32 col, RGBA_Image *dst);
-static RGBA_Gfx_Pt_Func op_add_pixel_color_pt_get(int src_flags, DATA32 col, RGBA_Image *dst);
+static RGBA_Gfx_Pt_Func op_add_pixel_color_pt_get(Image_Entry_Flags src_flags, DATA32 col, RGBA_Image *dst);
 static RGBA_Gfx_Pt_Func op_add_mask_color_pt_get(DATA32 col, RGBA_Image *dst);
-static RGBA_Gfx_Pt_Func op_add_pixel_mask_pt_get(int src_flags, RGBA_Image *dst);
+static RGBA_Gfx_Pt_Func op_add_pixel_mask_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst);
 
 static RGBA_Gfx_Compositor  _composite_add = { "add", 
  op_add_init, op_add_shutdown,
@@ -46,11 +46,11 @@ static RGBA_Gfx_Func op_add_rel_pixel_color_span_get(RGBA_Image *src, DATA32 col
 static RGBA_Gfx_Func op_add_rel_mask_color_span_get(DATA32 col, RGBA_Image *dst, int pixels);
 static RGBA_Gfx_Func op_add_rel_pixel_mask_span_get(RGBA_Image *src, RGBA_Image *dst, int pixels);
 
-static RGBA_Gfx_Pt_Func op_add_rel_pixel_pt_get(int src_flags, RGBA_Image *dst);
+static RGBA_Gfx_Pt_Func op_add_rel_pixel_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst);
 static RGBA_Gfx_Pt_Func op_add_rel_color_pt_get(DATA32 col, RGBA_Image *dst);
-static RGBA_Gfx_Pt_Func op_add_rel_pixel_color_pt_get(int src_flags, DATA32 col, RGBA_Image *dst);
+static RGBA_Gfx_Pt_Func op_add_rel_pixel_color_pt_get(Image_Entry_Flags src_flags, DATA32 col, RGBA_Image *dst);
 static RGBA_Gfx_Pt_Func op_add_rel_mask_color_pt_get(DATA32 col, RGBA_Image *dst);
-static RGBA_Gfx_Pt_Func op_add_rel_pixel_mask_pt_get(int src_flags, RGBA_Image *dst);
+static RGBA_Gfx_Pt_Func op_add_rel_pixel_mask_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst);
 
 static RGBA_Gfx_Compositor  _composite_add_rel = { "add_rel", 
  op_add_rel_init, op_add_rel_shutdown,
@@ -147,9 +147,9 @@ op_add_pixel_span_get(RGBA_Image *src, RGBA_Image *dst, int pixels)
 {
    int  s = SP_AN, m = SM_N, c = SC_N, d = DP_AN;
 
-   if (src && (src->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (src && src->cache_entry.flags.alpha)
 	s = SP;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return add_gfx_span_func_cpu(s, m, c, d);
 }
@@ -165,7 +165,7 @@ op_add_color_span_get(DATA32 col, RGBA_Image *dst, int pixels)
 	c = SC_AA;
    if (col == 0xffffffff)
 	c = SC_N;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return add_gfx_span_func_cpu(s, m, c, d);
 }
@@ -175,7 +175,7 @@ op_add_pixel_color_span_get(RGBA_Image *src, DATA32 col, RGBA_Image *dst, int pi
 {
    int  s = SP_AN, m = SM_N, c = SC_AN, d = DP_AN;
 
-   if (src && (src->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (src && src->cache_entry.flags.alpha)
 	s = SP;
    if ((col >> 24) < 255)
 	c = SC;
@@ -183,7 +183,7 @@ op_add_pixel_color_span_get(RGBA_Image *src, DATA32 col, RGBA_Image *dst, int pi
 	c = SC_AA;
    if (col == 0xffffffff)
 	c = SC_N;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return add_gfx_span_func_cpu(s, m, c, d);
 }
@@ -199,7 +199,7 @@ op_add_mask_color_span_get(DATA32 col, RGBA_Image *dst, int pixels)
 	c = SC_AA;
    if (col == 0xffffffff)
 	c = SC_N;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return add_gfx_span_func_cpu(s, m, c, d);
 }
@@ -209,9 +209,9 @@ op_add_pixel_mask_span_get(RGBA_Image *src, RGBA_Image *dst, int pixels)
 {
    int  s = SP_AN, m = SM_AS, c = SC_N, d = DP_AN;
 
-   if (src && (src->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (src && src->cache_entry.flags.alpha)
 	s = SP;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return add_gfx_span_func_cpu(s, m, c, d);
 }
@@ -238,13 +238,13 @@ add_gfx_pt_func_cpu(int s, int m, int c, int d)
 }
 
 static RGBA_Gfx_Pt_Func
-op_add_pixel_pt_get(int src_flags, RGBA_Image *dst)
+op_add_pixel_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst)
 {
    int  s = SP_AN, m = SM_N, c = SC_N, d = DP_AN;
 
-   if (src_flags & RGBA_IMAGE_HAS_ALPHA)
+   if (src_flags.alpha)
 	s = SP;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return add_gfx_pt_func_cpu(s, m, c, d);
 }
@@ -260,17 +260,17 @@ op_add_color_pt_get(DATA32 col, RGBA_Image *dst)
 	c = SC_AA;
    if (col == 0xffffffff)
 	c = SC_N;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return add_gfx_pt_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Pt_Func
-op_add_pixel_color_pt_get(int src_flags, DATA32 col, RGBA_Image *dst)
+op_add_pixel_color_pt_get(Image_Entry_Flags src_flags, DATA32 col, RGBA_Image *dst)
 {
    int  s = SP_AN, m = SM_N, c = SC_AN, d = DP_AN;
 
-   if (src_flags & RGBA_IMAGE_HAS_ALPHA)
+   if (src_flags.alpha)
 	s = SP;
    if ((col >> 24) < 255)
 	c = SC;
@@ -278,7 +278,7 @@ op_add_pixel_color_pt_get(int src_flags, DATA32 col, RGBA_Image *dst)
 	c = SC_AA;
    if (col == 0xffffffff)
 	c = SC_N;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return add_gfx_pt_func_cpu(s, m, c, d);
 }
@@ -294,19 +294,19 @@ op_add_mask_color_pt_get(DATA32 col, RGBA_Image *dst)
 	c = SC_AA;
    if (col == 0xffffffff)
 	c = SC_N;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return add_gfx_pt_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Pt_Func
-op_add_pixel_mask_pt_get(int src_flags, RGBA_Image *dst)
+op_add_pixel_mask_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst)
 {
    int  s = SP_AN, m = SM_AS, c = SC_N, d = DP_AN;
 
-   if (src_flags & RGBA_IMAGE_HAS_ALPHA)
+   if (src_flags.alpha)
 	s = SP;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return add_gfx_pt_func_cpu(s, m, c, d);
 }
@@ -377,9 +377,9 @@ op_add_rel_pixel_span_get(RGBA_Image *src, RGBA_Image *dst, int pixels)
 {
    int  s = SP_AN, m = SM_N, c = SC_N, d = DP_AN;
 
-   if (src && (src->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (src && src->cache_entry.flags.alpha)
 	s = SP;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return add_rel_gfx_span_func_cpu(s, m, c, d);
 }
@@ -395,7 +395,7 @@ op_add_rel_color_span_get(DATA32 col, RGBA_Image *dst, int pixels)
 	c = SC_AA;
    if (col == 0xffffffff)
 	c = SC_N;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return add_rel_gfx_span_func_cpu(s, m, c, d);
 }
@@ -405,7 +405,7 @@ op_add_rel_pixel_color_span_get(RGBA_Image *src, DATA32 col, RGBA_Image *dst, in
 {
    int  s = SP_AN, m = SM_N, c = SC_AN, d = DP_AN;
 
-   if (src && (src->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (src && src->cache_entry.flags.alpha)
 	s = SP;
    if ((col >> 24) < 255)
 	c = SC;
@@ -413,7 +413,7 @@ op_add_rel_pixel_color_span_get(RGBA_Image *src, DATA32 col, RGBA_Image *dst, in
 	c = SC_AA;
    if (col == 0xffffffff)
 	c = SC_N;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return add_rel_gfx_span_func_cpu(s, m, c, d);
 }
@@ -429,7 +429,7 @@ op_add_rel_mask_color_span_get(DATA32 col, RGBA_Image *dst, int pixels)
 	c = SC_AA;
    if (col == 0xffffffff)
 	c = SC_N;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return add_rel_gfx_span_func_cpu(s, m, c, d);
 }
@@ -439,9 +439,9 @@ op_add_rel_pixel_mask_span_get(RGBA_Image *src, RGBA_Image *dst, int pixels)
 {
    int  s = SP_AN, m = SM_AS, c = SC_N, d = DP_AN;
 
-   if (src && (src->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (src && src->cache_entry.flags.alpha)
 	s = SP;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return add_rel_gfx_span_func_cpu(s, m, c, d);
 }
@@ -468,13 +468,13 @@ add_rel_gfx_pt_func_cpu(int s, int m, int c, int d)
 }
 
 static RGBA_Gfx_Pt_Func
-op_add_rel_pixel_pt_get(int src_flags, RGBA_Image *dst)
+op_add_rel_pixel_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst)
 {
    int  s = SP_AN, m = SM_N, c = SC_N, d = DP_AN;
 
-   if (src_flags & RGBA_IMAGE_HAS_ALPHA)
+   if (src_flags.alpha)
 	s = SP;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return add_rel_gfx_pt_func_cpu(s, m, c, d);
 }
@@ -490,17 +490,17 @@ op_add_rel_color_pt_get(DATA32 col, RGBA_Image *dst)
 	c = SC_AA;
    if (col == 0xffffffff)
 	c = SC_N;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return add_rel_gfx_pt_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Pt_Func
-op_add_rel_pixel_color_pt_get(int src_flags, DATA32 col, RGBA_Image *dst)
+op_add_rel_pixel_color_pt_get(Image_Entry_Flags src_flags, DATA32 col, RGBA_Image *dst)
 {
    int  s = SP_AN, m = SM_N, c = SC_AN, d = DP_AN;
 
-   if (src_flags & RGBA_IMAGE_HAS_ALPHA)
+   if (src_flags.alpha)
 	s = SP;
    if ((col >> 24) < 255)
 	c = SC;
@@ -508,7 +508,7 @@ op_add_rel_pixel_color_pt_get(int src_flags, DATA32 col, RGBA_Image *dst)
 	c = SC_AA;
    if (col == 0xffffffff)
 	c = SC_N;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return add_rel_gfx_pt_func_cpu(s, m, c, d);
 }
@@ -524,19 +524,19 @@ op_add_rel_mask_color_pt_get(DATA32 col, RGBA_Image *dst)
 	c = SC_AA;
    if (col == 0xffffffff)
 	c = SC_N;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return add_rel_gfx_pt_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Pt_Func
-op_add_rel_pixel_mask_pt_get(int src_flags, RGBA_Image *dst)
+op_add_rel_pixel_mask_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst)
 {
    int  s = SP_AN, m = SM_AS, c = SC_N, d = DP_AN;
 
-   if (src_flags & RGBA_IMAGE_HAS_ALPHA)
+   if (src_flags.alpha)
 	s = SP;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return add_rel_gfx_pt_func_cpu(s, m, c, d);
 }
diff --git a/src/lib/engines/common/evas_op_blend_main_.c b/src/lib/engines/common/evas_op_blend_main_.c
index 8821455..beabf1d 100644
--- a/src/lib/engines/common/evas_op_blend_main_.c
+++ b/src/lib/engines/common/evas_op_blend_main_.c
@@ -12,11 +12,11 @@ static RGBA_Gfx_Func op_blend_pixel_color_span_get(RGBA_Image *src, DATA32 col,
 static RGBA_Gfx_Func op_blend_mask_color_span_get(DATA32 col, RGBA_Image *dst, int pixels);
 static RGBA_Gfx_Func op_blend_pixel_mask_span_get(RGBA_Image *src, RGBA_Image *dst, int pixels);
 
-static RGBA_Gfx_Pt_Func op_blend_pixel_pt_get(int src_flags, RGBA_Image *dst);
+static RGBA_Gfx_Pt_Func op_blend_pixel_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst);
 static RGBA_Gfx_Pt_Func op_blend_color_pt_get(DATA32 col, RGBA_Image *dst);
-static RGBA_Gfx_Pt_Func op_blend_pixel_color_pt_get(int src_flags, DATA32 col, RGBA_Image *dst);
+static RGBA_Gfx_Pt_Func op_blend_pixel_color_pt_get(Image_Entry_Flags src_flags, DATA32 col, RGBA_Image *dst);
 static RGBA_Gfx_Pt_Func op_blend_mask_color_pt_get(DATA32 col, RGBA_Image *dst);
-static RGBA_Gfx_Pt_Func op_blend_pixel_mask_pt_get(int src_flags, RGBA_Image *dst);
+static RGBA_Gfx_Pt_Func op_blend_pixel_mask_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst);
 
 static RGBA_Gfx_Compositor  _composite_blend = { "blend", 
  op_blend_init, op_blend_shutdown,
@@ -47,11 +47,11 @@ static RGBA_Gfx_Func op_blend_rel_pixel_color_span_get(RGBA_Image *src, DATA32 c
 static RGBA_Gfx_Func op_blend_rel_mask_color_span_get(DATA32 col, RGBA_Image *dst, int pixels);
 static RGBA_Gfx_Func op_blend_rel_pixel_mask_span_get(RGBA_Image *src, RGBA_Image *dst, int pixels);
 
-static RGBA_Gfx_Pt_Func op_blend_rel_pixel_pt_get(int src_flags, RGBA_Image *dst);
+static RGBA_Gfx_Pt_Func op_blend_rel_pixel_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst);
 static RGBA_Gfx_Pt_Func op_blend_rel_color_pt_get(DATA32 col, RGBA_Image *dst);
-static RGBA_Gfx_Pt_Func op_blend_rel_pixel_color_pt_get(int src_flags, DATA32 col, RGBA_Image *dst);
+static RGBA_Gfx_Pt_Func op_blend_rel_pixel_color_pt_get(Image_Entry_Flags src_flags, DATA32 col, RGBA_Image *dst);
 static RGBA_Gfx_Pt_Func op_blend_rel_mask_color_pt_get(DATA32 col, RGBA_Image *dst);
-static RGBA_Gfx_Pt_Func op_blend_rel_pixel_mask_pt_get(int src_flags, RGBA_Image *dst);
+static RGBA_Gfx_Pt_Func op_blend_rel_pixel_mask_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst);
 
 static RGBA_Gfx_Compositor  _composite_blend_rel = { "blend_rel", 
  op_blend_rel_init, op_blend_rel_shutdown, 
@@ -148,13 +148,13 @@ op_blend_pixel_span_get(RGBA_Image *src, RGBA_Image *dst, int pixels)
 {
    int  s = SP_AN, m = SM_N, c = SC_N, d = DP_AN;
 
-   if (src && (src->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (src && src->cache_entry.flags.alpha)
      {
 	s = SP;
-	if (src->flags & RGBA_IMAGE_ALPHA_SPARSE)
+	if (src->cache_entry.flags.alpha_sparse)
 	    s = SP_AS;
      }
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return blend_gfx_span_func_cpu(s, m, c, d);
 }
@@ -170,7 +170,7 @@ op_blend_color_span_get(DATA32 col, RGBA_Image *dst, int pixels)
 	c = SC_AA;
    if (col == 0xffffffff)
 	c = SC_N;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return blend_gfx_span_func_cpu(s, m, c, d);
 }
@@ -180,10 +180,10 @@ op_blend_pixel_color_span_get(RGBA_Image *src, DATA32 col, RGBA_Image *dst, int
 {
    int  s = SP_AN, m = SM_N, c = SC_AN, d = DP_AN;
 
-   if (src && (src->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (src && src->cache_entry.flags.alpha)
      {
 	s = SP;
-	if (src->flags & RGBA_IMAGE_ALPHA_SPARSE)
+	if (src->cache_entry.flags.alpha_sparse)
 	    s = SP_AS;
      }
    if ((col >> 24) < 255)
@@ -192,7 +192,7 @@ op_blend_pixel_color_span_get(RGBA_Image *src, DATA32 col, RGBA_Image *dst, int
 	c = SC_AA;
    if (col == 0xffffffff)
 	c = SC_N;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return blend_gfx_span_func_cpu(s, m, c, d);
 }
@@ -208,7 +208,7 @@ op_blend_mask_color_span_get(DATA32 col, RGBA_Image *dst, int pixels)
 	c = SC_AA;
    if (col == 0xffffffff)
 	c = SC_N;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return blend_gfx_span_func_cpu(s, m, c, d);
 }
@@ -218,13 +218,13 @@ op_blend_pixel_mask_span_get(RGBA_Image *src, RGBA_Image *dst, int pixels)
 {
    int  s = SP_AN, m = SM_AS, c = SC_N, d = DP_AN;
 
-   if (src && (src->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (src && src->cache_entry.flags.alpha)
      {
 	s = SP;
-	if (src->flags & RGBA_IMAGE_ALPHA_SPARSE)
+	if (src->cache_entry.flags.alpha_sparse)
 	    s = SP_AS;
      }
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return blend_gfx_span_func_cpu(s, m, c, d);
 }
@@ -252,13 +252,13 @@ blend_gfx_pt_func_cpu(int s, int m, int c, int d)
 }
 
 static RGBA_Gfx_Pt_Func
-op_blend_pixel_pt_get(int src_flags, RGBA_Image *dst)
+op_blend_pixel_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst)
 {
    int  s = SP_AN, m = SM_N, c = SC_N, d = DP_AN;
 
-   if (src_flags & RGBA_IMAGE_HAS_ALPHA)
+   if (src_flags.alpha)
 	s = SP;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return blend_gfx_pt_func_cpu(s, m, c, d);
 }
@@ -274,17 +274,17 @@ op_blend_color_pt_get(DATA32 col, RGBA_Image *dst)
 	c = SC_AA;
    if (col == 0xffffffff)
 	c = SC_N;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return blend_gfx_pt_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Pt_Func
-op_blend_pixel_color_pt_get(int src_flags, DATA32 col, RGBA_Image *dst)
+op_blend_pixel_color_pt_get(Image_Entry_Flags src_flags, DATA32 col, RGBA_Image *dst)
 {
    int  s = SP_AN, m = SM_N, c = SC_AN, d = DP_AN;
 
-   if (src_flags & RGBA_IMAGE_HAS_ALPHA)
+   if (src_flags.alpha)
 	s = SP;
    if ((col >> 24) < 255)
 	c = SC;
@@ -292,7 +292,7 @@ op_blend_pixel_color_pt_get(int src_flags, DATA32 col, RGBA_Image *dst)
 	c = SC_AA;
    if (col == 0xffffffff)
 	c = SC_N;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return blend_gfx_pt_func_cpu(s, m, c, d);
 }
@@ -308,19 +308,19 @@ op_blend_mask_color_pt_get(DATA32 col, RGBA_Image *dst)
 	c = SC_AA;
    if (col == 0xffffffff)
 	c = SC_N;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return blend_gfx_pt_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Pt_Func
-op_blend_pixel_mask_pt_get(int src_flags, RGBA_Image *dst)
+op_blend_pixel_mask_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst)
 {
    int  s = SP_AN, m = SM_AS, c = SC_N, d = DP_AN;
 
-   if (src_flags & RGBA_IMAGE_HAS_ALPHA)
+   if (src_flags.alpha)
 	s = SP;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return blend_gfx_pt_func_cpu(s, m, c, d);
 }
@@ -390,13 +390,13 @@ op_blend_rel_pixel_span_get(RGBA_Image *src, RGBA_Image *dst, int pixels)
 {
    int  s = SP_AN, m = SM_N, c = SC_N, d = DP_AN;
 
-   if (src && (src->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (src && src->cache_entry.flags.alpha)
      {
 	s = SP;
-	if (src->flags & RGBA_IMAGE_ALPHA_SPARSE)
+	if (src->cache_entry.flags.alpha_sparse)
 	    s = SP_AS;
      }
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return blend_rel_gfx_span_func_cpu(s, m, c, d);
 }
@@ -412,7 +412,7 @@ op_blend_rel_color_span_get(DATA32 col, RGBA_Image *dst, int pixels)
 	c = SC_AA;
    if (col == 0xffffffff)
 	c = SC_N;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return blend_rel_gfx_span_func_cpu(s, m, c, d);
 }
@@ -422,7 +422,7 @@ op_blend_rel_pixel_color_span_get(RGBA_Image *src, DATA32 col, RGBA_Image *dst,
 {
    int  s = SP_AN, m = SM_N, c = SC_AN, d = DP_AN;
 
-   if (src && (src->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (src && src->cache_entry.flags.alpha)
 	s = SP;
    if ((col >> 24) < 255)
 	c = SC;
@@ -430,7 +430,7 @@ op_blend_rel_pixel_color_span_get(RGBA_Image *src, DATA32 col, RGBA_Image *dst,
 	c = SC_AA;
    if (col == 0xffffffff)
 	c = SC_N;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return blend_rel_gfx_span_func_cpu(s, m, c, d);
 }
@@ -446,7 +446,7 @@ op_blend_rel_mask_color_span_get(DATA32 col, RGBA_Image *dst, int pixels)
 	c = SC_AA;
    if (col == 0xffffffff)
 	c = SC_N;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return blend_rel_gfx_span_func_cpu(s, m, c, d);
 }
@@ -456,13 +456,13 @@ op_blend_rel_pixel_mask_span_get(RGBA_Image *src, RGBA_Image *dst, int pixels)
 {
    int  s = SP_AN, m = SM_AS, c = SC_N, d = DP_AN;
 
-   if (src && (src->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (src && src->cache_entry.flags.alpha)
      {
 	s = SP;
-	if (src->flags & RGBA_IMAGE_ALPHA_SPARSE)
+	if (src->cache_entry.flags.alpha_sparse)
 	    s = SP_AS;
      }
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return blend_rel_gfx_span_func_cpu(s, m, c, d);
 }
@@ -489,13 +489,13 @@ blend_rel_gfx_pt_func_cpu(int s, int m, int c, int d)
 }
 
 static RGBA_Gfx_Pt_Func
-op_blend_rel_pixel_pt_get(int src_flags, RGBA_Image *dst)
+op_blend_rel_pixel_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst)
 {
    int  s = SP_AN, m = SM_N, c = SC_N, d = DP_AN;
 
-   if (src_flags & RGBA_IMAGE_HAS_ALPHA)
+   if (src_flags.alpha)
 	s = SP;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return blend_rel_gfx_pt_func_cpu(s, m, c, d);
 }
@@ -511,17 +511,17 @@ op_blend_rel_color_pt_get(DATA32 col, RGBA_Image *dst)
 	c = SC_AA;
    if (col == 0xffffffff)
 	c = SC_N;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return blend_rel_gfx_pt_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Pt_Func
-op_blend_rel_pixel_color_pt_get(int src_flags, DATA32 col, RGBA_Image *dst)
+op_blend_rel_pixel_color_pt_get(Image_Entry_Flags src_flags, DATA32 col, RGBA_Image *dst)
 {
    int  s = SP_AN, m = SM_N, c = SC_AN, d = DP_AN;
 
-   if (src_flags & RGBA_IMAGE_HAS_ALPHA)
+   if (src_flags.alpha)
 	s = SP;
    if ((col >> 24) < 255)
 	c = SC;
@@ -529,7 +529,7 @@ op_blend_rel_pixel_color_pt_get(int src_flags, DATA32 col, RGBA_Image *dst)
 	c = SC_AA;
    if (col == 0xffffffff)
 	c = SC_N;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return blend_rel_gfx_pt_func_cpu(s, m, c, d);
 }
@@ -545,19 +545,19 @@ op_blend_rel_mask_color_pt_get(DATA32 col, RGBA_Image *dst)
 	c = SC_AA;
    if (col == 0xffffffff)
 	c = SC_N;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return blend_rel_gfx_pt_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Pt_Func
-op_blend_rel_pixel_mask_pt_get(int src_flags, RGBA_Image *dst)
+op_blend_rel_pixel_mask_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst)
 {
    int  s = SP_AN, m = SM_AS, c = SC_N, d = DP_AN;
 
-   if (src_flags & RGBA_IMAGE_HAS_ALPHA)
+   if (src_flags.alpha)
 	s = SP;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return blend_rel_gfx_pt_func_cpu(s, m, c, d);
 }
diff --git a/src/lib/engines/common/evas_op_copy_main_.c b/src/lib/engines/common/evas_op_copy_main_.c
index 263d910..eb25c24 100644
--- a/src/lib/engines/common/evas_op_copy_main_.c
+++ b/src/lib/engines/common/evas_op_copy_main_.c
@@ -12,11 +12,11 @@ static RGBA_Gfx_Func op_copy_pixel_color_span_get(RGBA_Image *src, DATA32 col, R
 static RGBA_Gfx_Func op_copy_mask_color_span_get(DATA32 col, RGBA_Image *dst, int pixels);
 static RGBA_Gfx_Func op_copy_pixel_mask_span_get(RGBA_Image *src, RGBA_Image *dst, int pixels);
 
-static RGBA_Gfx_Pt_Func op_copy_pixel_pt_get(int src_flags, RGBA_Image *dst);
+static RGBA_Gfx_Pt_Func op_copy_pixel_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst);
 static RGBA_Gfx_Pt_Func op_copy_color_pt_get(DATA32 col, RGBA_Image *dst);
-static RGBA_Gfx_Pt_Func op_copy_pixel_color_pt_get(int src_flags, DATA32 col, RGBA_Image *dst);
+static RGBA_Gfx_Pt_Func op_copy_pixel_color_pt_get(Image_Entry_Flags src_flags, DATA32 col, RGBA_Image *dst);
 static RGBA_Gfx_Pt_Func op_copy_mask_color_pt_get(DATA32 col, RGBA_Image *dst);
-static RGBA_Gfx_Pt_Func op_copy_pixel_mask_pt_get(int src_flags, RGBA_Image *dst);
+static RGBA_Gfx_Pt_Func op_copy_pixel_mask_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst);
 
 static RGBA_Gfx_Compositor  _composite_copy = { "copy", 
  op_copy_init, op_copy_shutdown, 
@@ -47,11 +47,11 @@ static RGBA_Gfx_Func op_copy_rel_pixel_color_span_get(RGBA_Image *src, DATA32 co
 static RGBA_Gfx_Func op_copy_rel_mask_color_span_get(DATA32 col, RGBA_Image *dst, int pixels);
 static RGBA_Gfx_Func op_copy_rel_pixel_mask_span_get(RGBA_Image *src, RGBA_Image *dst, int pixels);
 
-static RGBA_Gfx_Pt_Func op_copy_rel_pixel_pt_get(int src_flags, RGBA_Image *dst);
+static RGBA_Gfx_Pt_Func op_copy_rel_pixel_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst);
 static RGBA_Gfx_Pt_Func op_copy_rel_color_pt_get(DATA32 col, RGBA_Image *dst);
-static RGBA_Gfx_Pt_Func op_copy_rel_pixel_color_pt_get(int src_flags, DATA32 col, RGBA_Image *dst);
+static RGBA_Gfx_Pt_Func op_copy_rel_pixel_color_pt_get(Image_Entry_Flags src_flags, DATA32 col, RGBA_Image *dst);
 static RGBA_Gfx_Pt_Func op_copy_rel_mask_color_pt_get(DATA32 col, RGBA_Image *dst);
-static RGBA_Gfx_Pt_Func op_copy_rel_pixel_mask_pt_get(int src_flags, RGBA_Image *dst);
+static RGBA_Gfx_Pt_Func op_copy_rel_pixel_mask_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst);
 
 static RGBA_Gfx_Compositor  _composite_copy_rel = { "copy_rel", 
  op_copy_rel_init, op_copy_rel_shutdown, 
@@ -149,12 +149,12 @@ op_copy_pixel_span_get(RGBA_Image *src, RGBA_Image *dst, int pixels)
 {
    int  s = SP_AN, m = SM_N, c = SC_N, d = DP_AN;
 
-   if (src && (src->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (src && src->cache_entry.flags.alpha)
      {
-	dst->flags |= RGBA_IMAGE_HAS_ALPHA;
+	dst->cache_entry.flags.alpha = 1;
 	s = SP;
      }
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return copy_gfx_span_func_cpu(s, m, c, d);
 }
@@ -167,14 +167,14 @@ op_copy_color_span_get(DATA32 col, RGBA_Image *dst, int pixels)
    if ((col >> 24) < 255)
      {
 	if (dst)
-	   dst->flags |= RGBA_IMAGE_HAS_ALPHA;
+	   dst->cache_entry.flags.alpha = 1;
 	c = SC;
      }
    if (col == ((col >> 24) * 0x01010101))
 	c = SC_AA;
    if (col == 0xffffffff)
 	c = SC_N;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return copy_gfx_span_func_cpu(s, m, c, d);
 }
@@ -184,23 +184,23 @@ op_copy_pixel_color_span_get(RGBA_Image *src, DATA32 col, RGBA_Image *dst, int p
 {
    int  s = SP_AN, m = SM_N, c = SC_AN, d = DP_AN;
 
-   if (src && (src->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (src && src->cache_entry.flags.alpha)
      {
 	if (dst)
-	   dst->flags |= RGBA_IMAGE_HAS_ALPHA;
+	   dst->cache_entry.flags.alpha = 1;
 	s = SP;
      }
    if ((col >> 24) < 255)
      {
 	if (dst)
-	   dst->flags |= RGBA_IMAGE_HAS_ALPHA;
+	   dst->cache_entry.flags.alpha = 1;
 	c = SC;
      }
    if (col == ((col >> 24) * 0x01010101))
 	c = SC_AA;
    if (col == 0xffffffff)
 	c = SC_N;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return copy_gfx_span_func_cpu(s, m, c, d);
 }
@@ -211,7 +211,7 @@ op_copy_mask_color_span_get(DATA32 col, RGBA_Image *dst, int pixels)
    int  s = SP_N, m = SM_AS, c = SC_AN, d = DP;
 
    if (dst)
-	dst->flags |= RGBA_IMAGE_HAS_ALPHA;
+	dst->cache_entry.flags.alpha = 1;
    if ((col >> 24) < 255)
 	c = SC;
    if (col == ((col >> 24) * 0x01010101))
@@ -227,8 +227,8 @@ op_copy_pixel_mask_span_get(RGBA_Image *src, RGBA_Image *dst, int pixels)
    int  s = SP_AN, m = SM_AS, c = SC_N, d = DP;
 
    if (dst)
-	dst->flags |= RGBA_IMAGE_HAS_ALPHA;
-   if (src && (src->flags & RGBA_IMAGE_HAS_ALPHA))
+	dst->cache_entry.flags.alpha = 1;
+   if (src && src->cache_entry.flags.alpha)
 	s = SP;
    return copy_gfx_span_func_cpu(s, m, c, d);
 }
@@ -255,16 +255,16 @@ copy_gfx_pt_func_cpu(int s, int m, int c, int d)
 }
 
 static RGBA_Gfx_Pt_Func
-op_copy_pixel_pt_get(int src_flags, RGBA_Image *dst)
+op_copy_pixel_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst)
 {
    int  s = SP_AN, m = SM_N, c = SC_N, d = DP_AN;
 
-   if (src_flags & RGBA_IMAGE_HAS_ALPHA)
+   if (src_flags.alpha)
      {
-	dst->flags |= RGBA_IMAGE_HAS_ALPHA;
+	dst->cache_entry.flags.alpha = 1;
 	s = SP;
      }
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return copy_gfx_pt_func_cpu(s, m, c, d);
 }
@@ -277,40 +277,40 @@ op_copy_color_pt_get(DATA32 col, RGBA_Image *dst)
    if ((col >> 24) < 255)
      {
 	if (dst)
-	   dst->flags |= RGBA_IMAGE_HAS_ALPHA;
+	   dst->cache_entry.flags.alpha = 1;
 	c = SC;
      }
    if (col == ((col >> 24) * 0x01010101))
 	c = SC_AA;
    if (col == 0xffffffff)
 	c = SC_N;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return copy_gfx_pt_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Pt_Func
-op_copy_pixel_color_pt_get(int src_flags, DATA32 col, RGBA_Image *dst)
+op_copy_pixel_color_pt_get(Image_Entry_Flags src_flags, DATA32 col, RGBA_Image *dst)
 {
    int  s = SP_AN, m = SM_N, c = SC_AN, d = DP_AN;
 
-   if (src_flags & RGBA_IMAGE_HAS_ALPHA)
+   if (src_flags.alpha)
      {
 	if (dst)
-	   dst->flags |= RGBA_IMAGE_HAS_ALPHA;
+	   dst->cache_entry.flags.alpha = 1;
 	s = SP;
      }
    if ((col >> 24) < 255)
      {
 	if (dst)
-	   dst->flags |= RGBA_IMAGE_HAS_ALPHA;
+	   dst->cache_entry.flags.alpha = 1;
 	c = SC;
      }
    if (col == ((col >> 24) * 0x01010101))
 	c = SC_AA;
    if (col == 0xffffffff)
 	c = SC_N;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return copy_gfx_pt_func_cpu(s, m, c, d);
 }
@@ -321,7 +321,7 @@ op_copy_mask_color_pt_get(DATA32 col, RGBA_Image *dst)
    int  s = SP_N, m = SM_AS, c = SC_AN, d = DP;
 
    if (dst)
-	dst->flags |= RGBA_IMAGE_HAS_ALPHA;
+	dst->cache_entry.flags.alpha = 1;
    if ((col >> 24) < 255)
 	c = SC;
    if (col == ((col >> 24) * 0x01010101))
@@ -332,13 +332,13 @@ op_copy_mask_color_pt_get(DATA32 col, RGBA_Image *dst)
 }
 
 static RGBA_Gfx_Pt_Func
-op_copy_pixel_mask_pt_get(int src_flags, RGBA_Image *dst)
+op_copy_pixel_mask_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst)
 {
    int  s = SP_AN, m = SM_AS, c = SC_N, d = DP;
 
    if (dst)
-	dst->flags |= RGBA_IMAGE_HAS_ALPHA;
-   if (src_flags & RGBA_IMAGE_HAS_ALPHA)
+	dst->cache_entry.flags.alpha = 1;
+   if (src_flags.alpha)
 	s = SP;
    return copy_gfx_pt_func_cpu(s, m, c, d);
 }
@@ -408,13 +408,13 @@ op_copy_rel_pixel_span_get(RGBA_Image *src, RGBA_Image *dst, int pixels)
 {
    int  s = SP_AN, m = SM_N, c = SC_N, d = DP_AN;
 
-   if (src && (src->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (src && src->cache_entry.flags.alpha)
      {
 	if (dst)
-	   dst->flags |= RGBA_IMAGE_HAS_ALPHA;
+	   dst->cache_entry.flags.alpha = 1;
 	s = SP;
      }
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return copy_rel_gfx_span_func_cpu(s, m, c, d);
 }
@@ -427,14 +427,14 @@ op_copy_rel_color_span_get(DATA32 col, RGBA_Image *dst, int pixels)
    if ((col >> 24) < 255)
      {
 	if (dst)
-	   dst->flags |= RGBA_IMAGE_HAS_ALPHA;
+	   dst->cache_entry.flags.alpha = 1;
 	c = SC;
      }
    if (col == ((col >> 24) * 0x01010101))
 	c = SC_AA;
    if (col == 0xffffffff)
 	c = SC_N;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return copy_rel_gfx_span_func_cpu(s, m, c, d);
 }
@@ -444,23 +444,23 @@ op_copy_rel_pixel_color_span_get(RGBA_Image *src, DATA32 col, RGBA_Image *dst, i
 {
    int  s = SP_AN, m = SM_N, c = SC_AN, d = DP_AN;
 
-   if (src && (src->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (src && src->cache_entry.flags.alpha)
      {
 	if (dst)
-	   dst->flags |= RGBA_IMAGE_HAS_ALPHA;
+	   dst->cache_entry.flags.alpha = 1;
 	s = SP;
      }
    if ((col >> 24) < 255)
      {
 	if (dst)
-	   dst->flags |= RGBA_IMAGE_HAS_ALPHA;
+	   dst->cache_entry.flags.alpha = 1;
 	c = SC;
      }
    if (col == ((col >> 24) * 0x01010101))
 	c = SC_AA;
    if (col == 0xffffffff)
 	c = SC_N;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return copy_rel_gfx_span_func_cpu(s, m, c, d);
 }
@@ -471,7 +471,7 @@ op_copy_rel_mask_color_span_get(DATA32 col, RGBA_Image *dst, int pixels)
    int  s = SP_N, m = SM_AS, c = SC_AN, d = DP;
 
    if (dst)
-	dst->flags |= RGBA_IMAGE_HAS_ALPHA;
+	dst->cache_entry.flags.alpha = 1;
    if ((col >> 24) < 255)
 	c = SC;
    if (col == ((col >> 24) * 0x01010101))
@@ -487,8 +487,8 @@ op_copy_rel_pixel_mask_span_get(RGBA_Image *src, RGBA_Image *dst, int pixels)
    int  s = SP_AN, m = SM_AS, c = SC_N, d = DP;
 
    if (dst)
-	dst->flags |= RGBA_IMAGE_HAS_ALPHA;
-   if (src && (src->flags & RGBA_IMAGE_HAS_ALPHA))
+	dst->cache_entry.flags.alpha = 1;
+   if (src && src->cache_entry.flags.alpha)
 	s = SP;
    return copy_rel_gfx_span_func_cpu(s, m, c, d);
 }
@@ -515,17 +515,17 @@ copy_rel_gfx_pt_func_cpu(int s, int m, int c, int d)
 }
 
 static RGBA_Gfx_Pt_Func
-op_copy_rel_pixel_pt_get(int src_flags, RGBA_Image *dst)
+op_copy_rel_pixel_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst)
 {
    int  s = SP_AN, m = SM_N, c = SC_N, d = DP_AN;
 
-   if (src_flags & RGBA_IMAGE_HAS_ALPHA)
+   if (src_flags.alpha)
      {
 	if (dst)
-	   dst->flags |= RGBA_IMAGE_HAS_ALPHA;
+	   dst->cache_entry.flags.alpha = 1;
 	s = SP;
      }
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return copy_rel_gfx_pt_func_cpu(s, m, c, d);
 }
@@ -538,40 +538,40 @@ op_copy_rel_color_pt_get(DATA32 col, RGBA_Image *dst)
    if ((col >> 24) < 255)
      {
 	if (dst)
-	   dst->flags |= RGBA_IMAGE_HAS_ALPHA;
+	   dst->cache_entry.flags.alpha = 1;
 	c = SC;
      }
    if (col == ((col >> 24) * 0x01010101))
 	c = SC_AA;
    if (col == 0xffffffff)
 	c = SC_N;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return copy_rel_gfx_pt_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Pt_Func
-op_copy_rel_pixel_color_pt_get(int src_flags, DATA32 col, RGBA_Image *dst)
+op_copy_rel_pixel_color_pt_get(Image_Entry_Flags src_flags, DATA32 col, RGBA_Image *dst)
 {
    int  s = SP_AN, m = SM_N, c = SC_AN, d = DP_AN;
 
-   if (src_flags & RGBA_IMAGE_HAS_ALPHA)
+   if (src_flags.alpha)
      {
 	if (dst)
-	   dst->flags |= RGBA_IMAGE_HAS_ALPHA;
+	   dst->cache_entry.flags.alpha = 1;
 	s = SP;
      }
    if ((col >> 24) < 255)
      {
 	if (dst)
-	   dst->flags |= RGBA_IMAGE_HAS_ALPHA;
+	   dst->cache_entry.flags.alpha = 1;
 	c = SC;
      }
    if (col == ((col >> 24) * 0x01010101))
 	c = SC_AA;
    if (col == 0xffffffff)
 	c = SC_N;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return copy_rel_gfx_pt_func_cpu(s, m, c, d);
 }
@@ -582,7 +582,7 @@ op_copy_rel_mask_color_pt_get(DATA32 col, RGBA_Image *dst)
    int  s = SP_N, m = SM_AS, c = SC_AN, d = DP;
 
    if (dst)
-	dst->flags |= RGBA_IMAGE_HAS_ALPHA;
+	dst->cache_entry.flags.alpha = 1;
    if ((col >> 24) < 255)
 	c = SC;
    if (col == ((col >> 24) * 0x01010101))
@@ -593,13 +593,13 @@ op_copy_rel_mask_color_pt_get(DATA32 col, RGBA_Image *dst)
 }
 
 static RGBA_Gfx_Pt_Func
-op_copy_rel_pixel_mask_pt_get(int src_flags, RGBA_Image *dst)
+op_copy_rel_pixel_mask_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst)
 {
    int  s = SP_AN, m = SM_AS, c = SC_N, d = DP;
 
    if (dst)
-	dst->flags |= RGBA_IMAGE_HAS_ALPHA;
-   if (src_flags & RGBA_IMAGE_HAS_ALPHA)
+	dst->cache_entry.flags.alpha = 1;
+   if (src_flags.alpha)
 	s = SP;
    return copy_rel_gfx_pt_func_cpu(s, m, c, d);
 }
diff --git a/src/lib/engines/common/evas_op_mask_main_.c b/src/lib/engines/common/evas_op_mask_main_.c
index d2a3ce1..381f15d 100644
--- a/src/lib/engines/common/evas_op_mask_main_.c
+++ b/src/lib/engines/common/evas_op_mask_main_.c
@@ -12,11 +12,11 @@ static RGBA_Gfx_Func op_mask_pixel_color_span_get(RGBA_Image *src, DATA32 col, R
 static RGBA_Gfx_Func op_mask_mask_color_span_get(DATA32 col, RGBA_Image *dst, int pixels);
 static RGBA_Gfx_Func op_mask_pixel_mask_span_get(RGBA_Image *src, RGBA_Image *dst, int pixels);
 
-static RGBA_Gfx_Pt_Func op_mask_pixel_pt_get(int src_flags, RGBA_Image *dst);
+static RGBA_Gfx_Pt_Func op_mask_pixel_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst);
 static RGBA_Gfx_Pt_Func op_mask_color_pt_get(DATA32 col, RGBA_Image *dst);
-static RGBA_Gfx_Pt_Func op_mask_pixel_color_pt_get(int src_flags, DATA32 col, RGBA_Image *dst);
+static RGBA_Gfx_Pt_Func op_mask_pixel_color_pt_get(Image_Entry_Flags src_flags, DATA32 col, RGBA_Image *dst);
 static RGBA_Gfx_Pt_Func op_mask_mask_color_pt_get(DATA32 col, RGBA_Image *dst);
-static RGBA_Gfx_Pt_Func op_mask_pixel_mask_pt_get(int src_flags, RGBA_Image *dst);
+static RGBA_Gfx_Pt_Func op_mask_pixel_mask_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst);
 
 static RGBA_Gfx_Compositor  _composite_mask = { "mask", 
  op_mask_init, op_mask_shutdown,
@@ -114,12 +114,12 @@ op_mask_pixel_span_get(RGBA_Image *src, RGBA_Image *dst, int pixels)
 {
    int  s = SP_AN, m = SM_N, c = SC_N, d = DP_AN;
 
-   if (src && (src->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (src && src->cache_entry.flags.alpha)
      {
-	dst->flags |= RGBA_IMAGE_HAS_ALPHA;
+	dst->cache_entry.flags.alpha = 1;
 	s = SP;
      }
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return mask_gfx_span_func_cpu(s, m, c, d);
 }
@@ -132,14 +132,14 @@ op_mask_color_span_get(DATA32 col, RGBA_Image *dst, int pixels)
    if ((col >> 24) < 255)
      {
 	if (dst)
-	   dst->flags |= RGBA_IMAGE_HAS_ALPHA;
+	   dst->cache_entry.flags.alpha = 1;
 	c = SC;
      }
    if (col == (col | 0x00ffffff))
 	c = SC_AA;
    if (col == 0xffffffff)
 	c = SC_N;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return mask_gfx_span_func_cpu(s, m, c, d);
 }
@@ -149,23 +149,23 @@ op_mask_pixel_color_span_get(RGBA_Image *src, DATA32 col, RGBA_Image *dst, int p
 {
    int  s = SP_AN, m = SM_N, c = SC_AN, d = DP_AN;
 
-   if (src && (src->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (src && src->cache_entry.flags.alpha)
      {
 	if (dst)
-	   dst->flags |= RGBA_IMAGE_HAS_ALPHA;
+	   dst->cache_entry.flags.alpha = 1;
 	s = SP;
      }
    if ((col >> 24) < 255)
      {
 	if (dst)
-	   dst->flags |= RGBA_IMAGE_HAS_ALPHA;
+	   dst->cache_entry.flags.alpha = 1;
 	c = SC;
      }
    if (col == (col | 0x00ffffff))
 	c = SC_AA;
    if (col == 0xffffffff)
 	c = SC_N;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return mask_gfx_span_func_cpu(s, m, c, d);
 }
@@ -176,7 +176,7 @@ op_mask_mask_color_span_get(DATA32 col, RGBA_Image *dst, int pixels)
    int  s = SP_N, m = SM_AS, c = SC_AN, d = DP;
 
    if (dst)
-	dst->flags |= RGBA_IMAGE_HAS_ALPHA;
+	dst->cache_entry.flags.alpha = 1;
    if ((col >> 24) < 255)
 	c = SC;
    if (col == (col | 0x00ffffff))
@@ -192,8 +192,8 @@ op_mask_pixel_mask_span_get(RGBA_Image *src, RGBA_Image *dst, int pixels)
    int  s = SP_AN, m = SM_AS, c = SC_N, d = DP;
 
    if (dst)
-	dst->flags |= RGBA_IMAGE_HAS_ALPHA;
-   if (src && (src->flags & RGBA_IMAGE_HAS_ALPHA))
+	dst->cache_entry.flags.alpha = 1;
+   if (src && src->cache_entry.flags.alpha)
 	s = SP;
    return mask_gfx_span_func_cpu(s, m, c, d);
 }
@@ -220,16 +220,16 @@ mask_gfx_pt_func_cpu(int s, int m, int c, int d)
 }
 
 static RGBA_Gfx_Pt_Func
-op_mask_pixel_pt_get(int src_flags, RGBA_Image *dst)
+op_mask_pixel_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst)
 {
    int  s = SP_AN, m = SM_N, c = SC_N, d = DP_AN;
 
-   if (src_flags & RGBA_IMAGE_HAS_ALPHA)
+   if (src_flags.alpha)
      {
-	dst->flags |= RGBA_IMAGE_HAS_ALPHA;
+	dst->cache_entry.flags.alpha = 1;
 	s = SP;
      }
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return mask_gfx_pt_func_cpu(s, m, c, d);
 }
@@ -242,40 +242,40 @@ op_mask_color_pt_get(DATA32 col, RGBA_Image *dst)
    if ((col >> 24) < 255)
      {
 	if (dst)
-	   dst->flags |= RGBA_IMAGE_HAS_ALPHA;
+	   dst->cache_entry.flags.alpha = 1;
 	c = SC;
      }
    if (col == (col | 0x00ffffff))
 	c = SC_AA;
    if (col == 0xffffffff)
 	c = SC_N;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return mask_gfx_pt_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Pt_Func
-op_mask_pixel_color_pt_get(int src_flags, DATA32 col, RGBA_Image *dst)
+op_mask_pixel_color_pt_get(Image_Entry_Flags src_flags, DATA32 col, RGBA_Image *dst)
 {
    int  s = SP_AN, m = SM_N, c = SC_AN, d = DP_AN;
 
-   if (src_flags & RGBA_IMAGE_HAS_ALPHA)
+   if (src_flags.alpha)
      {
 	if (dst)
-	   dst->flags |= RGBA_IMAGE_HAS_ALPHA;
+	   dst->cache_entry.flags.alpha = 1;
 	s = SP;
      }
    if ((col >> 24) < 255)
      {
 	if (dst)
-	   dst->flags |= RGBA_IMAGE_HAS_ALPHA;
+	   dst->cache_entry.flags.alpha = 1;
 	c = SC;
      }
    if (col == (col | 0x00ffffff))
 	c = SC_AA;
    if (col == 0xffffffff)
 	c = SC_N;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return mask_gfx_pt_func_cpu(s, m, c, d);
 }
@@ -286,7 +286,7 @@ op_mask_mask_color_pt_get(DATA32 col, RGBA_Image *dst)
    int  s = SP_N, m = SM_AS, c = SC_AN, d = DP;
 
    if (dst)
-	dst->flags |= RGBA_IMAGE_HAS_ALPHA;
+	dst->cache_entry.flags.alpha = 1;
    if ((col >> 24) < 255)
 	c = SC;
    if (col == (col | 0x00ffffff))
@@ -297,13 +297,13 @@ op_mask_mask_color_pt_get(DATA32 col, RGBA_Image *dst)
 }
 
 static RGBA_Gfx_Pt_Func
-op_mask_pixel_mask_pt_get(int src_flags, RGBA_Image *dst)
+op_mask_pixel_mask_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst)
 {
    int  s = SP_AN, m = SM_AS, c = SC_N, d = DP;
 
    if (dst)
-	dst->flags |= RGBA_IMAGE_HAS_ALPHA;
-   if (src_flags & RGBA_IMAGE_HAS_ALPHA)
+	dst->cache_entry.flags.alpha = 1;
+   if (src_flags.alpha)
 	s = SP;
    return mask_gfx_pt_func_cpu(s, m, c, d);
 }
diff --git a/src/lib/engines/common/evas_op_mul_main_.c b/src/lib/engines/common/evas_op_mul_main_.c
index b813a16..91500d6 100644
--- a/src/lib/engines/common/evas_op_mul_main_.c
+++ b/src/lib/engines/common/evas_op_mul_main_.c
@@ -12,11 +12,11 @@ static RGBA_Gfx_Func op_mul_pixel_color_span_get(RGBA_Image *src, DATA32 col, RG
 static RGBA_Gfx_Func op_mul_mask_color_span_get(DATA32 col, RGBA_Image *dst, int pixels);
 static RGBA_Gfx_Func op_mul_pixel_mask_span_get(RGBA_Image *src, RGBA_Image *dst, int pixels);
 
-static RGBA_Gfx_Pt_Func op_mul_pixel_pt_get(int src_flags, RGBA_Image *dst);
+static RGBA_Gfx_Pt_Func op_mul_pixel_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst);
 static RGBA_Gfx_Pt_Func op_mul_color_pt_get(DATA32 col, RGBA_Image *dst);
-static RGBA_Gfx_Pt_Func op_mul_pixel_color_pt_get(int src_flags, DATA32 col, RGBA_Image *dst);
+static RGBA_Gfx_Pt_Func op_mul_pixel_color_pt_get(Image_Entry_Flags src_flags, DATA32 col, RGBA_Image *dst);
 static RGBA_Gfx_Pt_Func op_mul_mask_color_pt_get(DATA32 col, RGBA_Image *dst);
-static RGBA_Gfx_Pt_Func op_mul_pixel_mask_pt_get(int src_flags, RGBA_Image *dst);
+static RGBA_Gfx_Pt_Func op_mul_pixel_mask_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst);
 
 static RGBA_Gfx_Compositor  _composite_mul = { "mul", 
  op_mul_init, op_mul_shutdown,
@@ -113,12 +113,12 @@ op_mul_pixel_span_get(RGBA_Image *src, RGBA_Image *dst, int pixels)
 {
    int  s = SP_AN, m = SM_N, c = SC_N, d = DP_AN;
 
-   if (src && (src->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (src && src->cache_entry.flags.alpha)
      {
-	dst->flags |= RGBA_IMAGE_HAS_ALPHA;
+	dst->cache_entry.flags.alpha = 1;
 	s = SP;
      }
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return mul_gfx_span_func_cpu(s, m, c, d);
 }
@@ -131,14 +131,14 @@ op_mul_color_span_get(DATA32 col, RGBA_Image *dst, int pixels)
    if ((col >> 24) < 255)
      {
 	if (dst)
-	   dst->flags |= RGBA_IMAGE_HAS_ALPHA;
+	   dst->cache_entry.flags.alpha = 1;
 	c = SC;
      }
    if (col == (col | 0x00ffffff))
 	c = SC_AA;
    if (col == 0xffffffff)
 	c = SC_N;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return mul_gfx_span_func_cpu(s, m, c, d);
 }
@@ -148,23 +148,23 @@ op_mul_pixel_color_span_get(RGBA_Image *src, DATA32 col, RGBA_Image *dst, int pi
 {
    int  s = SP_AN, m = SM_N, c = SC_AN, d = DP_AN;
 
-   if (src && (src->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (src && src->cache_entry.flags.alpha)
      {
 	if (dst)
-	   dst->flags |= RGBA_IMAGE_HAS_ALPHA;
+	   dst->cache_entry.flags.alpha = 1;
 	s = SP;
      }
    if ((col >> 24) < 255)
      {
 	if (dst)
-	   dst->flags |= RGBA_IMAGE_HAS_ALPHA;
+	   dst->cache_entry.flags.alpha = 1;
 	c = SC;
      }
    if (col == (col | 0x00ffffff))
 	c = SC_AA;
    if (col == 0xffffffff)
 	c = SC_N;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return mul_gfx_span_func_cpu(s, m, c, d);
 }
@@ -175,7 +175,7 @@ op_mul_mask_color_span_get(DATA32 col, RGBA_Image *dst, int pixels)
    int  s = SP_N, m = SM_AS, c = SC_AN, d = DP;
 
    if (dst)
-	dst->flags |= RGBA_IMAGE_HAS_ALPHA;
+	dst->cache_entry.flags.alpha = 1;
    if ((col >> 24) < 255)
 	c = SC;
    if (col == (col | 0x00ffffff))
@@ -191,8 +191,8 @@ op_mul_pixel_mask_span_get(RGBA_Image *src, RGBA_Image *dst, int pixels)
    int  s = SP_AN, m = SM_AS, c = SC_N, d = DP;
 
    if (dst)
-	dst->flags |= RGBA_IMAGE_HAS_ALPHA;
-   if (src && (src->flags & RGBA_IMAGE_HAS_ALPHA))
+	dst->cache_entry.flags.alpha = 1;
+   if (src && src->cache_entry.flags.alpha)
 	s = SP;
    return mul_gfx_span_func_cpu(s, m, c, d);
 }
@@ -219,16 +219,16 @@ mul_gfx_pt_func_cpu(int s, int m, int c, int d)
 }
 
 static RGBA_Gfx_Pt_Func
-op_mul_pixel_pt_get(int src_flags, RGBA_Image *dst)
+op_mul_pixel_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst)
 {
    int  s = SP_AN, m = SM_N, c = SC_N, d = DP_AN;
 
-   if (src_flags & RGBA_IMAGE_HAS_ALPHA)
+   if (src_flags.alpha)
      {
-	dst->flags |= RGBA_IMAGE_HAS_ALPHA;
+	dst->cache_entry.flags.alpha = 1;
 	s = SP;
      }
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return mul_gfx_pt_func_cpu(s, m, c, d);
 }
@@ -241,40 +241,40 @@ op_mul_color_pt_get(DATA32 col, RGBA_Image *dst)
    if ((col >> 24) < 255)
      {
 	if (dst)
-	   dst->flags |= RGBA_IMAGE_HAS_ALPHA;
+	   dst->cache_entry.flags.alpha = 1;
 	c = SC;
      }
    if (col == (col | 0x00ffffff))
 	c = SC_AA;
    if (col == 0xffffffff)
 	c = SC_N;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return mul_gfx_pt_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Pt_Func
-op_mul_pixel_color_pt_get(int src_flags, DATA32 col, RGBA_Image *dst)
+op_mul_pixel_color_pt_get(Image_Entry_Flags src_flags, DATA32 col, RGBA_Image *dst)
 {
    int  s = SP_AN, m = SM_N, c = SC_AN, d = DP_AN;
 
-   if (src_flags & RGBA_IMAGE_HAS_ALPHA)
+   if (src_flags.alpha)
      {
 	if (dst)
-	   dst->flags |= RGBA_IMAGE_HAS_ALPHA;
+	   dst->cache_entry.flags.alpha = 1;
 	s = SP;
      }
    if ((col >> 24) < 255)
      {
 	if (dst)
-	   dst->flags |= RGBA_IMAGE_HAS_ALPHA;
+	   dst->cache_entry.flags.alpha = 1;
 	c = SC;
      }
    if (col == (col | 0x00ffffff))
 	c = SC_AA;
    if (col == 0xffffffff)
 	c = SC_N;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return mul_gfx_pt_func_cpu(s, m, c, d);
 }
@@ -285,7 +285,7 @@ op_mul_mask_color_pt_get(DATA32 col, RGBA_Image *dst)
    int  s = SP_N, m = SM_AS, c = SC_AN, d = DP;
 
    if (dst)
-	dst->flags |= RGBA_IMAGE_HAS_ALPHA;
+	dst->cache_entry.flags.alpha = 1;
    if ((col >> 24) < 255)
 	c = SC;
    if (col == (col | 0x00ffffff))
@@ -296,13 +296,13 @@ op_mul_mask_color_pt_get(DATA32 col, RGBA_Image *dst)
 }
 
 static RGBA_Gfx_Pt_Func
-op_mul_pixel_mask_pt_get(int src_flags, RGBA_Image *dst)
+op_mul_pixel_mask_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst)
 {
    int  s = SP_AN, m = SM_AS, c = SC_N, d = DP;
 
    if (dst)
-	dst->flags |= RGBA_IMAGE_HAS_ALPHA;
-   if (src_flags & RGBA_IMAGE_HAS_ALPHA)
+	dst->cache_entry.flags.alpha = 1;
+   if (src_flags.alpha)
 	s = SP;
    return mul_gfx_pt_func_cpu(s, m, c, d);
 }
diff --git a/src/lib/engines/common/evas_op_sub_main_.c b/src/lib/engines/common/evas_op_sub_main_.c
index f5ddc81..83a96f0 100644
--- a/src/lib/engines/common/evas_op_sub_main_.c
+++ b/src/lib/engines/common/evas_op_sub_main_.c
@@ -12,11 +12,11 @@ static RGBA_Gfx_Func op_sub_pixel_color_span_get(RGBA_Image *src, DATA32 col, RG
 static RGBA_Gfx_Func op_sub_mask_color_span_get(DATA32 col, RGBA_Image *dst, int pixels);
 static RGBA_Gfx_Func op_sub_pixel_mask_span_get(RGBA_Image *src, RGBA_Image *dst, int pixels);
 
-static RGBA_Gfx_Pt_Func op_sub_pixel_pt_get(int src_flags, RGBA_Image *dst);
+static RGBA_Gfx_Pt_Func op_sub_pixel_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst);
 static RGBA_Gfx_Pt_Func op_sub_color_pt_get(DATA32 col, RGBA_Image *dst);
-static RGBA_Gfx_Pt_Func op_sub_pixel_color_pt_get(int src_flags, DATA32 col, RGBA_Image *dst);
+static RGBA_Gfx_Pt_Func op_sub_pixel_color_pt_get(Image_Entry_Flags src_flags, DATA32 col, RGBA_Image *dst);
 static RGBA_Gfx_Pt_Func op_sub_mask_color_pt_get(DATA32 col, RGBA_Image *dst);
-static RGBA_Gfx_Pt_Func op_sub_pixel_mask_pt_get(int src_flags, RGBA_Image *dst);
+static RGBA_Gfx_Pt_Func op_sub_pixel_mask_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst);
 
 static RGBA_Gfx_Compositor  _composite_sub = { "sub", 
  op_sub_init, op_sub_shutdown,
@@ -46,11 +46,11 @@ static RGBA_Gfx_Func op_sub_rel_pixel_color_span_get(RGBA_Image *src, DATA32 col
 static RGBA_Gfx_Func op_sub_rel_mask_color_span_get(DATA32 col, RGBA_Image *dst, int pixels);
 static RGBA_Gfx_Func op_sub_rel_pixel_mask_span_get(RGBA_Image *src, RGBA_Image *dst, int pixels);
 
-static RGBA_Gfx_Pt_Func op_sub_rel_pixel_pt_get(int src_flags, RGBA_Image *dst);
+static RGBA_Gfx_Pt_Func op_sub_rel_pixel_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst);
 static RGBA_Gfx_Pt_Func op_sub_rel_color_pt_get(DATA32 col, RGBA_Image *dst);
-static RGBA_Gfx_Pt_Func op_sub_rel_pixel_color_pt_get(int src_flags, DATA32 col, RGBA_Image *dst);
+static RGBA_Gfx_Pt_Func op_sub_rel_pixel_color_pt_get(Image_Entry_Flags src_flags, DATA32 col, RGBA_Image *dst);
 static RGBA_Gfx_Pt_Func op_sub_rel_mask_color_pt_get(DATA32 col, RGBA_Image *dst);
-static RGBA_Gfx_Pt_Func op_sub_rel_pixel_mask_pt_get(int src_flags, RGBA_Image *dst);
+static RGBA_Gfx_Pt_Func op_sub_rel_pixel_mask_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst);
 
 static RGBA_Gfx_Compositor  _composite_sub_rel = { "sub_rel", 
  op_sub_rel_init, op_sub_rel_shutdown,
@@ -147,9 +147,9 @@ op_sub_pixel_span_get(RGBA_Image *src, RGBA_Image *dst, int pixels)
 {
    int  s = SP_AN, m = SM_N, c = SC_N, d = DP_AN;
 
-   if (src && (src->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (src && src->cache_entry.flags.alpha)
 	s = SP;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return sub_gfx_span_func_cpu(s, m, c, d);
 }
@@ -165,7 +165,7 @@ op_sub_color_span_get(DATA32 col, RGBA_Image *dst, int pixels)
 	c = SC_AA;
    if (col == 0xffffffff)
 	c = SC_N;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return sub_gfx_span_func_cpu(s, m, c, d);
 }
@@ -175,7 +175,7 @@ op_sub_pixel_color_span_get(RGBA_Image *src, DATA32 col, RGBA_Image *dst, int pi
 {
    int  s = SP_AN, m = SM_N, c = SC_AN, d = DP_AN;
 
-   if (src && (src->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (src && src->cache_entry.flags.alpha)
 	s = SP;
    if ((col >> 24) < 255)
 	c = SC;
@@ -183,7 +183,7 @@ op_sub_pixel_color_span_get(RGBA_Image *src, DATA32 col, RGBA_Image *dst, int pi
 	c = SC_AA;
    if (col == 0xffffffff)
 	c = SC_N;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return sub_gfx_span_func_cpu(s, m, c, d);
 }
@@ -199,7 +199,7 @@ op_sub_mask_color_span_get(DATA32 col, RGBA_Image *dst, int pixels)
 	c = SC_AA;
    if (col == 0xffffffff)
 	c = SC_N;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return sub_gfx_span_func_cpu(s, m, c, d);
 }
@@ -209,9 +209,9 @@ op_sub_pixel_mask_span_get(RGBA_Image *src, RGBA_Image *dst, int pixels)
 {
    int  s = SP_AN, m = SM_AS, c = SC_N, d = DP_AN;
 
-   if (src && (src->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (src && src->cache_entry.flags.alpha)
 	s = SP;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return sub_gfx_span_func_cpu(s, m, c, d);
 }
@@ -238,13 +238,13 @@ sub_gfx_pt_func_cpu(int s, int m, int c, int d)
 }
 
 static RGBA_Gfx_Pt_Func
-op_sub_pixel_pt_get(int src_flags, RGBA_Image *dst)
+op_sub_pixel_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst)
 {
    int  s = SP_AN, m = SM_N, c = SC_N, d = DP_AN;
 
-   if (src_flags & RGBA_IMAGE_HAS_ALPHA)
+   if (src_flags.alpha)
 	s = SP;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return sub_gfx_pt_func_cpu(s, m, c, d);
 }
@@ -260,17 +260,17 @@ op_sub_color_pt_get(DATA32 col, RGBA_Image *dst)
 	c = SC_AA;
    if (col == 0xffffffff)
 	c = SC_N;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return sub_gfx_pt_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Pt_Func
-op_sub_pixel_color_pt_get(int src_flags, DATA32 col, RGBA_Image *dst)
+op_sub_pixel_color_pt_get(Image_Entry_Flags src_flags, DATA32 col, RGBA_Image *dst)
 {
    int  s = SP_AN, m = SM_N, c = SC_AN, d = DP_AN;
 
-   if (src_flags & RGBA_IMAGE_HAS_ALPHA)
+   if (src_flags.alpha)
 	s = SP;
    if ((col >> 24) < 255)
 	c = SC;
@@ -278,7 +278,7 @@ op_sub_pixel_color_pt_get(int src_flags, DATA32 col, RGBA_Image *dst)
 	c = SC_AA;
    if (col == 0xffffffff)
 	c = SC_N;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return sub_gfx_pt_func_cpu(s, m, c, d);
 }
@@ -294,19 +294,19 @@ op_sub_mask_color_pt_get(DATA32 col, RGBA_Image *dst)
 	c = SC_AA;
    if (col == 0xffffffff)
 	c = SC_N;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return sub_gfx_pt_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Pt_Func
-op_sub_pixel_mask_pt_get(int src_flags, RGBA_Image *dst)
+op_sub_pixel_mask_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst)
 {
    int  s = SP_AN, m = SM_AS, c = SC_N, d = DP_AN;
 
-   if (src_flags & RGBA_IMAGE_HAS_ALPHA)
+   if (src_flags.alpha)
 	s = SP;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return sub_gfx_pt_func_cpu(s, m, c, d);
 }
@@ -377,9 +377,9 @@ op_sub_rel_pixel_span_get(RGBA_Image *src, RGBA_Image *dst, int pixels)
 {
    int  s = SP_AN, m = SM_N, c = SC_N, d = DP_AN;
 
-   if (src && (src->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (src && src->cache_entry.flags.alpha)
 	s = SP;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return sub_rel_gfx_span_func_cpu(s, m, c, d);
 }
@@ -395,7 +395,7 @@ op_sub_rel_color_span_get(DATA32 col, RGBA_Image *dst, int pixels)
 	c = SC_AA;
    if (col == 0xffffffff)
 	c = SC_N;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return sub_rel_gfx_span_func_cpu(s, m, c, d);
 }
@@ -405,7 +405,7 @@ op_sub_rel_pixel_color_span_get(RGBA_Image *src, DATA32 col, RGBA_Image *dst, in
 {
    int  s = SP_AN, m = SM_N, c = SC_AN, d = DP_AN;
 
-   if (src && (src->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (src && src->cache_entry.flags.alpha)
 	s = SP;
    if ((col >> 24) < 255)
 	c = SC;
@@ -413,7 +413,7 @@ op_sub_rel_pixel_color_span_get(RGBA_Image *src, DATA32 col, RGBA_Image *dst, in
 	c = SC_AA;
    if (col == 0xffffffff)
 	c = SC_N;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return sub_rel_gfx_span_func_cpu(s, m, c, d);
 }
@@ -429,7 +429,7 @@ op_sub_rel_mask_color_span_get(DATA32 col, RGBA_Image *dst, int pixels)
 	c = SC_AA;
    if (col == 0xffffffff)
 	c = SC_N;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return sub_rel_gfx_span_func_cpu(s, m, c, d);
 }
@@ -439,9 +439,9 @@ op_sub_rel_pixel_mask_span_get(RGBA_Image *src, RGBA_Image *dst, int pixels)
 {
    int  s = SP_AN, m = SM_AS, c = SC_N, d = DP_AN;
 
-   if (src && (src->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (src && src->cache_entry.flags.alpha)
 	s = SP;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return sub_rel_gfx_span_func_cpu(s, m, c, d);
 }
@@ -468,13 +468,13 @@ sub_rel_gfx_pt_func_cpu(int s, int m, int c, int d)
 }
 
 static RGBA_Gfx_Pt_Func
-op_sub_rel_pixel_pt_get(int src_flags, RGBA_Image *dst)
+op_sub_rel_pixel_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst)
 {
    int  s = SP_AN, m = SM_N, c = SC_N, d = DP_AN;
 
-   if (src_flags & RGBA_IMAGE_HAS_ALPHA)
+   if (src_flags.alpha)
 	s = SP;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return sub_rel_gfx_pt_func_cpu(s, m, c, d);
 }
@@ -490,17 +490,17 @@ op_sub_rel_color_pt_get(DATA32 col, RGBA_Image *dst)
 	c = SC_AA;
    if (col == 0xffffffff)
 	c = SC_N;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return sub_rel_gfx_pt_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Pt_Func
-op_sub_rel_pixel_color_pt_get(int src_flags, DATA32 col, RGBA_Image *dst)
+op_sub_rel_pixel_color_pt_get(Image_Entry_Flags src_flags, DATA32 col, RGBA_Image *dst)
 {
    int  s = SP_AN, m = SM_N, c = SC_AN, d = DP_AN;
 
-   if (src_flags & RGBA_IMAGE_HAS_ALPHA)
+   if (src_flags.alpha)
 	s = SP;
    if ((col >> 24) < 255)
 	c = SC;
@@ -508,7 +508,7 @@ op_sub_rel_pixel_color_pt_get(int src_flags, DATA32 col, RGBA_Image *dst)
 	c = SC_AA;
    if (col == 0xffffffff)
 	c = SC_N;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return sub_rel_gfx_pt_func_cpu(s, m, c, d);
 }
@@ -524,19 +524,19 @@ op_sub_rel_mask_color_pt_get(DATA32 col, RGBA_Image *dst)
 	c = SC_AA;
    if (col == 0xffffffff)
 	c = SC_N;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return sub_rel_gfx_pt_func_cpu(s, m, c, d);
 }
 
 static RGBA_Gfx_Pt_Func
-op_sub_rel_pixel_mask_pt_get(int src_flags, RGBA_Image *dst)
+op_sub_rel_pixel_mask_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst)
 {
    int  s = SP_AN, m = SM_AS, c = SC_N, d = DP_AN;
 
-   if (src_flags & RGBA_IMAGE_HAS_ALPHA)
+   if (src_flags.alpha)
 	s = SP;
-   if (dst && (dst->flags & RGBA_IMAGE_HAS_ALPHA))
+   if (dst && dst->cache_entry.flags.alpha)
 	d = DP;
    return sub_rel_gfx_pt_func_cpu(s, m, c, d);
 }
diff --git a/src/lib/engines/common/evas_scale_sample.c b/src/lib/engines/common/evas_scale_sample.c
index 23f8e50..14ae103 100644
--- a/src/lib/engines/common/evas_scale_sample.c
+++ b/src/lib/engines/common/evas_scale_sample.c
@@ -266,8 +266,8 @@ scale_rgba_in_to_out_clip_sample_internal(RGBA_Image *src, RGBA_Image *dst,
 	/* scale to dst */
 	dptr = dst_ptr;
 #ifdef DIRECT_SCALE	     
-	if ((!(src->flags & RGBA_IMAGE_HAS_ALPHA)) &&
-	     (!(dst->flags & RGBA_IMAGE_HAS_ALPHA)) &&
+	if ((!src->cache_entry.flags.alpha) &&
+	     (!dst->cache_entry.flags.alpha) &&
 	     (!dc->mul.use))
 	  {
 	     for (y = 0; y < dst_clip_h; y++)
diff --git a/src/lib/engines/common/evas_scale_smooth_scaler_downx.c b/src/lib/engines/common/evas_scale_smooth_scaler_downx.c
index 58570ba..2a93435 100644
--- a/src/lib/engines/common/evas_scale_smooth_scaler_downx.c
+++ b/src/lib/engines/common/evas_scale_smooth_scaler_downx.c
@@ -20,7 +20,7 @@
    yapp = yapoints + dyy;
    pbuf = buf;
 
-   if (src->flags & RGBA_IMAGE_HAS_ALPHA)
+   if (src->cache_entry.flags.alpha)
      {
 	while (dst_clip_h--)
 	  {
@@ -101,8 +101,8 @@
    else
      {
 #ifdef DIRECT_SCALE
-        if ((!(src->flags & RGBA_IMAGE_HAS_ALPHA)) &&
-	    (!(dst->flags & RGBA_IMAGE_HAS_ALPHA)) &&
+        if ((!src->cache_entry.flags.alpha) &&
+	    (!dst->cache_entry.flags.alpha) &&
 	    (!dc->mul.use))
 	  {
 	     while (dst_clip_h--)
diff --git a/src/lib/engines/common/evas_scale_smooth_scaler_downx_downy.c b/src/lib/engines/common/evas_scale_smooth_scaler_downx_downy.c
index 5686917..f830187 100644
--- a/src/lib/engines/common/evas_scale_smooth_scaler_downx_downy.c
+++ b/src/lib/engines/common/evas_scale_smooth_scaler_downx_downy.c
@@ -25,7 +25,7 @@
 /*#ifndef SCALE_USING_MMX */
 /* for now there's no mmx down scaling - so C only */
 #if 1
-   if (src->flags & RGBA_IMAGE_HAS_ALPHA)
+   if (src->cache_entry.flags.alpha)
      {
 	while (dst_clip_h--)
 	  {
@@ -150,8 +150,8 @@
    else
      {
 #ifdef DIRECT_SCALE
-        if ((!(src->flags & RGBA_IMAGE_HAS_ALPHA)) &&
-	    (!(dst->flags & RGBA_IMAGE_HAS_ALPHA)) &&
+        if ((!src->cache_entry.flags.alpha) &&
+	    (!dst->cache_entry.flags.alpha) &&
 	    (!dc->mul.use))
 	  {
 	     while (dst_clip_h--)
diff --git a/src/lib/engines/common/evas_scale_smooth_scaler_downy.c b/src/lib/engines/common/evas_scale_smooth_scaler_downy.c
index b16f902..26adbbf 100644
--- a/src/lib/engines/common/evas_scale_smooth_scaler_downy.c
+++ b/src/lib/engines/common/evas_scale_smooth_scaler_downy.c
@@ -20,7 +20,7 @@
    yapp = yapoints + dyy;
    pbuf = buf;
 
-   if (src->flags & RGBA_IMAGE_HAS_ALPHA)
+   if (src->cache_entry.flags.alpha)
      {
 	while (dst_clip_h--)
 	  {
@@ -102,8 +102,8 @@
    else
      {
 #ifdef DIRECT_SCALE
-        if ((!(src->flags & RGBA_IMAGE_HAS_ALPHA)) &&
-	    (!(dst->flags & RGBA_IMAGE_HAS_ALPHA)) &&
+        if ((!src->cache_entry.flags.alpha) &&
+	    (!dst->cache_entry.flags.alpha) &&
 	    (!dc->mul.use))
 	  {
 	     while (dst_clip_h--)
diff --git a/src/lib/engines/common/evas_scale_smooth_scaler_up.c b/src/lib/engines/common/evas_scale_smooth_scaler_up.c
index 098d01c..9b0e30d 100644
--- a/src/lib/engines/common/evas_scale_smooth_scaler_up.c
+++ b/src/lib/engines/common/evas_scale_smooth_scaler_up.c
@@ -17,13 +17,13 @@
    pdst_end = pdst + (dst_clip_h * dst_w);
    if (!dc->mul.use)
      {
-	if ((dc->render_op == _EVAS_RENDER_BLEND) && !(src->flags & RGBA_IMAGE_HAS_ALPHA))
+	if ((dc->render_op == _EVAS_RENDER_BLEND) && !src->cache_entry.flags.alpha)
 	  { direct_scale = 1;  buf_step = dst->cache_entry.w; }
 	else if (dc->render_op == _EVAS_RENDER_COPY)
 	  {
 	    direct_scale = 1;  buf_step = dst->cache_entry.w;
-	    if (src->flags & RGBA_IMAGE_HAS_ALPHA)
-		dst->flags |= RGBA_IMAGE_HAS_ALPHA;
+	    if (src->cache_entry.flags.alpha)
+		dst->cache_entry.flags.alpha = 1;
 	  }
      }
    if (!direct_scale)
diff --git a/src/lib/engines/common_16/evas_soft16_main.c b/src/lib/engines/common_16/evas_soft16_main.c
index b6b5bb9..2068eca 100644
--- a/src/lib/engines/common_16/evas_soft16_main.c
+++ b/src/lib/engines/common_16/evas_soft16_main.c
@@ -8,6 +8,7 @@ static void              _evas_common_soft16_image_delete(Image_Entry *ie);
 
 static int               _evas_common_soft16_image_surface_alloc(Image_Entry *ie, int w, int h);
 static void              _evas_common_soft16_image_surface_delete(Image_Entry *ie);
+static DATA32		*_evas_common_soft16_image_surface_pixels(Image_Entry *ie);
 
 static int               _evas_common_load_soft16_image_from_file(Image_Entry *ie);
 static void              _evas_common_soft16_image_unload(Image_Entry *ie);
@@ -36,6 +37,7 @@ static const Evas_Cache_Image_Func      _evas_common_soft16_image_func =
    _evas_common_soft16_image_delete,
    _evas_common_soft16_image_surface_alloc,
    _evas_common_soft16_image_surface_delete,
+   _evas_common_soft16_image_surface_pixels,
    _evas_common_load_soft16_image_from_file,
    _evas_common_soft16_image_unload,
    _evas_common_soft16_image_dirty_region,
@@ -149,6 +151,14 @@ _evas_common_soft16_image_surface_delete(Image_Entry *ie)
    im->flags.free_alpha = 0;
 }
 
+static DATA32 *
+_evas_common_soft16_image_surface_pixels(Image_Entry *ie)
+{
+   abort();
+
+   return NULL;
+}
+
 static int
 _evas_common_load_soft16_image_from_file(Image_Entry *ie)
 {
@@ -162,7 +172,7 @@ _evas_common_load_soft16_image_from_file(Image_Entry *ie)
 
    sim->cache_entry.w = sim->source->cache_entry.w;
    sim->cache_entry.h = sim->source->cache_entry.h;
-   sim->flags.have_alpha = !!(im->flags & RGBA_IMAGE_HAS_ALPHA);
+   sim->flags.have_alpha = im->cache_entry.flags.alpha;
    if (sim->stride < 0) sim->stride = _calc_stride(sim->cache_entry.w);
 
    return 0;
diff --git a/src/lib/imaging/evas_imaging.c b/src/lib/imaging/evas_imaging.c
index ec5ffc2..3befdce 100644
--- a/src/lib/imaging/evas_imaging.c
+++ b/src/lib/imaging/evas_imaging.c
@@ -51,7 +51,7 @@ EAPI Evas_Bool
 evas_imaging_image_alpha_get(const Evas_Imaging_Image *im)
 {
    if (!im) return 0;
-   if (im->image->flags & RGBA_IMAGE_HAS_ALPHA) return 1;
+   if (im->image->cache_entry.flags.alpha) return 1;
    return 0;
 }
 
diff --git a/src/lib/include/evas_common.h b/src/lib/include/evas_common.h
index 6d1efc9..af48843 100644
--- a/src/lib/include/evas_common.h
+++ b/src/lib/include/evas_common.h
@@ -135,6 +135,7 @@ typedef struct _Evas_Object_List        Evas_Object_List;
 typedef struct _Evas_Hash_El            Evas_Hash_El;
 
 typedef struct _Image_Entry             Image_Entry;
+typedef struct _Image_Entry_Flags	Image_Entry_Flags;
 typedef struct _Engine_Image_Entry      Engine_Image_Entry;
 
 typedef struct _RGBA_Image_Loadopts   RGBA_Image_Loadopts;
@@ -193,14 +194,14 @@ typedef void (*Gfx_Func_Gradient_Fill)(DATA32 *src, int src_len,
 typedef enum _RGBA_Image_Flags
 {
    RGBA_IMAGE_NOTHING       = (0),
-   RGBA_IMAGE_HAS_ALPHA     = (1 << 0),
+/*    RGBA_IMAGE_HAS_ALPHA     = (1 << 0), */
    RGBA_IMAGE_IS_DIRTY      = (1 << 1),
    RGBA_IMAGE_INDEXED       = (1 << 2),
    RGBA_IMAGE_ALPHA_ONLY    = (1 << 3),
    RGBA_IMAGE_ALPHA_TILES   = (1 << 4),
-   RGBA_IMAGE_ALPHA_SPARSE  = (1 << 5),
-   RGBA_IMAGE_LOADED        = (1 << 6),
-   RGBA_IMAGE_NEED_DATA     = (1 << 7)
+/*    RGBA_IMAGE_ALPHA_SPARSE  = (1 << 5), */
+/*    RGBA_IMAGE_LOADED        = (1 << 6), */
+/*    RGBA_IMAGE_NEED_DATA     = (1 << 7) */
 } RGBA_Image_Flags;
 
 typedef enum _Convert_Pal_Mode
@@ -267,6 +268,18 @@ struct _RGBA_Image_Loadopts
    int                  w, h; // if > 0 use this
 };
 
+struct _Image_Entry_Flags
+{
+   Evas_Bool loaded       : 1;
+   Evas_Bool dirty        : 1;
+   Evas_Bool activ        : 1;
+   Evas_Bool need_data    : 1;
+   Evas_Bool lru_nodata   : 1;
+   Evas_Bool cached       : 1;
+   Evas_Bool alpha        : 1;
+   Evas_Bool alpha_sparse : 1;
+};
+
 struct _Image_Entry
 {
   Evas_Object_List       _list_data;
@@ -281,16 +294,6 @@ struct _Image_Entry
   time_t                 timestamp;
   time_t                 laststat;
 
-  struct
-  {
-    Evas_Bool            loaded     : 1;
-    Evas_Bool            dirty      : 1;
-    Evas_Bool            activ      : 1;
-    Evas_Bool            need_data  : 1;
-    Evas_Bool            lru_nodata : 1;
-    Evas_Bool            cached     : 1;
-  } flags;
-
   int                    references;
 
   unsigned char          scale;
@@ -305,6 +308,14 @@ struct _Image_Entry
      int		 w;
      int		 h;
   } allocated;
+
+  struct
+  {
+     void		*module;
+     void		*loader;
+  } info;
+
+  Image_Entry_Flags      flags;
 };
 
 struct _Engine_Image_Entry
@@ -432,8 +443,8 @@ struct _RGBA_Image
    RGBA_Image_Flags     flags;
    struct
      {
-	void           *module;
-	void           *loader;
+/* 	void           *module; */
+/* 	void           *loader; */
 /* 	char           *real_file; */
 	char           *comment;
 //	int             format;
@@ -610,11 +621,11 @@ struct _RGBA_Gfx_Compositor
    RGBA_Gfx_Func  (*composite_mask_color_span_get)(DATA32 col, RGBA_Image *dst, int pixels);
    RGBA_Gfx_Func  (*composite_pixel_mask_span_get)(RGBA_Image *src, RGBA_Image *dst, int pixels);
 
-   RGBA_Gfx_Pt_Func  (*composite_pixel_pt_get)(int src_flags, RGBA_Image *dst);
+   RGBA_Gfx_Pt_Func  (*composite_pixel_pt_get)(Image_Entry_Flags src_flags, RGBA_Image *dst);
    RGBA_Gfx_Pt_Func  (*composite_color_pt_get)(DATA32 col, RGBA_Image *dst);
-   RGBA_Gfx_Pt_Func  (*composite_pixel_color_pt_get)(int src_flags, DATA32 col, RGBA_Image *dst);
+   RGBA_Gfx_Pt_Func  (*composite_pixel_color_pt_get)(Image_Entry_Flags src_flags, DATA32 col, RGBA_Image *dst);
    RGBA_Gfx_Pt_Func  (*composite_mask_color_pt_get)(DATA32 col, RGBA_Image *dst);
-   RGBA_Gfx_Pt_Func  (*composite_pixel_mask_pt_get)(int src_flags, RGBA_Image *dst);
+   RGBA_Gfx_Pt_Func  (*composite_pixel_mask_pt_get)(Image_Entry_Flags src_flags, RGBA_Image *dst);
 };
 
 #define EVAS_RECT_SPLIT 1
@@ -745,8 +756,10 @@ struct _Evas_Cache_Image_Func
    Image_Entry *(*alloc)(void);
    void         (*dealloc)(Image_Entry *im);
 
+   /* The cache provide some helpers for surface manipulation. */
    int          (*surface_alloc)(Image_Entry *im, int w, int h);
    void         (*surface_delete)(Image_Entry *im);
+   DATA32      *(*surface_pixels)(Image_Entry *im);
 
    /* The cache is doing the allocation and deallocation, you must just do the rest. */
    int          (*constructor)(Image_Entry *im);
@@ -933,11 +946,11 @@ RGBA_Gfx_Func     evas_common_gfx_func_composite_pixel_color_span_get (RGBA_Imag
 RGBA_Gfx_Func     evas_common_gfx_func_composite_mask_color_span_get  (DATA32 col, RGBA_Image *dst, int pixels, int op);
 RGBA_Gfx_Func     evas_common_gfx_func_composite_pixel_mask_span_get  (RGBA_Image *src, RGBA_Image *dst, int pixels, int op);
 
-RGBA_Gfx_Pt_Func     evas_common_gfx_func_composite_pixel_pt_get   (int src_flags, RGBA_Image *dst, int op);
+RGBA_Gfx_Pt_Func     evas_common_gfx_func_composite_pixel_pt_get   (Image_Entry_Flags src_flags, RGBA_Image *dst, int op);
 RGBA_Gfx_Pt_Func     evas_common_gfx_func_composite_color_pt_get   (DATA32 col, RGBA_Image *dst, int op);
-RGBA_Gfx_Pt_Func     evas_common_gfx_func_composite_pixel_color_pt_get (int src_flags, DATA32 col, RGBA_Image *dst, int op);
+RGBA_Gfx_Pt_Func     evas_common_gfx_func_composite_pixel_color_pt_get (Image_Entry_Flags src_flags, DATA32 col, RGBA_Image *dst, int op);
 RGBA_Gfx_Pt_Func     evas_common_gfx_func_composite_mask_color_pt_get  (DATA32 col, RGBA_Image *dst, int op);
-RGBA_Gfx_Pt_Func     evas_common_gfx_func_composite_pixel_mask_pt_get  (int src_flags, RGBA_Image *dst, int op);
+RGBA_Gfx_Pt_Func     evas_common_gfx_func_composite_pixel_mask_pt_get  (Image_Entry_Flags src_flags, RGBA_Image *dst, int op);
 
 EAPI Gfx_Func_Copy        evas_common_draw_func_copy_get        (int pixels, int reverse);
 
@@ -1088,8 +1101,8 @@ int             evas_common_rgba_image_colorspace_set    (Image_Entry* dst, int
 EAPI void          evas_common_image_colorspace_normalize   (RGBA_Image *im);
 EAPI void          evas_common_image_colorspace_dirty  (RGBA_Image *im);
 EAPI void          evas_common_image_cache_free        (void); /*2*/
-EAPI void          evas_common_image_premul            (RGBA_Image *im); /*2*/
-EAPI void          evas_common_image_set_alpha_sparse  (RGBA_Image *im); /*2*/
+EAPI void          evas_common_image_premul            (Image_Entry *ie); /*2*/
+EAPI void          evas_common_image_set_alpha_sparse  (Image_Entry *ie); /*2*/
 /* EAPI RGBA_Image   *evas_common_image_alpha_create      (int w, int h); */
 /* EAPI RGBA_Image   *evas_common_image_create            (int w, int h); */
 EAPI RGBA_Image   *evas_common_image_new               (void);
@@ -1299,6 +1312,7 @@ EAPI Image_Entry*                    evas_cache_image_alone(Image_Entry *im);
 EAPI Image_Entry*                    evas_cache_image_dirty(Image_Entry *im, int x, int y, int w, int h);
 EAPI void                            evas_cache_image_load_data(Image_Entry *im);
 EAPI void                            evas_cache_image_surface_alloc(Image_Entry *im, int w, int h);
+EAPI DATA32*                         evas_cache_image_pixels(Image_Entry *im);
 EAPI Image_Entry*                    evas_cache_image_copied_data(Evas_Cache_Image *cache, int w, int h, DATA32 *image_data, int alpha, int cspace);
 EAPI Image_Entry*                    evas_cache_image_data(Evas_Cache_Image *cache, int w, int h, DATA32 *image_data, int alpha, int cspace);
 EAPI void                            evas_cache_image_colorspace(Image_Entry *im, int cspace);
diff --git a/src/lib/include/evas_private.h b/src/lib/include/evas_private.h
index 385e71a..e446ea0 100644
--- a/src/lib/include/evas_private.h
+++ b/src/lib/include/evas_private.h
@@ -674,8 +674,8 @@ struct _Evas_Func
 
 struct _Evas_Image_Load_Func
 {
-  int (*file_head) (RGBA_Image *im, const char *file, const char *key);
-  int (*file_data) (RGBA_Image *im, const char *file, const char *key);
+  int (*file_head) (Image_Entry *ie, const char *file, const char *key);
+  int (*file_data) (Image_Entry *ie, const char *file, const char *key);
 };
 
 struct _Evas_Image_Save_Func
diff --git a/src/modules/engines/buffer/evas_outbuf.c b/src/modules/engines/buffer/evas_outbuf.c
index 17a0fbb..27c7ed7 100644
--- a/src/modules/engines/buffer/evas_outbuf.c
+++ b/src/modules/engines/buffer/evas_outbuf.c
@@ -81,7 +81,7 @@ evas_buffer_outbuf_buf_new_region_for_update(Outbuf *buf, int x, int y, int w, i
    if (buf->priv.back_buf)
      {
 	*cx = x; *cy = y; *cw = w; *ch = h;
-	if (buf->priv.back_buf->flags & RGBA_IMAGE_HAS_ALPHA)
+	if (buf->priv.back_buf->cache_entry.flags.alpha)
 	  {
 	     int  ww = w;
 	     ptr = buf->priv.back_buf->image.data + (y * buf->priv.back_buf->cache_entry.w) + x;
@@ -104,7 +104,7 @@ evas_buffer_outbuf_buf_new_region_for_update(Outbuf *buf, int x, int y, int w, i
 	     if (((buf->depth == OUTBUF_DEPTH_ARGB_32BPP_8888_8888)) ||
 		 ((buf->depth == OUTBUF_DEPTH_BGRA_32BPP_8888_8888)))
 	       {
-		  im->flags |= RGBA_IMAGE_HAS_ALPHA;
+		  im->cache_entry.flags.alpha = 1;
                   im = (RGBA_Image *) evas_cache_image_size_set(&im->cache_entry, w, h);
                   if (im)
                     {
diff --git a/src/modules/engines/cairo_x11/evas_engine.c b/src/modules/engines/cairo_x11/evas_engine.c
index 27ed986..c100d21 100644
--- a/src/modules/engines/cairo_x11/evas_engine.c
+++ b/src/modules/engines/cairo_x11/evas_engine.c
@@ -1065,7 +1065,7 @@ eng_image_alpha_get(void *data, void *image)
    if (!image) return 0;
 
    im = image;
-   if (im->im->flags & RGBA_IMAGE_HAS_ALPHA) return 1;
+   if (im->im->cache_entry.flags.alpha) return 1;
    return 0;
 }
 
diff --git a/src/modules/engines/fb/evas_outbuf.c b/src/modules/engines/fb/evas_outbuf.c
index 815616e..4a85b94 100644
--- a/src/modules/engines/fb/evas_outbuf.c
+++ b/src/modules/engines/fb/evas_outbuf.c
@@ -217,7 +217,7 @@ evas_fb_outbuf_fb_new_region_for_update(Outbuf *buf, int x, int y, int w, int h,
 
 	*cx = 0; *cy = 0; *cw = w; *ch = h;
 	im = (RGBA_Image *) evas_cache_image_empty(evas_common_image_cache_get());
-        im->flags |= RGBA_IMAGE_HAS_ALPHA;
+        im->cache_entry.flags.alpha = 1;
         im = (RGBA_Image *) evas_cache_image_size_set(&im->cache_entry, w, h);
 
         /* handle framebuffers with alpha channel */
diff --git a/src/modules/engines/gl_common/evas_gl_image.c b/src/modules/engines/gl_common/evas_gl_image.c
index f68bbc1..a5069e9 100644
--- a/src/modules/engines/gl_common/evas_gl_image.c
+++ b/src/modules/engines/gl_common/evas_gl_image.c
@@ -148,10 +148,7 @@ evas_gl_common_image_new(Evas_GL_Context *gc, int w, int h, int alpha, int cspac
      }
    im->gc = gc;
    im->cs.space = cspace;
-   if (alpha)
-     im->im->flags |= RGBA_IMAGE_HAS_ALPHA;
-   else
-     im->im->flags &= ~RGBA_IMAGE_HAS_ALPHA;
+   im->im->cache_entry.flags.alpha = alpha ? 1 : 0;
    evas_cache_image_colorspace(&im->im->cache_entry, cspace);
    im->im = (RGBA_Image *) evas_cache_image_size_set(&im->im->cache_entry, w, h);
    switch (cspace)
@@ -311,7 +308,7 @@ evas_gl_common_image_draw(Evas_GL_Context *gc, Evas_GL_Image *im, int sx, int sy
 //     evas_gl_common_texture_mipmaps_build(im->tex, im->im, smooth);
 
    evas_gl_common_context_color_set(gc, r, g, b, a);
-   if ((a < 255) || (im->im->flags & RGBA_IMAGE_HAS_ALPHA))
+   if ((a < 255) || im->im->cache_entry.flags.alpha)
      evas_gl_common_context_blend_set(gc, 1);
    else evas_gl_common_context_blend_set(gc, 0);
    if (dc->clip.use)
diff --git a/src/modules/engines/gl_common/evas_gl_texture.c b/src/modules/engines/gl_common/evas_gl_texture.c
index a4af426..0962fc3 100644
--- a/src/modules/engines/gl_common/evas_gl_texture.c
+++ b/src/modules/engines/gl_common/evas_gl_texture.c
@@ -47,7 +47,7 @@ evas_gl_common_texture_new(Evas_GL_Context *gc, RGBA_Image *im, int smooth)
 	gc->change.texture = 1;
 	tex->references++;
 
-	if (im->flags & RGBA_IMAGE_HAS_ALPHA) texfmt = GL_RGBA8;
+	if (im->cache_entry.flags.alpha) texfmt = GL_RGBA8;
 	else texfmt = GL_RGB8;
 	pixfmt = NATIVE_PIX_FORMAT;
 
@@ -94,7 +94,7 @@ evas_gl_common_texture_new(Evas_GL_Context *gc, RGBA_Image *im, int smooth)
    im_w = im->cache_entry.w;
    im_h = im->cache_entry.h;
 
-   if (im->flags & RGBA_IMAGE_HAS_ALPHA) texfmt = GL_RGBA8;
+   if (im->cache_entry.flags.alpha) texfmt = GL_RGBA8;
    else texfmt = GL_RGB8;
    pixfmt = NATIVE_PIX_FORMAT;
 
@@ -187,7 +187,7 @@ evas_gl_common_texture_update(Evas_GL_Texture *tex, RGBA_Image *im, int smooth)
 	tex->gc->change.texture = 1;
 	tex->references++;
 
-	if (im->flags & RGBA_IMAGE_HAS_ALPHA) texfmt = GL_RGBA8;
+	if (im->cache_entry.flags.alpha) texfmt = GL_RGBA8;
 	else texfmt = GL_RGB8;
 	pixfmt = NATIVE_PIX_FORMAT;
 
@@ -249,7 +249,7 @@ evas_gl_common_texture_update(Evas_GL_Texture *tex, RGBA_Image *im, int smooth)
    im_w = im->cache_entry.w;
    im_h = im->cache_entry.h;
 
-   if (im->flags & RGBA_IMAGE_HAS_ALPHA) texfmt = GL_RGBA8;
+   if (im->cache_entry.flags.alpha) texfmt = GL_RGBA8;
    else texfmt = GL_RGB8;
    pixfmt = NATIVE_PIX_FORMAT;
 
@@ -342,7 +342,7 @@ evas_gl_common_texture_mipmaps_build(Evas_GL_Texture *tex, RGBA_Image *im, int s
 	if (tex) tex->references++;
      }
 
-   if (im->flags & RGBA_IMAGE_HAS_ALPHA) texfmt = GL_RGBA8;
+   if (im->cache_entry.flags.alpha) texfmt = GL_RGBA8;
    else texfmt = GL_RGB8;
    pixfmt = NATIVE_PIX_FORMAT;
 
@@ -377,7 +377,7 @@ evas_gl_common_texture_mipmaps_build(Evas_GL_Texture *tex, RGBA_Image *im, int s
 	else
 #endif
 	  {
-	     if (im->flags & RGBA_IMAGE_HAS_ALPHA)
+	     if (im->cache_entry.flags.alpha)
 	       evas_common_scale_rgba_mipmap_down_2x2_c(im1->image.data,
 							im2->image.data,
 							pw, ph);
diff --git a/src/modules/engines/gl_glew/evas_engine.c b/src/modules/engines/gl_glew/evas_engine.c
index edc4cdb..f640cd3 100644
--- a/src/modules/engines/gl_glew/evas_engine.c
+++ b/src/modules/engines/gl_glew/evas_engine.c
@@ -468,7 +468,7 @@ eng_image_alpha_get(void *data, void *image)
    switch (im->cs.space)
      {
       case EVAS_COLORSPACE_ARGB8888:
-	if (im->im->flags & RGBA_IMAGE_HAS_ALPHA) return 1;
+	if (im->im->cache_entry.flags.alpha) return 1;
       default:
 	break;
      }
@@ -499,8 +499,8 @@ eng_image_alpha_set(void *data, void *image, int has_alpha)
    im = image;
    /* FIXME: can move to gl_common */
    if (im->cs.space != EVAS_COLORSPACE_ARGB8888) return im;
-   if ((has_alpha) && (im->im->flags & RGBA_IMAGE_HAS_ALPHA)) return image;
-   else if ((!has_alpha) && (!(im->im->flags & RGBA_IMAGE_HAS_ALPHA))) return image;
+   if ((has_alpha) && im->im->cache_entry.flags.alpha) return image;
+   else if ((!has_alpha) && (!im->im->cache_entry.flags.alpha)) return image;
    if (im->references > 1)
     {
 	Evas_GL_Image *im_new;
@@ -514,10 +514,7 @@ eng_image_alpha_set(void *data, void *image, int has_alpha)
      }
    else
      evas_gl_common_image_dirty(im);
-   if (has_alpha)
-     im->im->flags |= RGBA_IMAGE_HAS_ALPHA;
-   else
-     im->im->flags &= ~RGBA_IMAGE_HAS_ALPHA;
+   im->im->cache_entry.flags.alpha = has_alpha ? 1 : 0;
    return image;
 }
 
diff --git a/src/modules/engines/gl_x11/evas_engine.c b/src/modules/engines/gl_x11/evas_engine.c
index 1708a0a..a236a53 100644
--- a/src/modules/engines/gl_x11/evas_engine.c
+++ b/src/modules/engines/gl_x11/evas_engine.c
@@ -516,7 +516,7 @@ eng_image_alpha_get(void *data, void *image)
    switch (im->cs.space)
      {
       case EVAS_COLORSPACE_ARGB8888:
-	if (im->im->flags & RGBA_IMAGE_HAS_ALPHA) return 1;
+	if (im->im->cache_entry.flags.alpha) return 1;
       default:
 	break;
      }
@@ -547,8 +547,8 @@ eng_image_alpha_set(void *data, void *image, int has_alpha)
    im = image;
    /* FIXME: can move to gl_common */
    if (im->cs.space != EVAS_COLORSPACE_ARGB8888) return im;
-   if ((has_alpha) && (im->im->flags & RGBA_IMAGE_HAS_ALPHA)) return image;
-   else if ((!has_alpha) && (!(im->im->flags & RGBA_IMAGE_HAS_ALPHA))) return image;
+   if ((has_alpha) && (im->im->cache_entry.flags.alpha)) return image;
+   else if ((!has_alpha) && (!im->im->cache_entry.flags.alpha)) return image;
    if (im->references > 1)
     {
 	Evas_GL_Image *im_new;
@@ -562,10 +562,7 @@ eng_image_alpha_set(void *data, void *image, int has_alpha)
      }
    else
      evas_gl_common_image_dirty(im);
-   if (has_alpha)
-     im->im->flags |= RGBA_IMAGE_HAS_ALPHA;
-   else
-     im->im->flags &= ~RGBA_IMAGE_HAS_ALPHA;
+   im->im->cache_entry.flags.alpha = has_alpha ? 1 : 0;
    return image;
 }
 
diff --git a/src/modules/engines/software_generic/evas_engine.c b/src/modules/engines/software_generic/evas_engine.c
index fcc89b8..b5e9021 100644
--- a/src/modules/engines/software_generic/evas_engine.c
+++ b/src/modules/engines/software_generic/evas_engine.c
@@ -339,7 +339,7 @@ eng_image_alpha_get(void *data, void *image)
    switch (im->cache_entry.space)
      {
       case EVAS_COLORSPACE_ARGB8888:
-	if (im->flags & RGBA_IMAGE_HAS_ALPHA) return 1;
+	if (im->cache_entry.flags.alpha) return 1;
       default:
 	break;
      }
@@ -365,16 +365,13 @@ eng_image_alpha_set(void *data, void *image, int has_alpha)
    im = image;
    if (im->cache_entry.space != EVAS_COLORSPACE_ARGB8888)
      {
-	im->flags &= ~RGBA_IMAGE_HAS_ALPHA;
+	im->cache_entry.flags.alpha = 0;
 	return im;
      }
    im = (RGBA_Image *) evas_cache_image_alone(&im->cache_entry);
    evas_common_image_colorspace_dirty(im);
 
-   if (has_alpha)
-     im->flags |= RGBA_IMAGE_HAS_ALPHA;
-   else
-     im->flags &= ~RGBA_IMAGE_HAS_ALPHA;
+   im->cache_entry.flags.alpha = has_alpha ? 1 : 0;
    return im;
 }
 
diff --git a/src/modules/engines/software_sdl/evas_engine.c b/src/modules/engines/software_sdl/evas_engine.c
index 4dd8c02..69d47ad 100644
--- a/src/modules/engines/software_sdl/evas_engine.c
+++ b/src/modules/engines/software_sdl/evas_engine.c
@@ -336,7 +336,7 @@ evas_engine_sdl_image_alpha_get(void *data, void *image)
    switch (eim->cache_entry.src->space)
      {
      case EVAS_COLORSPACE_ARGB8888:
-        if (im->flags & RGBA_IMAGE_HAS_ALPHA) return 1;
+        if (im->cache_entry.flags.alpha) return 1;
      default:
         break;
      }
@@ -516,17 +516,14 @@ evas_engine_sdl_image_alpha_set(void *data, void *image, int has_alpha)
 
    if (eim->cache_entry.src->space != EVAS_COLORSPACE_ARGB8888)
      {
-        im->flags &= ~RGBA_IMAGE_HAS_ALPHA;
+        im->cache_entry.flags.alpha = 0;
         return eim;
      }
 
    eim = (SDL_Engine_Image_Entry *) evas_cache_engine_image_dirty(&eim->cache_entry, 0, 0, eim->cache_entry.w, eim->cache_entry.h);
 
    /* FIXME: update SDL_Surface flags */
-   if (has_alpha)
-     im->flags |= RGBA_IMAGE_HAS_ALPHA;
-   else
-     im->flags &= ~RGBA_IMAGE_HAS_ALPHA;
+   im->cache_entry.flags.alpha = has_alpha ? 1 : 0;
    return eim;
 }
 
@@ -1007,7 +1004,7 @@ _sdl_image_update_data(Engine_Image_Entry *dst, void* engine_data)
           {
              im->image.data = sdl->pixels;
              im->image.no_free = 1;
-             im->flags |= RGBA_IMAGE_HAS_ALPHA;
+             im->cache_entry.flags.alpha = 0;
              dst->src->w = sdl->w;
              dst->src->h = sdl->h;
           }
diff --git a/src/modules/engines/software_x11/evas_outbuf.c b/src/modules/engines/software_x11/evas_outbuf.c
index 4a682e4..1a3dc2e 100644
--- a/src/modules/engines/software_x11/evas_outbuf.c
+++ b/src/modules/engines/software_x11/evas_outbuf.c
@@ -125,7 +125,7 @@ evas_software_x11_outbuf_free(Outbuf *buf)
 	im = buf->priv.pending_writes->data;
 	buf->priv.pending_writes = evas_list_remove_list(buf->priv.pending_writes, buf->priv.pending_writes);
 	obr = im->extended_info;
-	evas_cache_image_drop(im);
+	evas_cache_image_drop(&im->cache_entry);
 	if (obr->xob) _unfind_xob(obr->xob, 0);
 	if (obr->mxob) _unfind_xob(obr->mxob, 0);
 	free(obr);
@@ -407,7 +407,7 @@ evas_software_x11_outbuf_new_region_for_update(Outbuf *buf, int x, int y, int w,
 	else
 	  {
 	     im = (RGBA_Image *) evas_cache_image_empty(evas_common_image_cache_get());
-             im->flags |= alpha ? RGBA_IMAGE_HAS_ALPHA : 0;
+             im->cache_entry.flags.alpha |= alpha ? 1 : 0;
              evas_cache_image_surface_alloc(&im->cache_entry, buf->w, buf->h);
 	     im->extended_info = obr;
 	     if ((buf->rot == 0) || (buf->rot == 180))
@@ -497,7 +497,7 @@ evas_software_x11_outbuf_new_region_for_update(Outbuf *buf, int x, int y, int w,
    else
      {
         im = (RGBA_Image *) evas_cache_image_empty(evas_common_image_cache_get());
-        im->flags |= alpha ? RGBA_IMAGE_HAS_ALPHA : 0;
+        im->cache_entry.flags.alpha |= alpha ? 1 : 0;
         evas_cache_image_surface_alloc(&im->cache_entry, w, h);
 	im->extended_info = obr;
 	if ((buf->rot == 0) || (buf->rot == 180))
@@ -637,7 +637,7 @@ evas_software_x11_outbuf_flush(Outbuf *buf)
 	       evas_list_remove_list(buf->priv.prev_pending_writes, 
 				     buf->priv.prev_pending_writes);
 	     obr = im->extended_info;
-	     evas_cache_image_drop(im);
+	     evas_cache_image_drop(&im->cache_entry);
 	     if (obr->xob) _unfind_xob(obr->xob, 0);
 	     if (obr->mxob) _unfind_xob(obr->mxob, 0);
 /*	     
@@ -682,7 +682,7 @@ evas_software_x11_outbuf_flush(Outbuf *buf)
 	     im = evas_list_data(buf->priv.pending_writes);
 	     buf->priv.pending_writes = evas_list_remove_list(buf->priv.pending_writes, buf->priv.pending_writes);
 	     obr = im->extended_info;
-	     evas_cache_image_drop(im);
+	     evas_cache_image_drop(&im->cache_entry);
 	     if (obr->xob) _unfind_xob(obr->xob, 0);
 	     if (obr->mxob) _unfind_xob(obr->mxob, 0);
 /*	     
@@ -726,7 +726,7 @@ evas_software_x11_outbuf_idle_flush(Outbuf *buf)
 	       evas_list_remove_list(buf->priv.prev_pending_writes, 
 				     buf->priv.prev_pending_writes);
 	     obr = im->extended_info;
-	     evas_cache_image_drop(im);
+	     evas_cache_image_drop(&im->cache_entry);
 	     if (obr->xob) _unfind_xob(obr->xob, 0);
 	     if (obr->mxob) _unfind_xob(obr->mxob, 0);
 	     free(obr);
diff --git a/src/modules/engines/software_xcb/evas_outbuf.c b/src/modules/engines/software_xcb/evas_outbuf.c
index 448dcb6..8870ca8 100644
--- a/src/modules/engines/software_xcb/evas_outbuf.c
+++ b/src/modules/engines/software_xcb/evas_outbuf.c
@@ -477,7 +477,7 @@ evas_software_xcb_outbuf_new_region_for_update(Outbuf *buf,
 	  }
 	if ((buf->priv.x.mask) || (buf->priv.destination_alpha))
 	  {
-	     im->flags |= RGBA_IMAGE_HAS_ALPHA;
+	     im->cache_entry.flags.alpha = 1;
 	     /* FIXME: faster memset! */
 	     memset(im->image->data, 0, w * h * sizeof(DATA32));
 	  }
@@ -577,7 +577,7 @@ evas_software_xcb_outbuf_new_region_for_update(Outbuf *buf,
      }
    if ((buf->priv.x.mask) || (buf->priv.destination_alpha))
      {
-	im->flags |= RGBA_IMAGE_HAS_ALPHA;
+	im->cache_entry.flags.alpha = 1;
 	/* FIXME: faster memset! */
 	memset(im->image.data, 0, w * h * sizeof(DATA32));
      }
diff --git a/src/modules/engines/xrender_x11/evas_engine_image.c b/src/modules/engines/xrender_x11/evas_engine_image.c
index e382975..1fa20c5 100644
--- a/src/modules/engines/xrender_x11/evas_engine_image.c
+++ b/src/modules/engines/xrender_x11/evas_engine_image.c
@@ -112,7 +112,7 @@ _xre_image_load(Ximage_Info *xinf, const char *file, const char *key, Evas_Image
    if (lo) im->load_opts = *lo;
    if (im->im->info.comment) im->comment = evas_stringshare_add(im->im->info.comment);
 //   if (im->im->info.format == 1) im->format = evas_stringshare_add("png");
-   if (im->im->flags & RGBA_IMAGE_HAS_ALPHA) im->alpha = 1;
+   if (im->im->cache_entry.flags.alpha) im->alpha = 1;
    _xr_image_hash = evas_hash_direct_add(_xr_image_hash, im->fkey, im);
    return im;
 }
diff --git a/src/modules/engines/xrender_xcb/evas_engine_image.c b/src/modules/engines/xrender_xcb/evas_engine_image.c
index 240aad0..f7b37b1 100644
--- a/src/modules/engines/xrender_xcb/evas_engine_image.c
+++ b/src/modules/engines/xrender_xcb/evas_engine_image.c
@@ -111,7 +111,7 @@ _xre_image_load(Xcb_Image_Info *xcbinf, const char *file, const char *key, Evas_
    if (lo) im->load_opts = *lo;
    if (im->im->info.comment) im->comment = (char *)evas_stringshare_add(im->im->info.comment);
 /*    if (im->im->info.format == 1) im->format = evas_stringshare_add("png"); */
-   if (im->im->flags & RGBA_IMAGE_HAS_ALPHA) im->alpha = 1;
+   if (im->im->cache_entry.flags.alpha) im->alpha = 1;
    _xr_image_hash = evas_hash_direct_add(_xr_image_hash, im->fkey, im);
    return im;
 }
diff --git a/src/modules/loaders/edb/evas_image_load_edb.c b/src/modules/loaders/edb/evas_image_load_edb.c
index 911357d..2b3ba05 100644
--- a/src/modules/loaders/edb/evas_image_load_edb.c
+++ b/src/modules/loaders/edb/evas_image_load_edb.c
@@ -8,8 +8,8 @@
 #define SWAP32(x) (x) = ((((x) & 0x000000ff ) << 24) | (((x) & 0x0000ff00 ) << 8) | (((x) & 0x00ff0000 ) >> 8) | (((x) & 0xff000000 ) >> 24))
 
 
-int evas_image_load_file_head_edb(RGBA_Image *im, const char *file, const char *key);
-int evas_image_load_file_data_edb(RGBA_Image *im, const char *file, const char *key);
+int evas_image_load_file_head_edb(Image_Entry *ie, const char *file, const char *key);
+int evas_image_load_file_data_edb(Image_Entry *ie, const char *file, const char *key);
 
 Evas_Image_Load_Func evas_image_load_edb_func =
 {
@@ -19,7 +19,7 @@ Evas_Image_Load_Func evas_image_load_edb_func =
 
 
 int
-evas_image_load_file_head_edb(RGBA_Image *im, const char *file, const char *key)
+evas_image_load_file_head_edb(Image_Entry *ie, const char *file, const char *key)
 {
    int                  w, h, alpha, compression, size;
    E_DB_File           *db;
@@ -72,21 +72,22 @@ evas_image_load_file_head_edb(RGBA_Image *im, const char *file, const char *key)
 	e_db_close(db);
 	return 0;
      }
-   if (alpha) im->flags |= RGBA_IMAGE_HAS_ALPHA;
-   im->cache_entry.w = w;
-   im->cache_entry.h = h;
+   if (alpha) ie->flags.alpha = 1;
+   ie->w = w;
+   ie->h = h;
    free(ret);
    e_db_close(db);
    return 1;
 }
 
 int
-evas_image_load_file_data_edb(RGBA_Image *im, const char *file, const char *key)
+evas_image_load_file_data_edb(Image_Entry *ie, const char *file, const char *key)
 {
    int                  w, h, alpha, compression, size;
    E_DB_File           *db;
    DATA32              *ret;
    DATA32              *body;
+   DATA32              *surface;
    DATA32               header[8];
 
    if ((!file) || (!key)) return 0;
@@ -136,10 +137,11 @@ evas_image_load_file_data_edb(RGBA_Image *im, const char *file, const char *key)
 	e_db_close(db);
 	return 0;
      }
-   if (alpha) im->flags |= RGBA_IMAGE_HAS_ALPHA;
+   if (alpha) ie->flags.alpha = 1;
    body = &(ret[8]);
-   evas_cache_image_surface_alloc(&im->cache_entry, w, h);
-   if (!im->image.data)
+   evas_cache_image_surface_alloc(ie, w, h);
+   surface = evas_cache_image_pixels(ie);
+   if (!surface)
      {
 	free(ret);
 	e_db_close(db);
@@ -151,11 +153,11 @@ evas_image_load_file_data_edb(RGBA_Image *im, const char *file, const char *key)
 	  {
 	     int x;
 
-	     memcpy(im->image.data, body, w * h * sizeof(DATA32));
-	     for (x = 0; x < (w * h); x++) SWAP32(im->image.data[x]);
+	     memcpy(surface, body, w * h * sizeof(DATA32));
+	     for (x = 0; x < (w * h); x++) SWAP32(surface[x]);
 	  }
 #else
-	memcpy(im->image.data, body, w * h * sizeof(DATA32));
+	memcpy(surface, body, w * h * sizeof(DATA32));
 #endif
      }
    else
@@ -163,17 +165,17 @@ evas_image_load_file_data_edb(RGBA_Image *im, const char *file, const char *key)
 	uLongf dlen;
 
 	dlen = w * h * sizeof(DATA32);
-	uncompress((Bytef *)im->image.data, &dlen, (Bytef *)body,
+	uncompress((Bytef *)surface, &dlen, (Bytef *)body,
 		   (uLongf)(size - 32));
 #ifdef WORDS_BIGENDIAN
 	  {
 	     int x;
 
-	     for (x = 0; x < (w * h); x++) SWAP32(im->image.data[x]);
+	     for (x = 0; x < (w * h); x++) SWAP32(surface[x]);
 	  }
 #endif
      }
-   evas_common_image_premul(im);
+   evas_common_image_premul(ie);
    free(ret);
    e_db_close(db);
    return 1;
diff --git a/src/modules/loaders/eet/evas_image_load_eet.c b/src/modules/loaders/eet/evas_image_load_eet.c
index 4ea0952..0247bf7 100644
--- a/src/modules/loaders/eet/evas_image_load_eet.c
+++ b/src/modules/loaders/eet/evas_image_load_eet.c
@@ -8,8 +8,8 @@
 #include "evas_private.h"
 
 
-int evas_image_load_file_head_eet(RGBA_Image *im, const char *file, const char *key);
-int evas_image_load_file_data_eet(RGBA_Image *im, const char *file, const char *key);
+int evas_image_load_file_head_eet(Image_Entry *ie, const char *file, const char *key);
+int evas_image_load_file_data_eet(Image_Entry *ie, const char *file, const char *key);
 
 Evas_Image_Load_Func evas_image_load_eet_func =
 {
@@ -19,73 +19,63 @@ Evas_Image_Load_Func evas_image_load_eet_func =
 
 
 int
-evas_image_load_file_head_eet(RGBA_Image *im, const char *file, const char *key)
+evas_image_load_file_head_eet(Image_Entry *ie, const char *file, const char *key)
 {
    int                  alpha, compression, quality, lossy;
    unsigned int         w, h;
    Eet_File            *ef;
    int                  ok;
+   int			res = 0;
 
    if ((!file) || (!key)) return 0;
    ef = eet_open((char *)file, EET_FILE_MODE_READ);
    if (!ef) return 0;
-   ok = eet_data_image_header_read(ef, (char *)key,
+   ok = eet_data_image_header_read(ef, key,
 				   &w, &h, &alpha, &compression, &quality, &lossy);
-   if (!ok)
-     {
-	eet_close(ef);
-	return 0;
-     }
-   if ((w < 1) || (h < 1) || (w > 8192) || (h > 8192))
-     {
-	eet_close(ef);
-	return 0;
-     }
-   if (alpha) im->flags |= RGBA_IMAGE_HAS_ALPHA;
-   im->cache_entry.w = w;
-   im->cache_entry.h = h;
+   if (!ok) goto on_error;
+   if (alpha) ie->flags.alpha = 1;
+   ie->w = w;
+   ie->h = h;
+   res = 1;
+
+ on_error:
    eet_close(ef);
-   return 1;
+   return res;
 }
 
 int
-evas_image_load_file_data_eet(RGBA_Image *im, const char *file, const char *key)
+evas_image_load_file_data_eet(Image_Entry *ie, const char *file, const char *key)
 {
    unsigned int         w, h;
-   int                  alpha, compression, quality, lossy;
+   int                  alpha, compression, quality, lossy, ok;
    Eet_File            *ef;
    DATA32              *body, *p, *end;
    DATA32               nas = 0;
+   int			res = 0;
 
    if ((!file) || (!key)) return 0;
-   if (im->image.data) return 1;
-   ef = eet_open((char *)file, EET_FILE_MODE_READ);
+   if (ie->flags.loaded) return 1;
+   ef = eet_open(file, EET_FILE_MODE_READ);
    if (!ef) return 0;
-   body = eet_data_image_read(ef, (char *)key,
-			      &w, &h, &alpha, &compression, &quality, &lossy);
-   if (!body)
-     {
-	eet_close(ef);
-	return 0;
-     }
-   if ((w < 1) || (h < 1) || (w > 8192) || (h > 8192))
-     {
-	free(body);
-	eet_close(ef);
-	return 0;
-     }
-   if (alpha) im->flags |= RGBA_IMAGE_HAS_ALPHA;
-   im->cache_entry.w = w;
-   im->cache_entry.h = h;
-   im->image.data = body;
-   im->image.no_free = 0;
+   ok = eet_data_image_header_read(ef, key,
+				   &w, &h, &alpha, &compression, &quality, &lossy);
+   if (!ok) goto on_error;
+   evas_cache_image_surface_alloc(ie, w, h);
+   ok = eet_data_image_read_to_surface(ef, key, 0, 0,
+				       evas_cache_image_pixels(ie), w, h, w * 4,
+				       &alpha, &compression, &quality, &lossy);
+   if (!ok) goto on_error;
    if (alpha)
      {
+	ie->flags.alpha = 1;
+
+	body = evas_cache_image_pixels(ie);
+
 	end = body +(w * h);
 	for (p = body; p < end; p++)
 	  {
 	     DATA32 r, g, b, a;
-	     
+
 	     a = A_VAL(p);
 	     r = R_VAL(p);
 	     g = G_VAL(p);
@@ -96,13 +86,16 @@ evas_image_load_file_data_eet(RGBA_Image *im, const char *file, const char *key)
 	     if (b > a) b = a;
 	     *p = ARGB_JOIN(a, r, g, b);
 	  }
-	if ((ALPHA_SPARSE_INV_FRACTION * nas) >= (im->cache_entry.w * im->cache_entry.h))
-	  im->flags |= RGBA_IMAGE_ALPHA_SPARSE;
+	if ((ALPHA_SPARSE_INV_FRACTION * nas) >= (ie->w * ie->h))
+	  ie->flags.alpha_sparse = 1;
      }
-// result is already premultiplied now if u compile with edje   
+// result is already premultiplied now if u compile with edje
 //   evas_common_image_premul(im);
+   res = 1;
+
+ on_error:
    eet_close(ef);
-   return 1;
+   return res;
 }
 
 EAPI int
diff --git a/src/modules/loaders/gif/evas_image_load_gif.c b/src/modules/loaders/gif/evas_image_load_gif.c
index 324ac24..65ca74b 100644
--- a/src/modules/loaders/gif/evas_image_load_gif.c
+++ b/src/modules/loaders/gif/evas_image_load_gif.c
@@ -8,8 +8,8 @@
 #include <gif_lib.h>
 
 
-int evas_image_load_file_head_gif(RGBA_Image *im, const char *file, const char *key);
-int evas_image_load_file_data_gif(RGBA_Image *im, const char *file, const char *key);
+int evas_image_load_file_head_gif(Image_Entry *ie, const char *file, const char *key);
+int evas_image_load_file_data_gif(Image_Entry *ie, const char *file, const char *key);
 
 Evas_Image_Load_Func evas_image_load_gif_func =
 {
@@ -19,7 +19,7 @@ Evas_Image_Load_Func evas_image_load_gif_func =
 
 
 int
-evas_image_load_file_head_gif(RGBA_Image *im, const char *file, const char *key)
+evas_image_load_file_head_gif(Image_Entry *ie, const char *file, const char *key)
 {
    int                 fd;
    GifFileType        *gif;
@@ -93,16 +93,16 @@ evas_image_load_file_head_gif(RGBA_Image *im, const char *file, const char *key)
           }
    } while (rec != TERMINATE_RECORD_TYPE);
 
-   if (alpha >= 0) im->flags |= RGBA_IMAGE_HAS_ALPHA;
-   im->cache_entry.w = w;
-   im->cache_entry.h = h;
+   if (alpha >= 0) ie->flags.alpha = 1;
+   ie->w = w;
+   ie->h = h;
 
    DGifCloseFile(gif);
    return 1;
 }
 
 int
-evas_image_load_file_data_gif(RGBA_Image *im, const char *file, const char *key)
+evas_image_load_file_data_gif(Image_Entry *ie, const char *file, const char *key)
 {
    int                 intoffset[] = { 0, 4, 2, 1 };
    int                 intjump[] = { 8, 8, 4, 2 };
@@ -233,9 +233,9 @@ evas_image_load_file_data_gif(RGBA_Image *im, const char *file, const char *key)
           }
    } while (rec != TERMINATE_RECORD_TYPE);
 
-   if (alpha >= 0) im->flags |= RGBA_IMAGE_HAS_ALPHA;
-   evas_cache_image_surface_alloc(&im->cache_entry, w, h);
-   if (!im->image.data)
+   if (alpha >= 0) ie->flags.alpha = 1;
+   evas_cache_image_surface_alloc(ie, w, h);
+   if (!evas_cache_image_pixels(ie))
      {
         DGifCloseFile(gif);
         for (i = 0; i < h; i++)
@@ -249,7 +249,7 @@ evas_image_load_file_data_gif(RGBA_Image *im, const char *file, const char *key)
    bg = gif->SBackGroundColor;
    cmap = (gif->Image.ColorMap ? gif->Image.ColorMap : gif->SColorMap);
 
-   ptr = im->image.data;
+   ptr = evas_cache_image_pixels(ie);
    per_inc = 100.0 / (((double)w) * h);
 
    for (i = 0; i < h; i++)
@@ -273,7 +273,7 @@ evas_image_load_file_data_gif(RGBA_Image *im, const char *file, const char *key)
            per += per_inc;
          }
      }
-   evas_common_image_premul(im);
+   evas_common_image_premul(ie);
    DGifCloseFile(gif);
    for (i = 0; i < h; i++)
      {
diff --git a/src/modules/loaders/jpeg/evas_image_load_jpeg.c b/src/modules/loaders/jpeg/evas_image_load_jpeg.c
index 5ef1bb8..46ea4c5 100644
--- a/src/modules/loaders/jpeg/evas_image_load_jpeg.c
+++ b/src/modules/loaders/jpeg/evas_image_load_jpeg.c
@@ -17,14 +17,14 @@ static void _JPEGFatalErrorHandler(j_common_ptr cinfo);
 static void _JPEGErrorHandler(j_common_ptr cinfo);
 static void _JPEGErrorHandler2(j_common_ptr cinfo, int msg_level);
 
-static int evas_image_load_file_head_jpeg_internal(RGBA_Image *im, FILE *f);
-static int evas_image_load_file_data_jpeg_internal(RGBA_Image *im, FILE *f);
+static int evas_image_load_file_head_jpeg_internal(Image_Entry *ie, FILE *f);
+static int evas_image_load_file_data_jpeg_internal(Image_Entry *ie, FILE *f);
 #if 0 /* not used at the moment */
-static int evas_image_load_file_data_jpeg_alpha_internal(RGBA_Image *im, FILE *f);
+static int evas_image_load_file_data_jpeg_alpha_internal(Image_Entry *ie, FILE *f);
 #endif
 
-int evas_image_load_file_head_jpeg(RGBA_Image *im, const char *file, const char *key);
-int evas_image_load_file_data_jpeg(RGBA_Image *im, const char *file, const char *key);
+int evas_image_load_file_head_jpeg(Image_Entry *ie, const char *file, const char *key);
+int evas_image_load_file_data_jpeg(Image_Entry *ie, const char *file, const char *key);
 
 Evas_Image_Load_Func evas_image_load_jpeg_func =
 {
@@ -68,7 +68,7 @@ _JPEGErrorHandler2(j_common_ptr cinfo, int msg_level)
 }
 
 static int
-evas_image_load_file_head_jpeg_internal(RGBA_Image *im, FILE *f)
+evas_image_load_file_head_jpeg_internal(Image_Entry *ie, FILE *f)
 {
    int w, h, scalew, scaleh;
    struct jpeg_decompress_struct cinfo;
@@ -101,27 +101,27 @@ evas_image_load_file_head_jpeg_internal(RGBA_Image *im, FILE *f)
         jpeg_destroy_decompress(&cinfo);
 	return 0;
      }
-   if (im->cache_entry.load_opts.scale_down_by > 1)
+   if (ie->load_opts.scale_down_by > 1)
      {
-	w /= im->cache_entry.load_opts.scale_down_by;
-	h /= im->cache_entry.load_opts.scale_down_by;
+	w /= ie->load_opts.scale_down_by;
+	h /= ie->load_opts.scale_down_by;
      }
-   else if (im->cache_entry.load_opts.dpi > 0.0)
+   else if (ie->load_opts.dpi > 0.0)
      {
-	w = (w * im->cache_entry.load_opts.dpi) / 90.0;
-	h = (h * im->cache_entry.load_opts.dpi) / 90.0;
+	w = (w * ie->load_opts.dpi) / 90.0;
+	h = (h * ie->load_opts.dpi) / 90.0;
      }
-   else if ((im->cache_entry.load_opts.w > 0) &&
-	    (im->cache_entry.load_opts.h > 0))
+   else if ((ie->load_opts.w > 0) &&
+	    (ie->load_opts.h > 0))
      {
 	int w2, h2;
 	
-	w2 = im->cache_entry.load_opts.w;
-	h2 = (im->cache_entry.load_opts.w * h) / w;
-	if (h2 > im->cache_entry.load_opts.h)
+	w2 = ie->load_opts.w;
+	h2 = (ie->load_opts.w * h) / w;
+	if (h2 > ie->load_opts.h)
 	  {
-	     h2 = im->cache_entry.load_opts.h;
-	     w2 = (im->cache_entry.load_opts.h * w) / h;
+	     h2 = ie->load_opts.h;
+	     w2 = (ie->load_opts.h * w) / h;
 	  }
 	w = w2;
 	h = h2;
@@ -134,19 +134,19 @@ evas_image_load_file_head_jpeg_internal(RGBA_Image *im, FILE *f)
 	scalew = cinfo.output_width / w;
 	scaleh = cinfo.output_height / h;
 	
-	im->cache_entry.scale = scalew;
-	if (scaleh < scalew) im->cache_entry.scale = scaleh;
+	ie->scale = scalew;
+	if (scaleh < scalew) ie->scale = scaleh;
 	
-	if      (im->cache_entry.scale > 8) im->cache_entry.scale = 8;
-	else if (im->cache_entry.scale < 1) im->cache_entry.scale = 1;
+	if      (ie->scale > 8) ie->scale = 8;
+	else if (ie->scale < 1) ie->scale = 1;
 	
-	if      (im->cache_entry.scale == 3) im->cache_entry.scale = 2;
-	else if (im->cache_entry.scale == 5) im->cache_entry.scale = 4;
-	else if (im->cache_entry.scale == 6) im->cache_entry.scale = 4;
-	else if (im->cache_entry.scale == 7) im->cache_entry.scale = 4;
+	if      (ie->scale == 3) ie->scale = 2;
+	else if (ie->scale == 5) ie->scale = 4;
+	else if (ie->scale == 6) ie->scale = 4;
+	else if (ie->scale == 7) ie->scale = 4;
      }
 
-   if (im->cache_entry.scale > 1)
+   if (ie->scale > 1)
      {
 	jpeg_destroy_decompress(&cinfo);
    
@@ -157,13 +157,13 @@ evas_image_load_file_head_jpeg_internal(RGBA_Image *im, FILE *f)
 	cinfo.do_fancy_upsampling = FALSE;
 	cinfo.do_block_smoothing = FALSE;
 	cinfo.scale_num = 1;
-	cinfo.scale_denom = im->cache_entry.scale;
+	cinfo.scale_denom = ie->scale;
 	jpeg_calc_output_dimensions(&(cinfo));
 	jpeg_start_decompress(&cinfo);
      }
    
-   im->cache_entry.w = cinfo.output_width;
-   im->cache_entry.h = cinfo.output_height;
+   ie->w = cinfo.output_width;
+   ie->h = cinfo.output_height;
 /* end head decoding */
 
    jpeg_destroy_decompress(&cinfo);
@@ -171,7 +171,7 @@ evas_image_load_file_head_jpeg_internal(RGBA_Image *im, FILE *f)
 }
 
 static int
-evas_image_load_file_data_jpeg_internal(RGBA_Image *im, FILE *f)
+evas_image_load_file_data_jpeg_internal(Image_Entry *ie, FILE *f)
 {
    int w, h;
    struct jpeg_decompress_struct cinfo;
@@ -198,10 +198,10 @@ evas_image_load_file_data_jpeg_internal(RGBA_Image *im, FILE *f)
    cinfo.dct_method = JDCT_IFAST;
    cinfo.dither_mode = JDITHER_ORDERED;
 
-   if (im->cache_entry.scale > 1)
+   if (ie->scale > 1)
      {
 	cinfo.scale_num = 1;
-	cinfo.scale_denom = im->cache_entry.scale;
+	cinfo.scale_denom = ie->scale;
      }
    
 /* head decoding */
@@ -211,7 +211,7 @@ evas_image_load_file_data_jpeg_internal(RGBA_Image *im, FILE *f)
    w = cinfo.output_width;
    h = cinfo.output_height;
    
-   if ((w != im->cache_entry.w) || (h != im->cache_entry.h))
+   if ((w != ie->w) || (h != ie->h))
      {
 	jpeg_destroy_decompress(&cinfo);
 	return 0;
@@ -225,13 +225,13 @@ evas_image_load_file_data_jpeg_internal(RGBA_Image *im, FILE *f)
 	return 0;
      }
    data = alloca(w * 16 * 3);
-   evas_cache_image_surface_alloc(&im->cache_entry, w, h);
-   if (!im->image.data)
+   evas_cache_image_surface_alloc(ie, w, h);
+   if (ie->flags.loaded)
      {
 	jpeg_destroy_decompress(&cinfo);
 	return 0;
      }
-   ptr2 = im->image.data;
+   ptr2 = evas_cache_image_pixels(ie);
    count = 0;
    prevy = 0;
    if (cinfo.output_components == 3)
@@ -286,7 +286,7 @@ evas_image_load_file_data_jpeg_internal(RGBA_Image *im, FILE *f)
 
 #if 0 /* not used at the moment */
 static int
-evas_image_load_file_data_jpeg_alpha_internal(RGBA_Image *im, FILE *f)
+evas_image_load_file_data_jpeg_alpha_internal(Image_Entry *ie, FILE *f)
 {
    int w, h;
    struct jpeg_decompress_struct cinfo;
@@ -313,8 +313,8 @@ evas_image_load_file_data_jpeg_alpha_internal(RGBA_Image *im, FILE *f)
    jpeg_start_decompress(&cinfo);
 
 /* head decoding */
-   im->image->w = w = cinfo.output_width;
-   im->image->h = h = cinfo.output_height;
+   ie->w = w = cinfo.output_width;
+   ie->h = h = cinfo.output_height;
 /* end head decoding */
 /* data decoding */
    if (cinfo.rec_outbuf_height > 16)
@@ -323,12 +323,12 @@ evas_image_load_file_data_jpeg_alpha_internal(RGBA_Image *im, FILE *f)
 	return 0;
      }
    data = alloca(w * 16 * 3);
-   if (!im->image->data)
+   if (!ie->flags.loaded)
      {
 	jpeg_destroy_decompress(&cinfo);
 	return 0;
      }
-   ptr2 = im->image->data;
+   ptr2 = evas_cache_image_pixels(ie);
    count = 0;
    prevy = 0;
    if (cinfo.output_components == 3)
@@ -385,7 +385,7 @@ evas_image_load_file_data_jpeg_alpha_internal(RGBA_Image *im, FILE *f)
 #endif
 
 int
-evas_image_load_file_head_jpeg(RGBA_Image *im, const char *file, const char *key)
+evas_image_load_file_head_jpeg(Image_Entry *ie, const char *file, const char *key)
 {
    int val;
    FILE *f;
@@ -393,14 +393,14 @@ evas_image_load_file_head_jpeg(RGBA_Image *im, const char *file, const char *key
    if ((!file)) return 0;
    f = fopen(file, "rb");
    if (!f) return 0;
-   val = evas_image_load_file_head_jpeg_internal(im, f);
+   val = evas_image_load_file_head_jpeg_internal(ie, f);
    fclose(f);
    return val;
    key = 0;
 }
 
 int
-evas_image_load_file_data_jpeg(RGBA_Image *im, const char *file, const char *key)
+evas_image_load_file_data_jpeg(Image_Entry *ie, const char *file, const char *key)
 {
    int val;
    FILE *f;
@@ -408,7 +408,7 @@ evas_image_load_file_data_jpeg(RGBA_Image *im, const char *file, const char *key
    if ((!file)) return 0;
    f = fopen(file, "rb");
    if (!f) return 0;
-   val = evas_image_load_file_data_jpeg_internal(im, f);
+   val = evas_image_load_file_data_jpeg_internal(ie, f);
    fclose(f);
    return val;
    key = 0;
diff --git a/src/modules/loaders/pmaps/evas_image_load_pmaps.c b/src/modules/loaders/pmaps/evas_image_load_pmaps.c
index b175e25..35b0a59 100644
--- a/src/modules/loaders/pmaps/evas_image_load_pmaps.c
+++ b/src/modules/loaders/pmaps/evas_image_load_pmaps.c
@@ -8,9 +8,9 @@
 #define FILE_BUFFER_SIZE 1024
 #define FILE_BUFFER_UNREAD_SIZE 16
 
-static int evas_image_load_file_head_pmaps(RGBA_Image *im,
+static int evas_image_load_file_head_pmaps(Image_Entry *ie,
 				    const char *file, const char *key);
-static int evas_image_load_file_data_pmaps(RGBA_Image *im,
+static int evas_image_load_file_data_pmaps(Image_Entry *ie,
 				    const char *file, const char *key);
 
 Evas_Image_Load_Func evas_image_load_pmaps_func = {
@@ -60,7 +60,7 @@ static size_t pmaps_buffer_raw_update(Pmaps_Buffer *b);
 static int pmaps_buffer_comment_skip(Pmaps_Buffer *b);
 
 static int
-evas_image_load_file_head_pmaps(RGBA_Image *im, const char *file,
+evas_image_load_file_head_pmaps(Image_Entry *ie, const char *file,
 				const char *key)
 {
    Pmaps_Buffer b;
@@ -80,8 +80,8 @@ evas_image_load_file_head_pmaps(RGBA_Image *im, const char *file,
 	return 0;
      }
 
-   im->cache_entry.w = b.w;
-   im->cache_entry.h = b.h;
+   ie->w = b.w;
+   ie->h = b.h;
 
    pmaps_buffer_close(&b);
    return 1;
@@ -90,7 +90,7 @@ evas_image_load_file_head_pmaps(RGBA_Image *im, const char *file,
 }
 
 static int
-evas_image_load_file_data_pmaps(RGBA_Image *im, const char *file,
+evas_image_load_file_data_pmaps(Image_Entry *ie, const char *file,
 				const char *key)
 {
    Pmaps_Buffer b;
@@ -114,14 +114,14 @@ evas_image_load_file_data_pmaps(RGBA_Image *im, const char *file,
 
    pixels = b.w * b.h;
 
-   evas_cache_image_surface_alloc(&im->cache_entry, b.w, b.h);
-   if (!im->image.data)
+   evas_cache_image_surface_alloc(ie, b.w, b.h);
+   if (!evas_cache_image_pixels(ie))
      {
 	pmaps_buffer_close(&b);
 	return 0;
      }
 
-   ptr = im->image.data;
+   ptr = evas_cache_image_pixels(ie);
 
    if (b.type[1] != '4')
      {
diff --git a/src/modules/loaders/png/evas_image_load_png.c b/src/modules/loaders/png/evas_image_load_png.c
index 9f2a5cf..57a5525 100644
--- a/src/modules/loaders/png/evas_image_load_png.c
+++ b/src/modules/loaders/png/evas_image_load_png.c
@@ -12,8 +12,8 @@
 #define PNG_BYTES_TO_CHECK 4
 
 
-int evas_image_load_file_head_png(RGBA_Image *im, const char *file, const char *key);
-int evas_image_load_file_data_png(RGBA_Image *im, const char *file, const char *key);
+int evas_image_load_file_head_png(Image_Entry *ie, const char *file, const char *key);
+int evas_image_load_file_data_png(Image_Entry *ie, const char *file, const char *key);
 
 Evas_Image_Load_Func evas_image_load_png_func =
 {
@@ -23,7 +23,7 @@ Evas_Image_Load_Func evas_image_load_png_func =
 
 
 int
-evas_image_load_file_head_png(RGBA_Image *im, const char *file, const char *key)
+evas_image_load_file_head_png(Image_Entry *ie, const char *file, const char *key)
 {
    png_uint_32 w32, h32;
    FILE *f;
@@ -80,12 +80,12 @@ evas_image_load_file_head_png(RGBA_Image *im, const char *file, const char *key)
 	fclose(f);
 	return 0;
      }
-   im->cache_entry.w = (int) w32;
-   im->cache_entry.h = (int) h32;
+   ie->w = (int) w32;
+   ie->h = (int) h32;
    if (png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS)) hasa = 1;
    if (color_type == PNG_COLOR_TYPE_RGB_ALPHA) hasa = 1;
    if (color_type == PNG_COLOR_TYPE_GRAY_ALPHA) hasa = 1;
-   if (hasa) im->flags |= RGBA_IMAGE_HAS_ALPHA;
+   if (hasa) ie->flags.alpha = 1;
    png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp) NULL);
    fclose(f);
    return 1;
@@ -93,8 +93,9 @@ evas_image_load_file_head_png(RGBA_Image *im, const char *file, const char *key)
 }
 
 int
-evas_image_load_file_data_png(RGBA_Image *im, const char *file, const char *key)
+evas_image_load_file_data_png(Image_Entry *ie, const char *file, const char *key)
 {
+   unsigned char *surface;
    png_uint_32 w32, h32;
    int w, h;
    FILE *f;
@@ -143,14 +144,15 @@ evas_image_load_file_data_png(RGBA_Image *im, const char *file, const char *key)
    png_get_IHDR(png_ptr, info_ptr, (png_uint_32 *) (&w32),
 		(png_uint_32 *) (&h32), &bit_depth, &color_type,
 		&interlace_type, NULL, NULL);
-   evas_cache_image_surface_alloc(&im->cache_entry, w32, h32);
-   if (!im->image.data)
+   evas_cache_image_surface_alloc(ie, w32, h32);
+   surface = (unsigned char *) evas_cache_image_pixels(ie);
+   if (!surface)
      {
 	png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp) NULL);
 	fclose(f);
 	return 0;
      }
-   if ((w32 != im->cache_entry.w) || (h32 != im->cache_entry.h))
+   if ((w32 != ie->w) || (h32 != ie->h))
      {
 	png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp) NULL);
 	fclose(f);
@@ -159,7 +161,7 @@ evas_image_load_file_data_png(RGBA_Image *im, const char *file, const char *key)
    if (png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS)) hasa = 1;
    if (color_type == PNG_COLOR_TYPE_RGB_ALPHA) hasa = 1;
    if (color_type == PNG_COLOR_TYPE_GRAY_ALPHA) hasa = 1;
-   if (hasa) im->flags |= RGBA_IMAGE_HAS_ALPHA;
+   if (hasa) ie->flags.alpha = 1;
 
    /* Prep for transformations...  ultimately we want ARGB */
    /* expand palette -> RGB if necessary */
@@ -179,8 +181,8 @@ evas_image_load_file_data_png(RGBA_Image *im, const char *file, const char *key)
    /* pack all pixels to byte boundaries */
    png_set_packing(png_ptr);
 
-   w = im->cache_entry.w;
-   h = im->cache_entry.h;
+   w = ie->w;
+   h = ie->h;
    /* we want ARGB */
 #ifdef WORDS_BIGENDIAN
    png_set_swap_alpha(png_ptr);
@@ -192,12 +194,12 @@ evas_image_load_file_data_png(RGBA_Image *im, const char *file, const char *key)
    lines = (unsigned char **) alloca(h * sizeof(unsigned char *));
 
    for (i = 0; i < h; i++)
-     lines[i] = ((unsigned char *)(im->image.data)) + (i * w * sizeof(DATA32));
+     lines[i] = surface + (i * w * sizeof(DATA32));
    png_read_image(png_ptr, lines);
    png_read_end(png_ptr, info_ptr);
    png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp) NULL);
    fclose(f);
-   evas_common_image_premul(im);
+   evas_common_image_premul(ie);
 
    return 1;
    key = 0;
diff --git a/src/modules/loaders/svg/evas_image_load_svg.c b/src/modules/loaders/svg/evas_image_load_svg.c
index 29aa10e..465a62f 100644
--- a/src/modules/loaders/svg/evas_image_load_svg.c
+++ b/src/modules/loaders/svg/evas_image_load_svg.c
@@ -4,8 +4,8 @@
 #include <librsvg/rsvg.h>
 #include <librsvg/rsvg-cairo.h>
 
-int evas_image_load_file_head_svg(RGBA_Image *im, const char *file, const char *key);
-int evas_image_load_file_data_svg(RGBA_Image *im, const char *file, const char *key);
+int evas_image_load_file_head_svg(Image_Entry *ie, const char *file, const char *key);
+int evas_image_load_file_data_svg(Image_Entry *ie, const char *file, const char *key);
 
 Evas_Image_Load_Func evas_image_load_svg_func =
 {
@@ -36,7 +36,7 @@ svg_loader_unpremul_data(DATA32 *data, unsigned int len)
 }
 
 int
-evas_image_load_file_head_svg(RGBA_Image *im, const char *file, const char *key)
+evas_image_load_file_head_svg(Image_Entry *ie, const char *file, const char *key)
 {
    char               cwd[PATH_MAX], pcwd[PATH_MAX], *p;
    
@@ -93,36 +93,36 @@ evas_image_load_file_head_svg(RGBA_Image *im, const char *file, const char *key)
 	chdir(pcwd);
 	return 0;
      }
-   if (im->cache_entry.load_opts.scale_down_by > 1)
+   if (ie->load_opts.scale_down_by > 1)
      {
-	w /= im->cache_entry.load_opts.scale_down_by;
-	h /= im->cache_entry.load_opts.scale_down_by;
+	w /= ie->load_opts.scale_down_by;
+	h /= ie->load_opts.scale_down_by;
      }
-   else if (im->cache_entry.load_opts.dpi > 0.0)
+   else if (ie->load_opts.dpi > 0.0)
      {
-	w = (w * im->cache_entry.load_opts.dpi) / 90.0;
-	h = (h * im->cache_entry.load_opts.dpi) / 90.0;
+	w = (w * ie->load_opts.dpi) / 90.0;
+	h = (h * ie->load_opts.dpi) / 90.0;
      }
-   else if ((im->cache_entry.load_opts.w > 0) &&
-	    (im->cache_entry.load_opts.h > 0))
+   else if ((ie->load_opts.w > 0) &&
+	    (ie->load_opts.h > 0))
      {
 	int w2, h2;
 	
-	w2 = im->cache_entry.load_opts.w;
-	h2 = (im->cache_entry.load_opts.w * h) / w;
-	if (h2 > im->cache_entry.load_opts.h)
+	w2 = ie->load_opts.w;
+	h2 = (ie->load_opts.w * h) / w;
+	if (h2 > ie->load_opts.h)
 	  {
-	     h2 = im->cache_entry.load_opts.h;
-	     w2 = (im->cache_entry.load_opts.h * w) / h;
+	     h2 = ie->load_opts.h;
+	     w2 = (ie->load_opts.h * w) / h;
 	  }
 	w = w2;
 	h = h2;
      }
    if (w < 1) w = 1;
    if (h < 1) h = 1;
-   im->cache_entry.w = w;
-   im->cache_entry.h = h;
-   im->flags |= RGBA_IMAGE_HAS_ALPHA;
+   ie->w = w;
+   ie->h = h;
+   ie->flags.alpha = 1;
 //   rsvg_handle_close(rsvg, NULL);
    g_object_unref(rsvg);
 //   rsvg_handle_free(rsvg);
@@ -132,8 +132,9 @@ evas_image_load_file_head_svg(RGBA_Image *im, const char *file, const char *key)
 
 /** FIXME: All evas loaders need to be tightened up **/
 int
-evas_image_load_file_data_svg(RGBA_Image *im, const char *file, const char *key)
+evas_image_load_file_data_svg(Image_Entry *ie, const char *file, const char *key)
 {
+   DATA32             *pixels;
    char               cwd[PATH_MAX], pcwd[PATH_MAX], *p;
    RsvgHandle         *rsvg;
    RsvgDimensionData   dim;
@@ -190,36 +191,37 @@ evas_image_load_file_data_svg(RGBA_Image *im, const char *file, const char *key)
 	chdir(pcwd);
 	return 0;
      }
-   if (im->cache_entry.load_opts.scale_down_by > 1)
+   if (ie->load_opts.scale_down_by > 1)
      {
-	w /= im->cache_entry.load_opts.scale_down_by;
-	h /= im->cache_entry.load_opts.scale_down_by;
+	w /= ie->load_opts.scale_down_by;
+	h /= ie->load_opts.scale_down_by;
      }
-   else if (im->cache_entry.load_opts.dpi > 0.0)
+   else if (ie->load_opts.dpi > 0.0)
      {
-	w = (w * im->cache_entry.load_opts.dpi) / 90.0;
-	h = (h * im->cache_entry.load_opts.dpi) / 90.0;
+	w = (w * ie->load_opts.dpi) / 90.0;
+	h = (h * ie->load_opts.dpi) / 90.0;
      }
-   else if ((im->cache_entry.load_opts.w > 0) &&
-	    (im->cache_entry.load_opts.h > 0))
+   else if ((ie->load_opts.w > 0) &&
+	    (ie->load_opts.h > 0))
      {
 	int w2, h2;
 	
-	w2 = im->cache_entry.load_opts.w;
-	h2 = (im->cache_entry.load_opts.w * h) / w;
-	if (h2 > im->cache_entry.load_opts.h)
+	w2 = ie->load_opts.w;
+	h2 = (ie->load_opts.w * h) / w;
+	if (h2 > ie->load_opts.h)
 	  {
-	     h2 = im->cache_entry.load_opts.h;
-	     w2 = (im->cache_entry.load_opts.h * w) / h;
+	     h2 = ie->load_opts.h;
+	     w2 = (ie->load_opts.h * w) / h;
 	  }
 	w = w2;
 	h = h2;
      }
    if (w < 1) w = 1;
    if (h < 1) h = 1;
-   im->flags |= RGBA_IMAGE_HAS_ALPHA;
-   evas_cache_image_surface_alloc(&im->cache_entry, w, h);
-   if (!im->image.data)
+   ie->flags.alpha = 1;
+   evas_cache_image_surface_alloc(ie, w, h);
+   pixels = evas_cache_image_pixels(ie);
+   if (!pixels)
      {
 //	rsvg_handle_close(rsvg, NULL);
 	g_object_unref(rsvg);
@@ -228,9 +230,9 @@ evas_image_load_file_data_svg(RGBA_Image *im, const char *file, const char *key)
 	return 0;
      }
 
-   memset(im->image.data, 0, w * h * sizeof(DATA32));
+   memset(pixels, 0, w * h * sizeof(DATA32));
    
-   surface = cairo_image_surface_create_for_data((unsigned char *)im->image.data, CAIRO_FORMAT_ARGB32,
+   surface = cairo_image_surface_create_for_data((unsigned char *)pixels, CAIRO_FORMAT_ARGB32,
 						 w, h, w * sizeof(DATA32));
    if (!surface)
      {
@@ -252,8 +254,8 @@ evas_image_load_file_data_svg(RGBA_Image *im, const char *file, const char *key)
      }
    
    cairo_scale(cr, 
-	       (double)im->cache_entry.w / dim.em, 
-	       (double)im->cache_entry.h / dim.ex);
+	       (double)ie->w / dim.em, 
+	       (double)ie->h / dim.ex);
    rsvg_handle_render_cairo(rsvg, cr);
    cairo_surface_destroy(surface);
    /* need to check if this is required... */
@@ -262,7 +264,7 @@ evas_image_load_file_data_svg(RGBA_Image *im, const char *file, const char *key)
    g_object_unref(rsvg);
 //   rsvg_handle_free(rsvg);
    chdir(pcwd);
-   evas_common_image_set_alpha_sparse(im);
+   evas_common_image_set_alpha_sparse(ie);
    return 1;
 }
 
diff --git a/src/modules/loaders/tiff/evas_image_load_tiff.c b/src/modules/loaders/tiff/evas_image_load_tiff.c
index 0ae2042..21036b4 100644
--- a/src/modules/loaders/tiff/evas_image_load_tiff.c
+++ b/src/modules/loaders/tiff/evas_image_load_tiff.c
@@ -5,8 +5,8 @@
 #include <tiffio.h>
 
 
-int evas_image_load_file_head_tiff(RGBA_Image *im, const char *file, const char *key);
-int evas_image_load_file_data_tiff(RGBA_Image *im, const char *file, const char *key);
+int evas_image_load_file_head_tiff(Image_Entry *ie, const char *file, const char *key);
+int evas_image_load_file_data_tiff(Image_Entry *ie, const char *file, const char *key);
 
 Evas_Image_Load_Func evas_image_load_tiff_func =
 {
@@ -20,7 +20,7 @@ struct TIFFRGBAImage_Extra {
    TIFFRGBAImage       rgba;
    tileContigRoutine   put_contig;
    tileSeparateRoutine put_separate;
-   RGBA_Image         *image;
+   Image_Entry        *image;
    char                pper;
    uint32              num_pixels;
    uint32              py;
@@ -69,11 +69,11 @@ raster(TIFFRGBAImage_Extra * img, uint32 * rast,
    int                 image_width, image_height;
    uint32             *pixel, pixel_value;
    int                 i, j, dy, rast_offset;
-   DATA32             *buffer_pixel, *buffer = img->image->image.data;
+   DATA32             *buffer_pixel, *buffer = evas_cache_image_pixels(img->image);
    int                 alpha_premult;
 
-   image_width = img->image->cache_entry.w;
-   image_height = img->image->cache_entry.h;
+   image_width = img->image->w;
+   image_height = img->image->h;
 
    dy = h > y ? -1 : y - h;
 
@@ -110,7 +110,7 @@ raster(TIFFRGBAImage_Extra * img, uint32 * rast,
 }
 
 int
-evas_image_load_file_head_tiff(RGBA_Image *im, const char *file, const char *key)
+evas_image_load_file_head_tiff(Image_Entry *ie, const char *file, const char *key)
 {
    char                txt[1024];
    TIFFRGBAImage       tiff_image;
@@ -164,22 +164,22 @@ evas_image_load_file_head_tiff(RGBA_Image *im, const char *file, const char *key
      }
 
    if (tiff_image.alpha != EXTRASAMPLE_UNSPECIFIED)
-     im->flags |= RGBA_IMAGE_HAS_ALPHA;
+     ie->flags.alpha = 1;
    if ((tiff_image.width < 1) || (tiff_image.height < 1) ||
        (tiff_image.width > 8192) || (tiff_image.height > 8192))
      {
 	TIFFClose(tif);
 	return 0;
      }
-   im->cache_entry.w = tiff_image.width;
-   im->cache_entry.h = tiff_image.height;
+   ie->w = tiff_image.width;
+   ie->h = tiff_image.height;
 
    TIFFClose(tif);
    return 1;
 }
 
 int
-evas_image_load_file_data_tiff(RGBA_Image *im, const char *file, const char *key)
+evas_image_load_file_data_tiff(Image_Entry *ie, const char *file, const char *key)
 {
    char                txt[1024];
    TIFFRGBAImage_Extra rgba_image;
@@ -229,19 +229,19 @@ evas_image_load_file_data_tiff(RGBA_Image *im, const char *file, const char *key
         TIFFClose(tif);
         return 0;
      }
-   rgba_image.image = im;
+   rgba_image.image = ie;
 
    if (rgba_image.rgba.alpha != EXTRASAMPLE_UNSPECIFIED)
-     im->flags |= RGBA_IMAGE_HAS_ALPHA;
-   if ((rgba_image.rgba.width != im->cache_entry.w) ||
-       (rgba_image.rgba.height != im->cache_entry.h))
+     ie->flags.alpha = 1;
+   if ((rgba_image.rgba.width != ie->w) ||
+       (rgba_image.rgba.height != ie->h))
      {
         TIFFClose(tif);
 	return 0;
      }
 
-   evas_cache_image_surface_alloc(&im->cache_entry, rgba_image.rgba.width, rgba_image.rgba.height);
-   if (!im->image.data)
+   evas_cache_image_surface_alloc(ie, rgba_image.rgba.width, rgba_image.rgba.height);
+   if (!evas_cache_image_pixels(ie))
      {
         TIFFRGBAImageEnd((TIFFRGBAImage *) & rgba_image);
         TIFFClose(tif);
@@ -249,7 +249,7 @@ evas_image_load_file_data_tiff(RGBA_Image *im, const char *file, const char *key
 	return 0;
      }
 
-   rgba_image.num_pixels = num_pixels = im->cache_entry.w * im->cache_entry.h;
+   rgba_image.num_pixels = num_pixels = ie->w * ie->h;
 
    rgba_image.pper = rgba_image.py = 0;
    rast = (uint32 *) _TIFFmalloc(sizeof(uint32) * num_pixels);
@@ -311,7 +311,7 @@ evas_image_load_file_data_tiff(RGBA_Image *im, const char *file, const char *key
 
    TIFFClose(tif);
 
-   evas_common_image_set_alpha_sparse(im);
+   evas_common_image_set_alpha_sparse(ie);
    return 1;
 }
 
diff --git a/src/modules/loaders/xpm/evas_image_load_xpm.c b/src/modules/loaders/xpm/evas_image_load_xpm.c
index d151fe6..d4c1f50 100644
--- a/src/modules/loaders/xpm/evas_image_load_xpm.c
+++ b/src/modules/loaders/xpm/evas_image_load_xpm.c
@@ -1,8 +1,8 @@
 #include "evas_common.h"
 #include "evas_private.h"
 
-int evas_image_load_file_head_xpm(RGBA_Image *im, const char *file, const char *key);
-int evas_image_load_file_data_xpm(RGBA_Image *im, const char *file, const char *key);
+int evas_image_load_file_head_xpm(Image_Entry *ie, const char *file, const char *key);
+int evas_image_load_file_data_xpm(Image_Entry *ie, const char *file, const char *key);
 
 Evas_Image_Load_Func evas_image_load_xpm_func =
 {
@@ -96,7 +96,7 @@ xpm_parse_done(void)
 
 /** FIXME: clean this up and make more efficient  **/
 static int
-evas_image_load_file_xpm(RGBA_Image *im, const char *file, const char *key, int load_data)
+evas_image_load_file_xpm(Image_Entry *ie, const char *file, const char *key, int load_data)
 {
    DATA32             *ptr, *end;
    FILE               *f;
@@ -249,8 +249,8 @@ evas_image_load_file_xpm(RGBA_Image *im, const char *file, const char *key, int
                                 return 0;
                               }
                          }
-                       im->cache_entry.w = w;
-                       im->cache_entry.h = h;
+                       ie->w = w;
+                       ie->h = h;
 
                        j = 0;
                        context++;
@@ -360,12 +360,13 @@ evas_image_load_file_xpm(RGBA_Image *im, const char *file, const char *key, int
                             context++;
                          }
 
-                       if (transp) im->flags |= RGBA_IMAGE_HAS_ALPHA;
+                       if (transp) ie->flags.alpha = 1;
 		       
                        if (load_data)
                          {
-                            evas_cache_image_surface_alloc(&im->cache_entry, w, h);
-                            if (!im->image.data)
+                            evas_cache_image_surface_alloc(ie, w, h);
+                            ptr = evas_cache_image_pixels(ie);
+                            if (!ptr)
                               {
                                  free(cmap);
                                  free(line);
@@ -373,7 +374,6 @@ evas_image_load_file_xpm(RGBA_Image *im, const char *file, const char *key, int
                                  xpm_parse_done();
                                  return 0;
                               }
-                            ptr = im->image.data;
                             end = ptr + (w * h);
                             pixels = w * h;
                          }
@@ -594,7 +594,7 @@ evas_image_load_file_xpm(RGBA_Image *im, const char *file, const char *key, int
              if (!tl) break;
 	     line = tl;
           }
-        if (((ptr) && ((ptr - im->image.data) >= (w * h * sizeof(DATA32)))) ||
+        if (((ptr) && ((ptr - evas_cache_image_pixels(ie)) >= (w * h * sizeof(DATA32)))) ||
             ((context > 1) && (count >= pixels)))
 	  break;
      }
@@ -610,15 +610,15 @@ evas_image_load_file_xpm(RGBA_Image *im, const char *file, const char *key, int
 
 
 int
-evas_image_load_file_head_xpm(RGBA_Image *im, const char *file, const char *key)
+evas_image_load_file_head_xpm(Image_Entry *ie, const char *file, const char *key)
 {
-  return evas_image_load_file_xpm(im, file, key, 0);
+  return evas_image_load_file_xpm(ie, file, key, 0);
 }
 
 int
-evas_image_load_file_data_xpm(RGBA_Image *im, const char *file, const char *key)
+evas_image_load_file_data_xpm(Image_Entry *ie, const char *file, const char *key)
 {
-  return evas_image_load_file_xpm(im, file, key, 1);
+  return evas_image_load_file_xpm(ie, file, key, 1);
 }
 
 
diff --git a/src/modules/savers/eet/evas_image_save_eet.c b/src/modules/savers/eet/evas_image_save_eet.c
index 5165590..5c672b1 100644
--- a/src/modules/savers/eet/evas_image_save_eet.c
+++ b/src/modules/savers/eet/evas_image_save_eet.c
@@ -28,7 +28,7 @@ evas_image_save_file_eet(RGBA_Image *im, const char *file, const char *key, int
    if (!ef) ef = eet_open((char *)file, EET_FILE_MODE_WRITE);
    if (!ef) return 0;
    if ((quality <= 100) || (compress < 0)) lossy = 1;
-   if (im->flags & RGBA_IMAGE_HAS_ALPHA) alpha = 1;
+   if (im->cache_entry.flags.alpha) alpha = 1;
 //   if (alpha)
 //     {
 //       data = malloc(im->image->w * im->image->h * sizeof(DATA32));
diff --git a/src/modules/savers/png/evas_image_save_png.c b/src/modules/savers/png/evas_image_save_png.c
index 5892dfb..67594cd 100644
--- a/src/modules/savers/png/evas_image_save_png.c
+++ b/src/modules/savers/png/evas_image_save_png.c
@@ -62,7 +62,7 @@ save_image_png(RGBA_Image *im, const char *file, int compress, int interlace)
 #endif
      }
    
-   if (im->flags & RGBA_IMAGE_HAS_ALPHA)
+   if (im->cache_entry.flags.alpha)
      {
 	data = malloc(im->cache_entry.w * im->cache_entry.h * sizeof(DATA32));
 	if (!data)
@@ -110,7 +110,7 @@ save_image_png(RGBA_Image *im, const char *file, int compress, int interlace)
 	
 	for (y = 0; y < im->cache_entry.h; y++)
 	  {
-	     if (im->flags & RGBA_IMAGE_HAS_ALPHA)
+	     if (im->cache_entry.flags.alpha)
 	       row_ptr = (png_bytep) ptr;
 	     else
 	       {
@@ -130,7 +130,7 @@ save_image_png(RGBA_Image *im, const char *file, int compress, int interlace)
    png_destroy_write_struct(&png_ptr, (png_infopp) & info_ptr);
    png_destroy_info_struct(png_ptr, (png_infopp) & info_ptr);
    
-   if (im->flags & RGBA_IMAGE_HAS_ALPHA)
+   if (im->cache_entry.flags.alpha)
      free(data);
    fclose(f);
    return 1;
diff --git a/src/modules/savers/tiff/evas_image_save_tiff.c b/src/modules/savers/tiff/evas_image_save_tiff.c
index a4473bf..bacf7da 100644
--- a/src/modules/savers/tiff/evas_image_save_tiff.c
+++ b/src/modules/savers/tiff/evas_image_save_tiff.c
@@ -25,7 +25,7 @@ save_image_tiff(RGBA_Image *im, const char *file, int compress, int interlace)
    if (!im || !im->image.data || !file)
       return 0;
 
-   has_alpha = im->flags & RGBA_IMAGE_HAS_ALPHA;
+   has_alpha = im->cache_entry.flags.alpha;
    data = im->image.data;
 
    tif = TIFFOpen(file, "w");

-- 
Enlightenment DR17 advanced canvas library



More information about the Pkg-e-commits mailing list