
Previous to the Reformation the church belonged to the Abbey of Holywood . The parish was supplied by JAMES WILLIAMSON , reader , from Beltyn 1568 to 1585 ; and united to Closeburn by the General Assembly 1606 , which union was afterwards ratified by Parliament . 1593 . RICHARD BROWN , continued in 1596 , and was trans . to Kirkconnel in that or the following year . - [ Reg . Assig . , Edin . Presb . Reg . ] 1601 . DAVID ROGERS , A. M . , was laureated at the Univ . of Edinburgh 28th July 1599 , though he had Dot attained his twenty-fifth year , be was adm . ( by the Presb . of Edinburgh , there being no Presb . in Nithsdale ) after 27th May . He was on the Exercise at Lanark 13th Nov . 1602 , continued in 1608 , and was subsequently at Caerlaverock and St . Mungo . - [ Reg . Laur . Univ . Edin . , Edin . Presb . Reg . , Reg . Assig . , Booke of the Kirk , New St . Acc . iv . ] 1612 . ALEXANDER FLEMYNG , probably trans . from Glenholm before this , pres . to the parsonage and vicarage of D. , and also to the vicarage of Closeburn by James VI . 21st Sept . 1612 . He was on the assize and chancellor of the jury in a trial for Hamesucken 8th March 1620 ; trans . to Morton 22d Dee . 1634. - [ Edin . ( Bapt . ) , and Test . Reg . , Reg . Pres . , Pitcairn 's Cr . Trials iii . , New St . Acc . iv . ] DURRISDEER . Previous to the Reformation was a Prebend , and Sub-Chantor of Glasgow . The parish was supplied by LYON BROWN , exhorter , in 1567 . 1570 . PETER YOUNG , pres . to the Sub-Chantorie by James VI . in Aug . ; demitted in 1575. [ Reg . Pres . ] 1575 . JAMES LINDSAY , pres . by James VI . 18th Dec . ( Nothing more appears of him . ) -[Reg . Pres . ] 1576 . ALEXANDER BRYSOUN , pres . by James VI . 15th Jan . ( No farther notice of him . ) [ Reg . Pres ] 1578 . HERCULES STEWART , Reader at Glencairn in 1576 , he had Mortoun , Penpont , and Tynron also in charge in 1578 ; and continued in 1579. - [ Reg . Assig . and Mina . ] 1579 . JAMES BRYSOUN , pres . by James VI . 14th and 26th Nov . ; was appointed by the Privy Council , 6th March 1589 , as one of the Commissioners for the preservation of true religion in Sanquhar or the overpart of Nithsdale , and was a member of the General Assembly May 1586 , June 1587 , Aug . 1590 , and Feb . 1596 ; demitted before 20th May 1601 , and went to Wigton . - [ Reg . Pres . , and Assig . , Edin . Presb . , and Test . Reg . , Excheq . Buik , Pitcairn 's Cr . Trials ii . , Booke of the Kirk , Calderwood 's Hist . ] 1594 . ANDREW JOHNNESTOUN . ( Of him no farther notice has been found . ) -Test . Reg . ] 1601 . THOMAS ABERNETHIE , A. M . , brother of Mr John A. , min . of Jedburgh , attained his degree at the Univ . of Edinburgh 28th July 1596 , adm . on the Exercise ( licen . ) of the Presb . 