diff --git a/src/OpenGL/libGLESv2/Renderbuffer.cpp b/src/OpenGL/libGLESv2/Renderbuffer.cpp
index d297046..9b92698 100644
--- a/src/OpenGL/libGLESv2/Renderbuffer.cpp
+++ b/src/OpenGL/libGLESv2/Renderbuffer.cpp
@@ -1,13 +1,16 @@
-// SwiftShader Software Renderer
+// Copyright 2016 The SwiftShader Authors. All Rights Reserved.
 //
-// Copyright(c) 2005-2013 TransGaming Inc.
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
 //
-// All rights reserved. No part of this software may be copied, distributed, transmitted,
-// transcribed, stored in a retrieval system, translated into any human or computer
-// language by any means, or disclosed to third parties without the explicit written
-// agreement of TransGaming Inc. Without such an agreement, no rights or licenses, express
-// or implied, including but not limited to any patent rights, are granted to you.
+//    http://www.apache.org/licenses/LICENSE-2.0
 //
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
 
 // Renderbuffer.cpp: the Renderbuffer class and its derived classes
 // Colorbuffer, Depthbuffer and Stencilbuffer. Implements GL renderbuffer
@@ -27,7 +30,7 @@
 
 // The default case for classes inherited from RenderbufferInterface is not to
 // need to do anything upon the reference count to the parent Renderbuffer incrementing
-// or decrementing. 
+// or decrementing.
 void RenderbufferInterface::addProxyRef(const Renderbuffer *proxy)
 {
 }
@@ -227,12 +230,12 @@
 // Renderbuffers acting as proxies. Here, we notify the texture of a reference.
 void RenderbufferTextureCubeMap::addProxyRef(const Renderbuffer *proxy)
 {
-    mTextureCubeMap->addProxyRef(proxy);
+	mTextureCubeMap->addProxyRef(proxy);
 }
 
 void RenderbufferTextureCubeMap::releaseProxy(const Renderbuffer *proxy)
 {
-    mTextureCubeMap->releaseProxy(proxy);
+	mTextureCubeMap->releaseProxy(proxy);
 }
 
 // Increments refcount on image.
@@ -283,7 +286,7 @@
 
 Renderbuffer::Renderbuffer(GLuint name, RenderbufferInterface *instance) : NamedObject(name)
 {
-	ASSERT(instance != NULL);
+	ASSERT(instance);
 	mInstance = instance;
 }
 
@@ -296,16 +299,16 @@
 // its own reference count, so we pass it on here.
 void Renderbuffer::addRef()
 {
-    mInstance->addProxyRef(this);
+	mInstance->addProxyRef(this);
 
-    Object::addRef();
+	Object::addRef();
 }
 
 void Renderbuffer::release()
 {
-    mInstance->releaseProxy(this);
+	mInstance->releaseProxy(this);
 
-    Object::release();
+	Object::release();
 }
 
 // Increments refcount on image.
@@ -319,12 +322,12 @@
 // caller must Release() the returned image
 egl::Image *Renderbuffer::createSharedImage()
 {
-    return mInstance->createSharedImage();
+	return mInstance->createSharedImage();
 }
 
 bool Renderbuffer::isShared() const
 {
-    return mInstance->isShared();
+	return mInstance->isShared();
 }
 
 GLsizei Renderbuffer::getWidth() const
@@ -458,7 +461,7 @@
 	if(renderTarget)
 	{
 		renderTarget->addRef();
-		
+
 		mWidth = renderTarget->getWidth();
 		mHeight = renderTarget->getHeight();
 		internalFormat = renderTarget->getInternalFormat();
@@ -516,18 +519,18 @@
 // caller must release() the returned image
 egl::Image *Colorbuffer::createSharedImage()
 {
-    if(mRenderTarget)
-    {
-        mRenderTarget->addRef();
-        mRenderTarget->markShared();
-    }
+	if(mRenderTarget)
+	{
+		mRenderTarget->addRef();
+		mRenderTarget->markShared();
+	}
 
-    return mRenderTarget;
+	return mRenderTarget;
 }
 
 bool Colorbuffer::isShared() const
 {
-    return mRenderTarget->isShared();
+	return mRenderTarget->isShared();
 }
 
 DepthStencilbuffer::DepthStencilbuffer(egl::Image *depthStencil) : mDepthStencil(depthStencil)
@@ -616,18 +619,18 @@
 // caller must release() the returned image
 egl::Image *DepthStencilbuffer::createSharedImage()
 {
-    if(mDepthStencil)
-    {
-        mDepthStencil->addRef();
-        mDepthStencil->markShared();
-    }
+	if(mDepthStencil)
+	{
+		mDepthStencil->addRef();
+		mDepthStencil->markShared();
+	}
 
-    return mDepthStencil;
+	return mDepthStencil;
 }
 
 bool DepthStencilbuffer::isShared() const
 {
-    return mDepthStencil->isShared();
+	return mDepthStencil->isShared();
 }
 
 Depthbuffer::Depthbuffer(egl::Image *depthStencil) : DepthStencilbuffer(depthStencil)
