implementing camera
merging upstream