diff --git a/AssemblyTiers2.vb b/AssemblyTiers2.vb
new file mode 100644
index 0000000000000000000000000000000000000000..94273769bd9a5a8ec8f3cbd8119efa18fe61e305
--- /dev/null
+++ b/AssemblyTiers2.vb
@@ -0,0 +1,1673 @@
+Imports Microsoft.VisualBasic
+
+Public Class AssemblyTiers2
+
+    Public intStep As Integer
+    Public dCollSens As Double
+    Public intParts As Integer
+    Public primaryFasteners As New Collection
+    Public secondaryFasteners As New Collection
+    Public cAllProducts As New Collection
+    Public cRelevantProducts As New Collection
+    Public cBaseProducts As New Collection
+    Public aRemovalDistances() As Single
+    Public aAssemblyBoundaries(5) As Double
+    Public aPartBBGlob() As Single
+    Public aInitPos() As Double
+    Public sChosenDirection As String
+    Public oList As Variant
+
+
+    Sub CatMain()
+
+        'On Error Resume Next
+
+        Debug.Print "========================================================"
+
+  Dim document As ProductDocument
+  Set document = CATIA.ActiveDocument
+  
+  'Extraction of all "leaf" products to cAllProducts
+  ExtractProducts document.Product
+  
+  'Collection of "leaf" Products (without nested Products)
+  Set oInstances = cAllProducts
+  Dim i As Integer
+        Dim outputText As String
+
+        intParts = oInstances.Count
+        outputText = "This assembly contains " + CStr(oInstances.Count) + " parts" + vbNewLine
+        MsgBox outputText
+
+  'Select the assembly's base components
+        'Declare selection
+        Dim oSel As Selection
+        Dim baseSel As Object  'to deal with restricted function problem
+  Set oSel = CATIA.ActiveDocument.Selection
+  Set baseSel = oSel
+  'Create an array for CATParts
+  ReDim strArray(0)
+        strArray(0) = "Part"
+        'Display a messagebox prompting the user to select CATIA parts
+        MsgBox "Please select the assembly's base components"
+  sStatus = baseSel.SelectElement3(strArray, "Select parts", False, CATMultiSelTriggWhenUserValidatesSelection, False)
+
+        For i = 1 To baseSel.Count
+            cBaseProducts.Add baseSel.Item(i).LeafProduct
+    Debug.Print "Added base component: " & baseSel.Item(i).LeafProduct.Name
+  Next
+
+        oSel.Clear
+        baseSel.Clear
+
+        'Collision parameters
+        intStep = 1
+        dCollSens = 1
+        CollisionParams.Show
+        Debug.Print "Step = " + CStr(intStep)
+  Debug.Print "Sensitivity = " + CStr(dCollSens)
+
+  'Separation of components
+        DeactivateFasteners document.Product
+
+  'Display the number of relevant parts
+        outputText = CStr(cRelevantProducts.Count) + " parts are considered in precedence graph generation"
+        MsgBox outputText
+
+  'Distances from global axis system origin to assembly boundary (along global axis)
+        aAssemblyBoundaries(0) = 0#     'max_X
+        aAssemblyBoundaries(1) = 0#     'min_X
+        aAssemblyBoundaries(2) = 0#     'max_Y
+        aAssemblyBoundaries(3) = 0#     'min_Y
+        aAssemblyBoundaries(4) = 0#     'max_Z
+        aAssemblyBoundaries(5) = 0#     'min_Z
+
+        'Global coordinates, of which at least one has to be exceeded by the part origin, for that part to be "disassembled"
+        'in global axis directions
+        ReDim aRemovalDistances(cRelevantProducts.Count - 1, 5)
+        aRemovalDistances(0, 0) = 0#     'X_pos
+        aRemovalDistances(0, 1) = 0#     'X_neg
+        aRemovalDistances(0, 2) = 0#     'Y_pos
+        aRemovalDistances(0, 3) = 0#     'Y_neg
+        aRemovalDistances(0, 4) = 0#     'Z_pos
+        aRemovalDistances(0, 5) = 0#     'Z_neg
+
+        'Store information about secondary BB (6 distances to boundary planes from part origin along global x/y/z directions) - used to define aRemovalDistances
+        'Secondary BB: faces parallel to global origin planes and defined by outermost corner points of local BB of this part
+        ReDim aPartBBGlob(cRelevantProducts.Count - 1, 5)
+        aPartBBGlob(0, 0) = 0#           'x_part_glob_pos
+        aPartBBGlob(0, 1) = 0#           'x_part_glob_neg
+        aPartBBGlob(0, 2) = 0#           'y_part_glob_pos
+        aPartBBGlob(0, 3) = 0#           'y_part_glob_neg
+        aPartBBGlob(0, 4) = 0#           'z_part_glob_pos
+        aPartBBGlob(0, 5) = 0#           'z_part_glob_neg
+
+        Dim BBStartTime As Double
+        BBStartTime = Timer
+
+        'This is used to check whether a product must be moved in current iteration
+        ReDim bMoveable(cRelevantProducts.Count - 1) As Boolean
+
+  For i = 1 To cRelevantProducts.Count
+
+            '########## this won't work if part document name is not = part number ######
+            Dim partI As Part
+            Dim prodI As Product
+    Set prodI = cRelevantProducts.Item(i)
+    Dim docName As String
+            docName = prodI.PartNumber + ".CATPart"
+            Debug.Print ">>> " & docName & " <<<"
+    GenerateBoundingBox CATIA.Documents.Item(docName), prodI, i
+    '############################################################################
+
+            'Determine assembly 's limits
+            '    Dim partI As Part
+            '    Dim prodI As Product
+            '    Set prodI = cRelevantProducts.Item(i)
+            '    Dim docName As String
+            '    docName = prodI.PartNumber + ".CATPart"
+            '    Dim oPartDoc As PartDocument
+            '    Dim sPartPath As String
+            '    sPartPath = prodI.GetMasterShapeRepresentationPathName
+            '    Set oPartDoc = CATIA.Documents.Read(sPartPath)
+            '    Debug.Print ">>> " & docName & " <<<"
+            'CATIA.Documents.Item(docName)
+            '   GenerateBoundingBox oPartDoc, prodI, i
+
+            'Base component is in cRelevantProducts, but not moveable
+            If productIsInCollection(prodI, cBaseProducts) Then
+                bMoveable(i - 1) = False
+            Else
+                bMoveable(i - 1) = True
+            End If
+
+        Next i
+
+        Dim BBSecondsElapsed As Double
+        BBSecondsElapsed = Round(Timer - BBStartTime, 2)
+        MsgBox "Bounding box calculation took " & CStr(BBSecondsElapsed) & " seconds"
+
+  MsgBox "Assembly Boundaries: " & vbNewLine &
+  "max_X = " & aAssemblyBoundaries(0) & vbNewLine &
+  "min_X = " & aAssemblyBoundaries(1) & vbNewLine &
+  "max_Y = " & aAssemblyBoundaries(2) & vbNewLine &
+  "min_Y = " & aAssemblyBoundaries(3) & vbNewLine &
+  "max_Z = " & aAssemblyBoundaries(4) & vbNewLine &
+  "min_Z = " & aAssemblyBoundaries(5)
+
+  'After the aAssemblyBoundaries and aPartBBGlob are calculated, define aRemovalDistances
+        For i = 0 To cRelevantProducts.Count - 1
+            aRemovalDistances(i, 0) = aAssemblyBoundaries(0) - aPartBBGlob(i, 1)
+            aRemovalDistances(i, 1) = aAssemblyBoundaries(1) - aPartBBGlob(i, 0)
+            aRemovalDistances(i, 2) = aAssemblyBoundaries(2) - aPartBBGlob(i, 3)
+            aRemovalDistances(i, 3) = aAssemblyBoundaries(3) - aPartBBGlob(i, 2)
+            aRemovalDistances(i, 4) = aAssemblyBoundaries(4) - aPartBBGlob(i, 5)
+            aRemovalDistances(i, 5) = aAssemblyBoundaries(5) - aPartBBGlob(i, 4)
+        Next i
+
+        MsgBox "Removal distances for " & cRelevantProducts.Item(1).PartNumber & ":" & vbNewLine &
+        "X_pos = " & aRemovalDistances(0, 0) & vbNewLine &
+        "X_neg = " & aRemovalDistances(0, 1) & vbNewLine &
+        "Y_pos = " & aRemovalDistances(0, 2) & vbNewLine &
+        "Y_neg = " & aRemovalDistances(0, 3) & vbNewLine &
+        "Z_pos = " & aRemovalDistances(0, 4) & vbNewLine &
+        "Z_neg = " & aRemovalDistances(0, 5)
+
+  '#################### Main algorithm ##########################
+        Dim intI As Integer                   'total number of components in the scene minus base parts
+        Dim intJ As Integer                   'number of primary directions (default: global + local)
+        Dim intTier As Integer                'number of current assembly tier
+        Dim int_i As Integer                  'product index in cRelevantProducts
+        Dim int_i_cycle As Integer            'product counter
+        Dim int_j As Integer                  'primary direction index 1..12
+        Dim int_k As Integer                  'secondary direction index 1..10
+        Dim total_coll As Long                'counter of total collision detections
+        Dim cDeactivated As New Collection    'really deactivated products
+        Dim cVirtual As New Collection        'these funny green parts
+        Dim precedenceMatrix() As Single
+        ReDim disassDir(cRelevantProducts.Count - 1, 11)
+        ReDim aTiers(cRelevantProducts.Count - 1) As Integer
+  ReDim aInitPos(cRelevantProducts.Count - 1, 11)     'remember initial positions of the products
+        ReDim bInitPosRecorded(cRelevantProducts.Count - 1) As Boolean
+  ReDim precedenceMatrix(cRelevantProducts.Count - 1, cRelevantProducts.Count - 1)
+        ReDim bDeactivated(cRelevantProducts.Count - 1) As Boolean
+  
+  intI = cRelevantProducts.Count    'the index of base components will be simply skipped (cRelevantProducts includes cBaseProducts, unlike in the paper!)
+        intJ = 6                          'number of disassembly directions (6 - only global axes, 12 - including local axes)
+        intTier = 1                       'counts current disassembly tier (lower number means earlier disassembly possible) - this gets reversed in the end
+        int_i = 1                         'index of current part in collection of relevant products
+        int_i_cycle = 1                   'counter for the current tier iteration
+        int_j = 1                         'index of disassembly direction
+        int_j_temp = 0                    'used to display movement direction once
+        total_coll = 0
+
+        'map indices to directions (careful, starts from 0 here, but the paper and moveProduct uses 1 as start)
+        Dim d1
+  Set d1 = CreateObject("Scripting.Dictionary")
+  d1.Add 0, "Global X+"
+  d1.Add 1, "Global Y+"
+  d1.Add 2, "Global Z+"
+  d1.Add 3, "Global X-"
+  d1.Add 4, "Global Y-"
+  d1.Add 5, "Global Z-"
+  d1.Add 6, "Local X+"
+  d1.Add 7, "Local Y+"
+  d1.Add 8, "Local Z+"
+  d1.Add 9, "Local X-"
+  d1.Add 10, "Local Y-"
+  d1.Add 11, "Local Z-"
+
+  'access the clash technology object
+        Dim cClashes As Clashes
+  Set cClashes = CATIA.ActiveDocument.Product.GetTechnologicalObject("Clashes")
+  'access the groups technology object
+  Dim cGroups As Groups
+  Set cGroups = CATIA.ActiveDocument.Product.GetTechnologicalObject("Groups")
+  
+  'calculate initial clashes (due to imprecise modelling or STEP file export...)
+'  Dim cInitClashes As New Collection
+'  Dim oInitClash 'As Clash
+'  'Set oInitClash = cInitClashes.Add
+'  oInitClash.ComputationType = catClashComputationTypeBetweenAll
+'  oInitClash.Compute
+'  Dim cInitConflicts As Conflicts
+'  Set cInitConflicts = oInitClash.Conflicts
+'  Dim numConfl As Integer
+'  Dim numClashes As Integer
+'  numClashes = 0
+'  For numConfl = 1 To cInitConflicts.Count
+'    If cInitConflicts.Item(numConfl).Type = catConflictTypeClash Then
+'      cInitClashes.Add cInitConflicts.Item(numConfl)
+'      numClashes = numClashes + 1
+'    End If
+'  Next numConfl
+'  MsgBox CStr(numClashes) & " clashes were detected in the original model."
+
+  Dim StartTime As Double
+        StartTime = Timer
+
+        Do
+
+            'Processing next Product
+            Dim product1 As Product
+    Set product1 = cRelevantProducts.Item(int_i)
+    Debug.Print "Processing " & product1.Name & " [tier=" & intTier & ", i_cycle=" & int_i_cycle & ", I=" & intI & "]"
+
+    'Skip not moveable products
+            If Not bMoveable(int_i - 1) Then
+                'the part is a base component or deactivated
+                GoTo entry0
+            End If
+
+            'Remember initial position P_i (initPos)
+            Dim initPos(11)
+            Dim oPosition1 As Object
+    Set oPosition1 = product1.Position
+    oPosition1.GetComponents initPos
+    If bInitPosRecorded(int_i - 1) = False Then
+                Dim ip As Integer
+                For ip = 0 To 11
+                    aInitPos(int_i - 1, ip) = initPos(ip)
+                Next ip
+                bInitPosRecorded(int_i - 1) = True
+            End If
+
+            'For each product, determine whether it is a base product, deactivated or virtual
+            '    Dim bBaseProduct As Boolean
+            '    bBaseProduct = productIsInCollection(product1, cBaseProducts)
+            '    Dim bDeactivated As Boolean
+            '    bDeactivated = productIsInCollection(product1, cDeactivated)
+            '    Dim bVirtual As Boolean
+            '    bVirtual = productIsInCollection(product1, cVirtual)
+
+            'Group that includes our product (needed for collision detection between two selections or groups)
+            Dim group1 As Group
+    Set group1 = cGroups.Add
+    group1.AddExplicit product1
+
+    'Create a Group of Products that this product shouldn't collide with
+            Dim group2 As Group
+    Set group2 = cGroups.Add
+    Dim iStaticProduct As Integer
+            For iStaticProduct = 1 To cRelevantProducts.Count
+                If iStaticProduct <> int_i And Not bDeactivated(iStaticProduct - 1) Then
+                    group2.AddExplicit cRelevantProducts.Item(iStaticProduct)
+      End If
+            Next iStaticProduct
+
+            Do
+entry1:
+                'Movement step in a given direction
+
+                'If it is a movable part (not base component or already deactivated or "virtual" part from higher tier)...
+                If bMoveable(int_i - 1) = True Then
+
+                    'move component intStep distance in int_j direction
+                    moveProduct product1, int_j, True
+
+        'display current disassembly direction once it changes
+                    If int_j <> int_j_temp Then
+                        Debug.Print "[" & d1.Item(int_j - 1) & "]"
+          int_j_temp = int_j
+                    End If
+
+                    'collision detection
+                    If collisionDetected(cClashes, group1, group2) Then
+
+                        'check for collisions with higher tier
+                        Dim detConflicts As Conflicts
+          Set detConflicts = cClashes.Item(cClashes.Count).Conflicts
+          
+          If detConflicts.Count > 0 Then
+
+                            Dim oConflict1 As Conflict
+                            Dim ic As Integer
+
+                            For ic = 1 To detConflicts.Count
+            
+              Set oConflict1 = detConflicts.Item(ic)
+              oConflict1.Status = catConflictStatusRelevant
+
+                                If oConflict1.Type = catConflictTypeClash Then
+
+                                    If oConflict1.Value < -dCollSens Then
+
+                                        Dim secProduct As Product
+                  'get the product we collided with
+                  Set secProduct = oConflict1.SecondProduct
+                  
+                  'find the tier of the second product
+                  Dim dummyProd As Product
+                                        Dim iIndex As Integer
+                                        iIndex = 0
+                                        For Each dummyProd In cRelevantProducts
+                                            If dummyProd.Name = secProduct.Name Then
+                                                Exit For
+                                            End If
+                                            iIndex = iIndex + 1
+                                        Next dummyProd
+                                        Dim secTier As Integer
+                                        secTier = aTiers(iIndex)
+
+                                        'as soon as secTier is not the direct higher tier, no reason to move further
+                                        If secTier < intTier - 1 Then
+                                            GoTo exit1
+                                        End If
+
+                                        'if the disassembly tier is 1 lower (attention: tiers get reversed in the end to the assembly tiers!)
+                                        If secTier = intTier - 1 And Not (secTier = 0 And intTier = 1) Then
+
+                                            Debug.Print "Collision with higher tier: " & oConflict1.FirstProduct.Name & " - " & oConflict1.SecondProduct.Name & " = " & oConflict1.Value
+
+                    'record precedence relation, because secProduct is an obstacle in the way of the current product
+                                            precedenceMatrix(int_i - 1, iIndex) = 1
+
+                                            'move the product through the "virtual" part from higher tier
+                                            GoTo entry1
+
+                                        End If
+
+                                    End If  'deeper than dCollSens
+
+                                End If    'clash
+
+                            Next ic 'next conflict
+
+                        End If
+exit1:
+                        'move product to initial position
+                        Dim oPosition3 As Object
+          Set oPosition3 = product1.Position
+          oPosition3.SetComponents initPos
+          'take next direction
+                        int_j = int_j + 1
+                        'if not all directions are checked for this product...
+                        If int_j <= intJ Then
+                            'continue movement in primary directions (movement loop)
+                        Else
+                            'all directions were checked
+                            total_coll = total_coll + intJ
+                            Debug.Print "Disassembly trials: " & total_coll
+            int_i = int_i + 1
+                            int_i_cycle = int_i_cycle + 1
+                            int_j = 1
+                            int_j_temp = 0
+
+                            'if active products remain in this cycle...
+                            If int_i_cycle <= intI - cBaseProducts.Count Then
+                                'process next product in this cycle
+                                Exit Do
+                            Else
+                                'all components in this cycle were checked
+                                Dim p As Integer
+                                Dim intItemp As Integer
+                                intItemp = intI
+                                'record tiers
+                                For p = 1 To cRelevantProducts.Count
+                                    If productIsInCollection(cRelevantProducts.Item(p), cBaseProducts) Then
+                                        'base product always has tier 0 (doesn't get reversed)
+                                        aTiers(p - 1) = 0
+                                    Else
+                                        'not a base product
+                                        'product has valid disass. directions and has no tier recorded yet
+                                        If productHasValidDisassDir(p, disassDir) And Not aTiers(p - 1) > 0 Then
+                                            'save tier
+                                            aTiers(p - 1) = intTier
+                                            'decrease the counter of active products in assembly
+                                            intI = intI - 1
+                                            'change visuals for "virtual" products
+                                            Dim virtSelection As Selection
+                    Set virtSelection = document.Selection
+                    virtSelection.Clear
+                                            virtSelection.Add cRelevantProducts.Item(p)
+                    Set visProperties1 = virtSelection.VisProperties
+                    visProperties1.SetRealColor 80, 255, 160, 1
+                    virtSelection.Clear
+                                            'remember virtual green products
+                                            'cVirtual.Add cRelevantProducts.Item(p)
+                                            'fix position
+                                            bMoveable(p - 1) = False
+                                        End If
+                                        'product from higher tier
+                                        If productHasValidDisassDir(p, disassDir) And aTiers(p - 1) = intTier - 1 Then
+                                            'deactivate
+                                            Dim selection2 As Selection
+                    Set selection2 = CATIA.ActiveDocument.Selection
+                    selection2.Clear
+                                            selection2.Add cRelevantProducts.Item(p)
+                    CATIA.StartCommand("Activate / Deactivate Component")
+                                            selection2.Clear
+                                            cDeactivated.Add cRelevantProducts.Item(p)
+                    bDeactivated(p - 1) = True
+                                        End If
+                                    End If
+                                Next p
+
+                                'Notify the user if no parts could be disassembled in this tier
+                                If intI = intItemp Then
+                                    Debug.Print "WARNING! No parts could be removed during this cycle." & vbNewLine & "This is usually due to inaccuracies in modelling (e.g. collisions in initial assembly)."
+                GoTo exitCD
+                                End If
+
+                                'recalculate assembly boundaries and removal distances
+                                RecalculateRemovalDistances cRelevantProducts, cDeactivated
+
+              'if there are still parts to disassemble...
+                                If intI > cBaseProducts.Count Then
+                                    'increment tier
+                                    intTier = intTier + 1
+                                    'process next cycle of products
+                                    int_i = 1
+                                    int_i_cycle = 1
+                                    Exit Do
+                                Else
+                                    'all parts were disassembled
+                                    'end collision detection algorithm
+                                    GoTo exitCD
+                                End If
+                            End If
+                        End If
+                    Else
+                        'no collisions after the movement step
+                        'check whether part reached final position
+                        If productReachedFinalPosition(product1, int_i) Then
+                            'store valid disassembly direction
+                            disassDir(int_i - 1, int_j - 1) = 1
+                            GoTo exit1
+                        Else
+                            'continue movement in primary directions (movement loop)
+                        End If
+                    End If
+                Else
+entry0:
+                    'the part is a base component or deactivated
+                    Debug.Print "Skipping " + product1.Name + " (base component or deactivated)"
+        int_i = int_i + 1
+                    'process next product
+                    Exit Do
+                End If
+            Loop    'movement loop
+        Loop  'product loop
+
+exitCD:
+
+        Dim SecondsElapsed As Double
+        SecondsElapsed = Round(Timer - StartTime, 2)
+        MsgBox "Collision detection algorithm finished execution after " & CStr(SecondsElapsed) & " seconds"
+
+  'Return products to their initial positions, activate them
+        Dim p1 As Integer
+        For p1 = 1 To cRelevantProducts.Count
+            If Not productIsInCollection(cRelevantProducts.Item(p1), cBaseProducts) Then
+                Dim oPosition4 As Object
+      Set oPosition4 = cRelevantProducts.Item(p1).Position
+      Dim aPos(11)
+                For comp = 0 To 11
+                    aPos(comp) = aInitPos(p1 - 1, comp)
+                Next comp
+                oPosition4.SetComponents aPos
+      Dim selection4 As Selection
+      Set selection4 = CATIA.ActiveDocument.Selection
+      selection4.Clear
+                selection4.Add cRelevantProducts.Item(p1)
+      CATIA.StartCommand("Activate / Deactivate Component")
+                selection4.Clear
+            End If
+        Next p1
+
+        'Select a single extraction direction in case there are multiple
+        Dim d2
+  Set d2 = CreateObject("Scripting.Dictionary")
+  d2.Add "Global X+", 0
+  d2.Add "Global Y+", 1
+  d2.Add "Global Z+", 2
+  d2.Add "Global X-", 3
+  d2.Add "Global Y-", 4
+  d2.Add "Global Z-", 5
+  d2.Add "Local X+", 6
+  d2.Add "Local Y+", 7
+  d2.Add "Local Z+", 8
+  d2.Add "Local X-", 9
+  d2.Add "Local Y-", 10
+  d2.Add "Local Z-", 11
+  'Inverse axis indices
+        Dim d3
+  Set d3 = CreateObject("Scripting.Dictionary")
+  d3.Add 0, 3
+  d3.Add 1, 4
+  d3.Add 2, 5
+  d3.Add 3, 0
+  d3.Add 4, 1
+  d3.Add 5, 2
+  d3.Add 6, 9
+  d3.Add 7, 10
+  d3.Add 8, 11
+  d3.Add 9, 6
+  d3.Add 10, 7
+  d3.Add 11, 8
+  For int_i = 0 To cRelevantProducts.Count - 1
+            Dim sum As Integer
+            sum = 0
+            For intAxis = 0 To intJ - 1
+                sum = sum + disassDir(int_i, intAxis)
+            Next intAxis
+            'Only for products with multiple extraction directions
+            If sum > 1 Then
+                'Add options to ComboBox
+                For intAxis = 0 To intJ - 1
+                    If disassDir(int_i, intAxis) = 1 Then
+                        ExtractionDirection.ComboBox1.AddItem d1.Item(intAxis)
+        End If
+                Next intAxis
+                'Highlight the product in CATIA
+                Dim selection5 As Selection
+      Set selection5 = CATIA.ActiveDocument.Selection
+      selection5.Clear
+                selection5.Add cRelevantProducts.Item(int_i + 1)
+      'Show dialog
+                ExtractionDirection.Show
+                selection5.Clear
+                'Translate chosen axis name back into index 0..11
+                Dim iChosenDir As Integer
+                iChosenDir = d2.Item(sChosenDirection)
+                'Set all other disassembly directions to 0
+                For intAxis = 0 To intJ - 1
+                    If intAxis = iChosenDir Then
+                        disassDir(int_i, intAxis) = 1
+                    Else
+                        disassDir(int_i, intAxis) = 0
+                    End If
+                Next intAxis
+            End If
+            'Reverse tier values
+            Dim intMaxTier As Integer
+            intMaxTier = intTier
+            If aTiers(int_i) <> 0 Then
+                aTiers(int_i) = intMaxTier + 1 - aTiers(int_i)
+            End If
+            'Reverse disassembly axis (assembly axis = -disass. axis)
+            For intAxis = 0 To intJ - 1
+                If disassDir(int_i, intAxis) = 1 Then
+                    disassDir(int_i, intAxis) = 0
+                    disassDir(int_i, d3.Item(intAxis)) = 1
+                    Exit For
+                End If
+            Next intAxis
+        Next int_i
+
+        'Association of components belonging to sequential tiers
+
+        Dim cClashes1 As Clashes
+        Dim oClash1 'As Clash
+  Set oClash1 = cClashes.Add
+  oClash1.ComputationType = catClashComputationTypeBetweenAll
+        oClash1.Compute
+        Dim cInitConflicts As Conflicts
+  Set cInitConflicts = oClash1.Conflicts
+  Dim initConfl As Conflict
+        Dim nConfl As Integer
+        nConfl = 0
+        For Each initConfl In cInitConflicts
+            Dim firstIndex As Integer
+            Dim secondIndex As Integer
+            firstIndex = GetProductIndex(initConfl.FirstProduct, cRelevantProducts)
+            secondIndex = GetProductIndex(initConfl.SecondProduct, cRelevantProducts)
+            If aTiers(firstIndex) = aTiers(secondIndex) - 1 Then
+                precedenceMatrix(firstIndex, secondIndex) = 1
+            End If
+            If aTiers(secondIndex) = aTiers(firstIndex) - 1 Then
+                precedenceMatrix(secondIndex, firstIndex) = 1
+            End If
+        Next initConfl
+  
+'  For int_i = 1 To cRelevantProducts.Count
+'    Dim bNoContacts As Boolean
+'    bNoContacts = True
+'    'loop over components from previous tier
+'    For int_j = 1 To cRelevantProducts.Count
+'      If aTiers(int_j - 1) = aTiers(int_i - 1) - 1 And aTiers(int_i - 1) <> 0 Then
+'        'Test for contact
+'        'define two groups
+'        Dim group11 As Group
+'        Dim group21 As Group
+'        Set group11 = cGroups.Add
+'        Set group21 = cGroups.Add
+'        group11.AddExplicit cRelevantProducts.Item(int_i)
+'        group21.AddExplicit cRelevantProducts.Item(int_j)
+'        'create a new clash analysis
+'        Dim oClash 'As Clash
+'        Set oClash = cClashes.Add
+'        oClash.ComputationType = catClashComputationTypeBetweenTwo
+'        oClash.FirstGroup = group11
+'        oClash.SecondGroup = group21
+'        oClash.InterferenceType = catClashInterferenceTypeContact
+'        oClash.Compute
+'        Dim cConflicts As Conflicts
+'        Set cConflicts = oClash.Conflicts
+'        If cConflicts.Count > 0 Then
+'          precedenceMatrix(int_j - 1, int_i - 1) = 1
+'          bNoContacts = False
+'        End If
+'      End If
+'    Next int_j
+'  Next int_i
+  
+  'Export data to Excel
+  Set objExcel = CreateObject("Excel.Application")
+  objExcel.Visible = True
+        objExcel.Workbooks.Add
+        objExcel.ActiveWorkbook.Sheets.Add.Name = "Precedence Matrix"
+  Set objSheet1 = objExcel.ActiveWorkbook.Worksheets(2)
+  objSheet1.Name = "Assembly Directions"
+  Set objSheet2 = objExcel.ActiveWorkbook.Worksheets(1)
+  
+  'Assembly directions
+  objSheet1.Cells(1, 1).Value = "Product"
+        objSheet1.Cells(1, 2).Value = "+X"
+        objSheet1.Cells(1, 3).Value = "+Y"
+        objSheet1.Cells(1, 4).Value = "+Z"
+        objSheet1.Cells(1, 5).Value = "-X"
+        objSheet1.Cells(1, 6).Value = "-Y"
+        objSheet1.Cells(1, 7).Value = "-Z"
+        objSheet1.Cells(1, 8).Value = "Assembly Tier"
+        For int_i = 1 To cRelevantProducts.Count
+            objSheet1.Cells(int_i + 1, 1).Value = cRelevantProducts.Item(int_i).Name
+            For intAxis = 0 To intJ - 1
+                objSheet1.Cells(int_i + 1, 2 + intAxis).Value = disassDir(int_i - 1, intAxis)
+            Next intAxis
+            objSheet1.Cells(int_i + 1, intJ + 2).Value = aTiers(int_i - 1)
+        Next int_i
+
+        'Precedence relations
+        For int_i = 1 To cRelevantProducts.Count
+            For int_j = 1 To cRelevantProducts.Count
+                objSheet2.Cells(int_i, int_j).Value = precedenceMatrix(int_i - 1, int_j - 1)
+            Next int_j
+        Next int_i
+
+    End Sub
+    Sub ExtractProducts(oCurrentProduct As Product)
+
+        Dim oCurrentTreeNode As Product
+        Dim i As Integer
+
+        For i = 1 To oCurrentProduct.Products.Count
+    Set oCurrentTreeNode = oCurrentProduct.Products.Item(i)
+
+    'recursive
+    If oCurrentTreeNode.Products.Count > 0 Then
+                ExtractProducts oCurrentTreeNode
+    Else
+                Debug.Print oCurrentTreeNode.PartNumber & " (" & oCurrentTreeNode.Name & ") is a leaf product"
+      'remove special characters from the part number
+                Dim newPartNo As String
+                Dim newCharacter As String
+                newCharacter = " "
+                newPartNo = oCurrentTreeNode.PartNumber
+                newPartNo = Replace(newPartNo, "<", newCharacter)
+                newPartNo = Replace(newPartNo, ">", newCharacter)
+                newPartNo = Replace(newPartNo, "/", newCharacter)
+                oCurrentTreeNode.PartNumber = newPartNo
+                cAllProducts.Add oCurrentTreeNode
+    End If
+
+        Next
+
+    End Sub
+
+    Sub GetNextNode(oCurrentProduct As Product)
+
+        Dim oCurrentTreeNode As Product
+        Dim i As Integer
+
+        For i = 1 To oCurrentProduct.Products.Count
+    Set oCurrentTreeNode = oCurrentProduct.Products.Item(i)
+    
+    If IsPart(oCurrentTreeNode) = True Then
+                MsgBox oCurrentTreeNode.PartNumber & " is a part"
+    ElseIf IsProduct(oCurrentTreeNode) = True Then
+                MsgBox oCurrentTreeNode.PartNumber & " is a product"
+    Else
+                MsgBox oCurrentTreeNode.PartNumber & " is a component"
+    End If
+
+            'recursive
+            If oCurrentTreeNode.Products.Count > 0 Then
+                GetNextNode oCurrentTreeNode
+    End If
+
+        Next
+
+    End Sub
+
+    Function IsPart(objCurrentProduct As Product) As Boolean
+
+        Dim oTestPart As PartDocument
+  
+  Set oTestPart = Nothing
+  
+  On Error Resume Next
+  
+  Set oTestPart = CATIA.Documents.Item(objCurrentProduct.PartNumber & ".CATPart")
+  
+  If Not oTestPart Is Nothing Then
+            IsPart = True
+        Else
+            IsPart = False
+        End If
+
+    End Function
+
+    Function IsProduct(objCurrentProduct As Product) As Boolean
+
+        Dim oTestProduct As ProductDocument
+   
+    Set oTestProduct = Nothing
+   
+    On Error Resume Next
+     
+        Set oTestProduct = CATIA.Documents.Item(objCurrentProduct.PartNumber & ".CATProduct")
+
+        If Not oTestProduct Is Nothing Then
+            IsProduct = True
+        Else
+            IsProduct = False
+        End If
+
+    End Function
+
+    Function DeactivateFasteners(objProduct As Product)
+
+        Dim objParts As New Collection
+    'On the top level of product tree
+    'Set objParts = objProduct.Products
+    'Recursive
+    Set objParts = cAllProducts
+    Dim i As Integer
+        Dim selection1 As Selection
+    Set selection1 = CATIA.ActiveDocument.Selection
+    selection1.Clear
+
+        Dim intFasteners As Integer
+        intFasteners = 0
+
+        For i = 1 To objParts.Count
+            Dim sName As String
+            Dim prod As Product
+            Dim primFastSize As Integer
+        
+        Set prod = objParts.Item(i)
+        sName = LCase(prod.PartNumber)
+            'Debug.Print sName
+            If InStr(sName, "bolt") > 0 Then
+                Debug.Print(prod.Name + " was identified as a bolt")
+                selection1.Add prod
+
+            primaryFasteners.Add prod
+
+            CATIA.StartCommand("Activate / Deactivate Component")
+                selection1.Clear
+                intFasteners = intFasteners + 1
+            ElseIf InStr(sName, "screw") Or InStr(sName, "schraube") > 0 Then
+                Debug.Print(prod.Name + " was identified as a screw")
+                selection1.Add prod
+
+            primaryFasteners.Add prod
+
+            CATIA.StartCommand("Activate / Deactivate Component")
+                selection1.Clear
+                intFasteners = intFasteners + 1
+            ElseIf InStr(sName, "clip") > 0 Then
+                Debug.Print(prod.Name + " was identified as a clip")
+                selection1.Add prod
+
+            primaryFasteners.Add prod
+
+            CATIA.StartCommand("Activate / Deactivate Component")
+                selection1.Clear
+                intFasteners = intFasteners + 1
+            ElseIf InStr(sName, "wedge") > 0 Then
+                Debug.Print(prod.Name + " was identified as a wedge")
+                selection1.Add prod
+
+            primaryFasteners.Add prod
+
+            CATIA.StartCommand("Activate / Deactivate Component")
+                selection1.Clear
+                intFasteners = intFasteners + 1
+            ElseIf InStr(sName, "pin") > 0 Then
+                Debug.Print(prod.Name + " was identified as a pin")
+                selection1.Add prod
+
+            primaryFasteners.Add prod
+
+            CATIA.StartCommand("Activate / Deactivate Component")
+                selection1.Clear
+                intFasteners = intFasteners + 1
+            ElseIf InStr(sName, "nut") > 0 Then
+                Debug.Print(prod.Name + " was identified as a nut")
+                selection1.Add prod
+
+            secondaryFasteners.Add prod
+
+            CATIA.StartCommand("Activate / Deactivate Component")
+                selection1.Clear
+                intFasteners = intFasteners + 1
+            ElseIf InStr(sName, "washer") > 0 Then
+                Debug.Print(prod.Name + " was identified as a washer")
+                selection1.Add prod
+
+            secondaryFasteners.Add prod
+
+            CATIA.StartCommand("Activate / Deactivate Component")
+                selection1.Clear
+                intFasteners = intFasteners + 1
+            Else
+                cRelevantProducts.Add prod
+        End If
+        Next
+
+        'CATIA.StartCommand ("Activate / Deactivate Component")
+        Debug.Print "Deactivated " + CStr(intFasteners) + " fasteners"
+    intParts = intParts - intFasteners
+        Debug.Print CStr(intParts) + " parts to assemble"
+    MsgBox "Fasteners are deacivated. Press OK to proceed."
+
+End Function
+
+    Function GenerateBoundingBox(partDocument1 As PartDocument, objProduct As Product, i As Integer)
+        'Processes a single part to extract its origin XYZ, min/max X/Y/Z
+
+        CATIA.DisplayFileAlerts = False
+
+        'Declare variables
+        Dim axis
+        Dim remake
+        Dim part1 As Part
+        Dim axisref As Object
+        Dim shapeFactory1 As ShapeFactory
+        Dim hybridShapeFactory1 As hybridShapeFactory
+        Dim sStatus As String
+        Dim hybridShapeD1, hybridShapeD2, hybridShapeD3 As HybridShapeDirection
+        Default Dim, a1, a2, a3, a4, a5, a6 'To change the offsets of the box
+        Dim bodies1 As Bodies
+        Dim body1 As Body
+        Dim reference1 As Reference
+        Dim HybridShapeExtremum1, HybridShapeExtremum2, HybridShapeExtremum3 As HybridShapeExtremum
+        Dim HybridShapeExtremum4, HybridShapeExtremum5, HybridShapeExtremum6 As HybridShapeExtremum
+        Dim originCoord(2)
+        Dim faceSel As Object
+
+        'Check whether we are processing a Part
+        If (InStr(partDocument1.Name, ".CATPart")) <> 0 Then
+        Set part1 = partDocument1.Part
+        Set hybridShapeFactory1 = part1.hybridShapeFactory
+
+        Dim axiscoord(2)
+            Dim axissyst
+
+            Dim axisSystem As axisSystem
+        Set axisSystem = part1.AxisSystems.Item(1)
+            
+        Set axissyst = axisSystem
+        Set axisref = axisSystem
+        
+        ref_name_systaxis = axissyst.Name
+
+            axissyst.IsCurrent = 1
+            axissyst.Name = "BBoxAxis"
+            axname = axissyst.Name
+
+            'Get Product's Position (rotation and translation)
+            '(for now: relative to the parent product!)
+            Dim PositionArray(11)
+            Dim oPosition As Object
+        Set oPosition = objProduct.Position
+        oPosition.GetComponents PositionArray
+
+        Dim originpoint As HybridShapePointCoord
+            axissyst.GetOrigin originCoord
+        'MsgBox "X0 = " & CStr(originCoord(0)) & vbNewLine & "Y0 = " & CStr(originCoord(1)) & vbNewLine & "Z0 = " & CStr(originCoord(2))
+        
+        Set originpoint = hybridShapeFactory1.AddNewPointCoord(originCoord(0), originCoord(1), originCoord(2))
+        Set axisref = part1.CreateReferenceFromObject(originpoint)
+        axissyst.GetXAxis axiscoord
+        Set hybridShapeD1 = hybridShapeFactory1.AddNewDirectionByCoord(axiscoord(0), axiscoord(1), axiscoord(2))
+        axissyst.GetYAxis axiscoord
+        Set hybridShapeD2 = hybridShapeFactory1.AddNewDirectionByCoord(axiscoord(0), axiscoord(1), axiscoord(2))
+        axissyst.GetZAxis axiscoord
+        Set hybridShapeD3 = hybridShapeFactory1.AddNewDirectionByCoord(axiscoord(0), axiscoord(1), axiscoord(2))
+
+        'hybridShapeD1&2 are not set yet, but used for line creation (from origin of the axis system)
+        Dim Plane_line_1 As HybridShapeLinePtDir
+        Set Plane_line_1 = hybridShapeFactory1.AddNewLinePtDir(originpoint, hybridShapeD1, 0, 0, False)
+        Dim Plane_line_2 As HybridShapeLinePtDir
+        Set Plane_line_2 = hybridShapeFactory1.AddNewLinePtDir(originpoint, hybridShapeD2, 0, 0, False)
+              
+        Dim oBodies As Bodies
+        Set oBodies = part1.Bodies
+
+        'J is defined to make unique names for Axis and the Body for the bounding box
+        Dim j As Integer
+            j = oBodies.Count
+
+        'Add new Body "Bounding Box."j to the Bodies of the current Part
+        Set bodies1 = part1.Bodies
+        Set body1 = bodies1.Add()
+        body1.Name = "Bounding Box." & j
+            
+        Set hybridBodies1 = body1.HybridBodies
+        Dim hybridBody1 As HybridBody
+        Set hybridBody1 = hybridBodies1.Add
+        hybridBody1.Name = "definition_points"
+        
+
+        'Pick a face of the part to use for HybridShapeExtract
+        Set faceSel = CATIA.ActiveDocument.Selection
+        faceSel.Clear
+            'The current Part is added to the selection
+            faceSel.Add part1
+        'The selection gets rewritten by all the Faces of the selected part ("sel")
+            faceSel.Search "Type=Face,sel"
+
+        Debug.Print "Selected faces: " & CStr(faceSel.Count)
+
+        'Need to check whether Extract crashes given this face and try the next one
+            Dim f As Integer
+            For f = 1 To faceSel.Count
+        
+            'On Error GoTo ContinueFaceLoop
+
+            Set reference1 = faceSel.Item(f).Value
+            Debug.Print TypeName(reference1)
+
+            Dim hybridShapeExtract1 As HybridShapeExtract
+            Set hybridShapeExtract1 = hybridShapeFactory1.AddNewExtract(reference1)
+            hybridShapeExtract1.PropagationType = 1 'point continuity
+                hybridShapeExtract1.ComplementaryExtract = False
+                hybridShapeExtract1.IsFederated = False
+            Set reference1 = hybridShapeExtract1
+
+            'Create the 6 Extrenum items for the Solid/Surf.  May not be single points, will be solved with next points
+            Set HybridShapeExtremum1 = hybridShapeFactory1.AddNewExtremum(reference1, hybridShapeD1, 1)
+            Set HybridShapeExtremum2 = hybridShapeFactory1.AddNewExtremum(reference1, hybridShapeD1, 0)
+            Set HybridShapeExtremum3 = hybridShapeFactory1.AddNewExtremum(reference1, hybridShapeD2, 1)
+            Set HybridShapeExtremum4 = hybridShapeFactory1.AddNewExtremum(reference1, hybridShapeD2, 0)
+            Set HybridShapeExtremum5 = hybridShapeFactory1.AddNewExtremum(reference1, hybridShapeD3, 1)
+            Set HybridShapeExtremum6 = hybridShapeFactory1.AddNewExtremum(reference1, hybridShapeD3, 0)
+        
+            ' Creates Geometrical Set under the Solid, to contain the construction elements
+
+            Dim hybridBody2 As HybridBody
+            Set hybridBody2 = hybridBodies1.Item("definition_points")
+
+            hybridBody2.AppendHybridShape HybridShapeExtremum1
+            part1.InWorkObject = HybridShapeExtremum1
+                HybridShapeExtremum1.Name = "max_X"
+                hybridBody2.AppendHybridShape HybridShapeExtremum2
+            part1.InWorkObject = HybridShapeExtremum2
+                HybridShapeExtremum2.Name = "min_X"
+                hybridBody2.AppendHybridShape HybridShapeExtremum3
+            part1.InWorkObject = HybridShapeExtremum3
+                HybridShapeExtremum3.Name = "max_Y"
+                hybridBody2.AppendHybridShape HybridShapeExtremum4
+            part1.InWorkObject = HybridShapeExtremum4
+                HybridShapeExtremum4.Name = "min_Y"
+                hybridBody2.AppendHybridShape HybridShapeExtremum5
+            part1.InWorkObject = HybridShapeExtremum5
+                HybridShapeExtremum5.Name = "max_Z"
+                hybridBody2.AppendHybridShape HybridShapeExtremum6
+            part1.InWorkObject = HybridShapeExtremum6
+                HybridShapeExtremum6.Name = "min_Z"
+
+                part1.UpdateObject HybridShapeExtremum1
+            part1.UpdateObject HybridShapeExtremum2
+            part1.UpdateObject HybridShapeExtremum3
+            part1.UpdateObject HybridShapeExtremum4
+            part1.UpdateObject HybridShapeExtremum5
+            part1.UpdateObject HybridShapeExtremum6
+
+            'part1.Update
+
+                ' Creates a 6 single points using the Extrenums as refs, so if the Extrenum was a line or surf, you can still offset planes to these points
+
+                Dim Ref1 As Reference
+            Set Ref1 = part1.CreateReferenceFromObject(HybridShapeExtremum1)
+            Dim Point1 As HybridShapePointCoord
+            Set Point1 = hybridShapeFactory1.AddNewPointCoordWithReference(0, 0, 0, Ref1)
+            hybridBody2.AppendHybridShape Point1
+            Set point_ref11 = part1.CreateReferenceFromObject(Point1)
+            
+            Dim Ref2 As Reference
+            Set Ref2 = part1.CreateReferenceFromObject(HybridShapeExtremum2)
+            Dim Point2 As HybridShapePointCoord
+            Set Point2 = hybridShapeFactory1.AddNewPointCoordWithReference(0, 0, 0, Ref2)
+            hybridBody2.AppendHybridShape Point2
+            Set point_ref12 = part1.CreateReferenceFromObject(Point2)
+            
+            Dim Ref3 As Reference
+            Set Ref3 = part1.CreateReferenceFromObject(HybridShapeExtremum3)
+            Dim Point3 As HybridShapePointCoord
+            Set Point3 = hybridShapeFactory1.AddNewPointCoordWithReference(0, 0, 0, Ref3)
+            hybridBody2.AppendHybridShape Point3
+            Set point_ref13 = part1.CreateReferenceFromObject(Point3)
+            
+            Dim Ref4 As Reference
+            Set Ref4 = part1.CreateReferenceFromObject(HybridShapeExtremum4)
+            Dim Point4 As HybridShapePointCoord
+            Set Point4 = hybridShapeFactory1.AddNewPointCoordWithReference(0, 0, 0, Ref4)
+            hybridBody2.AppendHybridShape Point4
+            Set point_ref14 = part1.CreateReferenceFromObject(Point4)
+            
+            Dim Ref5 As Reference
+            Set Ref5 = part1.CreateReferenceFromObject(HybridShapeExtremum5)
+            Dim Point5 As HybridShapePointCoord
+            Set Point5 = hybridShapeFactory1.AddNewPointCoordWithReference(0, 0, 0, Ref5)
+            hybridBody2.AppendHybridShape Point5
+            Set point_ref5 = part1.CreateReferenceFromObject(Point5)
+            
+            Dim Ref6 As Reference
+            Set Ref6 = part1.CreateReferenceFromObject(HybridShapeExtremum6)
+            Dim Point6 As HybridShapePointCoord
+            Set Point6 = hybridShapeFactory1.AddNewPointCoordWithReference(0, 0, 0, Ref6)
+            hybridBody2.AppendHybridShape Point6
+            Set point_ref6 = part1.CreateReferenceFromObject(Point6)
+
+            part1.UpdateObject Point1
+            part1.UpdateObject Point2
+            part1.UpdateObject Point3
+            part1.UpdateObject Point4
+            part1.UpdateObject Point5
+            part1.UpdateObject Point6
+
+            'part1.Update
+
+                axissyst.IsCurrent = 1
+
+                'Read extremum coordinates
+                Dim coord(2) As Variant
+                Dim absCoord(2) As Variant
+
+                Dim TheSPAWorkbench As Workbench
+            Set TheSPAWorkbench = CATIA.ActiveDocument.GetWorkbench("SPAWorkbench")
+ 
+            Dim TheMeasurable
+
+                Debug.Print "Extremum coordinates in the local Axis System:"
+
+            'Transform local extrema coordinates into global coordinates and update aAssemblyBoundaries
+
+                'Distances to Part Bounding Box faces in local coordinates
+                ReDim aBBDistances(5) As Double
+            '8 corner points of the Part Bounding Box (BB) in local coordinates (8x3 array)
+            ReDim aBBCornersLocal(7, 2) As Double
+            
+            'max_X_loc
+            Set TheMeasurable = TheSPAWorkbench.GetMeasurable(point_ref11)
+            TheMeasurable.GetPoint coord
+            aBBDistances(0) = coord(0)
+                Call Coord_Transform(coord, absCoord, objProduct, True)
+                Debug.Print Point1.Name & " (" & Ref1.DisplayName & "): [" & absCoord(0) & " " & absCoord(1) & " " & absCoord(2) & "]"
+            
+            'min_X_loc
+            Set TheMeasurable = TheSPAWorkbench.GetMeasurable(point_ref12)
+            TheMeasurable.GetPoint coord
+            aBBDistances(1) = coord(0)
+                Call Coord_Transform(coord, absCoord, objProduct, True)
+                Debug.Print Point2.Name & " (" & Ref2.DisplayName & "): [" & absCoord(0) & " " & absCoord(1) & " " & absCoord(2) & "]"
+            
+            'max_Y_loc
+            Set TheMeasurable = TheSPAWorkbench.GetMeasurable(point_ref13)
+            TheMeasurable.GetPoint coord
+            aBBDistances(2) = coord(1)
+                Call Coord_Transform(coord, absCoord, objProduct, True)
+                Debug.Print Point3.Name & " (" & Ref3.DisplayName & "): [" & absCoord(0) & " " & absCoord(1) & " " & absCoord(2) & "]"
+            
+            'min_Y_loc
+            Set TheMeasurable = TheSPAWorkbench.GetMeasurable(point_ref14)
+            TheMeasurable.GetPoint coord
+            aBBDistances(3) = coord(1)
+                Call Coord_Transform(coord, absCoord, objProduct, True)
+                Debug.Print Point4.Name & " (" & Ref4.DisplayName & "): [" & absCoord(0) & " " & absCoord(1) & " " & absCoord(2) & "]"
+            
+            'max_Z_loc
+            Set TheMeasurable = TheSPAWorkbench.GetMeasurable(point_ref5)
+            TheMeasurable.GetPoint coord
+            aBBDistances(4) = coord(2)
+                Call Coord_Transform(coord, absCoord, objProduct, True)
+                Debug.Print Point5.Name & " (" & Ref5.DisplayName & "): [" & absCoord(0) & " " & absCoord(1) & " " & absCoord(2) & "]"
+            
+            'min_Z_loc
+            Set TheMeasurable = TheSPAWorkbench.GetMeasurable(point_ref6)
+            TheMeasurable.GetPoint coord
+            aBBDistances(5) = coord(2)
+                Call Coord_Transform(coord, absCoord, objProduct, True)
+                Debug.Print Point6.Name & " (" & Ref6.DisplayName & "): [" & absCoord(0) & " " & absCoord(1) & " " & absCoord(2) & "]"
+
+            'Generate 8 corner points (local coordinates) to the aBBCornersLocal
+                Dim m, n, k, c As Integer
+                c = 0
+                For m = 0 To 1
+                    For n = 2 To 3
+                        For k = 4 To 5
+                            aBBCornersLocal(c, 0) = aBBDistances(m)
+                            aBBCornersLocal(c, 1) = aBBDistances(n)
+                            aBBCornersLocal(c, 2) = aBBDistances(k)
+                            'Transform corner point into global coordinates
+                            coord(0) = aBBCornersLocal(c, 0)
+                            coord(1) = aBBCornersLocal(c, 1)
+                            coord(2) = aBBCornersLocal(c, 2)
+                            Call Coord_Transform(coord, absCoord, objProduct, True)
+                            'Record values to aPartBBGlob
+                            Dim CCC(2) As Double    'Corner Coordinates in axis system Congruent to global but in the part's origin
+                            CCC(0) = absCoord(0) - PositionArray(9)
+                            CCC(1) = absCoord(1) - PositionArray(10)
+                            CCC(2) = absCoord(2) - PositionArray(11)
+                            If CCC(0) > aPartBBGlob(i - 1, 0) Then
+                                aPartBBGlob(i - 1, 0) = CCC(0)
+                            End If
+                            If CCC(0) < aPartBBGlob(i - 1, 1) Then
+                                aPartBBGlob(i - 1, 1) = CCC(0)
+                            End If
+                            If CCC(1) > aPartBBGlob(i - 1, 2) Then
+                                aPartBBGlob(i - 1, 2) = CCC(1)
+                            End If
+                            If CCC(1) < aPartBBGlob(i - 1, 3) Then
+                                aPartBBGlob(i - 1, 3) = CCC(1)
+                            End If
+                            If CCC(2) > aPartBBGlob(i - 1, 4) Then
+                                aPartBBGlob(i - 1, 4) = CCC(2)
+                            End If
+                            If CCC(2) < aPartBBGlob(i - 1, 5) Then
+                                aPartBBGlob(i - 1, 5) = CCC(2)
+                            End If
+                            'Update aAssemblyBoundaries (global)
+                            If absCoord(0) > aAssemblyBoundaries(0) Then
+                                aAssemblyBoundaries(0) = absCoord(0)
+                            End If
+                            If absCoord(0) < aAssemblyBoundaries(1) Then
+                                aAssemblyBoundaries(1) = absCoord(0)
+                            End If
+                            If absCoord(1) > aAssemblyBoundaries(2) Then
+                                aAssemblyBoundaries(2) = absCoord(1)
+                            End If
+                            If absCoord(1) < aAssemblyBoundaries(3) Then
+                                aAssemblyBoundaries(3) = absCoord(1)
+                            End If
+                            If absCoord(2) > aAssemblyBoundaries(4) Then
+                                aAssemblyBoundaries(4) = absCoord(2)
+                            End If
+                            If absCoord(2) < aAssemblyBoundaries(5) Then
+                                aAssemblyBoundaries(5) = absCoord(2)
+                            End If
+                            c = c + 1
+                        Next k
+                    Next n
+                Next m
+
+                part1.Update
+
+                Exit For
+
+                'ContinueFaceLoop:
+
+            Next f
+
+        Else
+            MsgBox "The active document must be a CATPart"
+        End If
+
+    End Function
+
+    Sub RecalculateRemovalDistances(cRelProd As Collection, cDeact As Collection)
+
+        ReDim aRemovalDistances(cRelProd.Count - 1, 5)
+        Dim i As Integer
+        Dim relProd As Product
+        'assure that the origin is inside the BB of assembly
+        aAssemblyBoundaries(0) = 0#
+        aAssemblyBoundaries(1) = 0#
+        aAssemblyBoundaries(2) = 0#
+        aAssemblyBoundaries(3) = 0#
+        aAssemblyBoundaries(4) = 0#
+        aAssemblyBoundaries(5) = 0#
+
+        For i = 0 To cRelProd.Count - 1
+        Set relProd = cRelProd.Item(i + 1)
+        If Not productIsInCollection(relProd, cDeact) Then
+                If aInitPos(i, 9) + aPartBBGlob(i, 0) > aAssemblyBoundaries(0) Then
+                    aAssemblyBoundaries(0) = aInitPos(i, 9) + aPartBBGlob(i, 0)
+                End If
+                If aInitPos(i, 9) + aPartBBGlob(i, 1) < aAssemblyBoundaries(1) Then
+                    aAssemblyBoundaries(1) = aInitPos(i, 9) + aPartBBGlob(i, 1)
+                End If
+                If aInitPos(i, 10) + aPartBBGlob(i, 2) > aAssemblyBoundaries(2) Then
+                    aAssemblyBoundaries(2) = aInitPos(i, 10) + aPartBBGlob(i, 2)
+                End If
+                If aInitPos(i, 10) + aPartBBGlob(i, 3) < aAssemblyBoundaries(3) Then
+                    aAssemblyBoundaries(3) = aInitPos(i, 10) + aPartBBGlob(i, 3)
+                End If
+                If aInitPos(i, 11) + aPartBBGlob(i, 4) > aAssemblyBoundaries(4) Then
+                    aAssemblyBoundaries(4) = aInitPos(i, 11) + aPartBBGlob(i, 4)
+                End If
+                If aInitPos(i, 11) + aPartBBGlob(i, 5) < aAssemblyBoundaries(5) Then
+                    aAssemblyBoundaries(5) = aInitPos(i, 11) + aPartBBGlob(i, 5)
+                End If
+            End If
+        Next i
+
+        For i = 0 To cRelProd.Count - 1
+        Set relProd = cRelProd.Item(i + 1)
+        If Not productIsInCollection(relProd, cDeact) Then
+                aRemovalDistances(i, 0) = aAssemblyBoundaries(0) - aPartBBGlob(i, 1)
+                aRemovalDistances(i, 1) = aAssemblyBoundaries(1) - aPartBBGlob(i, 0)
+                aRemovalDistances(i, 2) = aAssemblyBoundaries(2) - aPartBBGlob(i, 3)
+                aRemovalDistances(i, 3) = aAssemblyBoundaries(3) - aPartBBGlob(i, 2)
+                aRemovalDistances(i, 4) = aAssemblyBoundaries(4) - aPartBBGlob(i, 5)
+                aRemovalDistances(i, 5) = aAssemblyBoundaries(5) - aPartBBGlob(i, 4)
+            End If
+        Next i
+
+    End Sub
+
+    Public Function ArrayLen(a As Variant) As Integer
+        If IsEmpty(a) Then
+            ArrayLen = 0
+        Else
+            ArrayLen = UBound(a) - LBound(a) + 1
+        End If
+    End Function
+
+    Function Det3x3(dX11 As Double, dX12 As Double, dX13 As Double,
+                    dX21 As Double, dX22 As Double, dX23 As Double,
+                    dX31 As Double, dX32 As Double, dX33 As Double) As Double
+        '***********************************************
+        '*
+        '* 3x3 matrix determinant calculation (direct)
+        '*
+        '***********************************************
+
+        Det3x3 = dX11 * dX22 * dX33 + dX12 * dX23 * dX31 + dX21 * dX32 * dX13 -
+                 dX13 * dX22 * dX31 - dX12 * dX21 * dX33 - dX23 * dX32 * dX11
+    End Function
+    Function Inv3x3(dX11 As Double, dX12 As Double, dX13 As Double,
+               dX21 As Double, dX22 As Double, dX23 As Double,
+               dX31 As Double, dX32 As Double, dX33 As Double, aInv() As Double) As Boolean
+        '***********************************************
+        '*
+        '* 3x3 matrix inverse calculation (direct)
+        '*
+        '***********************************************
+        Dim dDet As Double
+
+        ReDim aInv(8)
+
+        Inv3x3 = False
+
+        dDet = Det3x3(dX11, dX12, dX13, dX21, dX22, dX23, dX31, dX32, dX33)
+        If dDet = 0 Then Exit Function
+
+        aInv(0) = (dX22 * dX33 - dX23 * dX32) / Abs(dDet)
+        aInv(1) = (dX13 * dX32 - dX12 * dX33) / Abs(dDet)
+        aInv(2) = (dX12 * dX23 - dX13 * dX22) / Abs(dDet)
+        aInv(3) = (dX23 * dX31 - dX21 * dX33) / Abs(dDet)
+        aInv(4) = (dX11 * dX33 - dX13 * dX31) / Abs(dDet)
+        aInv(5) = (dX13 * dX21 - dX11 * dX23) / Abs(dDet)
+        aInv(6) = (dX21 * dX32 - dX22 * dX31) / Abs(dDet)
+        aInv(7) = (dX12 * dX31 - dX11 * dX32) / Abs(dDet)
+        aInv(8) = (dX11 * dX22 - dX12 * dX21) / Abs(dDet)
+
+        Inv3x3 = True
+
+    End Function
+    Sub Coord_Transform(aRel() As Variant, aAbs() As Variant, oProduct As Product, bRecursively As Boolean)
+
+        Dim vProduct As Object, vCoord(11)
+        Dim oFatherProduct As Product
+        Dim aInv() As Double
+
+        'Exit condition, empty object
+        If oProduct Is Nothing Then Exit Sub
+
+        'Redim absolute coords matrix
+        On Error Resume Next
+        ReDim aAbs(2)
+        On Error GoTo 0
+    
+    'Calculate product coordinates
+    Set vProduct = oProduct
+    vProduct.Position.GetComponents vCoord
+
+    'Calculate inverse matrix
+        If Inv3x3(CDbl(vCoord(0)), CDbl(vCoord(1)), CDbl(vCoord(2)),
+                 CDbl(vCoord(3)), CDbl(vCoord(4)), CDbl(vCoord(5)),
+                 CDbl(vCoord(6)), CDbl(vCoord(7)), CDbl(vCoord(8)), aInv) Then
+        Else
+            'MsgBox "Error, degenerate transformation", vbOKOnly
+            Exit Sub
+        End If
+
+        'Calculate transformation
+        aAbs(0) = vCoord(9) + aInv(0) * aRel(0) + aInv(1) * aRel(1) + aInv(2) * aRel(2)
+        aAbs(1) = vCoord(10) + aInv(3) * aRel(0) + aInv(4) * aRel(1) + aInv(5) * aRel(2)
+        aAbs(2) = vCoord(11) + aInv(6) * aRel(0) + aInv(7) * aRel(1) + aInv(8) * aRel(2)
+
+        'If recursive option sepecified, search for parents and applies the transformation again
+        If bRecursively Then
+        
+        'Try to assign parent
+        Set oFatherProduct = Nothing
+        On Error Resume Next
+        Set oFatherProduct = oProduct.Parent.Parent
+        On Error GoTo 0
+
+            'If OK, recalculate coords
+            If oFatherProduct Is Nothing Then
+            Else
+                If oFatherProduct.PartNumber + ".CATProduct" = CATIA.ActiveDocument.Name Then
+                    aRel(0) = aAbs(0)
+                    aRel(1) = aAbs(1)
+                    aRel(2) = aAbs(2)
+                    Coord_Transform aRel, aAbs, oFatherProduct, False
+            Else
+                    aRel(0) = aAbs(0)
+                    aRel(1) = aAbs(1)
+                    aRel(2) = aAbs(2)
+                    Coord_Transform aRel, aAbs, oFatherProduct, True
+            End If
+            End If
+
+        End If
+
+    End Sub
+
+    Function productIsInCollection(objProd As Product, prodColl As Collection) As Boolean
+        Dim dummyObj As Product
+        productIsInCollection = False
+        For Each dummyObj In prodColl
+            If dummyObj.Name = objProd.Name Then
+                productIsInCollection = True
+                Exit For
+            End If
+        Next
+    End Function
+
+    Sub moveProduct(objProd As Product, intDir As Integer, bPositive As Boolean)
+        Dim intS As Integer
+        If bPositive = True Then
+            intS = intStep
+        Else
+            intS = -intStep
+        End If
+        Dim moveArray(11)
+        moveArray(0) = 1
+        moveArray(1) = 0
+        moveArray(2) = 0
+        moveArray(3) = 0
+        moveArray(4) = 1
+        moveArray(5) = 0
+        moveArray(6) = 0
+        moveArray(7) = 0
+        moveArray(8) = 1
+        moveArray(9) = 0
+        moveArray(10) = 0
+        moveArray(11) = 0
+
+        Dim axisArray(11)
+
+        'movement along global axis
+        If intDir < 7 Then
+            'Attention: for now it is assumed that all products are on the top level of specification tree
+            If intDir = 1 Then
+                moveArray(9) = intS
+            End If
+            If intDir = 2 Then
+                moveArray(10) = intS
+            End If
+            If intDir = 3 Then
+                moveArray(11) = intS
+            End If
+            If intDir = 4 Then
+                moveArray(9) = -intS
+            End If
+            If intDir = 5 Then
+                moveArray(10) = -intS
+            End If
+            If intDir = 6 Then
+                moveArray(11) = -intS
+            End If
+        Else    'movement along local axis
+            Dim oPosition As Object
+        Set oPosition = objProd.Position
+        oPosition.GetComponents axisArray
+        If intDir = 7 Then
+                moveArray(9) = axisArray(0) * intS
+                moveArray(10) = axisArray(1) * intS
+                moveArray(11) = axisArray(2) * intS
+            End If
+            If intDir = 8 Then
+                moveArray(9) = axisArray(3) * intS
+                moveArray(10) = axisArray(4) * intS
+                moveArray(11) = axisArray(5) * intS
+            End If
+            If intDir = 9 Then
+                moveArray(9) = axisArray(6) * intS
+                moveArray(10) = axisArray(7) * intS
+                moveArray(11) = axisArray(8) * intS
+            End If
+            If intDir = 10 Then
+                moveArray(9) = -axisArray(0) * intS
+                moveArray(10) = -axisArray(1) * intS
+                moveArray(11) = -axisArray(2) * intS
+            End If
+            If intDir = 11 Then
+                moveArray(9) = -axisArray(3) * intS
+                moveArray(10) = -axisArray(4) * intS
+                moveArray(11) = -axisArray(5) * intS
+            End If
+            If intDir = 12 Then
+                moveArray(9) = -axisArray(6) * intS
+                moveArray(10) = -axisArray(7) * intS
+                moveArray(11) = -axisArray(8) * intS
+            End If
+        End If
+    Set prod1nd = objProd
+    prod1nd.Move.Apply moveArray
+
+End Sub
+
+    Function collisionDetected(cClashes As Clashes, group1 As Group, group2 As Group) As Boolean
+        'cRelevantProducts As Collection, cDeactivated As Collection
+
+        collisionDetected = False
+
+        'define two groups
+        '    Dim group1 As Group
+        'Dim group2 As Group
+        '    Set group1 = cGroups.Add
+        'Set group2 = cGroups.Add
+        '    group1.AddExplicit product1
+        '    Dim relevantProduct As Product
+        '    For Each relevantProduct In cRelevantProducts
+        '      If Not relevantProduct.Name = product1.Name And Not productIsInCollection(relevantProduct, cDeactivated) Then
+        '        group2.AddExplicit relevantProduct
+        '      End If
+        '    Next relevantProduct
+        'create a new clash analysis
+        Dim oClash 'As Clash
+    Set oClash = cClashes.Add
+    oClash.ComputationType = catClashComputationTypeBetweenTwo
+        oClash.FirstGroup = group1
+        oClash.SecondGroup = group2
+        oClash.InterferenceType = catClashInterferenceTypeClearance
+        'oClash.Clearance = dCollSens
+        oClash.Compute
+        Dim cConflicts As Conflicts
+    Set cConflicts = oClash.Conflicts
+    If cConflicts.Count > 0 Then
+            'MsgBox "Detected a collision: " & product1.Name
+            'If at least one conflict value exceeds the collision sensitivity, it is a collision
+            Dim oConflict As Conflict
+            Dim c As Integer
+            For c = 1 To cConflicts.Count
+        Set oConflict = cConflicts.Item(c)
+        oConflict.Status = catConflictStatusRelevant
+                If oConflict.Type = catConflictTypeClash Then
+                    If oConflict.Value < -dCollSens Then
+                        collisionDetected = True
+                        Debug.Print "Clash detected: " & oConflict.FirstProduct.Name & " - " & oConflict.SecondProduct.Name & " = " & oConflict.Value
+            Exit For
+                    End If
+                End If
+            Next c
+        End If
+    End Function
+
+    Function productReachedFinalPosition(objProd As Product, i1 As Integer) As Boolean
+        productReachedFinalPosition = False
+        Dim posArray(11)
+        Dim oPosition As Object
+    Set oPosition = objProd.Position
+    oPosition.GetComponents posArray
+    If posArray(9) > aRemovalDistances(i1 - 1, 0) Then
+            productReachedFinalPosition = True
+            'MsgBox "X+ removal distance reached by " & objProd.Name
+        End If
+        If posArray(9) < aRemovalDistances(i1 - 1, 1) Then
+            productReachedFinalPosition = True
+            'MsgBox "X- removal distance reached by " & objProd.Name
+        End If
+        If posArray(10) > aRemovalDistances(i1 - 1, 2) Then
+            productReachedFinalPosition = True
+            'MsgBox "Y+ removal distance reached by " & objProd.Name
+        End If
+        If posArray(10) < aRemovalDistances(i1 - 1, 3) Then
+            productReachedFinalPosition = True
+            'MsgBox "Y- removal distance reached by " & objProd.Name
+        End If
+        If posArray(11) > aRemovalDistances(i1 - 1, 4) Then
+            productReachedFinalPosition = True
+            'MsgBox "Z+ removal distance reached by " & objProd.Name
+        End If
+        If posArray(11) < aRemovalDistances(i1 - 1, 5) Then
+            productReachedFinalPosition = True
+            'MsgBox "Z- removal distance reached by " & objProd.Name
+        End If
+    End Function
+
+    Function productHasValidDisassDir(i1 As Integer, disassDir() As Variant) As Boolean
+        productHasValidDisassDir = False
+        Dim j As Integer
+        For j = 0 To 11
+            If disassDir(i1 - 1, j) = 1 Then
+                productHasValidDisassDir = True
+                Exit For
+            End If
+        Next j
+    End Function
+
+    Function Tree(s1, q)
+
+        For Each s2 In s1.Products
+            Tree s2, q
+    Next
+    
+    Set parentAssy = s1.Parent.Parent
+    
+    If StrComp(TypeName(parentAssy), "Product") = 0 Then
+            parentAssy.ReferenceProduct.Products.Item(s1.Name).Name = CStr(s1.PartNumber) & CStr("." & q)
+            q = q + 1
+        End If
+
+    End Function
+
+    Private Sub RenameSingleLevel(ByRef oCurrentProd As Product)
+
+        On Error Resume Next
+
+        'More declarations
+        Dim ItemToRename As Product
+        Dim ToRenamePartNumber As String
+        Dim lNumberOfItems As Long
+        Dim RenameArray(2000) As String
+        Dim i As Integer
+        Dim j As Integer
+        Dim k As Integer
+
+Set oCurrentProd = oCurrentProd.ReferenceProduct    'You have to work with the "ReferenceProduct" object
+lNumberOfItems = oCurrentProd.Products.Count
+
+        'For i = 1 To lNumberOfItems                         'Clear out the rename array
+        '    RenameArray(i) = ""                             'Don't know if this is necessary
+        'Next
+
+        'Run through this loop once, to set everything to a dummy name, to avoid naming conflicts
+        For i = 1 To lNumberOfItems                             'Cycle through the assembly's children
+    Set ItemToRename = oCurrentProd.Products.Item(i)    'Declare which item we are working on
+    
+    ToRenamePartNumber = ItemToRename.PartNumber        'Get the Part Number
+            'ToRenamePartNumber = ItemToRename.DescriptionRef   'Toggle these two lines for testing
+
+            RenameArray(i) = ToRenamePartNumber                 'Building the list of part names for the numbering loop
+
+            k = 0                                               'Numbering Loop
+            For j = 1 To i                                      'This loop checks and sets the instance number
+                If RenameArray(j) = ToRenamePartNumber Then
+                    k = k + 1
+                End If
+            Next
+            CATIA.StatusBar = ItemToRename.Name & " > " & ToRenamePartNumber & "." & k
+            'MsgBox ItemToRename.Name & " / " & ToRenamePartNumber & "." & k    'This line is for testing only
+            ItemToRename.Name = ToRenamePartNumber & "TEMP." & k    'Set the new instance name, to a TEMP dummy value
+
+        Next
+
+        'Run through this loop to set the name finally, then the recursion call
+        For i = 1 To lNumberOfItems
+    Set ItemToRename = oCurrentProd.Products.Item(i)
+       
+    ToRenamePartNumber = ItemToRename.PartNumber        'Toggle these two lines for testing
+            'ToRenamePartNumber = ItemToRename.DescriptionRef   'Toggle these two lines for testing
+
+            RenameArray(i) = ToRenamePartNumber
+
+            k = 0
+            For j = 1 To i
+                If RenameArray(j) = ToRenamePartNumber Then
+                    k = k + 1
+                End If
+            Next
+
+            CATIA.StatusBar = ItemToRename.Name & " > " & ToRenamePartNumber & "." & k
+            'MsgBox ItemToRename.Name & " / " & ToRenamePartNumber & "." & k    'For testing
+
+            ItemToRename.Name = ToRenamePartNumber & "." & k    'Set the new instance name final
+
+            If ItemToRename.Products.Count <> 0 Then        'Recursive Call for version 0.1.2
+                If oList.exists(ItemToRename.PartNumber) Then GoTo Finish
+                If ItemToRename.PartNumber = ItemToRename.ReferenceProduct.Parent.Product.PartNumber Then oList.Add ItemToRename.PartNumber, 1
+        Call RenameSingleLevel(ItemToRename)
+            End If
+
+Finish:
+        Next
+
+    End Sub
+
+    Function GetProductIndex(objProd As Product, cProds As Collection) As Integer
+        Dim produkt As Product
+        Dim intAns As Integer
+        intAns = 0
+        For Each produkt In cProds
+            If produkt.Name = objProd.Name Then
+                GetProductIndex = intAns
+                Exit Function
+            End If
+            intAns = intAns + 1
+        Next produkt
+    End Function
+
+
+
+
+End Class
diff --git a/CatiaNetTest.sln b/CatiaNetTest.sln
new file mode 100644
index 0000000000000000000000000000000000000000..f2f5145d6ae63621a841a95efb652bb308e7c0de
--- /dev/null
+++ b/CatiaNetTest.sln
@@ -0,0 +1,24 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 14
+VisualStudioVersion = 14.0.25420.1
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "CatiaNetTest", "CatiaNetTest\CatiaNetTest.vbproj", "{BE15D79B-EF5F-46CE-8D88-72F4386BCF6F}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{B80168DE-DFE2-413B-ABF4-882E20B80DE9}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Release|Any CPU = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{BE15D79B-EF5F-46CE-8D88-72F4386BCF6F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{BE15D79B-EF5F-46CE-8D88-72F4386BCF6F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{BE15D79B-EF5F-46CE-8D88-72F4386BCF6F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{BE15D79B-EF5F-46CE-8D88-72F4386BCF6F}.Release|Any CPU.Build.0 = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
diff --git a/CatiaNetTest/App.config b/CatiaNetTest/App.config
new file mode 100644
index 0000000000000000000000000000000000000000..2ae8254d305bb019047d91b8db81c8dca76b56c8
--- /dev/null
+++ b/CatiaNetTest/App.config
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+    <startup>
+        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
+    </startup>
+</configuration>
\ No newline at end of file
diff --git a/CatiaNetTest/AssemblyTiers2.vb b/CatiaNetTest/AssemblyTiers2.vb
new file mode 100644
index 0000000000000000000000000000000000000000..cebb6ced9cd570b74a8235c31d4810b5e4b5d276
--- /dev/null
+++ b/CatiaNetTest/AssemblyTiers2.vb
@@ -0,0 +1,1677 @@
+Imports System
+Imports HybridShapeTypeLib
+Imports INFITF
+Imports MECMOD
+Imports NavigatorTypeLib
+Imports ProductStructureTypeLib
+Imports SPATypeLib
+
+Public Class AssemblyTiers2
+
+    Public intStep As Integer
+    Public dCollSens As Double
+    Public intParts As Integer
+    Public primaryFasteners As Collection
+    Public secondaryFasteners As Collection
+    Public cAllProducts As Collection
+    Public cRelevantProducts As Collection
+    Public cBaseProducts As Collection
+    Public aRemovalDistances() As Single
+    Public aAssemblyBoundaries(5) As Double
+    Public aPartBBGlob() As Single
+    Public aInitPos() As Double
+    Public sChosenDirection As String
+    Public oList As Object
+
+
+    Sub CatMain(CATIA As INFITF.Application)
+
+        'On Error Resume Next
+
+        Debug.Print("========================================================")
+
+        Dim document As ProductDocument
+        document = CATIA.ActiveDocument
+
+        'Extraction of all "leaf" products to cAllProducts
+        ExtractProducts(document.Product)
+
+        'Collection of "leaf" Products (without nested Products)
+        Dim oInstances() As Product
+        oInstances = cAllProducts
+        Dim i As Integer
+        Dim outputText As String
+
+        intParts = oInstances.Count
+        outputText = "This assembly contains " + CStr(oInstances.Count) + " parts" + vbNewLine
+        MsgBox(outputText)
+
+        'Select the assembly's base components
+        'Declare selection
+        Dim oSel As Selection
+        Dim baseSel As Object  'to deal with restricted function problem
+        oSel = CATIA.ActiveDocument.Selection
+        baseSel = oSel
+        'Create an array for CATParts
+        Dim strArray(0)
+        strArray(0) = "Part"
+        'Display a messagebox prompting the user to select CATIA parts
+        MsgBox("Please select the assembly's base components")
+        sStatus = baseSel.SelectElement3(strArray, "Select parts", False, CATMultiSelTriggWhenUserValidatesSelection, False)
+
+        For i = 1 To baseSel.Count
+            cBaseProducts.Add(baseSel.Item(i).LeafProduct)
+            Debug.Print("Added base component: " & baseSel.Item(i).LeafProduct.Name)
+        Next
+
+        oSel.Clear()
+        baseSel.Clear
+
+        'Collision parameters
+        intStep = 1
+        dCollSens = 1
+        CollisionParams.Show
+        Debug.Print("Step = " + CStr(intStep))
+        Debug.Print("Sensitivity = " + CStr(dCollSens))
+
+        'Separation of components
+        DeactivateFasteners(document.Product)
+
+        'Display the number of relevant parts
+        outputText = CStr(cRelevantProducts.Count) + " parts are considered in precedence graph generation"
+        MsgBox(outputText)
+
+        'Distances from global axis system origin to assembly boundary (along global axis)
+        aAssemblyBoundaries(0) = 0#     'max_X
+        aAssemblyBoundaries(1) = 0#     'min_X
+        aAssemblyBoundaries(2) = 0#     'max_Y
+        aAssemblyBoundaries(3) = 0#     'min_Y
+        aAssemblyBoundaries(4) = 0#     'max_Z
+        aAssemblyBoundaries(5) = 0#     'min_Z
+
+        'Global coordinates, of which at least one has to be exceeded by the part origin, for that part to be "disassembled"
+        'in global axis directions
+        Dim aRemovalDistances(cRelevantProducts.Count - 1, 5)
+        aRemovalDistances(0, 0) = 0#     'X_pos
+        aRemovalDistances(0, 1) = 0#     'X_neg
+        aRemovalDistances(0, 2) = 0#     'Y_pos
+        aRemovalDistances(0, 3) = 0#     'Y_neg
+        aRemovalDistances(0, 4) = 0#     'Z_pos
+        aRemovalDistances(0, 5) = 0#     'Z_neg
+
+        'Store information about secondary BB (6 distances to boundary planes from part origin along global x/y/z directions) - used to define aRemovalDistances
+        'Secondary BB: faces parallel to global origin planes and defined by outermost corner points of local BB of this part
+        Dim aPartBBGlob(cRelevantProducts.Count - 1, 5)
+        aPartBBGlob(0, 0) = 0#           'x_part_glob_pos
+        aPartBBGlob(0, 1) = 0#           'x_part_glob_neg
+        aPartBBGlob(0, 2) = 0#           'y_part_glob_pos
+        aPartBBGlob(0, 3) = 0#           'y_part_glob_neg
+        aPartBBGlob(0, 4) = 0#           'z_part_glob_pos
+        aPartBBGlob(0, 5) = 0#           'z_part_glob_neg
+
+        Dim BBStartTime As Double
+        BBStartTime = Timer
+
+        'This is used to check whether a product must be moved in current iteration
+        Dim bMoveable(cRelevantProducts.Count - 1) As Boolean
+
+        For i = 1 To cRelevantProducts.Count
+
+            '########## this won't work if part document name is not = part number ######
+            Dim partI As Part
+            Dim prodI As Product
+            prodI = cRelevantProducts.Item(i)
+            Dim docName As String
+            docName = prodI.PartNumber + ".CATPart"
+            Debug.Print(">>> " & docName & " <<<")
+            GenerateBoundingBox(CATIA.Documents.Item(docName), prodI, i)
+            '############################################################################
+
+            'Determine assembly 's limits
+            '    Dim partI As Part
+            '    Dim prodI As Product
+            '     prodI = cRelevantProducts.Item(i)
+            '    Dim docName As String
+            '    docName = prodI.PartNumber + ".CATPart"
+            '    Dim oPartDoc As PartDocument
+            '    Dim sPartPath As String
+            '    sPartPath = prodI.GetMasterShapeRepresentationPathName
+            '     oPartDoc = CATIA.Documents.Read(sPartPath)
+            '    Debug.Print ">>> " & docName & " <<<"
+            'CATIA.Documents.Item(docName)
+            '   GenerateBoundingBox oPartDoc, prodI, i
+
+            'Base component is in cRelevantProducts, but not moveable
+            If productIsInCollection(prodI, cBaseProducts) Then
+                bMoveable(i - 1) = False
+            Else
+                bMoveable(i - 1) = True
+            End If
+
+        Next i
+
+        Dim BBSecondsElapsed As Double
+        BBSecondsElapsed = Round(Timer - BBStartTime, 2)
+        MsgBox("Bounding box calculation took " & CStr(BBSecondsElapsed) & " seconds")
+
+        MsgBox("Assembly Boundaries: " & vbNewLine &
+  "max_X = " & aAssemblyBoundaries(0) & vbNewLine &
+  "min_X = " & aAssemblyBoundaries(1) & vbNewLine &
+  "max_Y = " & aAssemblyBoundaries(2) & vbNewLine &
+  "min_Y = " & aAssemblyBoundaries(3) & vbNewLine &
+  "max_Z = " & aAssemblyBoundaries(4) & vbNewLine &
+  "min_Z = " & aAssemblyBoundaries(5))
+
+        'After the aAssemblyBoundaries and aPartBBGlob are calculated, define aRemovalDistances
+        For i = 0 To cRelevantProducts.Count - 1
+            aRemovalDistances(i, 0) = aAssemblyBoundaries(0) - aPartBBGlob(i, 1)
+            aRemovalDistances(i, 1) = aAssemblyBoundaries(1) - aPartBBGlob(i, 0)
+            aRemovalDistances(i, 2) = aAssemblyBoundaries(2) - aPartBBGlob(i, 3)
+            aRemovalDistances(i, 3) = aAssemblyBoundaries(3) - aPartBBGlob(i, 2)
+            aRemovalDistances(i, 4) = aAssemblyBoundaries(4) - aPartBBGlob(i, 5)
+            aRemovalDistances(i, 5) = aAssemblyBoundaries(5) - aPartBBGlob(i, 4)
+        Next i
+
+        MsgBox("Removal distances for " & cRelevantProducts.Item(1).PartNumber & ":" & vbNewLine &
+  "X_pos = " & aRemovalDistances(0, 0) & vbNewLine &
+  "X_neg = " & aRemovalDistances(0, 1) & vbNewLine &
+  "Y_pos = " & aRemovalDistances(0, 2) & vbNewLine &
+  "Y_neg = " & aRemovalDistances(0, 3) & vbNewLine &
+  "Z_pos = " & aRemovalDistances(0, 4) & vbNewLine &
+  "Z_neg = " & aRemovalDistances(0, 5))
+
+        '#################### Main algorithm ##########################
+        Dim intI As Integer                   'total number of components in the scene minus base parts
+        Dim intJ As Integer                   'number of primary directions (default: global + local)
+        Dim intTier As Integer                'number of current assembly tier
+        Dim int_i As Integer                  'product index in cRelevantProducts
+        Dim int_i_cycle As Integer            'product counter
+        Dim int_j As Integer                  'primary direction index 1..12
+        Dim int_k As Integer                  'secondary direction index 1..10
+        Dim total_coll As Long                'counter of total collision detections
+        Dim cDeactivated As Collection    'really deactivated products
+        Dim cVirtual As Collection        'these funny green parts
+        Dim precedenceMatrix() As Single
+        Dim disassDir(cRelevantProducts.Count - 1, 11)
+        Dim aTiers(cRelevantProducts.Count - 1) As Integer
+        Dim aInitPos(cRelevantProducts.Count - 1, 11)     'remember initial positions of the products
+        Dim bInitPosRecorded(cRelevantProducts.Count - 1) As Boolean
+        Dim precedenceMatrix(cRelevantProducts.Count - 1, cRelevantProducts.Count - 1)
+        Dim bDeactivated(cRelevantProducts.Count - 1) As Boolean
+
+        intI = cRelevantProducts.Count    'the index of base components will be simply skipped (cRelevantProducts includes cBaseProducts, unlike in the paper!)
+        intJ = 6                          'number of disassembly directions (6 - only global axes, 12 - including local axes)
+        intTier = 1                       'counts current disassembly tier (lower number means earlier disassembly possible) - this gets reversed in the end
+        int_i = 1                         'index of current part in collection of relevant products
+        int_i_cycle = 1                   'counter for the current tier iteration
+        int_j = 1                         'index of disassembly direction
+        int_j_temp = 0                    'used to display movement direction once
+        total_coll = 0
+
+        'map indices to directions (careful, starts from 0 here, but the paper and moveProduct uses 1 as start)
+        Dim d1
+        d1 = CreateObject("Scripting.Dictionary")
+        d1.Add(0, "Global X+")
+        d1.Add(1, "Global Y+")
+        d1.Add(2, "Global Z+")
+        d1.Add(3, "Global X-")
+        d1.Add(4, "Global Y-")
+        d1.Add(5, "Global Z-")
+        d1.Add(6, "Local X+")
+        d1.Add(7, "Local Y+")
+        d1.Add(8, "Local Z+")
+        d1.Add(9, "Local X-")
+        d1.Add(10, "Local Y-")
+        d1.Add(11, "Local Z-")
+
+        'access the clash technology object
+        Dim cClashes As Clashes
+        cClashes = CATIA.ActiveDocument.Product.GetTechnologicalObject("Clashes")
+        'access the groups technology object
+        Dim cGroups As Groups
+        cGroups = CATIA.ActiveDocument.Product.GetTechnologicalObject("Groups")
+
+        'calculate initial clashes (due to imprecise modelling or STEP file export...)
+        '  Dim cInitClashes AsCollection
+        '  Dim oInitClash 'As Clash
+        '  ' oInitClash = cInitClashes.Add
+        '  oInitClash.ComputationType = catClashComputationTypeBetweenAll
+        '  oInitClash.Compute
+        '  Dim cInitConflicts As Conflicts
+        '   cInitConflicts = oInitClash.Conflicts
+        '  Dim numConfl As Integer
+        '  Dim numClashes As Integer
+        '  numClashes = 0
+        '  For numConfl = 1 To cInitConflicts.Count
+        '    If cInitConflicts.Item(numConfl).Type = catConflictTypeClash Then
+        '      cInitClashes.Add cInitConflicts.Item(numConfl)
+        '      numClashes = numClashes + 1
+        '    End If
+        '  Next numConfl
+        '  MsgBox CStr(numClashes) & " clashes were detected in the original model."
+
+        Dim StartTime As Double
+        StartTime = Timer
+
+        Do
+
+            'Processing next Product
+            Dim product1 As Product
+            product1 = cRelevantProducts.Item(int_i)
+            Debug.Print("Processing " & product1.Name & " [tier=" & intTier & ", i_cycle=" & int_i_cycle & ", I=" & intI & "]")
+
+            'Skip not moveable products
+            If Not bMoveable(int_i - 1) Then
+                'the part is a base component or deactivated
+                GoTo entry0
+            End If
+
+            'Remember initial position P_i (initPos)
+            Dim initPos(11)
+            Dim oPosition1 As Object
+            oPosition1 = product1.Position
+            oPosition1.GetComponents(initPos)
+            If bInitPosRecorded(int_i - 1) = False Then
+                Dim ip As Integer
+                For ip = 0 To 11
+                    aInitPos(int_i - 1, ip) = initPos(ip)
+                Next ip
+                bInitPosRecorded(int_i - 1) = True
+            End If
+
+            'For each product, determine whether it is a base product, deactivated or virtual
+            '    Dim bBaseProduct As Boolean
+            '    bBaseProduct = productIsInCollection(product1, cBaseProducts)
+            '    Dim bDeactivated As Boolean
+            '    bDeactivated = productIsInCollection(product1, cDeactivated)
+            '    Dim bVirtual As Boolean
+            '    bVirtual = productIsInCollection(product1, cVirtual)
+
+            'Group that includes our product (needed for collision detection between two selections or groups)
+            Dim group1 As Group
+            group1 = cGroups.Add
+            group1.AddExplicit(product1)
+
+            'Create a Group of Products that this product shouldn't collide with
+            Dim group2 As Group
+            group2 = cGroups.Add
+            Dim iStaticProduct As Integer
+            For iStaticProduct = 1 To cRelevantProducts.Count
+                If iStaticProduct <> int_i And Not bDeactivated(iStaticProduct - 1) Then
+                    group2.AddExplicit(cRelevantProducts.Item(iStaticProduct))
+                End If
+            Next iStaticProduct
+
+            Do
+entry1:
+                'Movement step in a given direction
+
+                'If it is a movable part (not base component or already deactivated or "virtual" part from higher tier)...
+                If bMoveable(int_i - 1) = True Then
+
+                    'move component intStep distance in int_j direction
+                    moveProduct(product1, int_j, True)
+
+                    'display current disassembly direction once it changes
+                    If int_j <> int_j_temp Then
+                        Debug.Print("[" & d1.Item(int_j - 1) & "]")
+                        int_j_temp = int_j
+                    End If
+
+                    'collision detection
+                    If collisionDetected(cClashes, group1, group2) Then
+
+                        'check for collisions with higher tier
+                        Dim detConflicts As Conflicts
+                        detConflicts = cClashes.Item(cClashes.Count).Conflicts
+
+                        If detConflicts.Count > 0 Then
+
+                            Dim oConflict1 As Conflict
+                            Dim ic As Integer
+
+                            For ic = 1 To detConflicts.Count
+
+                                oConflict1 = detConflicts.Item(ic)
+                                oConflict1.Status = catConflictStatusRelevant
+
+                                If oConflict1.Type = catConflictTypeClash Then
+
+                                    If oConflict1.Value < -dCollSens Then
+
+                                        Dim secProduct As Product
+                                        'get the product we collided with
+                                        secProduct = oConflict1.SecondProduct
+
+                                        'find the tier of the second product
+                                        Dim dummyProd As Product
+                                        Dim iIndex As Integer
+                                        iIndex = 0
+                                        For Each dummyProd In cRelevantProducts
+                                            If dummyProd.Name = secProduct.Name Then
+                                                Exit For
+                                            End If
+                                            iIndex = iIndex + 1
+                                        Next dummyProd
+                                        Dim secTier As Integer
+                                        secTier = aTiers(iIndex)
+
+                                        'as soon as secTier is not the direct higher tier, no reason to move further
+                                        If secTier < intTier - 1 Then
+                                            GoTo exit1
+                                        End If
+
+                                        'if the disassembly tier is 1 lower (attention: tiers get reversed in the end to the assembly tiers!)
+                                        If secTier = intTier - 1 And Not (secTier = 0 And intTier = 1) Then
+
+                                            Debug.Print("Collision with higher tier: " & oConflict1.FirstProduct.Name & " - " & oConflict1.SecondProduct.Name & " = " & oConflict1.Value)
+
+                                            'record precedence relation, because secProduct is an obstacle in the way of the current product
+                                            precedenceMatrix(int_i - 1, iIndex) = 1
+
+                                            'move the product through the "virtual" part from higher tier
+                                            GoTo entry1
+
+                                        End If
+
+                                    End If  'deeper than dCollSens
+
+                                End If    'clash
+
+                            Next ic 'next conflict
+
+                        End If
+exit1:
+                        'move product to initial position
+                        Dim oPosition3 As Object
+                        oPosition3 = product1.Position
+                        oPosition3.SetComponents(initPos)
+                        'take next direction
+                        int_j = int_j + 1
+                        'if not all directions are checked for this product...
+                        If int_j <= intJ Then
+                            'continue movement in primary directions (movement loop)
+                        Else
+                            'all directions were checked
+                            total_coll = total_coll + intJ
+                            Debug.Print("Disassembly trials: " & total_coll)
+                            int_i = int_i + 1
+                            int_i_cycle = int_i_cycle + 1
+                            int_j = 1
+                            int_j_temp = 0
+
+                            'if active products remain in this cycle...
+                            If int_i_cycle <= intI - cBaseProducts.Count Then
+                                'process next product in this cycle
+                                Exit Do
+                            Else
+                                'all components in this cycle were checked
+                                Dim p As Integer
+                                Dim intItemp As Integer
+                                intItemp = intI
+                                'record tiers
+                                For p = 1 To cRelevantProducts.Count
+                                    If productIsInCollection(cRelevantProducts.Item(p), cBaseProducts) Then
+                                        'base product always has tier 0 (doesn't get reversed)
+                                        aTiers(p - 1) = 0
+                                    Else
+                                        'not a base product
+                                        'product has valid disass. directions and has no tier recorded yet
+                                        If productHasValidDisassDir(p, disassDir) And Not aTiers(p - 1) > 0 Then
+                                            'save tier
+                                            aTiers(p - 1) = intTier
+                                            'decrease the counter of active products in assembly
+                                            intI = intI - 1
+                                            'change visuals for "virtual" products
+                                            Dim virtSelection As Selection
+                                            virtSelection = document.Selection
+                                            virtSelection.Clear()
+                                            virtSelection.Add(cRelevantProducts.Item(p))
+                                            visProperties1 = virtSelection.VisProperties
+                                            visProperties1.SetRealColor(80, 255, 160, 1)
+                                            virtSelection.Clear()
+                                            'remember virtual green products
+                                            'cVirtual.Add cRelevantProducts.Item(p)
+                                            'fix position
+                                            bMoveable(p - 1) = False
+                                        End If
+                                        'product from higher tier
+                                        If productHasValidDisassDir(p, disassDir) And aTiers(p - 1) = intTier - 1 Then
+                                            'deactivate
+                                            Dim selection2 As Selection
+                                            selection2 = CATIA.ActiveDocument.Selection
+                                            selection2.Clear()
+                                            selection2.Add(cRelevantProducts.Item(p))
+                                            CATIA.StartCommand("Activate / Deactivate Component")
+                                            selection2.Clear()
+                                            cDeactivated.Add(cRelevantProducts.Item(p))
+                                            bDeactivated(p - 1) = True
+                                        End If
+                                    End If
+                                Next p
+
+                                'Notify the user if no parts could be disassembled in this tier
+                                If intI = intItemp Then
+                                    Debug.Print("WARNING! No parts could be removed during this cycle." & vbNewLine & "This is usually due to inaccuracies in modelling (e.g. collisions in initial assembly).")
+                                    GoTo exitCD
+                                End If
+
+                                'recalculate assembly boundaries and removal distances
+                                RecalculateRemovalDistances(cRelevantProducts, cDeactivated)
+
+                                'if there are still parts to disassemble...
+                                If intI > cBaseProducts.Count Then
+                                    'increment tier
+                                    intTier = intTier + 1
+                                    'process next cycle of products
+                                    int_i = 1
+                                    int_i_cycle = 1
+                                    Exit Do
+                                Else
+                                    'all parts were disassembled
+                                    'end collision detection algorithm
+                                    GoTo exitCD
+                                End If
+                            End If
+                        End If
+                    Else
+                        'no collisions after the movement step
+                        'check whether part reached final position
+                        If productReachedFinalPosition(product1, int_i) Then
+                            'store valid disassembly direction
+                            disassDir(int_i - 1, int_j - 1) = 1
+                            GoTo exit1
+                        Else
+                            'continue movement in primary directions (movement loop)
+                        End If
+                    End If
+                Else
+entry0:
+                    'the part is a base component or deactivated
+                    Debug.Print("Skipping " + product1.Name + " (base component or deactivated)")
+                    int_i = int_i + 1
+                    'process next product
+                    Exit Do
+                End If
+            Loop    'movement loop
+        Loop  'product loop
+
+exitCD:
+
+        Dim SecondsElapsed As Double
+        SecondsElapsed = Round(Timer - StartTime, 2)
+        MsgBox("Collision detection algorithm finished execution after " & CStr(SecondsElapsed) & " seconds")
+
+        'Return products to their initial positions, activate them
+        Dim p1 As Integer
+        For p1 = 1 To cRelevantProducts.Count
+            If Not productIsInCollection(cRelevantProducts.Item(p1), cBaseProducts) Then
+                Dim oPosition4 As Object
+                oPosition4 = cRelevantProducts.Item(p1).Position
+                Dim aPos(11)
+                For comp = 0 To 11
+                    aPos(comp) = aInitPos(p1 - 1, comp)
+                Next comp
+                oPosition4.SetComponents(aPos)
+                Dim selection4 As Selection
+                selection4 = CATIA.ActiveDocument.Selection
+                selection4.Clear()
+                selection4.Add(cRelevantProducts.Item(p1))
+                CATIA.StartCommand("Activate / Deactivate Component")
+                selection4.Clear()
+            End If
+        Next p1
+
+        'Select a single extraction direction in case there are multiple
+        Dim d2
+        d2 = CreateObject("Scripting.Dictionary")
+        d2.Add("Global X+", 0)
+        d2.Add("Global Y+", 1)
+        d2.Add("Global Z+", 2)
+        d2.Add("Global X-", 3)
+        d2.Add("Global Y-", 4)
+        d2.Add("Global Z-", 5)
+        d2.Add("Local X+", 6)
+        d2.Add("Local Y+", 7)
+        d2.Add("Local Z+", 8)
+        d2.Add("Local X-", 9)
+        d2.Add("Local Y-", 10)
+        d2.Add("Local Z-", 11)
+        'Inverse axis indices
+        Dim d3
+        d3 = CreateObject("Scripting.Dictionary")
+        d3.Add(0, 3)
+        d3.Add(1, 4)
+        d3.Add(2, 5)
+        d3.Add(3, 0)
+        d3.Add(4, 1)
+        d3.Add(5, 2)
+        d3.Add(6, 9)
+        d3.Add(7, 10)
+        d3.Add(8, 11)
+        d3.Add(9, 6)
+        d3.Add(10, 7)
+        d3.Add(11, 8)
+        For int_i = 0 To cRelevantProducts.Count - 1
+            Dim sum As Integer
+            sum = 0
+            For intAxis = 0 To intJ - 1
+                sum = sum + disassDir(int_i, intAxis)
+            Next intAxis
+            'Only for products with multiple extraction directions
+            If sum > 1 Then
+                'Add options to ComboBox
+                For intAxis = 0 To intJ - 1
+                    If disassDir(int_i, intAxis) = 1 Then
+                        ExtractionDirection.ComboBox1.AddItem(d1.Item(intAxis))
+                    End If
+                Next intAxis
+                'Highlight the product in CATIA
+                Dim selection5 As Selection
+                selection5 = CATIA.ActiveDocument.Selection
+                selection5.Clear()
+                selection5.Add(cRelevantProducts.Item(int_i + 1))
+                'Show dialog
+                ExtractionDirection.Show
+                selection5.Clear()
+                'Translate chosen axis name back into index 0..11
+                Dim iChosenDir As Integer
+                iChosenDir = d2.Item(sChosenDirection)
+                'Set all other disassembly directions to 0
+                For intAxis = 0 To intJ - 1
+                    If intAxis = iChosenDir Then
+                        disassDir(int_i, intAxis) = 1
+                    Else
+                        disassDir(int_i, intAxis) = 0
+                    End If
+                Next intAxis
+            End If
+            'Reverse tier values
+            Dim intMaxTier As Integer
+            intMaxTier = intTier
+            If aTiers(int_i) <> 0 Then
+                aTiers(int_i) = intMaxTier + 1 - aTiers(int_i)
+            End If
+            'Reverse disassembly axis (assembly axis = -disass. axis)
+            For intAxis = 0 To intJ - 1
+                If disassDir(int_i, intAxis) = 1 Then
+                    disassDir(int_i, intAxis) = 0
+                    disassDir(int_i, d3.Item(intAxis)) = 1
+                    Exit For
+                End If
+            Next intAxis
+        Next int_i
+
+        'Association of components belonging to sequential tiers
+
+        Dim cClashes1 As Clashes
+        Dim oClash1 'As Clash
+        oClash1 = cClashes.Add
+        oClash1.ComputationType = catClashComputationTypeBetweenAll
+        oClash1.Compute
+        Dim cInitConflicts As Conflicts
+        cInitConflicts = oClash1.Conflicts
+        Dim initConfl As Conflict
+        Dim nConfl As Integer
+        nConfl = 0
+        For Each initConfl In cInitConflicts
+            Dim firstIndex As Integer
+            Dim secondIndex As Integer
+            firstIndex = GetProductIndex(initConfl.FirstProduct, cRelevantProducts)
+            secondIndex = GetProductIndex(initConfl.SecondProduct, cRelevantProducts)
+            If aTiers(firstIndex) = aTiers(secondIndex) - 1 Then
+                precedenceMatrix(firstIndex, secondIndex) = 1
+            End If
+            If aTiers(secondIndex) = aTiers(firstIndex) - 1 Then
+                precedenceMatrix(secondIndex, firstIndex) = 1
+            End If
+        Next initConfl
+
+        '  For int_i = 1 To cRelevantProducts.Count
+        '    Dim bNoContacts As Boolean
+        '    bNoContacts = True
+        '    'loop over components from previous tier
+        '    For int_j = 1 To cRelevantProducts.Count
+        '      If aTiers(int_j - 1) = aTiers(int_i - 1) - 1 And aTiers(int_i - 1) <> 0 Then
+        '        'Test for contact
+        '        'define two groups
+        '        Dim group11 As Group
+        '        Dim group21 As Group
+        '         group11 = cGroups.Add
+        '         group21 = cGroups.Add
+        '        group11.AddExplicit cRelevantProducts.Item(int_i)
+        '        group21.AddExplicit cRelevantProducts.Item(int_j)
+        '        'create a new clash analysis
+        '        Dim oClash 'As Clash
+        '         oClash = cClashes.Add
+        '        oClash.ComputationType = catClashComputationTypeBetweenTwo
+        '        oClash.FirstGroup = group11
+        '        oClash.SecondGroup = group21
+        '        oClash.InterferenceType = catClashInterferenceTypeContact
+        '        oClash.Compute
+        '        Dim cConflicts As Conflicts
+        '         cConflicts = oClash.Conflicts
+        '        If cConflicts.Count > 0 Then
+        '          precedenceMatrix(int_j - 1, int_i - 1) = 1
+        '          bNoContacts = False
+        '        End If
+        '      End If
+        '    Next int_j
+        '  Next int_i
+
+        'Export data to Excel
+        objExcel = CreateObject("Excel.Application")
+        objExcel.Visible = True
+        objExcel.Workbooks.Add
+        objExcel.ActiveWorkbook.Sheets.Add.Name = "Precedence Matrix"
+        objSheet1 = objExcel.ActiveWorkbook.Worksheets(2)
+        objSheet1.Name = "Assembly Directions"
+        objSheet2 = objExcel.ActiveWorkbook.Worksheets(1)
+
+        'Assembly directions
+        objSheet1.Cells(1, 1).Value = "Product"
+        objSheet1.Cells(1, 2).Value = "+X"
+        objSheet1.Cells(1, 3).Value = "+Y"
+        objSheet1.Cells(1, 4).Value = "+Z"
+        objSheet1.Cells(1, 5).Value = "-X"
+        objSheet1.Cells(1, 6).Value = "-Y"
+        objSheet1.Cells(1, 7).Value = "-Z"
+        objSheet1.Cells(1, 8).Value = "Assembly Tier"
+        For int_i = 1 To cRelevantProducts.Count
+            objSheet1.Cells(int_i + 1, 1).Value = cRelevantProducts.Item(int_i).Name
+            For intAxis = 0 To intJ - 1
+                objSheet1.Cells(int_i + 1, 2 + intAxis).Value = disassDir(int_i - 1, intAxis)
+            Next intAxis
+            objSheet1.Cells(int_i + 1, intJ + 2).Value = aTiers(int_i - 1)
+        Next int_i
+
+        'Precedence relations
+        For int_i = 1 To cRelevantProducts.Count
+            For int_j = 1 To cRelevantProducts.Count
+                objSheet2.Cells(int_i, int_j).Value = precedenceMatrix(int_i - 1, int_j - 1)
+            Next int_j
+        Next int_i
+
+    End Sub
+    Sub ExtractProducts(oCurrentProduct As Product)
+
+        Dim oCurrentTreeNode As Product
+        Dim i As Integer
+
+        For i = 1 To oCurrentProduct.Products.Count
+            oCurrentTreeNode = oCurrentProduct.Products.Item(i)
+
+            'recursive
+            If oCurrentTreeNode.Products.Count > 0 Then
+                ExtractProducts(oCurrentTreeNode)
+            Else
+                Debug.Print(oCurrentTreeNode.PartNumber & " (" & oCurrentTreeNode.Name & ") is a leaf product")
+                'remove special characters from the part number
+                Dim newPartNo As String
+                Dim newCharacter As String
+                newCharacter = " "
+                newPartNo = oCurrentTreeNode.PartNumber
+                newPartNo = Replace(newPartNo, "<", newCharacter)
+                newPartNo = Replace(newPartNo, ">", newCharacter)
+                newPartNo = Replace(newPartNo, "/", newCharacter)
+                oCurrentTreeNode.PartNumber = newPartNo
+                cAllProducts.Add(oCurrentTreeNode)
+            End If
+
+        Next
+
+    End Sub
+
+    Sub GetNextNode(oCurrentProduct As Product)
+
+        Dim oCurrentTreeNode As Product
+        Dim i As Integer
+
+        For i = 1 To oCurrentProduct.Products.Count
+            oCurrentTreeNode = oCurrentProduct.Products.Item(i)
+
+            If IsPart(oCurrentTreeNode) = True Then
+                MsgBox(oCurrentTreeNode.PartNumber & " is a part")
+            ElseIf IsProduct(oCurrentTreeNode) = True Then
+                MsgBox(oCurrentTreeNode.PartNumber & " is a product")
+            Else
+                MsgBox(oCurrentTreeNode.PartNumber & " is a component")
+            End If
+
+            'recursive
+            If oCurrentTreeNode.Products.Count > 0 Then
+                GetNextNode(oCurrentTreeNode)
+            End If
+
+        Next
+
+    End Sub
+
+    Function IsPart(objCurrentProduct As Product) As Boolean
+
+        Dim oTestPart As PartDocument
+
+        oTestPart = Nothing
+
+        On Error Resume Next
+
+        oTestPart = CATIA.Documents.Item(objCurrentProduct.PartNumber & ".CATPart")
+
+        If Not oTestPart Is Nothing Then
+            IsPart = True
+        Else
+            IsPart = False
+        End If
+
+    End Function
+
+    Function IsProduct(objCurrentProduct As Product) As Boolean
+
+        Dim oTestProduct As ProductDocument
+
+        oTestProduct = Nothing
+
+        On Error Resume Next
+
+        oTestProduct = CATIA.Documents.Item(objCurrentProduct.PartNumber & ".CATProduct")
+
+        If Not oTestProduct Is Nothing Then
+            IsProduct = True
+        Else
+            IsProduct = False
+        End If
+
+    End Function
+
+    Function DeactivateFasteners(objProduct As Product)
+
+        Dim objParts AsCollection
+        'On the top level of product tree
+        ' objParts = objProduct.Products
+        'Recursive
+        objParts = cAllProducts
+        Dim i As Integer
+        Dim selection1 As Selection
+        selection1 = CATIA.ActiveDocument.Selection
+        selection1.Clear()
+
+        Dim intFasteners As Integer
+        intFasteners = 0
+
+        For i = 1 To objParts.Count
+            Dim sName As String
+            Dim prod As Product
+            Dim primFastSize As Integer
+
+            prod = objParts.Item(i)
+            sName = LCase(prod.PartNumber)
+            'Debug.Print sName
+            If InStr(sName, "bolt") > 0 Then
+                Debug.Print(prod.Name + " was identified as a bolt")
+                selection1.Add(prod)
+
+                primaryFasteners.Add(prod)
+
+                CATIA.StartCommand("Activate / Deactivate Component")
+                selection1.Clear()
+                intFasteners = intFasteners + 1
+            ElseIf InStr(sName, "screw") Or InStr(sName, "schraube") > 0 Then
+                Debug.Print(prod.Name + " was identified as a screw")
+                selection1.Add(prod)
+
+                primaryFasteners.Add(prod)
+
+                CATIA.StartCommand("Activate / Deactivate Component")
+                selection1.Clear()
+                intFasteners = intFasteners + 1
+            ElseIf InStr(sName, "clip") > 0 Then
+                Debug.Print(prod.Name + " was identified as a clip")
+                selection1.Add(prod)
+
+                primaryFasteners.Add(prod)
+
+                CATIA.StartCommand("Activate / Deactivate Component")
+                selection1.Clear()
+                intFasteners = intFasteners + 1
+            ElseIf InStr(sName, "wedge") > 0 Then
+                Debug.Print(prod.Name + " was identified as a wedge")
+                selection1.Add(prod)
+
+                primaryFasteners.Add(prod)
+
+                CATIA.StartCommand("Activate / Deactivate Component")
+                selection1.Clear()
+                intFasteners = intFasteners + 1
+            ElseIf InStr(sName, "pin") > 0 Then
+                Debug.Print(prod.Name + " was identified as a pin")
+                selection1.Add(prod)
+
+                primaryFasteners.Add(prod)
+
+                CATIA.StartCommand("Activate / Deactivate Component")
+                selection1.Clear()
+                intFasteners = intFasteners + 1
+            ElseIf InStr(sName, "nut") > 0 Then
+                Debug.Print(prod.Name + " was identified as a nut")
+                selection1.Add(prod)
+
+                secondaryFasteners.Add(prod)
+
+                CATIA.StartCommand("Activate / Deactivate Component")
+                selection1.Clear()
+                intFasteners = intFasteners + 1
+            ElseIf InStr(sName, "washer") > 0 Then
+                Debug.Print(prod.Name + " was identified as a washer")
+                selection1.Add(prod)
+
+                secondaryFasteners.Add(prod)
+
+                CATIA.StartCommand("Activate / Deactivate Component")
+                selection1.Clear()
+                intFasteners = intFasteners + 1
+            Else
+                cRelevantProducts.Add(prod)
+            End If
+        Next
+
+        'CATIA.StartCommand ("Activate / Deactivate Component")
+        Debug.Print("Deactivated " + CStr(intFasteners) + " fasteners")
+        intParts = intParts - intFasteners
+        Debug.Print(CStr(intParts) + " parts to assemble")
+        MsgBox("Fasteners are deacivated. Press OK to proceed.")
+
+    End Function
+
+    Function GenerateBoundingBox(partDocument1 As PartDocument, objProduct As Product, i As Integer)
+        'Processes a single part to extract its origin XYZ, min/max X/Y/Z
+
+        CATIA.DisplayFileAlerts = False
+
+        'Declare variables
+        Dim axis
+        Dim remake
+        Dim part1 As Part
+        Dim axisref As Object
+        Dim shapeFactory1 As ShapeFactory
+        Dim hybridShapeFactory1 As HybridShapeFactory
+        Dim sStatus As String
+        Dim hybridShapeD1, hybridShapeD2, hybridShapeD3 As HybridShapeDirection
+        Default Dim, a1, a2, a3, a4, a5, a6 'To change the offsets of the box
+        Dim bodies1 As Bodies
+        Dim body1 As Body
+        Dim reference1 As Reference
+        Dim HybridShapeExtremum1, HybridShapeExtremum2, HybridShapeExtremum3 As HybridShapeExtremum
+        Dim HybridShapeExtremum4, HybridShapeExtremum5, HybridShapeExtremum6 As HybridShapeExtremum
+        Dim originCoord(2)
+        Dim faceSel As Object
+
+        'Check whether we are processing a Part
+        If (InStr(partDocument1.Name, ".CATPart")) <> 0 Then
+            part1 = partDocument1.Part
+            hybridShapeFactory1 = part1.HybridShapeFactory
+
+            Dim axiscoord(2)
+            Dim axissyst
+
+            Dim axisSystem As AxisSystem
+            axisSystem = part1.AxisSystems.Item(1)
+
+            axissyst = axisSystem
+            axisref = axisSystem
+
+            ref_name_systaxis = axissyst.Name
+
+            axissyst.IsCurrent = 1
+            axissyst.Name = "BBoxAxis"
+            axname = axissyst.Name
+
+            'Get Product's Position (rotation and translation)
+            '(for now: relative to the parent product!)
+            Dim PositionArray(11)
+            Dim oPosition As Object
+            oPosition = objProduct.Position
+            oPosition.GetComponents(PositionArray)
+
+            Dim originpoint As HybridShapePointCoord
+            axissyst.GetOrigin(originCoord)
+            'MsgBox "X0 = " & CStr(originCoord(0)) & vbNewLine & "Y0 = " & CStr(originCoord(1)) & vbNewLine & "Z0 = " & CStr(originCoord(2))
+
+            originpoint = hybridShapeFactory1.AddNewPointCoord(originCoord(0), originCoord(1), originCoord(2))
+            axisref = part1.CreateReferenceFromObject(originpoint)
+            axissyst.GetXAxis(axiscoord)
+            hybridShapeD1 = hybridShapeFactory1.AddNewDirectionByCoord(axiscoord(0), axiscoord(1), axiscoord(2))
+            axissyst.GetYAxis(axiscoord)
+            hybridShapeD2 = hybridShapeFactory1.AddNewDirectionByCoord(axiscoord(0), axiscoord(1), axiscoord(2))
+            axissyst.GetZAxis(axiscoord)
+            hybridShapeD3 = hybridShapeFactory1.AddNewDirectionByCoord(axiscoord(0), axiscoord(1), axiscoord(2))
+
+            'hybridShapeD1&2 are not set yet, but used for line creation (from origin of the axis system)
+            Dim Plane_line_1 As HybridShapeLinePtDir
+            Plane_line_1 = hybridShapeFactory1.AddNewLinePtDir(originpoint, hybridShapeD1, 0, 0, False)
+            Dim Plane_line_2 As HybridShapeLinePtDir
+            Plane_line_2 = hybridShapeFactory1.AddNewLinePtDir(originpoint, hybridShapeD2, 0, 0, False)
+
+            Dim oBodies As Bodies
+            oBodies = part1.Bodies
+
+            'J is defined to make unique names for Axis and the Body for the bounding box
+            Dim j As Integer
+            j = oBodies.Count
+
+            'Add new Body "Bounding Box."j to the Bodies of the current Part
+            bodies1 = part1.Bodies
+            body1 = bodies1.Add()
+            body1.Name = "Bounding Box." & j
+
+            hybridBodies1 = body1.HybridBodies
+            Dim hybridBody1 As HybridBody
+            hybridBody1 = hybridBodies1.Add
+            hybridBody1.Name = "definition_points"
+
+
+            'Pick a face of the part to use for HybridShapeExtract
+            faceSel = CATIA.ActiveDocument.Selection
+            faceSel.Clear
+            'The current Part is added to the selection
+            faceSel.Add(part1)
+            'The selection gets rewritten by all the Faces of the selected part ("sel")
+            faceSel.Search("Type=Face,sel")
+
+            Debug.Print("Selected faces: " & CStr(faceSel.Count))
+
+            'Need to check whether Extract crashes given this face and try the next one
+            Dim f As Integer
+            For f = 1 To faceSel.Count
+
+                'On Error GoTo ContinueFaceLoop
+
+                reference1 = faceSel.Item(f).Value
+                Debug.Print(TypeName(reference1))
+
+                Dim hybridShapeExtract1 As HybridShapeExtract
+                hybridShapeExtract1 = hybridShapeFactory1.AddNewExtract(reference1)
+                hybridShapeExtract1.PropagationType = 1 'point continuity
+                hybridShapeExtract1.ComplementaryExtract = False
+                hybridShapeExtract1.IsFederated = False
+                reference1 = hybridShapeExtract1
+
+                'Create the 6 Extrenum items for the Solid/Surf.  May not be single points, will be solved with next points
+                HybridShapeExtremum1 = hybridShapeFactory1.AddNewExtremum(reference1, hybridShapeD1, 1)
+                HybridShapeExtremum2 = hybridShapeFactory1.AddNewExtremum(reference1, hybridShapeD1, 0)
+                HybridShapeExtremum3 = hybridShapeFactory1.AddNewExtremum(reference1, hybridShapeD2, 1)
+                HybridShapeExtremum4 = hybridShapeFactory1.AddNewExtremum(reference1, hybridShapeD2, 0)
+                HybridShapeExtremum5 = hybridShapeFactory1.AddNewExtremum(reference1, hybridShapeD3, 1)
+                HybridShapeExtremum6 = hybridShapeFactory1.AddNewExtremum(reference1, hybridShapeD3, 0)
+
+                ' Creates Geometrical Set under the Solid, to contain the construction elements
+
+                Dim hybridBody2 As HybridBody
+                hybridBody2 = hybridBodies1.Item("definition_points")
+
+                hybridBody2.AppendHybridShape(HybridShapeExtremum1)
+                part1.InWorkObject = HybridShapeExtremum1
+                HybridShapeExtremum1.Name = "max_X"
+                hybridBody2.AppendHybridShape(HybridShapeExtremum2)
+                part1.InWorkObject = HybridShapeExtremum2
+                HybridShapeExtremum2.Name = "min_X"
+                hybridBody2.AppendHybridShape(HybridShapeExtremum3)
+                part1.InWorkObject = HybridShapeExtremum3
+                HybridShapeExtremum3.Name = "max_Y"
+                hybridBody2.AppendHybridShape(HybridShapeExtremum4)
+                part1.InWorkObject = HybridShapeExtremum4
+                HybridShapeExtremum4.Name = "min_Y"
+                hybridBody2.AppendHybridShape(HybridShapeExtremum5)
+                part1.InWorkObject = HybridShapeExtremum5
+                HybridShapeExtremum5.Name = "max_Z"
+                hybridBody2.AppendHybridShape(HybridShapeExtremum6)
+                part1.InWorkObject = HybridShapeExtremum6
+                HybridShapeExtremum6.Name = "min_Z"
+
+                part1.UpdateObject(HybridShapeExtremum1)
+                part1.UpdateObject(HybridShapeExtremum2)
+                part1.UpdateObject(HybridShapeExtremum3)
+                part1.UpdateObject(HybridShapeExtremum4)
+                part1.UpdateObject(HybridShapeExtremum5)
+                part1.UpdateObject(HybridShapeExtremum6)
+
+                'part1.Update
+
+                ' Creates a 6 single points using the Extrenums as refs, so if the Extrenum was a line or surf, you can still off planes to these points
+
+                Dim Ref1 As Reference
+                Ref1 = part1.CreateReferenceFromObject(HybridShapeExtremum1)
+                Dim Point1 As HybridShapePointCoord
+                Point1 = hybridShapeFactory1.AddNewPointCoordWithReference(0, 0, 0, Ref1)
+                hybridBody2.AppendHybridShape(Point1)
+                point_ref11 = part1.CreateReferenceFromObject(Point1)
+
+                Dim Ref2 As Reference
+                Ref2 = part1.CreateReferenceFromObject(HybridShapeExtremum2)
+                Dim Point2 As HybridShapePointCoord
+                Point2 = hybridShapeFactory1.AddNewPointCoordWithReference(0, 0, 0, Ref2)
+                hybridBody2.AppendHybridShape(Point2)
+                point_ref12 = part1.CreateReferenceFromObject(Point2)
+
+                Dim Ref3 As Reference
+                Ref3 = part1.CreateReferenceFromObject(HybridShapeExtremum3)
+                Dim Point3 As HybridShapePointCoord
+                Point3 = hybridShapeFactory1.AddNewPointCoordWithReference(0, 0, 0, Ref3)
+                hybridBody2.AppendHybridShape(Point3)
+                point_ref13 = part1.CreateReferenceFromObject(Point3)
+
+                Dim Ref4 As Reference
+                Ref4 = part1.CreateReferenceFromObject(HybridShapeExtremum4)
+                Dim Point4 As HybridShapePointCoord
+                Point4 = hybridShapeFactory1.AddNewPointCoordWithReference(0, 0, 0, Ref4)
+                hybridBody2.AppendHybridShape(Point4)
+                point_ref14 = part1.CreateReferenceFromObject(Point4)
+
+                Dim Ref5 As Reference
+                Ref5 = part1.CreateReferenceFromObject(HybridShapeExtremum5)
+                Dim Point5 As HybridShapePointCoord
+                Point5 = hybridShapeFactory1.AddNewPointCoordWithReference(0, 0, 0, Ref5)
+                hybridBody2.AppendHybridShape(Point5)
+                point_ref5 = part1.CreateReferenceFromObject(Point5)
+
+                Dim Ref6 As Reference
+                Ref6 = part1.CreateReferenceFromObject(HybridShapeExtremum6)
+                Dim Point6 As HybridShapePointCoord
+                Point6 = hybridShapeFactory1.AddNewPointCoordWithReference(0, 0, 0, Ref6)
+                hybridBody2.AppendHybridShape(Point6)
+                point_ref6 = part1.CreateReferenceFromObject(Point6)
+
+                part1.UpdateObject(Point1)
+                part1.UpdateObject(Point2)
+                part1.UpdateObject(Point3)
+                part1.UpdateObject(Point4)
+                part1.UpdateObject(Point5)
+                part1.UpdateObject(Point6)
+
+                'part1.Update
+
+                axissyst.IsCurrent = 1
+
+                'Read extremum coordinates
+                Dim coord(2) As Object
+                Dim absCoord(2) As Object
+
+                Dim TheSPAWorkbench As Workbench
+                TheSPAWorkbench = CATIA.ActiveDocument.GetWorkbench("SPAWorkbench")
+
+                Dim TheMeasurable
+
+                Debug.Print("Extremum coordinates in the local Axis System:")
+
+                'Transform local extrema coordinates into global coordinates and update aAssemblyBoundaries
+
+                'Distances to Part Bounding Box faces in local coordinates
+                Dim aBBDistances(5) As Double
+                '8 corner points of the Part Bounding Box (BB) in local coordinates (8x3 array)
+                Dim aBBCornersLocal(7, 2) As Double
+
+                'max_X_loc
+                TheMeasurable = TheSPAWorkbench.GetMeasurable(point_ref11)
+                TheMeasurable.GetPoint(coord)
+                aBBDistances(0) = coord(0)
+                Call Coord_Transform(coord, absCoord, objProduct, True)
+                Debug.Print(Point1.Name & " (" & Ref1.DisplayName & "): [" & absCoord(0) & " " & absCoord(1) & " " & absCoord(2) & "]")
+
+                'min_X_loc
+                TheMeasurable = TheSPAWorkbench.GetMeasurable(point_ref12)
+                TheMeasurable.GetPoint(coord)
+                aBBDistances(1) = coord(0)
+                Call Coord_Transform(coord, absCoord, objProduct, True)
+                Debug.Print(Point2.Name & " (" & Ref2.DisplayName & "): [" & absCoord(0) & " " & absCoord(1) & " " & absCoord(2) & "]")
+
+                'max_Y_loc
+                TheMeasurable = TheSPAWorkbench.GetMeasurable(point_ref13)
+                TheMeasurable.GetPoint(coord)
+                aBBDistances(2) = coord(1)
+                Call Coord_Transform(coord, absCoord, objProduct, True)
+                Debug.Print(Point3.Name & " (" & Ref3.DisplayName & "): [" & absCoord(0) & " " & absCoord(1) & " " & absCoord(2) & "]")
+
+                'min_Y_loc
+                TheMeasurable = TheSPAWorkbench.GetMeasurable(point_ref14)
+                TheMeasurable.GetPoint(coord)
+                aBBDistances(3) = coord(1)
+                Call Coord_Transform(coord, absCoord, objProduct, True)
+                Debug.Print(Point4.Name & " (" & Ref4.DisplayName & "): [" & absCoord(0) & " " & absCoord(1) & " " & absCoord(2) & "]")
+
+                'max_Z_loc
+                TheMeasurable = TheSPAWorkbench.GetMeasurable(point_ref5)
+                TheMeasurable.GetPoint(coord)
+                aBBDistances(4) = coord(2)
+                Call Coord_Transform(coord, absCoord, objProduct, True)
+                Debug.Print(Point5.Name & " (" & Ref5.DisplayName & "): [" & absCoord(0) & " " & absCoord(1) & " " & absCoord(2) & "]")
+
+                'min_Z_loc
+                TheMeasurable = TheSPAWorkbench.GetMeasurable(point_ref6)
+                TheMeasurable.GetPoint(coord)
+                aBBDistances(5) = coord(2)
+                Call Coord_Transform(coord, absCoord, objProduct, True)
+                Debug.Print(Point6.Name & " (" & Ref6.DisplayName & "): [" & absCoord(0) & " " & absCoord(1) & " " & absCoord(2) & "]")
+
+                'Generate 8 corner points (local coordinates) to the aBBCornersLocal
+                Dim m, n, k, c As Integer
+                c = 0
+                For m = 0 To 1
+                    For n = 2 To 3
+                        For k = 4 To 5
+                            aBBCornersLocal(c, 0) = aBBDistances(m)
+                            aBBCornersLocal(c, 1) = aBBDistances(n)
+                            aBBCornersLocal(c, 2) = aBBDistances(k)
+                            'Transform corner point into global coordinates
+                            coord(0) = aBBCornersLocal(c, 0)
+                            coord(1) = aBBCornersLocal(c, 1)
+                            coord(2) = aBBCornersLocal(c, 2)
+                            Call Coord_Transform(coord, absCoord, objProduct, True)
+                            'Record values to aPartBBGlob
+                            Dim CCC(2) As Double    'Corner Coordinates in axis system Congruent to global but in the part's origin
+                            CCC(0) = absCoord(0) - PositionArray(9)
+                            CCC(1) = absCoord(1) - PositionArray(10)
+                            CCC(2) = absCoord(2) - PositionArray(11)
+                            If CCC(0) > aPartBBGlob(i - 1, 0) Then
+                                aPartBBGlob(i - 1, 0) = CCC(0)
+                            End If
+                            If CCC(0) < aPartBBGlob(i - 1, 1) Then
+                                aPartBBGlob(i - 1, 1) = CCC(0)
+                            End If
+                            If CCC(1) > aPartBBGlob(i - 1, 2) Then
+                                aPartBBGlob(i - 1, 2) = CCC(1)
+                            End If
+                            If CCC(1) < aPartBBGlob(i - 1, 3) Then
+                                aPartBBGlob(i - 1, 3) = CCC(1)
+                            End If
+                            If CCC(2) > aPartBBGlob(i - 1, 4) Then
+                                aPartBBGlob(i - 1, 4) = CCC(2)
+                            End If
+                            If CCC(2) < aPartBBGlob(i - 1, 5) Then
+                                aPartBBGlob(i - 1, 5) = CCC(2)
+                            End If
+                            'Update aAssemblyBoundaries (global)
+                            If absCoord(0) > aAssemblyBoundaries(0) Then
+                                aAssemblyBoundaries(0) = absCoord(0)
+                            End If
+                            If absCoord(0) < aAssemblyBoundaries(1) Then
+                                aAssemblyBoundaries(1) = absCoord(0)
+                            End If
+                            If absCoord(1) > aAssemblyBoundaries(2) Then
+                                aAssemblyBoundaries(2) = absCoord(1)
+                            End If
+                            If absCoord(1) < aAssemblyBoundaries(3) Then
+                                aAssemblyBoundaries(3) = absCoord(1)
+                            End If
+                            If absCoord(2) > aAssemblyBoundaries(4) Then
+                                aAssemblyBoundaries(4) = absCoord(2)
+                            End If
+                            If absCoord(2) < aAssemblyBoundaries(5) Then
+                                aAssemblyBoundaries(5) = absCoord(2)
+                            End If
+                            c = c + 1
+                        Next k
+                    Next n
+                Next m
+
+                part1.Update
+
+                Exit For
+
+                'ContinueFaceLoop:
+
+            Next f
+
+        Else
+            MsgBox("The active document must be a CATPart")
+        End If
+
+    End Function
+
+    Sub RecalculateRemovalDistances(cRelProd As Collection, cDeact As Collection)
+
+        Dim aRemovalDistances(cRelProd.Count - 1, 5)
+        Dim i As Integer
+        Dim relProd As Product
+        'assure that the origin is inside the BB of assembly
+        aAssemblyBoundaries(0) = 0#
+        aAssemblyBoundaries(1) = 0#
+        aAssemblyBoundaries(2) = 0#
+        aAssemblyBoundaries(3) = 0#
+        aAssemblyBoundaries(4) = 0#
+        aAssemblyBoundaries(5) = 0#
+
+        For i = 0 To cRelProd.Count - 1
+            relProd = cRelProd.Item(i + 1)
+            If Not productIsInCollection(relProd, cDeact) Then
+                If aInitPos(i, 9) + aPartBBGlob(i, 0) > aAssemblyBoundaries(0) Then
+                    aAssemblyBoundaries(0) = aInitPos(i, 9) + aPartBBGlob(i, 0)
+                End If
+                If aInitPos(i, 9) + aPartBBGlob(i, 1) < aAssemblyBoundaries(1) Then
+                    aAssemblyBoundaries(1) = aInitPos(i, 9) + aPartBBGlob(i, 1)
+                End If
+                If aInitPos(i, 10) + aPartBBGlob(i, 2) > aAssemblyBoundaries(2) Then
+                    aAssemblyBoundaries(2) = aInitPos(i, 10) + aPartBBGlob(i, 2)
+                End If
+                If aInitPos(i, 10) + aPartBBGlob(i, 3) < aAssemblyBoundaries(3) Then
+                    aAssemblyBoundaries(3) = aInitPos(i, 10) + aPartBBGlob(i, 3)
+                End If
+                If aInitPos(i, 11) + aPartBBGlob(i, 4) > aAssemblyBoundaries(4) Then
+                    aAssemblyBoundaries(4) = aInitPos(i, 11) + aPartBBGlob(i, 4)
+                End If
+                If aInitPos(i, 11) + aPartBBGlob(i, 5) < aAssemblyBoundaries(5) Then
+                    aAssemblyBoundaries(5) = aInitPos(i, 11) + aPartBBGlob(i, 5)
+                End If
+            End If
+        Next i
+
+        For i = 0 To cRelProd.Count - 1
+            relProd = cRelProd.Item(i + 1)
+            If Not productIsInCollection(relProd, cDeact) Then
+                aRemovalDistances(i, 0) = aAssemblyBoundaries(0) - aPartBBGlob(i, 1)
+                aRemovalDistances(i, 1) = aAssemblyBoundaries(1) - aPartBBGlob(i, 0)
+                aRemovalDistances(i, 2) = aAssemblyBoundaries(2) - aPartBBGlob(i, 3)
+                aRemovalDistances(i, 3) = aAssemblyBoundaries(3) - aPartBBGlob(i, 2)
+                aRemovalDistances(i, 4) = aAssemblyBoundaries(4) - aPartBBGlob(i, 5)
+                aRemovalDistances(i, 5) = aAssemblyBoundaries(5) - aPartBBGlob(i, 4)
+            End If
+        Next i
+
+    End Sub
+
+    Public Function ArrayLen(a As Object) As Integer
+        If IsEmpty(a) Then
+            ArrayLen = 0
+        Else
+            ArrayLen = UBound(a) - LBound(a) + 1
+        End If
+    End Function
+
+    Function Det3x3(dX11 As Double, dX12 As Double, dX13 As Double,
+                dX21 As Double, dX22 As Double, dX23 As Double,
+                dX31 As Double, dX32 As Double, dX33 As Double) As Double
+        '***********************************************
+        '*
+        '* 3x3 matrix determinant calculation (direct)
+        '*
+        '***********************************************
+
+        Det3x3 = dX11 * dX22 * dX33 + dX12 * dX23 * dX31 + dX21 * dX32 * dX13 -
+             dX13 * dX22 * dX31 - dX12 * dX21 * dX33 - dX23 * dX32 * dX11
+    End Function
+    Function Inv3x3(dX11 As Double, dX12 As Double, dX13 As Double,
+           dX21 As Double, dX22 As Double, dX23 As Double,
+           dX31 As Double, dX32 As Double, dX33 As Double, aInv() As Double) As Boolean
+        '***********************************************
+        '*
+        '* 3x3 matrix inverse calculation (direct)
+        '*
+        '***********************************************
+        Dim dDet As Double
+
+        Dim aInv(8)
+
+        Inv3x3 = False
+
+        dDet = Det3x3(dX11, dX12, dX13, dX21, dX22, dX23, dX31, dX32, dX33)
+        If dDet = 0 Then Exit Function
+
+        aInv(0) = (dX22 * dX33 - dX23 * dX32) / Abs(dDet)
+        aInv(1) = (dX13 * dX32 - dX12 * dX33) / Abs(dDet)
+        aInv(2) = (dX12 * dX23 - dX13 * dX22) / Abs(dDet)
+        aInv(3) = (dX23 * dX31 - dX21 * dX33) / Abs(dDet)
+        aInv(4) = (dX11 * dX33 - dX13 * dX31) / Abs(dDet)
+        aInv(5) = (dX13 * dX21 - dX11 * dX23) / Abs(dDet)
+        aInv(6) = (dX21 * dX32 - dX22 * dX31) / Abs(dDet)
+        aInv(7) = (dX12 * dX31 - dX11 * dX32) / Abs(dDet)
+        aInv(8) = (dX11 * dX22 - dX12 * dX21) / Abs(dDet)
+
+        Inv3x3 = True
+
+    End Function
+    Sub Coord_Transform(aRel() As Object, aAbs() As Object, oProduct As Product, bRecursively As Boolean)
+
+        Dim vProduct As Object, vCoord(11)
+        Dim oFatherProduct As Product
+        Dim aInv() As Double
+
+        'Exit condition, empty object
+        If oProduct Is Nothing Then Exit Sub
+
+        'Redim absolute coords matrix
+        On Error Resume Next
+        Dim aAbs(2)
+        On Error GoTo 0
+
+        'Calculate product coordinates
+        vProduct = oProduct
+        vProduct.Position.GetComponents(vCoord)
+
+        'Calculate inverse matrix
+        If Inv3x3(CDbl(vCoord(0)), CDbl(vCoord(1)), CDbl(vCoord(2)),
+                 CDbl(vCoord(3)), CDbl(vCoord(4)), CDbl(vCoord(5)),
+                 CDbl(vCoord(6)), CDbl(vCoord(7)), CDbl(vCoord(8)), aInv) Then
+        Else
+            'MsgBox "Error, degenerate transformation", vbOKOnly
+            Exit Sub
+        End If
+
+        'Calculate transformation
+        aAbs(0) = vCoord(9) + aInv(0) * aRel(0) + aInv(1) * aRel(1) + aInv(2) * aRel(2)
+        aAbs(1) = vCoord(10) + aInv(3) * aRel(0) + aInv(4) * aRel(1) + aInv(5) * aRel(2)
+        aAbs(2) = vCoord(11) + aInv(6) * aRel(0) + aInv(7) * aRel(1) + aInv(8) * aRel(2)
+
+        'If recursive option sepecified, search for parents and applies the transformation again
+        If bRecursively Then
+
+            'Try to assign parent
+            oFatherProduct = Nothing
+            On Error Resume Next
+            oFatherProduct = oProduct.Parent.Parent
+            On Error GoTo 0
+
+            'If OK, recalculate coords
+            If oFatherProduct Is Nothing Then
+            Else
+                If oFatherProduct.PartNumber + ".CATProduct" = CATIA.ActiveDocument.Name Then
+                    aRel(0) = aAbs(0)
+                    aRel(1) = aAbs(1)
+                    aRel(2) = aAbs(2)
+                    Coord_Transform(aRel, aAbs, oFatherProduct, False)
+                Else
+                    aRel(0) = aAbs(0)
+                    aRel(1) = aAbs(1)
+                    aRel(2) = aAbs(2)
+                    Coord_Transform(aRel, aAbs, oFatherProduct, True)
+                End If
+            End If
+
+        End If
+
+    End Sub
+
+    Function productIsInCollection(objProd As Product, prodColl As Collection) As Boolean
+        Dim dummyObj As Product
+        productIsInCollection = False
+        For Each dummyObj In prodColl
+            If dummyObj.Name = objProd.Name Then
+                productIsInCollection = True
+                Exit For
+            End If
+        Next
+    End Function
+
+    Sub moveProduct(objProd As Product, intDir As Integer, bPositive As Boolean)
+        Dim intS As Integer
+        If bPositive = True Then
+            intS = intStep
+        Else
+            intS = -intStep
+        End If
+        Dim moveArray(11)
+        moveArray(0) = 1
+        moveArray(1) = 0
+        moveArray(2) = 0
+        moveArray(3) = 0
+        moveArray(4) = 1
+        moveArray(5) = 0
+        moveArray(6) = 0
+        moveArray(7) = 0
+        moveArray(8) = 1
+        moveArray(9) = 0
+        moveArray(10) = 0
+        moveArray(11) = 0
+
+        Dim axisArray(11)
+
+        'movement along global axis
+        If intDir < 7 Then
+            'Attention: for now it is assumed that all products are on the top level of specification tree
+            If intDir = 1 Then
+                moveArray(9) = intS
+            End If
+            If intDir = 2 Then
+                moveArray(10) = intS
+            End If
+            If intDir = 3 Then
+                moveArray(11) = intS
+            End If
+            If intDir = 4 Then
+                moveArray(9) = -intS
+            End If
+            If intDir = 5 Then
+                moveArray(10) = -intS
+            End If
+            If intDir = 6 Then
+                moveArray(11) = -intS
+            End If
+        Else    'movement along local axis
+            Dim oPosition As Object
+            oPosition = objProd.Position
+            oPosition.GetComponents(axisArray)
+            If intDir = 7 Then
+                moveArray(9) = axisArray(0) * intS
+                moveArray(10) = axisArray(1) * intS
+                moveArray(11) = axisArray(2) * intS
+            End If
+            If intDir = 8 Then
+                moveArray(9) = axisArray(3) * intS
+                moveArray(10) = axisArray(4) * intS
+                moveArray(11) = axisArray(5) * intS
+            End If
+            If intDir = 9 Then
+                moveArray(9) = axisArray(6) * intS
+                moveArray(10) = axisArray(7) * intS
+                moveArray(11) = axisArray(8) * intS
+            End If
+            If intDir = 10 Then
+                moveArray(9) = -axisArray(0) * intS
+                moveArray(10) = -axisArray(1) * intS
+                moveArray(11) = -axisArray(2) * intS
+            End If
+            If intDir = 11 Then
+                moveArray(9) = -axisArray(3) * intS
+                moveArray(10) = -axisArray(4) * intS
+                moveArray(11) = -axisArray(5) * intS
+            End If
+            If intDir = 12 Then
+                moveArray(9) = -axisArray(6) * intS
+                moveArray(10) = -axisArray(7) * intS
+                moveArray(11) = -axisArray(8) * intS
+            End If
+        End If
+        prod1nd = objProd
+        prod1nd.Move.Apply(moveArray)
+
+    End Sub
+
+    Function collisionDetected(cClashes As Clashes, group1 As Group, group2 As Group) As Boolean
+        'cRelevantProducts As Collection, cDeactivated As Collection
+
+        collisionDetected = False
+
+        'define two groups
+        '    Dim group1 As Group
+        'Dim group2 As Group
+        '     group1 = cGroups.Add
+        ' group2 = cGroups.Add
+        '    group1.AddExplicit product1
+        '    Dim relevantProduct As Product
+        '    For Each relevantProduct In cRelevantProducts
+        '      If Not relevantProduct.Name = product1.Name And Not productIsInCollection(relevantProduct, cDeactivated) Then
+        '        group2.AddExplicit relevantProduct
+        '      End If
+        '    Next relevantProduct
+        'create a new clash analysis
+        Dim oClash 'As Clash
+        oClash = cClashes.Add
+        oClash.ComputationType = catClashComputationTypeBetweenTwo
+        oClash.FirstGroup = group1
+        oClash.SecondGroup = group2
+        oClash.InterferenceType = catClashInterferenceTypeClearance
+        'oClash.Clearance = dCollSens
+        oClash.Compute
+        Dim cConflicts As Conflicts
+        cConflicts = oClash.Conflicts
+        If cConflicts.Count > 0 Then
+            'MsgBox "Detected a collision: " & product1.Name
+            'If at least one conflict value exceeds the collision sensitivity, it is a collision
+            Dim oConflict As Conflict
+            Dim c As Integer
+            For c = 1 To cConflicts.Count
+                oConflict = cConflicts.Item(c)
+                oConflict.Status = catConflictStatusRelevant
+                If oConflict.Type = catConflictTypeClash Then
+                    If oConflict.Value < -dCollSens Then
+                        collisionDetected = True
+                        Debug.Print("Clash detected: " & oConflict.FirstProduct.Name & " - " & oConflict.SecondProduct.Name & " = " & oConflict.Value)
+                        Exit For
+                    End If
+                End If
+            Next c
+        End If
+    End Function
+
+    Function productReachedFinalPosition(objProd As Product, i1 As Integer) As Boolean
+        productReachedFinalPosition = False
+        Dim posArray(11)
+        Dim oPosition As Object
+        oPosition = objProd.Position
+        oPosition.GetComponents(posArray)
+        If posArray(9) > aRemovalDistances(i1 - 1, 0) Then
+            productReachedFinalPosition = True
+            'MsgBox "X+ removal distance reached by " & objProd.Name
+        End If
+        If posArray(9) < aRemovalDistances(i1 - 1, 1) Then
+            productReachedFinalPosition = True
+            'MsgBox "X- removal distance reached by " & objProd.Name
+        End If
+        If posArray(10) > aRemovalDistances(i1 - 1, 2) Then
+            productReachedFinalPosition = True
+            'MsgBox "Y+ removal distance reached by " & objProd.Name
+        End If
+        If posArray(10) < aRemovalDistances(i1 - 1, 3) Then
+            productReachedFinalPosition = True
+            'MsgBox "Y- removal distance reached by " & objProd.Name
+        End If
+        If posArray(11) > aRemovalDistances(i1 - 1, 4) Then
+            productReachedFinalPosition = True
+            'MsgBox "Z+ removal distance reached by " & objProd.Name
+        End If
+        If posArray(11) < aRemovalDistances(i1 - 1, 5) Then
+            productReachedFinalPosition = True
+            'MsgBox "Z- removal distance reached by " & objProd.Name
+        End If
+    End Function
+
+    Function productHasValidDisassDir(i1 As Integer, disassDir() As Object) As Boolean
+        productHasValidDisassDir = False
+        Dim j As Integer
+        For j = 0 To 11
+            If disassDir(i1 - 1, j) = 1 Then
+                productHasValidDisassDir = True
+                Exit For
+            End If
+        Next j
+    End Function
+
+    Function Tree(s1, q)
+
+        For Each s2 In s1.Products
+            Tree(s2, q)
+        Next
+
+        parentAssy = s1.Parent.Parent
+
+        If StrComp(TypeName(parentAssy), "Product") = 0 Then
+            parentAssy.ReferenceProduct.Products.Item(s1.Name).Name = CStr(s1.PartNumber) & CStr("." & q)
+            q = q + 1
+        End If
+
+    End Function
+
+    Private Sub RenameSingleLevel(ByRef oCurrentProd As Product)
+
+        On Error Resume Next
+
+        'More declarations
+        Dim ItemToRename As Product
+        Dim ToRenamePartNumber As String
+        Dim lNumberOfItems As Long
+        Dim RenameArray(2000) As String
+        Dim i As Integer
+        Dim j As Integer
+        Dim k As Integer
+
+        oCurrentProd = oCurrentProd.ReferenceProduct    'You have to work with the "ReferenceProduct" object
+        lNumberOfItems = oCurrentProd.Products.Count
+
+        'For i = 1 To lNumberOfItems                         'Clear out the rename array
+        '    RenameArray(i) = ""                             'Don't know if this is necessary
+        'Next
+
+        'Run through this loop once, to set everything to a dummy name, to avoid naming conflicts
+        For i = 1 To lNumberOfItems                             'Cycle through the assembly's children
+            ItemToRename = oCurrentProd.Products.Item(i)    'Declare which item we are working on
+
+            ToRenamePartNumber = ItemToRename.PartNumber        'Get the Part Number
+            'ToRenamePartNumber = ItemToRename.DescriptionRef   'Toggle these two lines for testing
+
+            RenameArray(i) = ToRenamePartNumber                 'Building the list of part names for the numbering loop
+
+            k = 0                                               'Numbering Loop
+            For j = 1 To i                                      'This loop checks and sets the instance number
+                If RenameArray(j) = ToRenamePartNumber Then
+                    k = k + 1
+                End If
+            Next
+            CATIA.StatusBar = ItemToRename.Name & " > " & ToRenamePartNumber & "." & k
+            'MsgBox ItemToRename.Name & " / " & ToRenamePartNumber & "." & k    'This line is for testing only
+            ItemToRename.Name = ToRenamePartNumber & "TEMP." & k    'Set the new instance name, to a TEMP dummy value
+
+        Next
+
+        'Run through this loop to set the name finally, then the recursion call
+        For i = 1 To lNumberOfItems
+            ItemToRename = oCurrentProd.Products.Item(i)
+
+            ToRenamePartNumber = ItemToRename.PartNumber        'Toggle these two lines for testing
+            'ToRenamePartNumber = ItemToRename.DescriptionRef   'Toggle these two lines for testing
+
+            RenameArray(i) = ToRenamePartNumber
+
+            k = 0
+            For j = 1 To i
+                If RenameArray(j) = ToRenamePartNumber Then
+                    k = k + 1
+                End If
+            Next
+
+            CATIA.StatusBar = ItemToRename.Name & " > " & ToRenamePartNumber & "." & k
+            'MsgBox ItemToRename.Name & " / " & ToRenamePartNumber & "." & k    'For testing
+
+            ItemToRename.Name = ToRenamePartNumber & "." & k    'Set the new instance name final
+
+            If ItemToRename.Products.Count <> 0 Then        'Recursive Call for version 0.1.2
+                If oList.exists(ItemToRename.PartNumber) Then GoTo Finish
+                If ItemToRename.PartNumber = ItemToRename.ReferenceProduct.Parent.Product.PartNumber Then oList.Add(ItemToRename.PartNumber, 1)
+                Call RenameSingleLevel(ItemToRename)
+            End If
+
+Finish:
+        Next
+
+    End Sub
+
+    Function GetProductIndex(objProd As Product, cProds As Collection) As Integer
+        Dim produkt As Product
+        Dim intAns As Integer
+        intAns = 0
+        For Each produkt In cProds
+            If produkt.Name = objProd.Name Then
+                GetProductIndex = intAns
+                Exit Function
+            End If
+            intAns = intAns + 1
+        Next produkt
+    End Function
+
+End Class
diff --git a/CatiaNetTest/CatiaNetTest.vbproj b/CatiaNetTest/CatiaNetTest.vbproj
new file mode 100644
index 0000000000000000000000000000000000000000..de9223021061c5a79d8ae3289f7673c2b8eb84d3
--- /dev/null
+++ b/CatiaNetTest/CatiaNetTest.vbproj
@@ -0,0 +1,915 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{BE15D79B-EF5F-46CE-8D88-72F4386BCF6F}</ProjectGuid>
+    <OutputType>WinExe</OutputType>
+    <StartupObject>CatiaNetTest.My.MyApplication</StartupObject>
+    <RootNamespace>CatiaNetTest</RootNamespace>
+    <AssemblyName>CatiaNetTest</AssemblyName>
+    <FileAlignment>512</FileAlignment>
+    <MyType>WindowsForms</MyType>
+    <TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
+    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <DefineDebug>true</DefineDebug>
+    <DefineTrace>true</DefineTrace>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DocumentationFile>CatiaNetTest.xml</DocumentationFile>
+    <NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <DebugType>pdbonly</DebugType>
+    <DefineDebug>false</DefineDebug>
+    <DefineTrace>true</DefineTrace>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DocumentationFile>CatiaNetTest.xml</DocumentationFile>
+    <NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
+  </PropertyGroup>
+  <PropertyGroup>
+    <OptionExplicit>On</OptionExplicit>
+  </PropertyGroup>
+  <PropertyGroup>
+    <OptionCompare>Binary</OptionCompare>
+  </PropertyGroup>
+  <PropertyGroup>
+    <OptionStrict>Off</OptionStrict>
+  </PropertyGroup>
+  <PropertyGroup>
+    <OptionInfer>On</OptionInfer>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Deployment" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="System.Net.Http" />
+  </ItemGroup>
+  <ItemGroup>
+    <Import Include="Microsoft.VisualBasic" />
+    <Import Include="System" />
+    <Import Include="System.Collections" />
+    <Import Include="System.Collections.Generic" />
+    <Import Include="System.Data" />
+    <Import Include="System.Drawing" />
+    <Import Include="System.Diagnostics" />
+    <Import Include="System.Windows.Forms" />
+    <Import Include="System.Linq" />
+    <Import Include="System.Xml.Linq" />
+    <Import Include="System.Threading.Tasks" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="AssemblyTiers2.vb" />
+    <Compile Include="Form1.vb">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="Form1.Designer.vb">
+      <DependentUpon>Form1.vb</DependentUpon>
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="My Project\AssemblyInfo.vb" />
+    <Compile Include="My Project\Application.Designer.vb">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Application.myapp</DependentUpon>
+    </Compile>
+    <Compile Include="My Project\Resources.Designer.vb">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+      <DependentUpon>Resources.resx</DependentUpon>
+    </Compile>
+    <Compile Include="My Project\Settings.Designer.vb">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Settings.settings</DependentUpon>
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
+    </Compile>
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="Form1.resx">
+      <DependentUpon>Form1.vb</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="My Project\Resources.resx">
+      <Generator>VbMyResourcesResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.vb</LastGenOutput>
+      <CustomToolNamespace>My.Resources</CustomToolNamespace>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="My Project\Application.myapp">
+      <Generator>MyApplicationCodeGenerator</Generator>
+      <LastGenOutput>Application.Designer.vb</LastGenOutput>
+    </None>
+    <None Include="My Project\Settings.settings">
+      <Generator>SettingsSingleFileGenerator</Generator>
+      <CustomToolNamespace>My</CustomToolNamespace>
+      <LastGenOutput>Settings.Designer.vb</LastGenOutput>
+    </None>
+    <None Include="App.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <COMReference Include="AECRTypeLib">
+      <Guid>{85CC1867-B083-0000-0280-020CC2000000}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="AnnotationTypeLib">
+      <Guid>{88D26C84-D8E9-0000-0280-020CC3000000}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="BehaviorTypeLib">
+      <Guid>{14F198C2-0761-11D1-A5B1-00A0C9469177}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="CAT3DXml">
+      <Guid>{0FCBA824-46B4-430B-A3C6-BC8E84D1FB7F}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="CATArrangementTypeLib">
+      <Guid>{A903D4EA-3932-11D3-8BB3-006094EB5532}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="CATAssemblyTypeLib">
+      <Guid>{8D5B5690-9551-11D4-9349-006094EB72E6}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="CATCompositesMat">
+      <Guid>{437A1314-9209-41FA-B546-9214651847FA}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="CATDataExch">
+      <Guid>{737CBEE1-8395-4A53-818C-FE7BFE900297}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="CATEdbTypeLib">
+      <Guid>{3C63282E-8D73-4F3E-BF1F-D893F84DE783}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="CATFunctSystem">
+      <Guid>{66AC8D61-4977-11D3-B2C7-0008C725BE57}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="CATHumanPackaging">
+      <Guid>{839FB79A-20FA-4F8E-B1B5-999E0AF49745}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="CATIA_APP_ITF">
+      <Guid>{3D8D0A2A-F2B0-11D4-A3AA-00D0B756AD5D}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="CATIdeSettings">
+      <Guid>{FE73E3EA-3D1A-450F-833F-DE849066C8B6}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="CATImm">
+      <Guid>{3AE49352-F009-4B43-B51C-29F6AD62663B}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="CATInstantCollabItf">
+      <Guid>{96C13590-CBF9-4F0F-9401-973103C58E12}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="CATMat">
+      <Guid>{4D3F28C0-7790-11D6-8056-0030F113D1BF}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="CATMultiCAD">
+      <Guid>{2ADBCBC4-7492-490C-8B6D-32CAA716E314}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="CATOBM">
+      <Guid>{7B131536-75DA-11D5-8551-00D0B7ADDE06}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="CATPspPlantShipTypeLib">
+      <Guid>{07CD116E-CF88-11D4-8E1B-00D0B7ACB59A}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="CATRdg">
+      <Guid>{AB9D7654-6206-0000-0280-02157B000000}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="CATRma">
+      <Guid>{9BE25E70-7167-11D6-8054-0030F113D1BF}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="CATRpmReporterTypeLib">
+      <Guid>{DFE3EB46-ABAA-11D5-8E54-00D0B7ACB59A}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="CATRsc">
+      <Guid>{D45AD2D0-999B-11D6-805E-0030F113D1BF}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="CATRsc2">
+      <Guid>{8BE37938-81D6-4804-9C94-2738A2667419}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="CATSchematicTypeLib">
+      <Guid>{572C20C8-C8A9-11D4-8E3E-00D0B7ACBB09}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="CATSdeSetting">
+      <Guid>{E6395545-A6F3-4631-8961-2037EC182DF3}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="CATSfmTypeLib">
+      <Guid>{09E2D098-A612-490A-98C8-B62D8B3B2861}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="CATSmarTeamInteg">
+      <Guid>{37EB6106-2CBA-4A69-B0F7-185EDF69CFC7}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="CATSmInterfacesTypeLib">
+      <Guid>{AAE56182-33C6-450A-A9F0-1D0695A25ED1}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="CATStiWIPBridgeSurrogateCOMExeLib">
+      <Guid>{23EBD294-52FD-4A9B-ACF6-7DFC09A2FE58}</Guid>
+      <VersionMajor>1</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="CATStk">
+      <Guid>{654C60DF-B2E8-11D3-859E-00108301D61C}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="CATStrSettingsTypeLib">
+      <Guid>{8AD08B63-AF05-4E2D-A550-2C53FC1EE4D2}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="CATTooling">
+      <Guid>{B46B5073-7D07-11D6-9F4E-0002B31E9EB0}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="CATV4IInteropTypeLib">
+      <Guid>{B370B426-EF27-41DD-91EE-852F02C5F0DD}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="CD5Integ">
+      <Guid>{5E149A53-EF95-4DDD-8939-FF3F1C838737}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="ComponentsCatalogsTypeLib">
+      <Guid>{FE86BC00-D89C-11D2-BE6C-00104B7D1988}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="DNBASY">
+      <Guid>{9A12E21A-7CAC-11D6-810A-00C04FA145A1}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="DNBBIW">
+      <Guid>{A6BF295D-4BEF-0000-020A-6E0A4F000000}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="DNBD5I">
+      <Guid>{DEAED728-B6E6-497B-8E8F-8731973175AC}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="DNBDevice">
+      <Guid>{FD1E8709-66BC-44A2-9ADF-0E2A42021926}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="DNBDeviceActivity">
+      <Guid>{10F5E3C1-CFE2-11D5-80DF-0050040CD0C6}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="DNBDpmItf">
+      <Guid>{344C5719-2624-440A-8C71-AF3DA6B691BE}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="DNBFastener">
+      <Guid>{7558A44C-B4C5-11D4-80C4-0050040CCFB4}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="DNBIgpResourceProgram">
+      <Guid>{6487219A-06D9-4F6D-9352-5AA4D3AA4760}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="DNBIgpTagPath">
+      <Guid>{F000CAE4-5E52-11D4-B3D4-00902721A553}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="DNBIgripSim">
+      <Guid>{F7D9256B-C1FD-11D3-80AC-00C04FA145A1}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="DNBIPD">
+      <Guid>{0F114DA2-DA60-4037-BE3A-5D7B2EEC71DE}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="DNBManufacturingLayoutItf">
+      <Guid>{0C850845-5B21-42C7-A8DA-C02B7962CCE5}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="DNBMHIItf">
+      <Guid>{F0095CB7-ED36-4DC5-8D36-7BE80D1EAAF8}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="DNBPert">
+      <Guid>{EB4E9CFF-0CC4-11D5-AD27-00B0D078AB86}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="DNBReporting">
+      <Guid>{0C4204AA-0CA1-4599-8652-66D1934E6A35}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="DNBRobot">
+      <Guid>{715642EA-ABF9-410C-90BD-447C0122616C}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="DNBSimAct">
+      <Guid>{F1978546-69D8-4A96-BCDD-AD943304CBB7}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="DNBSimIO">
+      <Guid>{D01C6413-4925-4F4A-8F5C-EE92778FC184}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="DNBSimulation">
+      <Guid>{D0387336-CB2F-401A-9310-5BD1456B9441}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="DNBState">
+      <Guid>{655A0376-C6BD-4B8F-9763-AFDDA406B423}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="DPMSettings">
+      <Guid>{544B33A3-D62B-49BE-B7FC-52B288650AB5}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="DRAFTINGITF">
+      <Guid>{73130905-462A-11D1-A26A-0000F87546A1}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="ElecSchematicTypeLib">
+      <Guid>{EE6CDBD0-29FB-11D6-BE35-0002B33E3A92}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="ElectricalTypeLib">
+      <Guid>{0249798A-DA3D-11D3-BB2A-006094EB7CE7}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="FittingTypeLib">
+      <Guid>{8D48D2A0-8AE2-11D3-9ED9-0008C719F642}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="GenKwe">
+      <Guid>{00B6EC0E-BCFE-11D2-9B5B-006094EB7ECA}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="HybridShapeTypeLib">
+      <Guid>{87EE735C-DF70-11D1-8556-0060941979CE}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="INFITF">
+      <Guid>{14F197B2-0771-11D1-A5B1-00A0C9575177}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="KinTypeLib">
+      <Guid>{6652FDA0-BA01-11D2-88A1-0008C7194E6A}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="KnowledgewareTypeLib">
+      <Guid>{0770412C-722E-11D2-8378-0060941974FF}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="LAYOUT2DITF">
+      <Guid>{4480F2EC-29DE-443A-A706-3587C3758350}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="MANUFACTURING">
+      <Guid>{11D5B9C4-3D84-11D2-8046-00805FC75483}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="MECMOD">
+      <Guid>{0D90A5C9-3B08-11D1-A26C-0000F87546FD}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="mxcatiav5integrationTypeLib">
+      <Guid>{ACD81FF4-AC0E-4A64-BD64-488394A81DFA}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="NavigatorTypeLib">
+      <Guid>{E6BCB304-3260-11D4-9465-006094EB3826}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="OSMInterfacesTypeLib">
+      <Guid>{96986334-CF57-11D3-876D-006094EB3996}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="PARTITF">
+      <Guid>{D8431606-E4B5-11D1-A5D3-00A0C95752ED}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="PCBITF">
+      <Guid>{9140106B-CD44-0000-0280-030BBD000000}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="PPR">
+      <Guid>{D174F8A2-C2B4-11D3-AB2C-0008C7193C4E}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="PRISMATICMACHINING">
+      <Guid>{BC56CA8C-B183-44D1-A01E-1461E3191FCA}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="PROCESSITF">
+      <Guid>{DFB0B450-52DF-11D2-BEBF-006094198597}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="ProductStructureTypeLib">
+      <Guid>{5065F8B6-61BB-11D1-9D85-0000F8759F82}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="SAMITF">
+      <Guid>{4C57C67F-E66B-11D2-97CA-0008C71933B6}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="SHEITF">
+      <Guid>{AEDE231A-8E0E-11D3-827B-006094EB7FE4}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="SIM">
+      <Guid>{4D49C2C5-B63B-11D5-85A7-00D0B7ADDE56}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="SimulationTypeLib">
+      <Guid>{FDEBBA89-3603-11D3-9E9D-006094B99E67}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="SMTypeLib">
+      <Guid>{90D2BC28-DA87-11D1-9557-00805F85878F}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="SPATypeLib">
+      <Guid>{9143C8CC-1474-11D4-9461-006094EB3826}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="StrTypeLib">
+      <Guid>{8292D877-D27A-0280-020C-320000000000}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="SURFACEMACHINING">
+      <Guid>{35455E82-91D4-41A5-89D7-11C84D4E8D0F}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+    <COMReference Include="SWKHumanModelingItf">
+      <Guid>{EB0E290E-E591-11D3-809A-005004D3FE74}</Guid>
+      <VersionMajor>0</VersionMajor>
+      <VersionMinor>0</VersionMinor>
+      <Lcid>0</Lcid>
+      <WrapperTool>tlbimp</WrapperTool>
+      <Isolated>False</Isolated>
+      <EmbedInteropTypes>True</EmbedInteropTypes>
+    </COMReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
\ No newline at end of file
diff --git a/CatiaNetTest/Form1.Designer.vb b/CatiaNetTest/Form1.Designer.vb
new file mode 100644
index 0000000000000000000000000000000000000000..4b13759686da8538c48bb90b335c925a823b0f8e
--- /dev/null
+++ b/CatiaNetTest/Form1.Designer.vb
@@ -0,0 +1,87 @@
+<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
+Partial Class Form1
+    Inherits System.Windows.Forms.Form
+
+    'Form overrides dispose to clean up the component list.
+    <System.Diagnostics.DebuggerNonUserCode()> _
+    Protected Overrides Sub Dispose(ByVal disposing As Boolean)
+        Try
+            If disposing AndAlso components IsNot Nothing Then
+                components.Dispose()
+            End If
+        Finally
+            MyBase.Dispose(disposing)
+        End Try
+    End Sub
+
+    'Required by the Windows Form Designer
+    Private components As System.ComponentModel.IContainer
+
+    'NOTE: The following procedure is required by the Windows Form Designer
+    'It can be modified using the Windows Form Designer.  
+    'Do not modify it using the code editor.
+    <System.Diagnostics.DebuggerStepThrough()> _
+    Private Sub InitializeComponent()
+        Me.Label1 = New System.Windows.Forms.Label()
+        Me.Button1 = New System.Windows.Forms.Button()
+        Me.Label2 = New System.Windows.Forms.Label()
+        Me.Button2 = New System.Windows.Forms.Button()
+        Me.SuspendLayout()
+        '
+        'Label1
+        '
+        Me.Label1.AutoSize = True
+        Me.Label1.Location = New System.Drawing.Point(92, 49)
+        Me.Label1.Name = "Label1"
+        Me.Label1.Size = New System.Drawing.Size(139, 13)
+        Me.Label1.TabIndex = 0
+        Me.Label1.Text = "Click here to start CATIA V5"
+        '
+        'Button1
+        '
+        Me.Button1.Location = New System.Drawing.Point(249, 44)
+        Me.Button1.Name = "Button1"
+        Me.Button1.Size = New System.Drawing.Size(114, 23)
+        Me.Button1.TabIndex = 1
+        Me.Button1.Text = "Start"
+        Me.Button1.UseVisualStyleBackColor = True
+        '
+        'Label2
+        '
+        Me.Label2.AutoSize = True
+        Me.Label2.Location = New System.Drawing.Point(92, 96)
+        Me.Label2.Name = "Label2"
+        Me.Label2.Size = New System.Drawing.Size(109, 13)
+        Me.Label2.TabIndex = 2
+        Me.Label2.Text = "Start collision analysis"
+        '
+        'Button2
+        '
+        Me.Button2.Location = New System.Drawing.Point(249, 96)
+        Me.Button2.Name = "Button2"
+        Me.Button2.Size = New System.Drawing.Size(114, 23)
+        Me.Button2.TabIndex = 3
+        Me.Button2.Text = "Assembly Tiers 2"
+        Me.Button2.UseVisualStyleBackColor = True
+        '
+        'Form1
+        '
+        Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
+        Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
+        Me.ClientSize = New System.Drawing.Size(468, 191)
+        Me.Controls.Add(Me.Button2)
+        Me.Controls.Add(Me.Label2)
+        Me.Controls.Add(Me.Button1)
+        Me.Controls.Add(Me.Label1)
+        Me.Name = "Form1"
+        Me.Text = "CATIA .NET TEST"
+        Me.ResumeLayout(False)
+        Me.PerformLayout()
+
+    End Sub
+
+    Friend WithEvents Label1 As Label
+    Friend WithEvents Button1 As Button
+    Friend WithEvents Label2 As Label
+    Friend WithEvents Button2 As Button
+End Class
diff --git a/CatiaNetTest/Form1.resx b/CatiaNetTest/Form1.resx
new file mode 100644
index 0000000000000000000000000000000000000000..1af7de150c99c12dd67a509fe57c10d63e4eeb04
--- /dev/null
+++ b/CatiaNetTest/Form1.resx
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ No newline at end of file
diff --git a/CatiaNetTest/Form1.vb b/CatiaNetTest/Form1.vb
new file mode 100644
index 0000000000000000000000000000000000000000..0044a973474a34eee0c5203b9e9f74fbd0107014
--- /dev/null
+++ b/CatiaNetTest/Form1.vb
@@ -0,0 +1,42 @@
+Imports INFITF
+Imports MECMOD
+Imports NavigatorTypeLib
+Imports ProductStructureTypeLib
+Imports SPATypeLib
+
+
+
+
+Public Class Form1
+
+    Dim myCATIA As INFITF.Application
+
+    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
+
+        Try
+            myCATIA = GetObject(, "CATIA.Application")
+        Catch ex As Exception
+            myCATIA = CreateObject("CATIA.Application")
+        End Try
+
+        myCATIA.Visible = True
+        myCATIA.DisplayFileAlerts = True
+
+    End Sub
+
+    Private Sub Label1_Click(sender As Object, e As EventArgs) Handles Label1.Click
+
+    End Sub
+
+    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
+
+        Dim myAssemblyTiers As AssemblyTiers2 = New AssemblyTiers2()
+
+        Try
+            myAssemblyTiers.CatMain(myCATIA)
+        Catch ex As Exception
+
+        End Try
+
+    End Sub
+End Class
diff --git a/CatiaNetTest/My Project/Application.Designer.vb b/CatiaNetTest/My Project/Application.Designer.vb
new file mode 100644
index 0000000000000000000000000000000000000000..5be949ebd2b65c32df2ca9f6543313dc37d6365d
--- /dev/null
+++ b/CatiaNetTest/My Project/Application.Designer.vb	
@@ -0,0 +1,38 @@
+'------------------------------------------------------------------------------
+' <auto-generated>
+'     This code was generated by a tool.
+'     Runtime Version:4.0.30319.42000
+'
+'     Changes to this file may cause incorrect behavior and will be lost if
+'     the code is regenerated.
+' </auto-generated>
+'------------------------------------------------------------------------------
+
+Option Strict On
+Option Explicit On
+
+
+Namespace My
+
+    'NOTE: This file is auto-generated; do not modify it directly.  To make changes,
+    ' or if you encounter build errors in this file, go to the Project Designer
+    ' (go to Project Properties or double-click the My Project node in
+    ' Solution Explorer), and make changes on the Application tab.
+    '
+    Partial Friend Class MyApplication
+
+        <Global.System.Diagnostics.DebuggerStepThroughAttribute()> _
+        Public Sub New()
+            MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows)
+            Me.IsSingleInstance = false
+            Me.EnableVisualStyles = true
+            Me.SaveMySettingsOnExit = true
+            Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses
+        End Sub
+
+        <Global.System.Diagnostics.DebuggerStepThroughAttribute()> _
+        Protected Overrides Sub OnCreateMainForm()
+            Me.MainForm = Global.CatiaNetTest.Form1
+        End Sub
+    End Class
+End Namespace
diff --git a/CatiaNetTest/My Project/Application.myapp b/CatiaNetTest/My Project/Application.myapp
new file mode 100644
index 0000000000000000000000000000000000000000..1243847fd9bc0b4b577c67066fc1e6d067b5bde4
--- /dev/null
+++ b/CatiaNetTest/My Project/Application.myapp	
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<MyApplicationData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+  <MySubMain>true</MySubMain>
+  <MainForm>Form1</MainForm>
+  <SingleInstance>false</SingleInstance>
+  <ShutdownMode>0</ShutdownMode>
+  <EnableVisualStyles>true</EnableVisualStyles>
+  <AuthenticationMode>0</AuthenticationMode>
+  <ApplicationType>0</ApplicationType>
+  <SaveMySettingsOnExit>true</SaveMySettingsOnExit>
+</MyApplicationData>
diff --git a/CatiaNetTest/My Project/AssemblyInfo.vb b/CatiaNetTest/My Project/AssemblyInfo.vb
new file mode 100644
index 0000000000000000000000000000000000000000..581ea37700dc9c3d4294d47a9e726fb8106d09ec
--- /dev/null
+++ b/CatiaNetTest/My Project/AssemblyInfo.vb	
@@ -0,0 +1,35 @@
+Imports System
+Imports System.Reflection
+Imports System.Runtime.InteropServices
+
+' General Information about an assembly is controlled through the following 
+' set of attributes. Change these attribute values to modify the information
+' associated with an assembly.
+
+' Review the values of the assembly attributes
+
+<Assembly: AssemblyTitle("CatiaNetTest")>
+<Assembly: AssemblyDescription("")>
+<Assembly: AssemblyCompany("")>
+<Assembly: AssemblyProduct("CatiaNetTest")>
+<Assembly: AssemblyCopyright("Copyright ©  2020")>
+<Assembly: AssemblyTrademark("")>
+
+<Assembly: ComVisible(False)>
+
+'The following GUID is for the ID of the typelib if this project is exposed to COM
+<Assembly: Guid("287b5ad0-cd38-4e1c-9b0e-5761c063aa7f")>
+
+' Version information for an assembly consists of the following four values:
+'
+'      Major Version
+'      Minor Version 
+'      Build Number
+'      Revision
+'
+' You can specify all the values or you can default the Build and Revision Numbers 
+' by using the '*' as shown below:
+' <Assembly: AssemblyVersion("1.0.*")> 
+
+<Assembly: AssemblyVersion("1.0.0.0")>
+<Assembly: AssemblyFileVersion("1.0.0.0")>
diff --git a/CatiaNetTest/My Project/Resources.Designer.vb b/CatiaNetTest/My Project/Resources.Designer.vb
new file mode 100644
index 0000000000000000000000000000000000000000..3c9b7b853d7dc13467a00cbff36d317f04d0b36c
--- /dev/null
+++ b/CatiaNetTest/My Project/Resources.Designer.vb	
@@ -0,0 +1,63 @@
+'------------------------------------------------------------------------------
+' <auto-generated>
+'     This code was generated by a tool.
+'     Runtime Version:4.0.30319.42000
+'
+'     Changes to this file may cause incorrect behavior and will be lost if
+'     the code is regenerated.
+' </auto-generated>
+'------------------------------------------------------------------------------
+
+Option Strict On
+Option Explicit On
+
+Imports System
+
+Namespace My.Resources
+    
+    'This class was auto-generated by the StronglyTypedResourceBuilder
+    'class via a tool like ResGen or Visual Studio.
+    'To add or remove a member, edit your .ResX file then rerun ResGen
+    'with the /str option, or rebuild your VS project.
+    '''<summary>
+    '''  A strongly-typed resource class, for looking up localized strings, etc.
+    '''</summary>
+    <Global.System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0"),  _
+     Global.System.Diagnostics.DebuggerNonUserCodeAttribute(),  _
+     Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(),  _
+     Global.Microsoft.VisualBasic.HideModuleNameAttribute()>  _
+    Friend Module Resources
+        
+        Private resourceMan As Global.System.Resources.ResourceManager
+        
+        Private resourceCulture As Global.System.Globalization.CultureInfo
+        
+        '''<summary>
+        '''  Returns the cached ResourceManager instance used by this class.
+        '''</summary>
+        <Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)>  _
+        Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager
+            Get
+                If Object.ReferenceEquals(resourceMan, Nothing) Then
+                    Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("CatiaNetTest.Resources", GetType(Resources).Assembly)
+                    resourceMan = temp
+                End If
+                Return resourceMan
+            End Get
+        End Property
+        
+        '''<summary>
+        '''  Overrides the current thread's CurrentUICulture property for all
+        '''  resource lookups using this strongly typed resource class.
+        '''</summary>
+        <Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)>  _
+        Friend Property Culture() As Global.System.Globalization.CultureInfo
+            Get
+                Return resourceCulture
+            End Get
+            Set
+                resourceCulture = value
+            End Set
+        End Property
+    End Module
+End Namespace
diff --git a/CatiaNetTest/My Project/Resources.resx b/CatiaNetTest/My Project/Resources.resx
new file mode 100644
index 0000000000000000000000000000000000000000..1af7de150c99c12dd67a509fe57c10d63e4eeb04
--- /dev/null
+++ b/CatiaNetTest/My Project/Resources.resx	
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ No newline at end of file
diff --git a/CatiaNetTest/My Project/Settings.Designer.vb b/CatiaNetTest/My Project/Settings.Designer.vb
new file mode 100644
index 0000000000000000000000000000000000000000..4a0b11b9294a7723f9953d97d50c15dcaa6c43e6
--- /dev/null
+++ b/CatiaNetTest/My Project/Settings.Designer.vb	
@@ -0,0 +1,73 @@
+'------------------------------------------------------------------------------
+' <auto-generated>
+'     This code was generated by a tool.
+'     Runtime Version:4.0.30319.42000
+'
+'     Changes to this file may cause incorrect behavior and will be lost if
+'     the code is regenerated.
+' </auto-generated>
+'------------------------------------------------------------------------------
+
+Option Strict On
+Option Explicit On
+
+
+Namespace My
+
+    <Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
+     Global.System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0"), _
+     Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
+    Partial Friend NotInheritable Class MySettings
+        Inherits Global.System.Configuration.ApplicationSettingsBase
+
+        Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings)
+
+#Region "My.Settings Auto-Save Functionality"
+#If _MyType = "WindowsForms" Then
+        Private Shared addedHandler As Boolean
+
+        Private Shared addedHandlerLockObject As New Object
+
+        <Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
+        Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs)
+            If My.Application.SaveMySettingsOnExit Then
+                My.Settings.Save()
+            End If
+        End Sub
+#End If
+#End Region
+
+        Public Shared ReadOnly Property [Default]() As MySettings
+            Get
+
+#If _MyType = "WindowsForms" Then
+                   If Not addedHandler Then
+                        SyncLock addedHandlerLockObject
+                            If Not addedHandler Then
+                                AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings
+                                addedHandler = True
+                            End If
+                        End SyncLock
+                    End If
+#End If
+                Return defaultInstance
+            End Get
+        End Property
+    End Class
+End Namespace
+
+Namespace My
+
+    <Global.Microsoft.VisualBasic.HideModuleNameAttribute(), _
+     Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
+     Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute()> _
+    Friend Module MySettingsProperty
+
+        <Global.System.ComponentModel.Design.HelpKeywordAttribute("My.Settings")> _
+        Friend ReadOnly Property Settings() As Global.CatiaNetTest.My.MySettings
+            Get
+                Return Global.CatiaNetTest.My.MySettings.Default
+            End Get
+        End Property
+    End Module
+End Namespace
diff --git a/CatiaNetTest/My Project/Settings.settings b/CatiaNetTest/My Project/Settings.settings
new file mode 100644
index 0000000000000000000000000000000000000000..85b890b3c66b9beee248abaddd2ec71f8b1df2b2
--- /dev/null
+++ b/CatiaNetTest/My Project/Settings.settings	
@@ -0,0 +1,7 @@
+<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" UseMySettingsClassName="true">
+  <Profiles>
+    <Profile Name="(Default)" />
+  </Profiles>
+  <Settings />
+</SettingsFile>
diff --git a/CatiaNetTest/bin/Debug/CatiaNetTest.exe b/CatiaNetTest/bin/Debug/CatiaNetTest.exe
new file mode 100644
index 0000000000000000000000000000000000000000..17ca939b8428779dff41353345567f1a7a7f0cef
Binary files /dev/null and b/CatiaNetTest/bin/Debug/CatiaNetTest.exe differ
diff --git a/CatiaNetTest/bin/Debug/CatiaNetTest.exe.config b/CatiaNetTest/bin/Debug/CatiaNetTest.exe.config
new file mode 100644
index 0000000000000000000000000000000000000000..2ae8254d305bb019047d91b8db81c8dca76b56c8
--- /dev/null
+++ b/CatiaNetTest/bin/Debug/CatiaNetTest.exe.config
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+    <startup>
+        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
+    </startup>
+</configuration>
\ No newline at end of file
diff --git a/CatiaNetTest/bin/Debug/CatiaNetTest.pdb b/CatiaNetTest/bin/Debug/CatiaNetTest.pdb
new file mode 100644
index 0000000000000000000000000000000000000000..77b0a9f7c42b9bac117c895c2075c036ec680573
Binary files /dev/null and b/CatiaNetTest/bin/Debug/CatiaNetTest.pdb differ
diff --git a/CatiaNetTest/bin/Debug/CatiaNetTest.vshost.exe b/CatiaNetTest/bin/Debug/CatiaNetTest.vshost.exe
new file mode 100644
index 0000000000000000000000000000000000000000..681ab771eb267aad9397bb2eaf7889c5ac0e15e6
Binary files /dev/null and b/CatiaNetTest/bin/Debug/CatiaNetTest.vshost.exe differ
diff --git a/CatiaNetTest/bin/Debug/CatiaNetTest.vshost.exe.config b/CatiaNetTest/bin/Debug/CatiaNetTest.vshost.exe.config
new file mode 100644
index 0000000000000000000000000000000000000000..2ae8254d305bb019047d91b8db81c8dca76b56c8
--- /dev/null
+++ b/CatiaNetTest/bin/Debug/CatiaNetTest.vshost.exe.config
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+    <startup>
+        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
+    </startup>
+</configuration>
\ No newline at end of file
diff --git a/CatiaNetTest/bin/Debug/CatiaNetTest.xml b/CatiaNetTest/bin/Debug/CatiaNetTest.xml
new file mode 100644
index 0000000000000000000000000000000000000000..335b88ba06f0821f0c00b3cce600b528736e9fa8
--- /dev/null
+++ b/CatiaNetTest/bin/Debug/CatiaNetTest.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0"?>
+<doc>
+<assembly>
+<name>
+CatiaNetTest
+</name>
+</assembly>
+<members>
+<member name="T:CatiaNetTest.My.Resources.Resources">
+<summary>
+  A strongly-typed resource class, for looking up localized strings, etc.
+</summary>
+</member>
+<member name="P:CatiaNetTest.My.Resources.Resources.ResourceManager">
+<summary>
+  Returns the cached ResourceManager instance used by this class.
+</summary>
+</member>
+<member name="P:CatiaNetTest.My.Resources.Resources.Culture">
+<summary>
+  Overrides the current thread's CurrentUICulture property for all
+  resource lookups using this strongly typed resource class.
+</summary>
+</member>
+</members>
+</doc>
diff --git a/CatiaNetTest/obj/Debug/CatiaNetTest.Form1.resources b/CatiaNetTest/obj/Debug/CatiaNetTest.Form1.resources
new file mode 100644
index 0000000000000000000000000000000000000000..6c05a9776bd7cbae976fdcec7e3a254e93018279
Binary files /dev/null and b/CatiaNetTest/obj/Debug/CatiaNetTest.Form1.resources differ
diff --git a/CatiaNetTest/obj/Debug/CatiaNetTest.Resources.resources b/CatiaNetTest/obj/Debug/CatiaNetTest.Resources.resources
new file mode 100644
index 0000000000000000000000000000000000000000..6c05a9776bd7cbae976fdcec7e3a254e93018279
Binary files /dev/null and b/CatiaNetTest/obj/Debug/CatiaNetTest.Resources.resources differ
diff --git a/CatiaNetTest/obj/Debug/CatiaNetTest.exe b/CatiaNetTest/obj/Debug/CatiaNetTest.exe
new file mode 100644
index 0000000000000000000000000000000000000000..17ca939b8428779dff41353345567f1a7a7f0cef
Binary files /dev/null and b/CatiaNetTest/obj/Debug/CatiaNetTest.exe differ
diff --git a/CatiaNetTest/obj/Debug/CatiaNetTest.pdb b/CatiaNetTest/obj/Debug/CatiaNetTest.pdb
new file mode 100644
index 0000000000000000000000000000000000000000..77b0a9f7c42b9bac117c895c2075c036ec680573
Binary files /dev/null and b/CatiaNetTest/obj/Debug/CatiaNetTest.pdb differ
diff --git a/CatiaNetTest/obj/Debug/CatiaNetTest.vbproj.FileListAbsolute.txt b/CatiaNetTest/obj/Debug/CatiaNetTest.vbproj.FileListAbsolute.txt
new file mode 100644
index 0000000000000000000000000000000000000000..792e14986bf4a190db35ca7ba63648f356990e19
--- /dev/null
+++ b/CatiaNetTest/obj/Debug/CatiaNetTest.vbproj.FileListAbsolute.txt
@@ -0,0 +1,99 @@
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\bin\Debug\CatiaNetTest.exe.config
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\bin\Debug\CatiaNetTest.exe
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\bin\Debug\CatiaNetTest.pdb
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\bin\Debug\CatiaNetTest.xml
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\CatiaNetTest.vbprojResolveAssemblyReference.cache
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.AECRTypeLib.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.AnnotationTypeLib.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.BehaviorTypeLib.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.CAT3DXml.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.CATArrangementTypeLib.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.CATAssemblyTypeLib.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.CATCompositesMat.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.CATDataExch.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.CATEdbTypeLib.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.CATFunctSystem.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.CATHumanPackaging.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.CATIA_APP_ITF.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.CATIdeSettings.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.CATImm.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.CATInstantCollabItf.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.CATMat.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.CATMultiCAD.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.CATOBM.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.CATPspPlantShipTypeLib.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.CATRdg.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.CATRma.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.CATRpmReporterTypeLib.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.CATRsc.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.CATRsc2.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.CATSchematicTypeLib.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.CATSdeSetting.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.CATSfmTypeLib.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.CATSmarTeamInteg.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.CATSmInterfacesTypeLib.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.CATStiWIPBridgeSurrogateCOMExeLib.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.CATStk.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.CATStrSettingsTypeLib.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.CATTooling.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.CATV4IInteropTypeLib.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.ComponentsCatalogsTypeLib.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.DNBASY.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.DNBBIW.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.DNBD5I.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.DNBDevice.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.DNBDeviceActivity.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.DNBDpmItf.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.DNBFastener.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.DNBIgpResourceProgram.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.DNBIgpTagPath.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.DNBIgripSim.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.DNBIPD.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.DNBManufacturingLayoutItf.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.DNBMHIItf.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.DNBPert.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.DNBReporting.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.DNBRobot.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.DNBSimAct.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.DNBSimIO.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.DNBSimulation.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.DNBState.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.DPMSettings.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.DRAFTINGITF.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.ElecSchematicTypeLib.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.ElectricalTypeLib.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.FittingTypeLib.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.GenKwe.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.HybridShapeTypeLib.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.INFITF.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.KinTypeLib.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.KnowledgewareTypeLib.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.LAYOUT2DITF.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.MANUFACTURING.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.MECMOD.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.mxcatiav5integrationTypeLib.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.NavigatorTypeLib.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.OSMInterfacesTypeLib.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.PARTITF.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.PCBITF.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.PPR.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.PRISMATICMACHINING.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.PROCESSITF.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.ProductStructureTypeLib.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.SAMITF.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.SHEITF.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.SIM.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.SimulationTypeLib.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.SMTypeLib.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.SPATypeLib.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.StrTypeLib.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.SURFACEMACHINING.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.SWKHumanModelingItf.dll
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\CatiaNetTest.vbproj.ResolveComReference.cache
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\CatiaNetTest.Form1.resources
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\CatiaNetTest.Resources.resources
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\CatiaNetTest.vbproj.GenerateResource.Cache
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\CatiaNetTest.exe
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\CatiaNetTest.xml
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\CatiaNetTest.pdb
+D:\03_Dissertation\20_Tools\CATIA_NET\CATIA_NET_Test\CatiaNetTest\CatiaNetTest\obj\Debug\Interop.CD5Integ.dll
diff --git a/CatiaNetTest/obj/Debug/CatiaNetTest.vbproj.GenerateResource.Cache b/CatiaNetTest/obj/Debug/CatiaNetTest.vbproj.GenerateResource.Cache
new file mode 100644
index 0000000000000000000000000000000000000000..e9d8969b4f6115ad4c012a93286fbbcdda0efb19
Binary files /dev/null and b/CatiaNetTest/obj/Debug/CatiaNetTest.vbproj.GenerateResource.Cache differ
diff --git a/CatiaNetTest/obj/Debug/CatiaNetTest.vbproj.ResolveComReference.cache b/CatiaNetTest/obj/Debug/CatiaNetTest.vbproj.ResolveComReference.cache
new file mode 100644
index 0000000000000000000000000000000000000000..967df72cd65bd4470d1b22cdfb613eecb178a7da
Binary files /dev/null and b/CatiaNetTest/obj/Debug/CatiaNetTest.vbproj.ResolveComReference.cache differ
diff --git a/CatiaNetTest/obj/Debug/CatiaNetTest.vbprojResolveAssemblyReference.cache b/CatiaNetTest/obj/Debug/CatiaNetTest.vbprojResolveAssemblyReference.cache
new file mode 100644
index 0000000000000000000000000000000000000000..09661b8bfb09e523439c4652bab52febd3157b6b
Binary files /dev/null and b/CatiaNetTest/obj/Debug/CatiaNetTest.vbprojResolveAssemblyReference.cache differ
diff --git a/CatiaNetTest/obj/Debug/CatiaNetTest.xml b/CatiaNetTest/obj/Debug/CatiaNetTest.xml
new file mode 100644
index 0000000000000000000000000000000000000000..335b88ba06f0821f0c00b3cce600b528736e9fa8
--- /dev/null
+++ b/CatiaNetTest/obj/Debug/CatiaNetTest.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0"?>
+<doc>
+<assembly>
+<name>
+CatiaNetTest
+</name>
+</assembly>
+<members>
+<member name="T:CatiaNetTest.My.Resources.Resources">
+<summary>
+  A strongly-typed resource class, for looking up localized strings, etc.
+</summary>
+</member>
+<member name="P:CatiaNetTest.My.Resources.Resources.ResourceManager">
+<summary>
+  Returns the cached ResourceManager instance used by this class.
+</summary>
+</member>
+<member name="P:CatiaNetTest.My.Resources.Resources.Culture">
+<summary>
+  Overrides the current thread's CurrentUICulture property for all
+  resource lookups using this strongly typed resource class.
+</summary>
+</member>
+</members>
+</doc>
diff --git a/CatiaNetTest/obj/Debug/DesignTimeResolveAssemblyReferences.cache b/CatiaNetTest/obj/Debug/DesignTimeResolveAssemblyReferences.cache
new file mode 100644
index 0000000000000000000000000000000000000000..766eddbc32003fee7eb3f40f30bbdb2a5fe285a6
Binary files /dev/null and b/CatiaNetTest/obj/Debug/DesignTimeResolveAssemblyReferences.cache differ
diff --git a/CatiaNetTest/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/CatiaNetTest/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache
new file mode 100644
index 0000000000000000000000000000000000000000..3b179d2bc23e1585de0574356f7be4608ce14b90
Binary files /dev/null and b/CatiaNetTest/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache differ
diff --git a/CatiaNetTest/obj/Debug/Interop.AECRTypeLib.dll b/CatiaNetTest/obj/Debug/Interop.AECRTypeLib.dll
new file mode 100644
index 0000000000000000000000000000000000000000..6781c63d2272852a9f245d17f2af2e147596f993
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.AECRTypeLib.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.AnnotationTypeLib.dll b/CatiaNetTest/obj/Debug/Interop.AnnotationTypeLib.dll
new file mode 100644
index 0000000000000000000000000000000000000000..6f66d399bafcdfe4e5cd38106edd372952220397
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.AnnotationTypeLib.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.BehaviorTypeLib.dll b/CatiaNetTest/obj/Debug/Interop.BehaviorTypeLib.dll
new file mode 100644
index 0000000000000000000000000000000000000000..53a533b7f085fbb9fc0fef1f3a575f9157b1c331
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.BehaviorTypeLib.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.CAT3DXml.dll b/CatiaNetTest/obj/Debug/Interop.CAT3DXml.dll
new file mode 100644
index 0000000000000000000000000000000000000000..16d4ff535f94836a6d7d87e7d7c6119610c7b554
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.CAT3DXml.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.CATArrangementTypeLib.dll b/CatiaNetTest/obj/Debug/Interop.CATArrangementTypeLib.dll
new file mode 100644
index 0000000000000000000000000000000000000000..c2dbfe57192cdde2cd106c06ce78c4539b3e01fa
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.CATArrangementTypeLib.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.CATAssemblyTypeLib.dll b/CatiaNetTest/obj/Debug/Interop.CATAssemblyTypeLib.dll
new file mode 100644
index 0000000000000000000000000000000000000000..e82e49dfb1bc94f0ea2e4b6e630093d7b760fd1c
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.CATAssemblyTypeLib.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.CATCompositesMat.dll b/CatiaNetTest/obj/Debug/Interop.CATCompositesMat.dll
new file mode 100644
index 0000000000000000000000000000000000000000..edd1ba15ffd8da72127cdcc914272818f7e49bf4
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.CATCompositesMat.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.CATDataExch.dll b/CatiaNetTest/obj/Debug/Interop.CATDataExch.dll
new file mode 100644
index 0000000000000000000000000000000000000000..f05941adfb753d6f60eeae87ca0abec49f1336d3
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.CATDataExch.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.CATEdbTypeLib.dll b/CatiaNetTest/obj/Debug/Interop.CATEdbTypeLib.dll
new file mode 100644
index 0000000000000000000000000000000000000000..70df1e8df59d8f5687e0182efa2f31f8703562ab
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.CATEdbTypeLib.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.CATFunctSystem.dll b/CatiaNetTest/obj/Debug/Interop.CATFunctSystem.dll
new file mode 100644
index 0000000000000000000000000000000000000000..ecc46566715afc0f0107215762a8bdf24afcf280
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.CATFunctSystem.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.CATHumanPackaging.dll b/CatiaNetTest/obj/Debug/Interop.CATHumanPackaging.dll
new file mode 100644
index 0000000000000000000000000000000000000000..2c4dca5a973a174369eced5db910af64a04ae803
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.CATHumanPackaging.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.CATIA_APP_ITF.dll b/CatiaNetTest/obj/Debug/Interop.CATIA_APP_ITF.dll
new file mode 100644
index 0000000000000000000000000000000000000000..97aec8f6d5f2c749e40ab1e95582b05514bf1732
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.CATIA_APP_ITF.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.CATIdeSettings.dll b/CatiaNetTest/obj/Debug/Interop.CATIdeSettings.dll
new file mode 100644
index 0000000000000000000000000000000000000000..e1cedab6ec7115ef6d97712600789b61447a44f9
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.CATIdeSettings.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.CATImm.dll b/CatiaNetTest/obj/Debug/Interop.CATImm.dll
new file mode 100644
index 0000000000000000000000000000000000000000..d0d20084696ce9d7f8a5e071458482a16b2b8027
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.CATImm.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.CATInstantCollabItf.dll b/CatiaNetTest/obj/Debug/Interop.CATInstantCollabItf.dll
new file mode 100644
index 0000000000000000000000000000000000000000..a5a0b0c91b61ce12c50792a525503870b20148c8
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.CATInstantCollabItf.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.CATMat.dll b/CatiaNetTest/obj/Debug/Interop.CATMat.dll
new file mode 100644
index 0000000000000000000000000000000000000000..cc55c2edc47015c7a6515d9761a9d9774290d35a
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.CATMat.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.CATMultiCAD.dll b/CatiaNetTest/obj/Debug/Interop.CATMultiCAD.dll
new file mode 100644
index 0000000000000000000000000000000000000000..efdcf50b880fe67b6625f7779bbce07c351c210c
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.CATMultiCAD.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.CATOBM.dll b/CatiaNetTest/obj/Debug/Interop.CATOBM.dll
new file mode 100644
index 0000000000000000000000000000000000000000..c42fc8b98013ca6c3d7eb48193f31a867e7f447b
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.CATOBM.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.CATPspPlantShipTypeLib.dll b/CatiaNetTest/obj/Debug/Interop.CATPspPlantShipTypeLib.dll
new file mode 100644
index 0000000000000000000000000000000000000000..df1b174ac335115825fbd1db79a87f21993379c3
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.CATPspPlantShipTypeLib.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.CATRdg.dll b/CatiaNetTest/obj/Debug/Interop.CATRdg.dll
new file mode 100644
index 0000000000000000000000000000000000000000..6f9d6bea3b84a0031a2b9eb45dd596dbf1ee175d
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.CATRdg.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.CATRma.dll b/CatiaNetTest/obj/Debug/Interop.CATRma.dll
new file mode 100644
index 0000000000000000000000000000000000000000..9130cb182af8ef653accbd2967f9eea88a98899d
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.CATRma.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.CATRpmReporterTypeLib.dll b/CatiaNetTest/obj/Debug/Interop.CATRpmReporterTypeLib.dll
new file mode 100644
index 0000000000000000000000000000000000000000..35fdd73aa60036b86b6dadada39a50baedccf33a
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.CATRpmReporterTypeLib.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.CATRsc.dll b/CatiaNetTest/obj/Debug/Interop.CATRsc.dll
new file mode 100644
index 0000000000000000000000000000000000000000..d548a70ba2b1de0234b0f3f95f399055da1d579d
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.CATRsc.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.CATRsc2.dll b/CatiaNetTest/obj/Debug/Interop.CATRsc2.dll
new file mode 100644
index 0000000000000000000000000000000000000000..6a9d3597788ead77cdde61f5f3f173c17ff871cb
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.CATRsc2.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.CATSchematicTypeLib.dll b/CatiaNetTest/obj/Debug/Interop.CATSchematicTypeLib.dll
new file mode 100644
index 0000000000000000000000000000000000000000..9a2be699f9f33432fde890dcc5348e262105b691
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.CATSchematicTypeLib.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.CATSdeSetting.dll b/CatiaNetTest/obj/Debug/Interop.CATSdeSetting.dll
new file mode 100644
index 0000000000000000000000000000000000000000..e28a6daaf08e50df38d97ecf45fb9b30e0f70b30
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.CATSdeSetting.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.CATSfmTypeLib.dll b/CatiaNetTest/obj/Debug/Interop.CATSfmTypeLib.dll
new file mode 100644
index 0000000000000000000000000000000000000000..67f22084e58d08e29cbd98e81df4c6940685e3fc
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.CATSfmTypeLib.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.CATSmInterfacesTypeLib.dll b/CatiaNetTest/obj/Debug/Interop.CATSmInterfacesTypeLib.dll
new file mode 100644
index 0000000000000000000000000000000000000000..ab295c0515a330c9528412ba698cafe17f4a9b33
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.CATSmInterfacesTypeLib.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.CATSmarTeamInteg.dll b/CatiaNetTest/obj/Debug/Interop.CATSmarTeamInteg.dll
new file mode 100644
index 0000000000000000000000000000000000000000..8f4228f0550bf1bafab78e3a4e365fce44767d1b
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.CATSmarTeamInteg.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.CATStiWIPBridgeSurrogateCOMExeLib.dll b/CatiaNetTest/obj/Debug/Interop.CATStiWIPBridgeSurrogateCOMExeLib.dll
new file mode 100644
index 0000000000000000000000000000000000000000..6136ff9983ca96ebf66fd54d1d0f23135e200976
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.CATStiWIPBridgeSurrogateCOMExeLib.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.CATStk.dll b/CatiaNetTest/obj/Debug/Interop.CATStk.dll
new file mode 100644
index 0000000000000000000000000000000000000000..598ed099992e06cf9bcbfbaa1f7b86effd98250b
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.CATStk.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.CATStrSettingsTypeLib.dll b/CatiaNetTest/obj/Debug/Interop.CATStrSettingsTypeLib.dll
new file mode 100644
index 0000000000000000000000000000000000000000..99e4b96872c062b8d3a05e49f7f4d9b815e6ff24
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.CATStrSettingsTypeLib.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.CATTooling.dll b/CatiaNetTest/obj/Debug/Interop.CATTooling.dll
new file mode 100644
index 0000000000000000000000000000000000000000..72ce0adbc4a086cad6741d00a6a7425b051321eb
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.CATTooling.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.CATV4IInteropTypeLib.dll b/CatiaNetTest/obj/Debug/Interop.CATV4IInteropTypeLib.dll
new file mode 100644
index 0000000000000000000000000000000000000000..6eafafae472d40a1c840e6ecbe2081563ac3a793
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.CATV4IInteropTypeLib.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.CD5Integ.dll b/CatiaNetTest/obj/Debug/Interop.CD5Integ.dll
new file mode 100644
index 0000000000000000000000000000000000000000..c982c2804049a474d2d86f0a51df996d4e273ce1
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.CD5Integ.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.ComponentsCatalogsTypeLib.dll b/CatiaNetTest/obj/Debug/Interop.ComponentsCatalogsTypeLib.dll
new file mode 100644
index 0000000000000000000000000000000000000000..6ad9ca95cc1790d30655f4620d6dd80370ebd02a
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.ComponentsCatalogsTypeLib.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.DNBASY.dll b/CatiaNetTest/obj/Debug/Interop.DNBASY.dll
new file mode 100644
index 0000000000000000000000000000000000000000..1943488f10bf019123b02b5641198fcb3a3a517f
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.DNBASY.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.DNBBIW.dll b/CatiaNetTest/obj/Debug/Interop.DNBBIW.dll
new file mode 100644
index 0000000000000000000000000000000000000000..12f7457aec9f4456ca97d2e6378703f2e67e75ae
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.DNBBIW.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.DNBD5I.dll b/CatiaNetTest/obj/Debug/Interop.DNBD5I.dll
new file mode 100644
index 0000000000000000000000000000000000000000..44bef9d7133b880d97d4149aeb51040389eafacf
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.DNBD5I.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.DNBDevice.dll b/CatiaNetTest/obj/Debug/Interop.DNBDevice.dll
new file mode 100644
index 0000000000000000000000000000000000000000..511867a872b403ce5ad17803864fd2f163ec1893
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.DNBDevice.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.DNBDeviceActivity.dll b/CatiaNetTest/obj/Debug/Interop.DNBDeviceActivity.dll
new file mode 100644
index 0000000000000000000000000000000000000000..997dad80c883decb48e1039c24b7e5ea6455b5be
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.DNBDeviceActivity.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.DNBDpmItf.dll b/CatiaNetTest/obj/Debug/Interop.DNBDpmItf.dll
new file mode 100644
index 0000000000000000000000000000000000000000..d5201183dc7e75b31ede7ac269b5810dac7fee22
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.DNBDpmItf.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.DNBFastener.dll b/CatiaNetTest/obj/Debug/Interop.DNBFastener.dll
new file mode 100644
index 0000000000000000000000000000000000000000..f3a9bb9a3fc18cb06ba8e998f89f7b0c566a6a24
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.DNBFastener.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.DNBIPD.dll b/CatiaNetTest/obj/Debug/Interop.DNBIPD.dll
new file mode 100644
index 0000000000000000000000000000000000000000..5b168f9a1f05249bcedf6e273b81ef39133928a2
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.DNBIPD.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.DNBIgpResourceProgram.dll b/CatiaNetTest/obj/Debug/Interop.DNBIgpResourceProgram.dll
new file mode 100644
index 0000000000000000000000000000000000000000..4c4f44181b7d16c068aa0777bc423cb422b3ad70
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.DNBIgpResourceProgram.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.DNBIgpTagPath.dll b/CatiaNetTest/obj/Debug/Interop.DNBIgpTagPath.dll
new file mode 100644
index 0000000000000000000000000000000000000000..2dcaa98582df0c38a8c1d99a1d8ed331c04d8e3d
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.DNBIgpTagPath.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.DNBIgripSim.dll b/CatiaNetTest/obj/Debug/Interop.DNBIgripSim.dll
new file mode 100644
index 0000000000000000000000000000000000000000..6c73c084d41b17fca2cdf934626043b810f5a1fd
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.DNBIgripSim.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.DNBMHIItf.dll b/CatiaNetTest/obj/Debug/Interop.DNBMHIItf.dll
new file mode 100644
index 0000000000000000000000000000000000000000..782dbf01b4d871a3726a65511fb6134fff08b8d2
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.DNBMHIItf.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.DNBManufacturingLayoutItf.dll b/CatiaNetTest/obj/Debug/Interop.DNBManufacturingLayoutItf.dll
new file mode 100644
index 0000000000000000000000000000000000000000..c02d9b51d87f967166a71ade01986350c673e262
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.DNBManufacturingLayoutItf.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.DNBPert.dll b/CatiaNetTest/obj/Debug/Interop.DNBPert.dll
new file mode 100644
index 0000000000000000000000000000000000000000..8e908ff0530ec91ef0d6332f5fd93df32c83fc64
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.DNBPert.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.DNBReporting.dll b/CatiaNetTest/obj/Debug/Interop.DNBReporting.dll
new file mode 100644
index 0000000000000000000000000000000000000000..32300352686ac99bb4954fce6de9b628f61ceb25
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.DNBReporting.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.DNBRobot.dll b/CatiaNetTest/obj/Debug/Interop.DNBRobot.dll
new file mode 100644
index 0000000000000000000000000000000000000000..3f97987b77864b270a8e6e9433656e21bb141381
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.DNBRobot.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.DNBSimAct.dll b/CatiaNetTest/obj/Debug/Interop.DNBSimAct.dll
new file mode 100644
index 0000000000000000000000000000000000000000..7c0d57b7c85ee8076c43898537981f15d51b8aa9
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.DNBSimAct.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.DNBSimIO.dll b/CatiaNetTest/obj/Debug/Interop.DNBSimIO.dll
new file mode 100644
index 0000000000000000000000000000000000000000..e7547d363956ac2945580f6b95dae3a44f4fb647
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.DNBSimIO.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.DNBSimulation.dll b/CatiaNetTest/obj/Debug/Interop.DNBSimulation.dll
new file mode 100644
index 0000000000000000000000000000000000000000..1b82f859b9ec61758b6cbbb4b1bf3041aaf92ec9
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.DNBSimulation.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.DNBState.dll b/CatiaNetTest/obj/Debug/Interop.DNBState.dll
new file mode 100644
index 0000000000000000000000000000000000000000..d30e36711e4e6d99eb46b0d70ee53af2c8a2157d
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.DNBState.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.DPMSettings.dll b/CatiaNetTest/obj/Debug/Interop.DPMSettings.dll
new file mode 100644
index 0000000000000000000000000000000000000000..b746d3608283f178bd0d3ec3711ebc0abdc85f99
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.DPMSettings.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.DRAFTINGITF.dll b/CatiaNetTest/obj/Debug/Interop.DRAFTINGITF.dll
new file mode 100644
index 0000000000000000000000000000000000000000..c286e475da5bb16006c48542fc28c454f4356c34
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.DRAFTINGITF.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.ElecSchematicTypeLib.dll b/CatiaNetTest/obj/Debug/Interop.ElecSchematicTypeLib.dll
new file mode 100644
index 0000000000000000000000000000000000000000..e54f42bdca09cc8408d8a7fea7916bc9a1216862
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.ElecSchematicTypeLib.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.ElectricalTypeLib.dll b/CatiaNetTest/obj/Debug/Interop.ElectricalTypeLib.dll
new file mode 100644
index 0000000000000000000000000000000000000000..4919be1654b675a287a70809270d3b4489c3b910
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.ElectricalTypeLib.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.FittingTypeLib.dll b/CatiaNetTest/obj/Debug/Interop.FittingTypeLib.dll
new file mode 100644
index 0000000000000000000000000000000000000000..6462dfb13c6e3467b3f921813c55a7e9e4c4c1af
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.FittingTypeLib.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.GenKwe.dll b/CatiaNetTest/obj/Debug/Interop.GenKwe.dll
new file mode 100644
index 0000000000000000000000000000000000000000..8a21bc6ebcc8259e2a24cbd64abb410315243830
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.GenKwe.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.HybridShapeTypeLib.dll b/CatiaNetTest/obj/Debug/Interop.HybridShapeTypeLib.dll
new file mode 100644
index 0000000000000000000000000000000000000000..a1291c64339e3357309e7645afd7443549eeaa49
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.HybridShapeTypeLib.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.INFITF.dll b/CatiaNetTest/obj/Debug/Interop.INFITF.dll
new file mode 100644
index 0000000000000000000000000000000000000000..a62d38d6d080c51a34faed74ae082868ca4ba1b2
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.INFITF.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.KinTypeLib.dll b/CatiaNetTest/obj/Debug/Interop.KinTypeLib.dll
new file mode 100644
index 0000000000000000000000000000000000000000..cbdada0a98a591989c628da865f0798b08d1794b
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.KinTypeLib.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.KnowledgewareTypeLib.dll b/CatiaNetTest/obj/Debug/Interop.KnowledgewareTypeLib.dll
new file mode 100644
index 0000000000000000000000000000000000000000..31d5f11fd3a6f35157754ce34df16f1b575df741
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.KnowledgewareTypeLib.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.LAYOUT2DITF.dll b/CatiaNetTest/obj/Debug/Interop.LAYOUT2DITF.dll
new file mode 100644
index 0000000000000000000000000000000000000000..a0d6c77908faca5c1df9f5174c77012123626432
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.LAYOUT2DITF.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.MANUFACTURING.dll b/CatiaNetTest/obj/Debug/Interop.MANUFACTURING.dll
new file mode 100644
index 0000000000000000000000000000000000000000..7ecd17d012cc4432e318458f2cae5493a29a35bf
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.MANUFACTURING.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.MECMOD.dll b/CatiaNetTest/obj/Debug/Interop.MECMOD.dll
new file mode 100644
index 0000000000000000000000000000000000000000..b285027f3b835955def2fc7687e554e407742a43
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.MECMOD.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.NavigatorTypeLib.dll b/CatiaNetTest/obj/Debug/Interop.NavigatorTypeLib.dll
new file mode 100644
index 0000000000000000000000000000000000000000..7e5c8abf756b1624abc63b8f1e5011b7d1301826
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.NavigatorTypeLib.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.OSMInterfacesTypeLib.dll b/CatiaNetTest/obj/Debug/Interop.OSMInterfacesTypeLib.dll
new file mode 100644
index 0000000000000000000000000000000000000000..ccb5b500997ddb93a6d0a09d5537cf496ccabcb1
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.OSMInterfacesTypeLib.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.PARTITF.dll b/CatiaNetTest/obj/Debug/Interop.PARTITF.dll
new file mode 100644
index 0000000000000000000000000000000000000000..5e695ffa642abc82baf579005b73d3b623919fb2
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.PARTITF.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.PCBITF.dll b/CatiaNetTest/obj/Debug/Interop.PCBITF.dll
new file mode 100644
index 0000000000000000000000000000000000000000..28c2cc1ca25106af2621e204a0edf5c30726a3d0
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.PCBITF.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.PPR.dll b/CatiaNetTest/obj/Debug/Interop.PPR.dll
new file mode 100644
index 0000000000000000000000000000000000000000..8c456ead4bcac1d5518b3d38dc904154456d71ed
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.PPR.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.PRISMATICMACHINING.dll b/CatiaNetTest/obj/Debug/Interop.PRISMATICMACHINING.dll
new file mode 100644
index 0000000000000000000000000000000000000000..938990b314c7e04407e27ae299fffc2d36eae3ff
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.PRISMATICMACHINING.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.PROCESSITF.dll b/CatiaNetTest/obj/Debug/Interop.PROCESSITF.dll
new file mode 100644
index 0000000000000000000000000000000000000000..cc9efcdaf6cd67bfff14576a9ab3c8f5dd0c5628
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.PROCESSITF.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.ProductStructureTypeLib.dll b/CatiaNetTest/obj/Debug/Interop.ProductStructureTypeLib.dll
new file mode 100644
index 0000000000000000000000000000000000000000..a6404c9ebd65f8ddeff5d001ba0b586dff681e63
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.ProductStructureTypeLib.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.SAMITF.dll b/CatiaNetTest/obj/Debug/Interop.SAMITF.dll
new file mode 100644
index 0000000000000000000000000000000000000000..2b1aecd6d67ddd411afed78d4ab0d115a05d0815
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.SAMITF.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.SHEITF.dll b/CatiaNetTest/obj/Debug/Interop.SHEITF.dll
new file mode 100644
index 0000000000000000000000000000000000000000..bb40ceaa90607dbc5765fa17ed25945bca6fa9df
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.SHEITF.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.SIM.dll b/CatiaNetTest/obj/Debug/Interop.SIM.dll
new file mode 100644
index 0000000000000000000000000000000000000000..f4d7188163c6fd62b4a55ec290699b62ae60cbd9
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.SIM.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.SMTypeLib.dll b/CatiaNetTest/obj/Debug/Interop.SMTypeLib.dll
new file mode 100644
index 0000000000000000000000000000000000000000..c9e24128da63f74a82afc1e9357e4a1d24576aaf
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.SMTypeLib.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.SPATypeLib.dll b/CatiaNetTest/obj/Debug/Interop.SPATypeLib.dll
new file mode 100644
index 0000000000000000000000000000000000000000..34230a0a91d5f2433cf38662d96736565020bc8d
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.SPATypeLib.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.SURFACEMACHINING.dll b/CatiaNetTest/obj/Debug/Interop.SURFACEMACHINING.dll
new file mode 100644
index 0000000000000000000000000000000000000000..f90582d7a1f8e9146f36cfd986955ead7227d6f2
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.SURFACEMACHINING.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.SWKHumanModelingItf.dll b/CatiaNetTest/obj/Debug/Interop.SWKHumanModelingItf.dll
new file mode 100644
index 0000000000000000000000000000000000000000..3335baf5a0f143418ea2beae9560de1548c1dde0
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.SWKHumanModelingItf.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.SimulationTypeLib.dll b/CatiaNetTest/obj/Debug/Interop.SimulationTypeLib.dll
new file mode 100644
index 0000000000000000000000000000000000000000..a121668cd68e896dbc647f92adce3636a3cbf80c
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.SimulationTypeLib.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.StrTypeLib.dll b/CatiaNetTest/obj/Debug/Interop.StrTypeLib.dll
new file mode 100644
index 0000000000000000000000000000000000000000..d1f89638f52734bcb57ab2d4f28cd7eddb06bec7
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.StrTypeLib.dll differ
diff --git a/CatiaNetTest/obj/Debug/Interop.mxcatiav5integrationTypeLib.dll b/CatiaNetTest/obj/Debug/Interop.mxcatiav5integrationTypeLib.dll
new file mode 100644
index 0000000000000000000000000000000000000000..8e155192c5477d923b50ba7985e6e61f4bb1a344
Binary files /dev/null and b/CatiaNetTest/obj/Debug/Interop.mxcatiav5integrationTypeLib.dll differ
diff --git a/CatiaNetTest/obj/Debug/TempPE/My Project.Resources.Designer.vb.dll b/CatiaNetTest/obj/Debug/TempPE/My Project.Resources.Designer.vb.dll
new file mode 100644
index 0000000000000000000000000000000000000000..87f7b6ceb39c79136a4d882e6e6b08c5f592bf17
Binary files /dev/null and b/CatiaNetTest/obj/Debug/TempPE/My Project.Resources.Designer.vb.dll differ