use bounds instead of frame to ensure origin is correct