diff --git a/src/OpenGL/common/Image.cpp b/src/OpenGL/common/Image.cpp
index 2b4d97e..e4a1c87 100644
--- a/src/OpenGL/common/Image.cpp
+++ b/src/OpenGL/common/Image.cpp
@@ -1132,7 +1132,7 @@
 
 	Image::~Image()
 	{
-		ASSERT(referenceCount == 0);
+		ASSERT(!shared);
 	}
 
 	void Image::addRef()
@@ -1141,8 +1141,8 @@
 		{
 			return parentTexture->addRef();
 		}
-		int newCount = sw::atomicIncrement(&referenceCount);
-		LOGLOCK("%s image=%p referenceCount=%d", __FUNCTION__, this, newCount);
+
+		Object::addRef();
 	}
 
 	void Image::release()
@@ -1152,20 +1152,14 @@
 			return parentTexture->release();
 		}
 
-		int newCount = sw::atomicDecrement(&referenceCount);
-		LOGLOCK("%s image=%p referenceCount=%d", __FUNCTION__, this, newCount);
-		if (newCount == 0)
-		{
-			ASSERT(!shared);   // Should still hold a reference if eglDestroyImage hasn't been called
-			delete this;
-		}
+		Object::release();
 	}
 
 	void Image::unbind(const egl::Texture *parent)
 	{
 		if(parentTexture == parent)
 		{
-			parentTexture = 0;
+			parentTexture = nullptr;
 		}
 
 		release();
diff --git a/src/OpenGL/common/Image.hpp b/src/OpenGL/common/Image.hpp
index 9d060ca..7d98fea 100644
--- a/src/OpenGL/common/Image.hpp
+++ b/src/OpenGL/common/Image.hpp
@@ -36,7 +36,7 @@
 	return texture ? texture->getResource() : nullptr;
 }
 
-class Image : public sw::Surface
+class Image : public sw::Surface, public gl::Object
 {
 public:
 	Image(Texture *parentTexture, GLsizei width, GLsizei height, GLenum format, GLenum type)
@@ -45,7 +45,7 @@
 		  parentTexture(parentTexture)
 	{
 		shared = false;
-		referenceCount = 1;
+		Object::addRef();
 	}
 
 	Image(Texture *parentTexture, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, int pitchP = 0)
@@ -54,7 +54,7 @@
 		  parentTexture(parentTexture)
 	{
 		shared = false;
-		referenceCount = 1;
+		Object::addRef();
 	}
 
 	Image(GLsizei width, GLsizei height, sw::Format internalFormat, int multiSampleDepth, bool lockable, bool renderTarget)
@@ -62,7 +62,7 @@
 		  width(width), height(height), format(0 /*GL_NONE*/), type(0 /*GL_NONE*/), internalFormat(internalFormat), depth(multiSampleDepth), parentTexture(nullptr)
 	{
 		shared = false;
-		referenceCount = 1;
+		Object::addRef();
 	}
 
 	GLsizei getWidth() const
@@ -137,8 +137,8 @@
 	void loadImageData(GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const UnpackInfo& unpackInfo, const void *input);
 	void loadCompressedData(GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei imageSize, const void *pixels);
 
-	virtual void addRef();
-	virtual void release();
+	void addRef() override;
+	void release() override;
 	virtual void unbind(const Texture *parent);   // Break parent ownership and release
 
 	virtual void destroyShared()   // Release a shared image
@@ -160,8 +160,6 @@
 
 	egl::Texture *parentTexture;
 
-	volatile int referenceCount;
-
 	virtual ~Image();
 
 	void loadD24S8ImageData(GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, int inputPitch, int inputHeight, const void *input, void *buffer);
