diff --git a/ps3/rgl/src/ps3/include/rgl-inline.h b/ps3/rgl/src/ps3/include/rgl-inline.h
index 8d27db888a..b65c8d2134 100644
--- a/ps3/rgl/src/ps3/include/rgl-inline.h
+++ b/ps3/rgl/src/ps3/include/rgl-inline.h
@@ -284,11 +284,6 @@ static inline GLuint rglPlatformGetBitsPerPixel (GLenum internalFormat)
  (thisContext->current)[1] = ((surface->height - (((surface->height) & 0x1000) >> 12)) | ((origin) << 12) | ((pixelCenter) << 16)); \
  (thisContext->current) += 2;
 
-#define rglGcmSetUpdateFragmentProgramParameter(thisContext, offset, location) \
- (thisContext->current)[0] = (((1) << (18)) | ((0x000008e4))); \
- (thisContext->current)[1] = ((location+1) | (offset)); \
- (thisContext->current) += 2;
-
 static inline void rglGcmSetVertexProgramParameterBlock(struct CellGcmContextData *thisContext,
       uint32_t baseConst, uint32_t constCount, const float * __restrict value)
 {
diff --git a/ps3/rgl/src/ps3/rgl_ps3.cpp b/ps3/rgl/src/ps3/rgl_ps3.cpp
index ac4e7168f2..a6dc6b6bef 100644
--- a/ps3/rgl/src/ps3/rgl_ps3.cpp
+++ b/ps3/rgl/src/ps3/rgl_ps3.cpp
@@ -3126,16 +3126,9 @@ GLAPI void RGL_EXPORT psglSwap (void)
    }
 
    rglGcmDriver *driver = (rglGcmDriver*)_CurrentDevice->rasterDriver;
-   float * __restrict v = (float*)driver->sharedVPConstants;
-
-   thisContext->current[0] = (((33) << (18)) | ((0x00001efc)));
-   thisContext->current[1] = 0;
-
-   __builtin_memcpy(&thisContext->current[2], v, sizeof(float)*16);
-   __builtin_memcpy(&thisContext->current[18], &v[16], sizeof(float)*16);
-   thisContext->current += 34;
-   v += 32;
+   const char * __restrict v = driver->sharedVPConstants;
 
+   rglGcmSetVertexProgramParameterBlock(thisContext, 0, 8, ( float* )v );
    rglGcmSetDitherEnable(thisContext, RGLGCM_TRUE );
 
    RGLcontext *context = (RGLcontext*)_CurrentContext;
diff --git a/ps3/rgl/src/ps3/rgl_ps3_raster.cpp b/ps3/rgl/src/ps3/rgl_ps3_raster.cpp
index 11eb2681a3..7db5882996 100644
--- a/ps3/rgl/src/ps3/rgl_ps3_raster.cpp
+++ b/ps3/rgl/src/ps3/rgl_ps3_raster.cpp
@@ -183,13 +183,7 @@ template<int SIZE> static void setVectorTypeSharedvpIndex (void *data, const voi
    memcpy(driver->sharedVPConstants + resource * 4 * sizeof( float ),
          dst, 4 * sizeof(float));
 
-   thisContext->current[0] = (((5) << (18)) | ((0x00001efc)));
-   thisContext->current[1] = resource;
-   thisContext->current += 2;
-
-   __builtin_memcpy(thisContext->current, dst, sizeof(float)*4);
-   thisContext->current += 4;
-   dst += 4;
+   rglGcmSetVertexProgramParameterBlock(thisContext, resource, 1, dst ); 
 }
 
 template<int SIZE> static void setVectorTypeSharedvpIndexArray (void *data, const void* __restrict v, const int index )
@@ -209,13 +203,7 @@ template<int SIZE> static void setVectorTypeSharedvpIndexArray (void *data, cons
    memcpy(driver->sharedVPConstants + resource * 4 * sizeof( float ),
          dst, 4 * sizeof(float));
 
-   thisContext->current[0] = (((5) << (18)) | ((0x00001efc)));
-   thisContext->current[1] = resource;
-   thisContext->current += 2;
-
-   __builtin_memcpy(thisContext->current, dst, sizeof(float)*4);
-   thisContext->current += 4;
-   dst += 4;
+   rglGcmSetVertexProgramParameterBlock(thisContext, resource, 1, dst ); 
 }
 
 
@@ -1773,12 +1761,7 @@ GLAPI void APIENTRY glDrawArrays (GLenum mode, GLint first, GLsizei count)
                case CG_FIXED2:
                case CG_FIXED3:
                case CG_FIXED4:
-                  thisContext->current[0] = (((5) << (18)) | ((0x00001efc)));
-                  thisContext->current[1] = (parameterResource->resource);
-                  thisContext->current += 2;
-                  __builtin_memcpy(thisContext->current, value, sizeof(float)*4);
-                  thisContext->current += 4;
-                  value += 4;
+                  rglGcmSetVertexProgramParameterBlock(thisContext, parameterResource->resource, 1, value );
                   break;
                case CG_FLOAT4x4:
                case CG_HALF4x4:
@@ -1804,17 +1787,7 @@ GLAPI void APIENTRY glDrawArrays (GLenum mode, GLint first, GLsizei count)
                      v2[13] = value[7];
                      v2[14] = value[11];
                      v2[15] = value[15];
-                     const float * __restrict v3 = v2;
-                     thisContext->current[0] = (((17) << (18)) | ((0x00001efc)));
-                     thisContext->current[1] = parameterResource->resource;
-                     thisContext->current += 2;
-
-                     for (i=0; i < 4; ++i)
-                     {
-                        __builtin_memcpy(thisContext->current, v3, sizeof(float)*4);
-                        thisContext->current += 4;
-                        v3 += 4;
-                     }
+                     rglGcmSetVertexProgramParameterBlock(thisContext, parameterResource->resource, 4, v2 );
                   }
                   break;
                case CG_FLOAT3x3:
@@ -1828,18 +1801,7 @@ GLAPI void APIENTRY glDrawArrays (GLenum mode, GLint first, GLsizei count)
                      v2[0] = value[0];v2[1] = value[3];v2[2] = value[6];v2[3] = 0;
                      v2[4] = value[1];v2[5] = value[4];v2[6] = value[7];v2[7] = 0;
                      v2[8] = value[2];v2[9] = value[5];v2[10] = value[8];v2[11] = 0;
-                     const float * __restrict v3 = v2;
-
-                     thisContext->current[0] = (((13) << (18)) | ((0x00001efc)));
-                     thisContext->current[1] = parameterResource->resource;
-                     thisContext->current += 2;
-
-                     for (i=0; i < 3; ++i)
-                     {
-                        __builtin_memcpy(thisContext->current, v3, sizeof(float)*4);
-                        thisContext->current += 4;
-                        v3 += 4;
-                     }
+                     rglGcmSetVertexProgramParameterBlock(thisContext, parameterResource->resource, 3, v2 );
                   }
                   break;
             }
@@ -2131,8 +2093,8 @@ beginning:
       rglGcmSetInvalidateVertexCache(thisContext);
    }
 
-   uint32_t offset = gmmIdToOffset( driver->fpLoadProgramId ) + driver->fpLoadProgramOffset;
-   cellGcmSetUpdateFragmentProgramParameterLocationUnsafeInline(thisContext, offset, CELL_GCM_LOCATION_LOCAL);
+   GCM_FUNC( cellGcmSetUpdateFragmentProgramParameter, 
+         gmmIdToOffset( driver->fpLoadProgramId ) + driver->fpLoadProgramOffset );
 
    uint8_t gcmMode = 0;