Do you have a sample app showing the first problem? I can’t reproduce the problem, everything works as expected here. If you got any sample app, send it to me at epersson ‘at’ ati.com and I’ll take a look at it.
Forgot to mention, I verified a bug with arrays that has been optimized by the driver. The spec states that you can pass a uniform array larger than the actual size of the uniform and the driver should just silently ignore all data beyond the end of the array. The driver however returns GL_INVALID_VALUE instead without updating the uniform values. You can work around the problem in the mean time by either querying what the length of the array is and match this size in the glUniform call, or you can simply ensure you’re using the last element of the list so that the driver doesn’t shorten it.