separated fingerprint function