What's the right way of getting the view space normal in a surface shader?

I did this for testing:

void surf (Input IN, inout SurfaceOutput o) {
    float3 viewN = mul ((float3x3)UNITY_MATRIX_IT_MV, o.Normal);
    o.Albedo = viewN * 0.5 + 0.5;
    o.Emission = viewN * 0.5 + 0.5;
}

Have applied it to a sphere, and if it was view space normals then the colors of the sphere should be the same no matter where you view it from right? They're not. Also rotating the sphere changes the color of it.

Edit: Actually it doesn't, I was rotating the wrong object... :-(

This works:

float3 viewN = normalize( mul( UNITY_MATRIX_IT_MV, o.Normal.xyzz

).xyz );

This, from UnityCG.cginc works if the object is not rotated:

float3 viewN = mul ((float3x3)UNITY_MATRIX_IT_MV,

o.Normal);

/Patrik