added User Agent parser