StackOverflowExceptions occur when you have tried to call too many methods deep into the callstack. This is usually a sign of recursion without a base case or two methods which circularly call each other. In this case, the problem can be solved by modifying the Getter for State1 in the Package class. It currently reads:

Code:
        public string State1
        {
            get
            {
                return State1;
            }//end get
        }// end property State1
When you order it to return State1, it calls the State1 getter again, which in turn calls the State1 getter... until you run out of stack space.

It is easily corrected by replacing it with:

Code:
        public string State1
        {
            get
            {
                return State;
            }//end get
        }// end property State1
Which will return the member variable State of package rather than calling the getter again.

This sort of problem can be avoided by using some common conventions. Often, I use lowercase letter to name the member variables of my classes and Uppercase letters to name their getters/setters. Another common convention is to preceed member variables in the class with an underscore (_) to remember that they are member variables and not exposed.

Note that solving that problem exposes another, but I will let you play with the debugging on that. What debugger/IDE are you using? Visual Studio is an excellent choice. There are some others that are good too. My favorite free, open-source one is SharpDevelop which you can get here: http://www.icsharpcode.net/opensource/sd/. A good IDE with a good debugger is a programmer's best friend. I understand though why you might be confused if this was your first encounter with StackOverflowExceptions.

As a general note too, unless your instructor explicitly requires you to comment all curly brace closures ( } ), I would omit them. They merely clutter the code which hinders readability without actually convening that much information.

I hope that helps!