added map reduce