Index: src/lib/canvas/evas_object_image.c
===================================================================
--- src/lib/canvas/evas_object_image.c	(revision 62750)
+++ src/lib/canvas/evas_object_image.c	(working copy)
@@ -965,6 +965,10 @@ evas_object_image_data_get(const Evas_Object *obj,
 								  for_writing,
 								  &data,
                                                                   &o->load_error);
+
+   /* if we fail to get engine_data, we have to return NULL */
+   if (!o->engine_data) return NULL;
+
    if (o->engine_data)
      {
         int stride = 0;
Index: src/modules/engines/gl_common/evas_gl_texture.c
===================================================================
--- src/modules/engines/gl_common/evas_gl_texture.c	(revision 62750)
+++ src/modules/engines/gl_common/evas_gl_texture.c	(working copy)
@@ -524,74 +524,38 @@ _pool_tex_dynamic_new(Evas_Engine_GL_Context *gc,
                                        0, attr);
    if (!pt->dyn.img)
      {
+        glBindTexture(GL_TEXTURE_2D, 0);
         GLERR(__FUNCTION__, __FILE__, __LINE__, "");
-        return pt;
+        glDeleteTextures(1, &(pt->texture));
+        GLERR(__FUNCTION__, __FILE__, __LINE__, "");
+        free(pt);
+        return NULL;
      }
    if (secsym_eglGetImageAttribSEC(egldisplay,
                                    pt->dyn.img,
                                    EGL_MAP_GL_TEXTURE_WIDTH_SEC,
-                                   &(pt->dyn.w)) != EGL_TRUE)
-     {
-        secsym_eglDestroyImage(egldisplay, pt->dyn.img);
-        pt->dyn.img = NULL;
-        GLERR(__FUNCTION__, __FILE__, __LINE__, "");
-        return pt;
-     }
+                                   &(pt->dyn.w)) != EGL_TRUE) goto error;
    if (secsym_eglGetImageAttribSEC(egldisplay,
                                    pt->dyn.img,
                                    EGL_MAP_GL_TEXTURE_HEIGHT_SEC,
-                                   &(pt->dyn.h)) != EGL_TRUE)
-     {
-        secsym_eglDestroyImage(egldisplay, pt->dyn.img);
-        pt->dyn.img = NULL;
-        GLERR(__FUNCTION__, __FILE__, __LINE__, "");
-        return pt;
-     }
+                                   &(pt->dyn.h)) != EGL_TRUE) goto error;
    if (secsym_eglGetImageAttribSEC(egldisplay,
                                    pt->dyn.img,
                                    EGL_MAP_GL_TEXTURE_STRIDE_IN_BYTES_SEC,
-                                   &(pt->dyn.stride)) != EGL_TRUE)
-     {
-        secsym_eglDestroyImage(egldisplay, pt->dyn.img);
-        pt->dyn.img = NULL;
-        GLERR(__FUNCTION__, __FILE__, __LINE__, "");
-        return pt;
-     }
+                                   &(pt->dyn.stride)) != EGL_TRUE) goto error;
    if (secsym_eglGetImageAttribSEC(egldisplay,
                                    pt->dyn.img,
                                    EGL_MAP_GL_TEXTURE_FORMAT_SEC,
-                                   &(fmt)) != EGL_TRUE)
-     {
-        secsym_eglDestroyImage(egldisplay, pt->dyn.img);
-        pt->dyn.img = NULL;
-        GLERR(__FUNCTION__, __FILE__, __LINE__, "");
-        return pt;
-     }
-   if (fmt != EGL_MAP_GL_TEXTURE_RGBA_SEC)
-     {
-        secsym_eglDestroyImage(egldisplay, pt->dyn.img);
-        pt->dyn.img = NULL;
-        GLERR(__FUNCTION__, __FILE__, __LINE__, "");
-        return pt;
-     }
+                                   &(fmt)) != EGL_TRUE) goto error;
+   if (fmt != EGL_MAP_GL_TEXTURE_RGBA_SEC) goto error;
+
    if (secsym_eglGetImageAttribSEC(egldisplay,
                                    pt->dyn.img,
                                    EGL_MAP_GL_TEXTURE_PIXEL_TYPE_SEC,
-                                   &(pixtype)) != EGL_TRUE)
-     {
-        secsym_eglDestroyImage(egldisplay, pt->dyn.img);
-        pt->dyn.img = NULL;
-        GLERR(__FUNCTION__, __FILE__, __LINE__, "");
-        return pt;
-     }
-   if (pixtype != EGL_MAP_GL_TEXTURE_UNSIGNED_BYTE_SEC)
-     {
-        secsym_eglDestroyImage(egldisplay, pt->dyn.img);
-        pt->dyn.img = NULL;
-        GLERR(__FUNCTION__, __FILE__, __LINE__, "");
-        return pt;
-     }
+                                   &(pixtype)) != EGL_TRUE) goto error;
 
+   if (pixtype != EGL_MAP_GL_TEXTURE_UNSIGNED_BYTE_SEC) goto error;
+
    glBindTexture(GL_TEXTURE_2D, gc->pipe[0].shader.cur_tex);
    GLERR(__FUNCTION__, __FILE__, __LINE__, "");
 #else
@@ -602,6 +566,19 @@ _pool_tex_dynamic_new(Evas_Engine_GL_Context *gc,
    format = 0;
 #endif
    return pt;
+
+/* ERROR HANDLING */
+error:
+  secsym_eglDestroyImage(egldisplay, pt->dyn.img);
+  GLERR(__FUNCTION__, __FILE__, __LINE__, "");
+  pt->dyn.img = NULL;
+
+  glBindTexture(GL_TEXTURE_2D, 0);
+  GLERR(__FUNCTION__, __FILE__, __LINE__, "");
+  glDeleteTextures(1, &(pt->texture));
+  GLERR(__FUNCTION__, __FILE__, __LINE__, "");
+  free(pt);
+  return NULL;
 }
 
 void
Index: src/modules/engines/gl_x11/evas_engine.c
===================================================================
--- src/modules/engines/gl_x11/evas_engine.c	(revision 62750)
+++ src/modules/engines/gl_x11/evas_engine.c	(working copy)
@@ -1797,6 +1797,16 @@ eng_image_data_get(void *data, void *image, int to
    eng_window_use(re->win);
 #endif
 
+   /* Engine can be fail to create texture after cache drop like eng_image_content_hint_set function,
+        so it is need to add code which check im->im's NULL value*/ 
+
+   if (!im->im)
+    {
+       *image_data = NULL;
+       if (err) *err = EVAS_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED;
+       return NULL;
+    }
+
    error = evas_cache_image_load_data(&im->im->cache_entry);
    switch (im->cs.space)
      {
@@ -1816,7 +1826,7 @@ eng_image_data_get(void *data, void *image, int to
 		    {
 		       *image_data = NULL;
                        if (err) *err = EVAS_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED;
-		       return im;
+   		       return NULL;
 		    }
 		  evas_gl_common_image_free(im);
 		  im = im_new;
