for point (3) I I just have a shippingaddress table with each address stored in individual records and each one has a field called "default" which is an int(1) so value 0 means not default and value 1 means default address to use. so on my checkout page i have a recordset query that selects the address where that field is set to 1.
point (2) yes the registration page i added an authenicate user ages ago as originally when a customer registers i wanted them to be logged in automatically. but i never account for them registering while creating an order.