If you've wanted to make FMSLogo an OOP language... here's the code you need Just put it into FMSLogo and call (NEWCLASS classname property1 default1 property2 default2) e.g. (NEWCLASS "car "fuel 100 "mph 23 "colour "red) and then call CLASSNAME.NEW objectname e.g. car.new "lorry and then access the variables with show :lorry.fuel ================================================================================== to newclass :classname [:p1 0] [:dv1 0] [:p2 0] [:dv2 0] [:p3 0] [:dv3 0] [:p4 0] [:dv4 0] [:p5 0] [:dv5 0] [:p6 0] [:dv6 0] [:p7 0] [:dv7 0] [:p8 0] [:dv8 0] [:p9 0] [:dv9 0] [:p10 0] [:dv10 0] [:p11 0] [:dv11 0] [:p12 0] [:dv12 0] ; Make variables Global make "gp1 :p1 make "gp2 :p2 make "gp3 :p3 make "gp4 :p4 make "gp5 :p5 make "gp6 :p6 make "gp7 :p7 make "gp8 :p8 make "gp9 :p9 make "gp10 :p10 make "gp11 :p11 make "gp12 :p12 make "gdv1 :dv1 make "gdv2 :dv2 make "gdv3 :dv3 make "gdv4 :dv4 make "gdv5 :dv5 make "gdv6 :dv6 make "gdv7 :dv7 make "gdv8 :dv8 make "gdv9 :dv9 make "gdv10 :dv10 make "gdv11 :dv11 make "gdv12 :dv12 ;p1, p2, etc are the property names of the class ;dv1, dv2, etc are the default values of the object ;To create a new object of this class call CLASSNAME.NEW localmake "procnewname (word :classname ".new) if definedp :procnewname [ print (sentence [Warning:] :procnewname [is already defined]) print [Please delete that procedure before continuing.] halt ] define :procnewname [ [objname] [make "objname.p1 (word :objname ". :gp1)] [make "objname.p2 (word :objname ". :gp2)] [make "objname.p3 (word :objname ". :gp3)] [make "objname.p4 (word :objname ". :gp4)] [make "objname.p5 (word :objname ". :gp5)] [make "objname.p6 (word :objname ". :gp6)] [make "objname.p7 (word :objname ". :gp7)] [make "objname.p8 (word :objname ". :gp8)] [make "objname.p9 (word :objname ". :gp9)] [make "objname.p10 (word :objname ". :gp10)] [make "objname.p11 (word :objname ". :gp11)] [make "objname.p12 (word :objname ". :gp12)] [if notequalp :gp1 0 [make :objname.p1 :gdv1]] [if notequalp :gp2 0 [make :objname.p2 :gdv2]] [if notequalp :gp3 0 [make :objname.p3 :gdv3]] [if notequalp :gp4 0 [make :objname.p4 :gdv4]] [if notequalp :gp5 0 [make :objname.p5 :gdv5]] [if notequalp :gp6 0 [make :objname.p6 :gdv6]] [if notequalp :gp7 0 [make :objname.p7 :gdv7]] [if notequalp :gp8 0 [make :objname.p8 :gdv8]] [if notequalp :gp9 0 [make :objname.p9 :gdv9]] [if notequalp :gp10 0 [make :objname.p10 :gdv10]] [if notequalp :gp11 0 [make :objname.p11 :gdv11]] [if notequalp :gp12 0 [make :objname.p12 :gdv12]] ] end