The girl on the summit of the load sat motionless, surrounded by tables and chairs with their legs upwards, backed by an oak settle, and ornamented in front by pots of geraniums, myrtles, and cactuses, together with a caged canary -- all probably from the windows of the house just vacated.  There was also a cat in a willow basket, from the partly-opened lid of which she gazed with half-closed eyes, and affectionately-surveyed the small birds around.  The handsome girl waited for some time idly in her place, and the only sound heard in the stillness was the hopping of the canary up and down the perches of its prison.  Then she looked attentively downwards.  It was not at the bird, nor at the cat; it was at an oblong package tied in paper, and lying between them.  She turned her head to learn if the waggoner were coming.  He was not yet in sight; and her eyes crept back to the package, her thoughts seeming to run upon what was inside it.  At length she drew the article into her lap, and untied the paper covering; a small swing looking- glass was disclosed, in which she proceeded to survey herself attentively.  She parted her lips and smiled.  It was a fine morning, and the sun lighted up to a scarlet glow the crimson jacket she wore, and painted a soft lustre upon her bright face and dark hair.  The myrtles, geraniums, and cactuses packed around her were fresh and green, and at such a leafless season they invested the whole concern of horses, waggon, furniture, and girl with a peculiar vernal charm.  What possessed her to indulge in such a performance in the sight of the sparrows, blackbirds, and unperceived farmer who were alone its spectators, -- whether the smile began as a factitious one, to test her capacity in that art, -- nobody knows; it ended certainly in a real smile.  She blushed at herself, and seeing her reflection blush, blushed the more.  The change from the customary spot and necessary occasion of such an act -- from the dressing hour in a bedroom to a time of travelling out of doors -- lent to the idle deed a novelty it did not intrinsically possess.  The picture was a delicate one.  Woman's prescriptive infirmity had stalked into the sunlight, which had clothed it in the freshness of an originality.  A cynical inference was irresistible by Gabriel Oak as he regarded the scene, generous though he fain would have been.  There was no necessity whatever for her looking in the glass.  She did not adjust her hat, or pat her hair, or press a dimple into shape, or do one thing to signify that any such intention had been her motive in taking up the glass.  She simply observed herself as a fair product of Nature in the feminine kind, her thoughts seeming to glide into far-off though likely dramas in which men would play a part -- vistas of probable triumphs -- the smiles being of a phase suggesting that hearts were imagined as lost and won.  Still, this was but conjecture, and the whole series of actions was so idly put forth as to make it rash to assert that intention had any part in them at all.  The waggoner's steps were heard returning.  She put the glass in the paper, and the whole again into its place.  When the waggon had passed on, Gabriel withdrew from his point of espial, and descending into the road, followed the vehicle to the turnpike-gate some way beyond the bottom of the hill, where the object of his contemplation now halted for the payment of toll.  About twenty steps still remained between him and the gate, when he heard a dispute.  It was a difference concerning twopence between the persons with the waggon and the man at the toll-bar.  "Mis'ess's niece is upon the top of the things, and she says that's enough that I've offered ye, you great miser, and she won't pay any more."  These were the waggoner's words.  "Very well; then mis'ess's niece can't pass," said the turnpike-keeper, closing the gate.  Oak looked from one to the other of the disputants, and fell into a reverie.  There was something in the tone of twopence remarkably insignificant.  Threepence had a definite value as money -- it was an appreciable infringement on a day's wages, and, as such, a higgling matter; but twopence -- "Here," he said, stepping forward and handing twopence to the gatekeeper; "let the young woman pass."  He looked up at her then; she heard his words, and looked down.  Gabriel's features adhered throughout their form so exactly to the middle line between the beauty of St. John and the ugliness of Judas Iscariot, as represented in a window of the church he attended, that not a single lineament could be selected and called worthy either of distinction or notoriety.  The red-jacketed and dark-haired maiden seemed to think so too, for she carelessly glanced over him, and told her man to drive on.  She might have looked her thanks to Gabriel on a minute scale, but she did not speak them; more probably she felt none, for in gaining her a passage he had lost her her point, and we know how women take a favour of that kind.  The gatekeeper surveyed the retreating vehicle.  "That's a handsome maid," he said to Oak.  "But she has her faults," said Gabriel.  "True, farmer." "And the greatest of them is -- well, what it is always." "Beating people down? ay, 'tis so." "O no." "What, then?" Gabriel, perhaps a little piqued by the comely traveller's indifference, glanced back to where he had witnessed her performance over the hedge, and said, "Vanity."
