Helo, Only me again, from all of my random attempts of trying to find a soultion for this i found one so i thought i would post the solution. when u define the array as a class you have to define it with a random figure i.e. public Temp(0) as Sub_Class then in the subroutine 'New' for the class "Sub_Class" you call a subroutine called create_X() Public Test as new Temp_Class(8,1,2) ..... ..... Public Class Temp_Class ..... public Temp(0) as Sub_Class ..... Private x_Value as integer Private y_Value as integer Private z_Value as integer ..... Public Sub New(ByVal x_val, ByVal y_val, ByVal z_val) ReDim Temp(Temp_Class.X) x_value = x_val y_value = y_val z_value = z_val Create_X() End Sub .... Public Sub Create_X() Dim temp_X As New Sub_Class Dim n As Integer Public Sub Create_X() For n = 0 To Temp_Class.X Me.Sub_Class(n) = temp_X Next End Sub .... .... End Class Public Class sub_Class ..... public Temp2(0) as Sub_Sub_Class ..... Public Sub New() ReDim Temp2(Temp_Class.Y) ..... Create_Y() End Sub .... Public Sub Create_Y() Dim temp_Y As New Sub_Sub_Class Dim n As Integer Public Sub Create_Y() For n = 0 To Temp_Class.Y Me.Sub_Sub_Class(n) = temp_Y Next End Sub .... .... End Class this relies on the fact hta default values have been put into the sub_Class and Sub_Sub_Class Properties in the subroutine new() and also relies on the fact the initaliation 'Test' class being called with overload. if this approach is then taken you are effectivly creating defualt values for thouse classes and by doesing so removes the problem of the computer bringing up Null References Sorry if this isnt very clear but someone else might be able to write it up more clearly if they can understand what i mean.