with GCM functionality added