I used surface reflectance products, which are freely provided by USGS. The products include CFmask band.The CFmask band highlights the pixel values for clouds, cloud shadows, snow, water and clear. You can use these values to build a mask and remove any pixel value you don't want.
It is really deoending on the coverage percent of the cloud or haze. I personally recommend you to use any other imagery without clouds than removing clouds.Because while some techniques are removing the clouds,it deteriorates the quality of original imagery. It is one drawback of optical sensors of remote sensing.
Masking may help to certain extent.Find in https://code.google.com/p/fmask. Also use a clear imagery for reference. Also remove cloud from Landsat 8 OLI images by band 9.