diff --git a/WorkFeature/Beam/__init__.py b/WorkFeature/Beam/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/WorkFeature/Beam/beam.py b/WorkFeature/Beam/beam.py
new file mode 100644
index 0000000..c41cd0d
--- /dev/null
+++ b/WorkFeature/Beam/beam.py
@@ -0,0 +1,254 @@
+# -*- coding: utf-8 -*-
+
+import os
+import FreeCAD as App
+import FreeCADGui as Gui
+import Part
+
+def sketch_normal(sketch):
+    a = App.Vector(0, 0, 1)
+    return sketch.Placement.Rotation.multVec(a)
+
+def project_to_plane(plane_p, plane_n, p, n):
+    '''p + l * n = plane_p + x * plane_n'''
+    return p + n * (plane_n.dot(plane_p - p) / (n.dot(plane_n)))
+
+class Beam():
+    def __init__(self, obj, profile, path, path_name):
+        "'''Beam: representing a straight extrusion of a profile'''"
+        obj.addProperty("App::PropertyString", "type", "Beam", "type of the object").type = "beam"
+        obj.addProperty("App::PropertyLink","profile","Beam","sketch profile of the beam").profile = profile
+        obj.addProperty("App::PropertyLink","path","Beam","path of the beam").path = path
+        obj.addProperty("App::PropertyString","path_name","Beam", "name of beam line").path_name = path_name
+        obj.addProperty("App::PropertyDistance", "exdent_1", "Beam", "exdent side 1").exdent_1 = "0 mm"
+        obj.addProperty("App::PropertyDistance", "exdent_2", "Beam", "exdent side 2").exdent_2 = "0 mm"
+        obj.setEditorMode("path_name", 1)
+        obj.Proxy = self
+        self.Object = obj
+        
+
+    def initialize(self):
+        print("initialize ...")
+
+    @property
+    def profile(self):
+        profile = Part.Face(self.Object.profile.Shape.Wires)
+        if profile.Area < 0:
+            profile = Part.Face(self.Object.profile.Shape.Wires[::-1])
+        return profile
+
+    @property
+    def outer_shape(self):
+        path, a, b, n = self.path_a_b_n
+        profile = Part.Face(self.profile.Wires[0])
+        new_profile = self.transform_to_n(profile, self.midpoint, a - n * self.Object.exdent_1.Value, n)
+        return new_profile.extrude(App.Vector(b - a) + n * (self.Object.exdent_1.Value + self.Object.exdent_2.Value))
+
+    def attach(self, fp):
+        fp.Proxy.Object = fp
+
+    def execute(self, fp):
+        '''Do something when doing a recomputation, this method is mandatory'''
+        fp.Proxy.Object = fp
+        path, a, b, n = self.path_a_b_n
+        new_profile = self.transform_to_n(self.profile, self.midpoint, a - n * fp.exdent_1.Value, n)
+        fp.Shape = new_profile.extrude(App.Vector(b - a) + n * (fp.exdent_1.Value + fp.exdent_2.Value))
+
+    def transform_to_n(self, profile, midpoint, p, n):
+        '''transform a profile (Shape) lying in z = 0 to p and n'''
+
+        t = sketch_normal(self.Object.path)
+        n.normalize()
+        v = n.cross(t)
+
+        mat2 = App.Matrix()
+        mat2.move(App.Vector() - midpoint)
+        new_profile = profile.transformGeometry(mat2)
+
+        rot_mat = App.Matrix()
+        rot_mat.A11 = v.x
+        rot_mat.A21 = v.y
+        rot_mat.A31 = v.z
+        rot_mat.A12 = t.x
+        rot_mat.A22 = t.y
+        rot_mat.A32 = t.z
+        rot_mat.A13 = n.x
+        rot_mat.A23 = n.y
+        rot_mat.A33 = n.z
+        new_profile = new_profile.transformGeometry(rot_mat)
+
+        mat3 = App.Matrix()
+        mat3.move(p)
+        new_profile.transformShape(mat3)
+        return new_profile
+
+    @property
+    def midpoint(self):
+        profile_midpoint = filter(lambda x: isinstance(x, App.Base.Vector), self.Object.profile.Geometry)
+        if len(profile_midpoint) == 0 or profile_midpoint is None:
+            profile_midpoint = App.Vector(0, 0, 0)
+        else:
+            profile_midpoint = profile_midpoint[0]
+        return profile_midpoint
+
+    @property
+    def path_a_b_n(self):
+        path = self.Object.path.Shape.getElement(self.Object.path_name)
+        a, b = path.Vertexes
+        n = b.Point - a.Point
+        n.normalize()
+        return (path, a.Point, b.Point, n)
+
+    @property
+    def profile_bound_box(self):
+        fac = 0.3
+        bb = self.Object.profile.Shape.BoundBox
+        xmax = bb.XMax + bb.XLength * fac
+        xmin = bb.XMin - bb.XLength * fac
+        ymax = bb.YMax + bb.YLength * fac
+        ymin = bb.YMin - bb.YLength * fac
+        pol = Part.makePolygon(
+            [App.Vector(xmax, ymax, 0),
+             App.Vector(xmax, ymin, 0),
+             App.Vector(xmin, ymin, 0),
+             App.Vector(xmin, ymax, 0),
+             App.Vector(xmax, ymax, 0)])
+        path, a, b, n = self.path_a_b_n
+        return self.transform_to_n(pol, self.midpoint, a, n)
+
+    def project_profile_bound_box(self, plane_n, plane_p):
+        bb = self.profile_bound_box.Vertexes
+        vectors = [v.Point for v in bb]
+        path, a, b, n = self.path_a_b_n
+        projected = [project_to_plane(plane_p, plane_n, v, n) for v in vectors]
+        projected.append(projected[0])
+        pol = Part.makePolygon(projected)
+        return pol
+
+    def __getstate__(self):
+        return None
+
+    def __setstate__(self, state):
+        return None
+
+
+class ViewProviderBeam:
+    def __init__(self, obj):
+        ''' Set this object to the proxy object of the actual view provider '''
+        obj.Proxy = self
+
+    def attach(self, vobj):
+        self.vobj = vobj
+
+    def getIcon(self):
+        _dir = os.path.dirname(os.path.realpath(__file__))
+        return(_dir + "/" + "Icons/beam.png")
+
+    def __getstate__(self):
+        return None
+
+    def __setstate__(self, state):
+        return None
+ 
+ 
+def makeBeam2():
+    def plot_edge(Vector_A, Vector_B, part="Part::Feature", name="Edge", grp="Work"):
+        if not(App.ActiveDocument.getObject( grp )):
+            App.ActiveDocument.addObject("App::DocumentObjectGroup", grp)
+        edge = App.ActiveDocument.addObject(part, name)
+        edge.Shape = Part.makeLine(Vector_A, Vector_B)
+        App.ActiveDocument.getObject( grp ).addObject(edge)
+        edge_User_Name = edge.Label
+            
+        return edge_User_Name, edge
+    
+    def plot_shape(Shape, part="Part::Feature", name="Shape", grp="Work"):
+        if not(App.ActiveDocument.getObject( grp )):
+            App.ActiveDocument.addObject("App::DocumentObjectGroup", grp)
+        shape = App.ActiveDocument.addObject(part, name)
+        shape.Shape = Part.Shape(Shape)
+        App.ActiveDocument.getObject( grp ).addObject(shape)
+        shape_User_Name = shape.Label
+            
+        return shape_User_Name, shape
+    
+    from FreeCAD import Base
+    V1 = Base.Vector(0,10,0)
+    V2 = Base.Vector(30,10,0)
+    V3 = Base.Vector(30,-10,0)
+    V4 = Base.Vector(0,-10,0)
+    
+    VC1 = Base.Vector(-10,0,0)
+    C1 = Part.Arc(V1,VC1,V4)
+    L0 = Part.Line(V1,V4)
+    S0 = Part.Shape([C1,L0])
+    
+    v1 = App.Vector(0,0,0)    
+    v2 = App.Vector(10,0,0)
+    v3 = App.Vector(0,10,0)
+    #profile = Part.makePolygon([v1,v2,v3,v1])
+    v4 = App.Vector(0,0,100)
+    L1 = Part.Line(v1,v4)
+    S1 = Part.Shape([L1])
+    
+    
+    #path = Part.makeLine(v1, v4)
+    App.newDocument() 
+    
+
+    shape_User_Name, shape = plot_shape([C1,L0], part="Part::Feature", name="profile", grp="Work")
+    edge_User_Name, edge = plot_edge(v1, v4, part="Part::Feature", name="path", grp="Work")
+
+       
+    a=App.ActiveDocument.addObject("Part::FeaturePython","Beam")
+    Beam(a, shape_User_Name, edge_User_Name, "Beam")
+    ViewProviderBeam(a.ViewObject)
+    
+class make_beam(object):
+    def __init__(self, view):
+        self.profile = None
+        self.midpoint = None
+        self.path = None
+        self.n = None
+        self.view = view
+        App.Console.PrintMessage("choose the profile\n")
+        Gui.Selection.clearSelection()
+        self.klick_event = self.view.addEventCallback("SoMouseButtonEvent", self.choose_profile)
+        
+
+    def choose_profile(self, cb):
+        if cb["State"] == "DOWN":
+            sel = Gui.Selection.getSelection()
+            if len(sel) > 0:
+                self.profile = sel[0]
+                App.Console.PrintMessage("Profile selected !\n")
+                Gui.Selection.clearSelection()
+                self.view.removeEventCallback("SoMouseButtonEvent", self.klick_event)
+                self.klick_event = self.view.addEventCallback("SoMouseButtonEvent", self.choose_path)
+                App.Console.PrintMessage("choose path\n")
+
+    def choose_path(self, cb):
+        if cb["State"] == "DOWN":
+            sel = Gui.Selection.getSelectionEx()
+            if sel:
+                path_sketch = sel[0].Object
+                path_name = sel[0].SubElementNames[0]
+                App.Console.PrintMessage("Path selected !\n")
+                self.view.removeEventCallback("SoMouseButtonEvent", self.klick_event)
+
+                a = App.ActiveDocument.addObject("Part::FeaturePython","beam")
+                Beam(a, self.profile, path_sketch, path_name)
+                ViewProviderBeam(a.ViewObject)
+                App.ActiveDocument.recompute()
+
+
+                App.Console.PrintMessage("end of tube tool\n")
+
+
+if __name__ == "__main__":
+    view = Gui.ActiveDocument.activeView()
+    selection = make_beam(view)
+
+# if __name__ == '__main__':
+#     makeBeam()
+    
\ No newline at end of file
diff --git a/WorkFeature/Doc/WF_releasesDocumentation.pdf b/WorkFeature/Doc/WF_releasesDocumentation.pdf
index 9e3328c..a857023 100644
Binary files a/WorkFeature/Doc/WF_releasesDocumentation.pdf and b/WorkFeature/Doc/WF_releasesDocumentation.pdf differ
diff --git a/WorkFeature/Icons/WF_Beam.svg b/WorkFeature/Icons/WF_Beam.svg
index 2cda4c0..d5f97eb 100644
--- a/WorkFeature/Icons/WF_Beam.svg
+++ b/WorkFeature/Icons/WF_Beam.svg
@@ -14,7 +14,7 @@
    width="64"
    height="64"
    id="svg3017"
-   inkscape:version="0.48.5 r10040"
+   inkscape:version="0.91 r13725"
    sodipodi:docname="WF_Beam.svg"
    inkscape:export-filename="/home/mark/HyperbolaIcon.png"
    inkscape:export-xdpi="90"
@@ -388,6 +388,37 @@
          operator="over"
          result="composite2" />
     </filter>
+    <filter
+       id="filter42258-8"
+       style="color-interpolation-filters:sRGB"
+       inkscape:label="Drop Shadow">
+      <feFlood
+         id="feFlood42260-7"
+         flood-opacity="0.705"
+         flood-color="rgb(0,0,0)"
+         result="flood" />
+      <feComposite
+         id="feComposite42262-8"
+         in2="SourceGraphic"
+         in="flood"
+         operator="in"
+         result="composite1" />
+      <feGaussianBlur
+         id="feGaussianBlur42264-72"
+         stdDeviation="0.8"
+         result="blur" />
+      <feOffset
+         id="feOffset42266-4"
+         dx="1.4"
+         dy="1.4"
+         result="offset" />
+      <feComposite
+         id="feComposite42268-09"
+         in2="offset"
+         in="SourceGraphic"
+         operator="over"
+         result="composite2" />
+    </filter>
   </defs>
   <sodipodi:namedview
      pagecolor="#ffffff"
@@ -398,17 +429,24 @@
      guidetolerance="10"
      inkscape:pageopacity="0"
      inkscape:pageshadow="2"
-     inkscape:window-width="1366"
-     inkscape:window-height="702"
+     inkscape:window-width="758"
+     inkscape:window-height="617"
      id="namedview13601"
      showgrid="false"
-     inkscape:zoom="5.840651"
-     inkscape:cx="60.002575"
-     inkscape:cy="25.215672"
-     inkscape:window-x="0"
-     inkscape:window-y="27"
-     inkscape:window-maximized="1"
+     inkscape:zoom="6.640625"
+     inkscape:cx="38.238655"
+     inkscape:cy="32"
+     inkscape:window-x="646"
+     inkscape:window-y="51"
+     inkscape:window-maximized="0"
      inkscape:current-layer="svg3017" />
+  <path
+     style="fill:none;stroke:#0079f0;stroke-width:2.95845842;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter42258-8)"
+     d="M 53.466148,40.841396 C 54.960979,34.41438 48.179469,13.17288 40.4768,16.330627 c -15.262777,8.562116 -9.554229,15.976085 -0.985029,20.249582 2.913415,2.039486 12.07402,7.793518 13.974377,4.261187 z"
+     id="path41306-8"
+     inkscape:connector-curvature="0"
+     sodipodi:nodetypes="cccc"
+     transform="matrix(0.78623928,0.64039688,-0.64039688,0.78623928,0.95292704,-36.188309)" />
   <g
      id="g3019"
      transform="translate(0,-126)" />
@@ -417,31 +455,31 @@
      id="layer1"
      inkscape:label="Layer1" />
   <path
-     style="fill:none;stroke:#0079f0;stroke-width:2.95845842;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;filter:url(#filter42258-1-9)"
+     style="fill:none;stroke:#0079f0;stroke-width:2.95845842;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter42258-1-9)"
      d="M 53.466148,40.841396 C 54.960979,34.41438 48.179469,13.17288 40.4768,16.330627 c -15.262777,8.562116 -9.554229,15.976085 -0.985029,20.249582 2.913415,2.039486 12.07402,7.793518 13.974377,4.261187 z"
      id="path41306-0-9"
      inkscape:connector-curvature="0"
      sodipodi:nodetypes="cccc"
-     transform="matrix(1.0140416,0,0,1.0140416,6.7397744,-16.930401)" />
+     transform="matrix(0.91475345,-0.43761454,0.43761454,0.91475345,-36.379419,43.920861)" />
   <path
-     style="fill:none;stroke:#0079f0;stroke-width:4.9307642;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker-start:none;filter:url(#filter42258-3)"
+     style="fill:none;stroke:#0079f0;stroke-width:4.9307642;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-start:none;filter:url(#filter42258-3)"
      d="M 59.56913,7.9400816 14.840698,34.047565"
      id="path41306-2"
      inkscape:connector-curvature="0"
      sodipodi:nodetypes="cc"
-     transform="matrix(0.93587081,-0.32882237,0.35174485,0.87488206,-10.056452,26.755735)" />
+     transform="matrix(-0.27517775,-0.79253981,0.77893612,-0.28735762,27.462717,63.890512)" />
   <path
-     style="opacity:0.75;fill:url(#radialGradient4972);fill-opacity:1;stroke:#7b5600;stroke-width:1.97230566;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;filter:url(#filter42258)"
-     d="M 5.6355134,3.1288963 18.202502,50.386996 c 4.481547,3.102123 6.508918,3.663424 10.697937,4.957264 6.523619,2.014916 10.431492,2.708408 16.592978,3.580061 5.940277,0.840358 10.042357,1.311866 18.251555,-0.935616 5.871839,-1.607569 4.984746,-11.508491 1.746683,-14.547053 L 49.661758,-4.8533273 50.129083,9.6635035 C 43.991819,12.312691 38.86159,10.422644 35.440528,10.84792 28.051671,10.309231 22.570106,8.9514381 19.006586,8.3928725 14.48281,7.5717689 6.7252415,3.7669368 5.6355134,3.1288963 z"
+     style="opacity:0.75;fill:url(#radialGradient4972);fill-opacity:1;stroke:#7b5600;stroke-width:1.97230566;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter42258)"
+     d="m 54.010478,41.307266 -17.734987,-8.755467 17.247348,40.57948 c 1.86213,4.381212 3.579819,4.267496 11.961656,6.988451 5.401039,1.753313 6.991569,2.275752 15.200767,0.02827 C 86.557101,78.540431 93.065327,65.452713 92.8796,57.850683 L 76.424167,17.964864 64.006027,39.033739 c -6.137264,2.649188 -17.8513,-0.77147 -26.817735,-6.293186 -3.042053,-2.222593 7.117067,-9.575771 17.659045,-13.377937 10.541978,-3.802166 16.028623,-6.72627 20.257088,-3.10398 -0.645052,4.552964 -0.01884,10.14017 -5.449468,16.541579 -5.430623,6.40141 -15.058386,8.796395 -15.644479,8.507051 z"
      id="path41302"
      inkscape:connector-curvature="0"
-     sodipodi:nodetypes="ccssscccccc"
-     transform="matrix(-0.37450424,-0.5067961,0.81446679,-0.60186189,27.487169,66.65621)" />
+     sodipodi:nodetypes="scsssccccscss"
+     transform="matrix(-0.49449359,0.39060441,-0.62773631,-0.79469555,97.151171,40.082247)" />
   <path
-     style="fill:none;stroke:#0079f0;stroke-width:2.95845842;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;filter:url(#filter42258)"
+     style="fill:none;stroke:#0079f0;stroke-width:2.95845842;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter42258)"
      d="M 53.466148,40.841396 C 54.960979,34.41438 48.179469,13.17288 40.4768,16.330627 c -15.262777,8.562116 -9.554229,15.976085 -0.985029,20.249582 2.913415,2.039486 12.07402,7.793518 13.974377,4.261187 z"
      id="path41306"
      inkscape:connector-curvature="0"
      sodipodi:nodetypes="cccc"
-     transform="matrix(1.0140416,0,0,1.0140416,-26.228007,19.516859)" />
+     transform="matrix(0.78623928,0.64039688,-0.64039688,0.78623928,35.707732,-10.466987)" />
 </svg>
diff --git a/WorkFeature/Icons/WF_isRadius.svg b/WorkFeature/Icons/WF_isRadius.svg
new file mode 100644
index 0000000..095a505
--- /dev/null
+++ b/WorkFeature/Icons/WF_isRadius.svg
@@ -0,0 +1,473 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="64px"
+   height="64px"
+   id="svg2860"
+   sodipodi:version="0.32"
+   inkscape:version="0.48.5 r10040"
+   sodipodi:docname="WF_isRadius.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   version="1.1">
+  <defs
+     id="defs2862">
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient4247">
+      <stop
+         style="stop-color:#f30606;stop-opacity:1;"
+         offset="0"
+         id="stop4249" />
+      <stop
+         style="stop-color:#f30606;stop-opacity:0;"
+         offset="1"
+         id="stop4251" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient4155">
+      <stop
+         style="stop-color:#0079ff;stop-opacity:1;"
+         offset="0"
+         id="stop4157" />
+      <stop
+         style="stop-color:#0079ff;stop-opacity:0;"
+         offset="1"
+         id="stop4159" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient4135">
+      <stop
+         style="stop-color:#0079ff;stop-opacity:1;"
+         offset="0"
+         id="stop4137" />
+      <stop
+         style="stop-color:#0079ff;stop-opacity:0;"
+         offset="1"
+         id="stop4139" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3377">
+      <stop
+         id="stop3379"
+         offset="0"
+         style="stop-color:#faff2b;stop-opacity:1;" />
+      <stop
+         id="stop3381"
+         offset="1"
+         style="stop-color:#ffaa00;stop-opacity:1;" />
+    </linearGradient>
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 32 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="64 : 32 : 1"
+       inkscape:persp3d-origin="32 : 21.333333 : 1"
+       id="perspective2868" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3377-7"
+       id="radialGradient3692-3"
+       cx="45.883327"
+       cy="28.869568"
+       fx="45.883327"
+       fy="28.869568"
+       r="19.467436"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       id="linearGradient3377-7">
+      <stop
+         id="stop3379-8"
+         offset="0"
+         style="stop-color:#faff2b;stop-opacity:1;" />
+      <stop
+         id="stop3381-5"
+         offset="1"
+         style="stop-color:#ffaa00;stop-opacity:1;" />
+    </linearGradient>
+    <radialGradient
+       r="19.467436"
+       fy="28.869568"
+       fx="45.883327"
+       cy="28.869568"
+       cx="45.883327"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3288-6"
+       xlink:href="#linearGradient3377-7-5"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3377-7-5">
+      <stop
+         id="stop3379-8-7"
+         offset="0"
+         style="stop-color:#faff2b;stop-opacity:1;" />
+      <stop
+         id="stop3381-5-4"
+         offset="1"
+         style="stop-color:#ffaa00;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4135"
+       id="linearGradient4145"
+       x1="131.82286"
+       y1="101.22672"
+       x2="191.3165"
+       y2="101.22672"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4155"
+       id="linearGradient4161"
+       x1="4.6279406"
+       y1="100.81277"
+       x2="60.639036"
+       y2="100.81277"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4155"
+       id="linearGradient4231"
+       x1="33.746853"
+       y1="34.571426"
+       x2="72.681725"
+       y2="34.571426"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4135"
+       id="linearGradient3034"
+       gradientUnits="userSpaceOnUse"
+       x1="131.82286"
+       y1="101.22672"
+       x2="184.22351"
+       y2="100.7989" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3144"
+       id="radialGradient3191"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
+       cx="225.26402"
+       cy="672.79736"
+       fx="225.26402"
+       fy="672.79736"
+       r="34.345188" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3144">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop3146" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop3148" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3144-4"
+       id="radialGradient4272"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
+       cx="225.26402"
+       cy="672.79736"
+       fx="225.26402"
+       fy="672.79736"
+       r="34.345188" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3144-4">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop3146-3" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop3148-6" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3144-8"
+       id="radialGradient3809"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
+       cx="225.26402"
+       cy="672.79736"
+       fx="225.26402"
+       fy="672.79736"
+       r="34.345188" />
+    <linearGradient
+       id="linearGradient3144-8"
+       inkscape:collect="always">
+      <stop
+         id="stop3146-1"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop3148-3"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3144-8"
+       id="radialGradient3811"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
+       cx="225.26402"
+       cy="672.79736"
+       fx="225.26402"
+       fy="672.79736"
+       r="34.345188" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3144-8"
+       id="radialGradient3799"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
+       cx="225.26402"
+       cy="672.79736"
+       fx="225.26402"
+       fy="672.79736"
+       r="34.345188" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3144-8"
+       id="radialGradient3819"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
+       cx="225.26402"
+       cy="672.79736"
+       fx="225.26402"
+       fy="672.79736"
+       r="34.345188" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3144-8"
+       id="radialGradient3827"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
+       cx="225.26402"
+       cy="672.79736"
+       fx="225.26402"
+       fy="672.79736"
+       r="34.345188" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3144-8"
+       id="radialGradient3359"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
+       cx="225.26402"
+       cy="672.79736"
+       fx="225.26402"
+       fy="672.79736"
+       r="34.345188" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3144-8"
+       id="radialGradient3361"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
+       cx="225.26402"
+       cy="672.79736"
+       fx="225.26402"
+       fy="672.79736"
+       r="34.345188" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3144-8"
+       id="radialGradient3363"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
+       cx="225.26402"
+       cy="672.79736"
+       fx="225.26402"
+       fy="672.79736"
+       r="34.345188" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3144-8"
+       id="radialGradient3365"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
+       cx="225.26402"
+       cy="672.79736"
+       fx="225.26402"
+       fy="672.79736"
+       r="34.345188" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3144-8"
+       id="radialGradient3367"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
+       cx="225.26402"
+       cy="672.79736"
+       fx="225.26402"
+       fy="672.79736"
+       r="34.345188" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4135-9"
+       id="linearGradient4145-1"
+       x1="131.82286"
+       y1="101.22672"
+       x2="191.3165"
+       y2="101.22672"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient4135-9">
+      <stop
+         style="stop-color:#0079ff;stop-opacity:1;"
+         offset="0"
+         id="stop4137-0" />
+      <stop
+         style="stop-color:#0079ff;stop-opacity:0;"
+         offset="1"
+         id="stop4139-9" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4247"
+       id="linearGradient4253"
+       x1="3.6551317"
+       y1="12.367598"
+       x2="17.097535"
+       y2="12.367598"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-3.2003726,1.9706624)" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="6.7121053"
+     inkscape:cx="32.025693"
+     inkscape:cy="29.714482"
+     inkscape:current-layer="layer2"
+     showgrid="true"
+     inkscape:document-units="px"
+     inkscape:grid-bbox="true"
+     inkscape:window-width="1070"
+     inkscape:window-height="665"
+     inkscape:window-x="65"
+     inkscape:window-y="63"
+     inkscape:window-maximized="0" />
+  <metadata
+     id="metadata2865">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="Layer0">
+    <g
+       id="g3805"
+       transform="matrix(0.42308339,-0.4673726,0.45454442,0.41147084,-191.37645,234.47455)">
+      <path
+         transform="matrix(-0.1204122,-0.01873251,0.01873251,-0.1204122,472.97923,114.92595)"
+         d="m 259.60921,672.79736 c 0,13.24993 -15.37686,23.99113 -34.34519,23.99113 -18.96832,0 -34.34519,-10.7412 -34.34519,-23.99113 0,-13.24993 15.37687,-23.99112 34.34519,-23.99112 18.96833,0 34.34519,10.74119 34.34519,23.99112 z"
+         sodipodi:ry="23.991123"
+         sodipodi:rx="34.345188"
+         sodipodi:cy="672.79736"
+         sodipodi:cx="225.26402"
+         id="path2903"
+         style="fill:url(#radialGradient3359);fill-opacity:1;stroke:none"
+         sodipodi:type="arc" />
+    </g>
+    <g
+       id="g3813"
+       transform="matrix(-0.0719454,0.08583917,-0.08364263,-0.06979446,100.90296,75.889312)"
+       inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
+       inkscape:export-xdpi="7.2934141"
+       inkscape:export-ydpi="7.2934141" />
+    <g
+       id="g3821"
+       transform="matrix(-0.0719454,0.08583917,-0.08364263,-0.06979446,125.77915,48.713266)"
+       inkscape:export-filename="/home/yorik/Documents/Lab/Draft/icons/circle.png"
+       inkscape:export-xdpi="7.2934141"
+       inkscape:export-ydpi="7.2934141" />
+    <text
+       xml:space="preserve"
+       style="font-size:28px;font-style:normal;font-weight:normal;fill:#f30606;fill-opacity:1;stroke:#000000;stroke-width:0.94630939000000003px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       x="-0.99982059"
+       y="24.728886"
+       id="text3735"
+       transform="matrix(0.88877016,-0.00548731,0.00694648,1.1251074,0,0)"><tspan
+         sodipodi:role="line"
+         id="tspan3737"
+         x="-0.99982059"
+         y="24.728886"
+         style="font-size:32px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;fill:#f30606;fill-opacity:1;stroke:#000000;stroke-width:0.94630939000000003;stroke-opacity:1;font-family:Arial Black;-inkscape-font-specification:'Arial Black, Bold'">?</tspan></text>
+    <path
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc"
+       id="path3198-6"
+       d="M 14.02577,62.076429 C 22.33199,33.733751 36.895562,19.246636 62.48399,19.360008 l -0.103268,3.502841 C 35.89262,25.127098 27.43165,37.522297 17.03388,63.47509 z"
+       style="fill:#555753;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.30718172;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+    <path
+       style="font-size:54.21519089px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;color:#000000;fill:none;stroke:#000000;stroke-width:3.85229659;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:7.70459246, 3.85229622;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Arial;-inkscape-font-specification:Arial"
+       d="M 57.149701,59.436716 27.748911,26.506858"
+       id="path4435"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <text
+       xml:space="preserve"
+       style="font-size:20px;font-style:normal;font-variant:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:URW Gothic L;-inkscape-font-specification:URW Gothic L Book"
+       x="48.782253"
+       y="46.230598"
+       id="text3650"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         x="48.782253"
+         y="46.230598"
+         id="tspan4206"
+         style="font-weight:600;-inkscape-font-specification:URW Gothic L Semi-Bold">R</tspan></text>
+  </g>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <g
+       id="g3618"
+       transform="matrix(0.52225346,0,0,0.57723952,-65.447599,-41.263971)"
+       style="fill:url(#linearGradient4145);fill-opacity:1;stroke:#001833;stroke-opacity:1">
+      <path
+         style="fill:#0079f0;fill-opacity:1;fill-rule:evenodd;stroke:#001833;stroke-width:1.53699219;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:0.74117647;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+         d="m 139.43421,174.32438 c 15.84398,-68.67834 41.38722,-78.510254 99.7368,-83.696402 l 2.1381,6.489111 c -64.02927,7.754821 -72.71569,12.412451 -96.52154,78.755591 z"
+         id="rect3520"
+         sodipodi:nodetypes="ccccc"
+         inkscape:connector-curvature="0" />
+    </g>
+    <g
+       id="g3564"
+       transform="matrix(0.57893948,0,0,0.57354776,33.859216,-7.0273696)"
+       style="fill:url(#linearGradient4161);fill-opacity:1" />
+  </g>
+</svg>
diff --git a/WorkFeature/Icons/WF_objectCopy.svg b/WorkFeature/Icons/WF_objectCopy.svg
new file mode 100644
index 0000000..60db8e1
--- /dev/null
+++ b/WorkFeature/Icons/WF_objectCopy.svg
@@ -0,0 +1,381 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="64px"
+   height="64px"
+   id="svg6248"
+   sodipodi:version="0.32"
+   inkscape:version="0.48.5 r10040"
+   sodipodi:docname="WF_objectCopy.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   version="1.1">
+  <defs
+     id="defs6250">
+    <linearGradient
+       id="linearGradient3253">
+      <stop
+         style="stop-color:#89d5f8;stop-opacity:1;"
+         offset="0"
+         id="stop3255" />
+      <stop
+         style="stop-color:#00899e;stop-opacity:1;"
+         offset="1"
+         id="stop3257" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient6816">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop6818" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop6820" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6781">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop6783" />
+      <stop
+         style="stop-color:#3465a4;stop-opacity:0;"
+         offset="1"
+         id="stop6785" />
+    </linearGradient>
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 32 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="64 : 32 : 1"
+       inkscape:persp3d-origin="32 : 21.333333 : 1"
+       id="perspective6256" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6781"
+       id="linearGradient6787"
+       x1="8.2986603"
+       y1="15.743738"
+       x2="1.7074128"
+       y2="36.600822"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.1723565,0.9850346,0.9850346,0.1723565,-9.8385315,6.3516142)" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6816"
+       id="radialGradient6822"
+       cx="33.369828"
+       cy="51.929391"
+       fx="33.369828"
+       fy="51.929391"
+       r="25.198714"
+       gradientTransform="matrix(1.1581633,0,0,0.6558985,59.798539,15.944259)"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5238"
+       id="linearGradient3675"
+       x1="81.451569"
+       y1="14.993487"
+       x2="3.0457773"
+       y2="17.729464"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.073092,0,0,1.2409961,-3.4880263,-3.3958734)" />
+    <linearGradient
+       id="linearGradient5238">
+      <stop
+         id="stop5240"
+         offset="0"
+         style="stop-color:#001ccc;stop-opacity:1;" />
+      <stop
+         id="stop5242"
+         offset="1"
+         style="stop-color:#00afff;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5238"
+       id="linearGradient5278"
+       x1="39.062847"
+       y1="28.236254"
+       x2="15.537552"
+       y2="30.209774"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.63858911,0.01886473,0,0.6800597,12.419337,8.4146081)" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3144"
+       id="radialGradient5582"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
+       cx="225.26402"
+       cy="672.79736"
+       fx="225.26402"
+       fy="672.79736"
+       r="34.345188" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3144">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop3146" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop3148" />
+    </linearGradient>
+    <radialGradient
+       r="34.345188"
+       fy="672.79736"
+       fx="225.26402"
+       cy="672.79736"
+       cx="225.26402"
+       gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient5768"
+       xlink:href="#linearGradient3144"
+       inkscape:collect="always" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3144"
+       id="radialGradient5795"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.6985294,0,202.82863)"
+       cx="225.26402"
+       cy="672.79736"
+       fx="225.26402"
+       fy="672.79736"
+       r="34.345188" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5238-8"
+       id="linearGradient5278-3"
+       x1="39.062847"
+       y1="28.236254"
+       x2="15.537552"
+       y2="30.209774"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.63858911,0.01886473,0,0.6800597,12.419337,8.4146081)" />
+    <linearGradient
+       id="linearGradient5238-8">
+      <stop
+         id="stop5240-0"
+         offset="0"
+         style="stop-color:#001ccc;stop-opacity:1;" />
+      <stop
+         id="stop5242-8"
+         offset="1"
+         style="stop-color:#00afff;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3377">
+      <stop
+         id="stop3379"
+         offset="0"
+         style="stop-color:#faff2b;stop-opacity:1;" />
+      <stop
+         id="stop3381"
+         offset="1"
+         style="stop-color:#ffaa00;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4722">
+      <stop
+         id="stop4724"
+         offset="0"
+         style="stop-color:#faff2b;stop-opacity:1;" />
+      <stop
+         id="stop4726"
+         offset="1"
+         style="stop-color:#ffaa00;stop-opacity:1;" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3377"
+       id="radialGradient4426"
+       gradientUnits="userSpaceOnUse"
+       cx="45.883327"
+       cy="28.869568"
+       fx="45.883327"
+       fy="28.869568"
+       r="19.467436"
+       gradientTransform="translate(-129.7515,-68.681262)" />
+    <linearGradient
+       id="linearGradient4729">
+      <stop
+         id="stop4731"
+         offset="0"
+         style="stop-color:#faff2b;stop-opacity:1;" />
+      <stop
+         id="stop4733"
+         offset="1"
+         style="stop-color:#ffaa00;stop-opacity:1;" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3377"
+       id="radialGradient5552"
+       cx="32.41333"
+       cy="12.501603"
+       fx="32.41333"
+       fy="12.501603"
+       r="17.779947"
+       gradientTransform="matrix(1,0,0,0.50153435,0,6.2316196)"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3377-5"
+       id="radialGradient5552-7"
+       cx="32.41333"
+       cy="12.501603"
+       fx="32.41333"
+       fy="12.501603"
+       r="17.779947"
+       gradientTransform="matrix(1,0,0,0.50153435,0,6.2316196)"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       id="linearGradient3377-5">
+      <stop
+         id="stop3379-3"
+         offset="0"
+         style="stop-color:#faff2b;stop-opacity:1;" />
+      <stop
+         id="stop3381-2"
+         offset="1"
+         style="stop-color:#ffaa00;stop-opacity:1;" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3377-3"
+       id="radialGradient5552-5"
+       cx="32.41333"
+       cy="12.501603"
+       fx="32.41333"
+       fy="12.501603"
+       r="17.779947"
+       gradientTransform="matrix(1,0,0,0.50153435,0,6.2316196)"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       id="linearGradient3377-3">
+      <stop
+         id="stop3379-0"
+         offset="0"
+         style="stop-color:#faff2b;stop-opacity:1;" />
+      <stop
+         id="stop3381-6"
+         offset="1"
+         style="stop-color:#ffaa00;stop-opacity:1;" />
+    </linearGradient>
+    <radialGradient
+       r="17.779947"
+       fy="12.501603"
+       fx="32.41333"
+       cy="12.501603"
+       cx="32.41333"
+       gradientTransform="matrix(1,0,0,0.50153435,-11.638763,42.837407)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient5630"
+       xlink:href="#linearGradient3377-3"
+       inkscape:collect="always" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="7.99054"
+     inkscape:cx="30.695174"
+     inkscape:cy="28.159855"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:document-units="px"
+     inkscape:grid-bbox="true"
+     inkscape:window-width="1086"
+     inkscape:window-height="701"
+     inkscape:window-x="278"
+     inkscape:window-y="27"
+     inkscape:window-maximized="0"
+     showguides="true"
+     inkscape:guide-bbox="true">
+    <sodipodi:guide
+       orientation="0,1"
+       position="66.534653,64.492849"
+       id="guide5842" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata6253">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="Layer0" />
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       style="color:#000000;fill:url(#linearGradient5278);fill-opacity:1;fill-rule:nonzero;stroke:#00064a;stroke-width:1.42440391;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="m 29.603191,10.406007 -14.281175,11.324601 0.81275,21.78592 22.292565,7.953737 10.565746,-14.896482 0.464429,-22.366426 -19.854315,-3.80135 z"
+       id="path2557"
+       inkscape:connector-curvature="0" />
+    <path
+       id="path2559"
+       style="color:#000000;fill:none;stroke:#00064a;stroke-width:1.36512899;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="M 15.408137,21.659106 38.13654,27.247886 49.62441,14.087858 M 37.913623,27.243157 38.31385,50.911005"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="color:#000000;fill:url(#radialGradient5552);fill-opacity:1;fill-rule:nonzero;stroke:#7b5600;stroke-width:1.42440391000000011;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="M 29.626759,4.2965507 15.345584,15.621152 36.573679,20.706655 49.481074,8.0979007 z"
+       id="path2557-6"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#7b5600;stroke-width:2.524;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;opacity:1"
+       d="M 56.408428,15.872739 42.627845,31.57752 42.70593,52.43167 55.863621,36.318772 z"
+       id="path2557-6-0"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="color:#000000;fill:none;stroke:#7b5600;stroke-width:2.52399993;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="m 27.949071,27.44737 -19.9128345,-5.320081 0.078085,0.07958 23.1695305,6.038296 z"
+       id="path2557-6-0-8"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+    <path
+       style="color:#000000;fill:url(#radialGradient5630);fill-opacity:1;fill-rule:nonzero;stroke:#7b5600;stroke-width:1.42440391;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       d="M 3.4708294,27.261207 3.706821,52.226939 24.934916,57.312442 25.202364,32.314037 z"
+       id="path2557-6-8"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccc" />
+  </g>
+</svg>
diff --git a/WorkFeature/Ui/WFGui_2015.py b/WorkFeature/Ui/WFGui_2015.py
index 13fb09c..075986e 100644
--- a/WorkFeature/Ui/WFGui_2015.py
+++ b/WorkFeature/Ui/WFGui_2015.py
@@ -2,8 +2,8 @@
 
 # Form implementation generated from reading ui file 'WFGui_2015.ui'
 #
-# Created: Sat Nov  7 20:09:36 2015
-#      by: PySide UI code generator 4.11.2
+# Created: Sun Dec 13 18:49:39 2015
+#      by: PySide UI code generator 4.11.3
 #
 # WARNING! All changes made in this file will be lost!
 
@@ -636,7 +636,7 @@ class Ui_Form(object):
         self.scrollArea_2.setWidgetResizable(True)
         self.scrollArea_2.setObjectName(_fromUtf8("scrollArea_2"))
         self.scrollAreaWidgetContents_5 = QtGui.QWidget()
-        self.scrollAreaWidgetContents_5.setGeometry(QtCore.QRect(0, 0, 259, 650))
+        self.scrollAreaWidgetContents_5.setGeometry(QtCore.QRect(0, 0, 245, 648))
         self.scrollAreaWidgetContents_5.setObjectName(_fromUtf8("scrollAreaWidgetContents_5"))
         self.gridLayout_76 = QtGui.QGridLayout(self.scrollAreaWidgetContents_5)
         self.gridLayout_76.setObjectName(_fromUtf8("gridLayout_76"))
@@ -1169,8 +1169,8 @@ class Ui_Form(object):
         self.tabWidget_7.addTab(self.tab_16, icon45, _fromUtf8(""))
         self.tab_17 = QtGui.QWidget()
         self.tab_17.setObjectName(_fromUtf8("tab_17"))
-        self.gridLayout_85 = QtGui.QGridLayout(self.tab_17)
-        self.gridLayout_85.setObjectName(_fromUtf8("gridLayout_85"))
+        self.gridLayout_6 = QtGui.QGridLayout(self.tab_17)
+        self.gridLayout_6.setObjectName(_fromUtf8("gridLayout_6"))
         self.frame_9 = QtGui.QFrame(self.tab_17)
         self.frame_9.setFrameShape(QtGui.QFrame.StyledPanel)
         self.frame_9.setFrameShadow(QtGui.QFrame.Raised)
@@ -1209,11 +1209,16 @@ class Ui_Form(object):
         self.button_sweep.setIconSize(QtCore.QSize(32, 32))
         self.button_sweep.setObjectName(_fromUtf8("button_sweep"))
         self.gridLayout_86.addWidget(self.button_sweep, 1, 0, 1, 1)
-        self.gridLayout_85.addWidget(self.frame_9, 0, 0, 1, 1)
+        self.gridLayout_6.addWidget(self.frame_9, 0, 0, 1, 1)
         spacerItem11 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
-        self.gridLayout_85.addItem(spacerItem11, 1, 0, 1, 1)
+        self.gridLayout_6.addItem(spacerItem11, 2, 0, 1, 1)
+        self.button_beam = QtGui.QPushButton(self.tab_17)
         icon47 = QtGui.QIcon()
         icon47.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_Beam.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.button_beam.setIcon(icon47)
+        self.button_beam.setIconSize(QtCore.QSize(32, 32))
+        self.button_beam.setObjectName(_fromUtf8("button_beam"))
+        self.gridLayout_6.addWidget(self.button_beam, 1, 0, 1, 1)
         self.tabWidget_7.addTab(self.tab_17, icon47, _fromUtf8(""))
         self.Plane_Tab1_3 = QtGui.QWidget()
         self.Plane_Tab1_3.setObjectName(_fromUtf8("Plane_Tab1_3"))
@@ -1618,25 +1623,32 @@ class Ui_Form(object):
         self.angle_revolve.setObjectName(_fromUtf8("angle_revolve"))
         self.horizontalLayout_76.addWidget(self.angle_revolve)
         self.gridLayout_5.addLayout(self.horizontalLayout_76, 7, 0, 1, 1)
-        self.button_common = QtGui.QPushButton(self.Objects_Tab2_2)
+        self.button_copy_objects = QtGui.QPushButton(self.Objects_Tab2_2)
         icon67 = QtGui.QIcon()
-        icon67.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_Common.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.button_common.setIcon(icon67)
+        icon67.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_objectCopy.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.button_copy_objects.setIcon(icon67)
+        self.button_copy_objects.setIconSize(QtCore.QSize(32, 32))
+        self.button_copy_objects.setObjectName(_fromUtf8("button_copy_objects"))
+        self.gridLayout_5.addWidget(self.button_copy_objects, 8, 0, 1, 1)
+        self.button_common = QtGui.QPushButton(self.Objects_Tab2_2)
+        icon68 = QtGui.QIcon()
+        icon68.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_Common.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.button_common.setIcon(icon68)
         self.button_common.setIconSize(QtCore.QSize(32, 32))
         self.button_common.setObjectName(_fromUtf8("button_common"))
-        self.gridLayout_5.addWidget(self.button_common, 8, 0, 1, 1)
+        self.gridLayout_5.addWidget(self.button_common, 9, 0, 1, 1)
         self.button_difference = QtGui.QPushButton(self.Objects_Tab2_2)
-        icon68 = QtGui.QIcon()
-        icon68.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_Difference.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.button_difference.setIcon(icon68)
+        icon69 = QtGui.QIcon()
+        icon69.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_Difference.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.button_difference.setIcon(icon69)
         self.button_difference.setIconSize(QtCore.QSize(32, 32))
         self.button_difference.setObjectName(_fromUtf8("button_difference"))
-        self.gridLayout_5.addWidget(self.button_difference, 9, 0, 1, 1)
+        self.gridLayout_5.addWidget(self.button_difference, 10, 0, 1, 1)
         spacerItem14 = QtGui.QSpacerItem(17, 8, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
-        self.gridLayout_5.addItem(spacerItem14, 10, 0, 1, 1)
-        icon69 = QtGui.QIcon()
-        icon69.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_box.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.tabWidget_7.addTab(self.Objects_Tab2_2, icon69, _fromUtf8(""))
+        self.gridLayout_5.addItem(spacerItem14, 11, 0, 1, 1)
+        icon70 = QtGui.QIcon()
+        icon70.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_box.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.tabWidget_7.addTab(self.Objects_Tab2_2, icon70, _fromUtf8(""))
         self.Modif_Tab_2 = QtGui.QWidget()
         self.Modif_Tab_2.setObjectName(_fromUtf8("Modif_Tab_2"))
         self.gridLayout_94 = QtGui.QGridLayout(self.Modif_Tab_2)
@@ -1654,9 +1666,9 @@ class Ui_Form(object):
         sizePolicy.setHeightForWidth(self.button_alignface2view.sizePolicy().hasHeightForWidth())
         self.button_alignface2view.setSizePolicy(sizePolicy)
         self.button_alignface2view.setMaximumSize(QtCore.QSize(220, 16777215))
-        icon70 = QtGui.QIcon()
-        icon70.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_viewAlignFace.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.button_alignface2view.setIcon(icon70)
+        icon71 = QtGui.QIcon()
+        icon71.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_viewAlignFace.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.button_alignface2view.setIcon(icon71)
         self.button_alignface2view.setIconSize(QtCore.QSize(32, 32))
         self.button_alignface2view.setObjectName(_fromUtf8("button_alignface2view"))
         self.gridLayout_95.addWidget(self.button_alignface2view, 0, 0, 1, 1)
@@ -1664,9 +1676,9 @@ class Ui_Form(object):
         self.horizontalLayout_78.setObjectName(_fromUtf8("horizontalLayout_78"))
         self.button_align_faces = QtGui.QPushButton(self.align_tab_2)
         self.button_align_faces.setMaximumSize(QtCore.QSize(220, 16777215))
-        icon71 = QtGui.QIcon()
-        icon71.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_objectAlignFaces.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.button_align_faces.setIcon(icon71)
+        icon72 = QtGui.QIcon()
+        icon72.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_objectAlignFaces.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.button_align_faces.setIcon(icon72)
         self.button_align_faces.setIconSize(QtCore.QSize(32, 32))
         self.button_align_faces.setObjectName(_fromUtf8("button_align_faces"))
         self.horizontalLayout_78.addWidget(self.button_align_faces)
@@ -1685,9 +1697,9 @@ class Ui_Form(object):
         self.horizontalLayout_79.setObjectName(_fromUtf8("horizontalLayout_79"))
         self.button_align_edges = QtGui.QPushButton(self.align_tab_2)
         self.button_align_edges.setMaximumSize(QtCore.QSize(220, 16777215))
-        icon72 = QtGui.QIcon()
-        icon72.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_objectAlignAxes.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.button_align_edges.setIcon(icon72)
+        icon73 = QtGui.QIcon()
+        icon73.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_objectAlignAxes.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.button_align_edges.setIcon(icon73)
         self.button_align_edges.setIconSize(QtCore.QSize(32, 32))
         self.button_align_edges.setObjectName(_fromUtf8("button_align_edges"))
         self.horizontalLayout_79.addWidget(self.button_align_edges)
@@ -1705,16 +1717,16 @@ class Ui_Form(object):
         spacerItem15 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
         self.gridLayout_95.addItem(spacerItem15, 5, 0, 1, 1)
         self.button_joint_points = QtGui.QPushButton(self.align_tab_2)
-        icon73 = QtGui.QIcon()
-        icon73.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_objectJointPoints.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.button_joint_points.setIcon(icon73)
+        icon74 = QtGui.QIcon()
+        icon74.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_objectJointPoints.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.button_joint_points.setIcon(icon74)
         self.button_joint_points.setIconSize(QtCore.QSize(32, 32))
         self.button_joint_points.setObjectName(_fromUtf8("button_joint_points"))
         self.gridLayout_95.addWidget(self.button_joint_points, 3, 0, 1, 1)
         self.button_joint_faces = QtGui.QPushButton(self.align_tab_2)
-        icon74 = QtGui.QIcon()
-        icon74.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_objectJointFaces.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.button_joint_faces.setIcon(icon74)
+        icon75 = QtGui.QIcon()
+        icon75.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_objectJointFaces.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.button_joint_faces.setIcon(icon75)
         self.button_joint_faces.setIconSize(QtCore.QSize(32, 32))
         self.button_joint_faces.setObjectName(_fromUtf8("button_joint_faces"))
         self.gridLayout_95.addWidget(self.button_joint_faces, 4, 0, 1, 1)
@@ -1884,9 +1896,9 @@ class Ui_Form(object):
         self.ObjRot_button_select_axis.setMaximumSize(QtCore.QSize(80, 16777215))
         self.ObjRot_button_select_axis.setObjectName(_fromUtf8("ObjRot_button_select_axis"))
         self.gridLayout_105.addWidget(self.ObjRot_button_select_axis, 1, 0, 1, 1)
-        icon75 = QtGui.QIcon()
-        icon75.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_rotationAxis.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.tabWidget_10.addTab(self.tab_18, icon75, _fromUtf8(""))
+        icon76 = QtGui.QIcon()
+        icon76.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_rotationAxis.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.tabWidget_10.addTab(self.tab_18, icon76, _fromUtf8(""))
         self.tab_19 = QtGui.QWidget()
         self.tab_19.setObjectName(_fromUtf8("tab_19"))
         self.gridLayout_106 = QtGui.QGridLayout(self.tab_19)
@@ -1913,9 +1925,9 @@ class Ui_Form(object):
         self.ObjRot_button_select_center.setMaximumSize(QtCore.QSize(80, 16777215))
         self.ObjRot_button_select_center.setObjectName(_fromUtf8("ObjRot_button_select_center"))
         self.gridLayout_106.addWidget(self.ObjRot_button_select_center, 1, 0, 1, 1)
-        icon76 = QtGui.QIcon()
-        icon76.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_rotationPoint.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.tabWidget_10.addTab(self.tab_19, icon76, _fromUtf8(""))
+        icon77 = QtGui.QIcon()
+        icon77.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_rotationPoint.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.tabWidget_10.addTab(self.tab_19, icon77, _fromUtf8(""))
         self.gridLayout_104.addWidget(self.tabWidget_10, 1, 0, 1, 1)
         self.groupBox_21 = QtGui.QGroupBox(self.frame_11)
         self.groupBox_21.setMinimumSize(QtCore.QSize(150, 67))
@@ -1951,9 +1963,9 @@ class Ui_Form(object):
         self.ObjRot_button_select_angle.setMaximumSize(QtCore.QSize(80, 16777215))
         self.ObjRot_button_select_angle.setObjectName(_fromUtf8("ObjRot_button_select_angle"))
         self.gridLayout_109.addWidget(self.ObjRot_button_select_angle, 0, 0, 1, 1)
-        icon77 = QtGui.QIcon()
-        icon77.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_click.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.tabWidget_11.addTab(self.tab_21, icon77, _fromUtf8(""))
+        icon78 = QtGui.QIcon()
+        icon78.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_click.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.tabWidget_11.addTab(self.tab_21, icon78, _fromUtf8(""))
         self.gridLayout_107.addWidget(self.tabWidget_11, 0, 0, 1, 1)
         self.horizontalLayout_81 = QtGui.QHBoxLayout()
         self.horizontalLayout_81.setObjectName(_fromUtf8("horizontalLayout_81"))
@@ -2102,9 +2114,9 @@ class Ui_Form(object):
         self.gridLayout_114.addLayout(self.gridLayout_117, 2, 0, 1, 1)
         self.gridLayout_113.addLayout(self.gridLayout_114, 2, 0, 1, 1)
         self.gridLayout_112.addWidget(self.groupBox_22, 0, 0, 1, 1)
-        icon78 = QtGui.QIcon()
-        icon78.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_startPoint.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.tabWidget_12.addTab(self.tab_22, icon78, _fromUtf8(""))
+        icon79 = QtGui.QIcon()
+        icon79.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_startPoint.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.tabWidget_12.addTab(self.tab_22, icon79, _fromUtf8(""))
         self.tab_23 = QtGui.QWidget()
         self.tab_23.setObjectName(_fromUtf8("tab_23"))
         self.gridLayout_118 = QtGui.QGridLayout(self.tab_23)
@@ -2179,9 +2191,9 @@ class Ui_Form(object):
         self.gridLayout_120.addLayout(self.gridLayout_123, 0, 0, 1, 1)
         self.gridLayout_119.addLayout(self.gridLayout_120, 2, 0, 1, 1)
         self.gridLayout_118.addWidget(self.groupBox_23, 0, 0, 1, 1)
-        icon79 = QtGui.QIcon()
-        icon79.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_endPoint.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.tabWidget_12.addTab(self.tab_23, icon79, _fromUtf8(""))
+        icon80 = QtGui.QIcon()
+        icon80.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_endPoint.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.tabWidget_12.addTab(self.tab_23, icon80, _fromUtf8(""))
         self.gridLayout_111.addWidget(self.tabWidget_12, 2, 0, 1, 1)
         self.horizontalLayout_84 = QtGui.QHBoxLayout()
         self.horizontalLayout_84.setObjectName(_fromUtf8("horizontalLayout_84"))
@@ -2215,65 +2227,58 @@ class Ui_Form(object):
         sizePolicy.setHeightForWidth(self.button_alignview.sizePolicy().hasHeightForWidth())
         self.button_alignview.setSizePolicy(sizePolicy)
         self.button_alignview.setMaximumSize(QtCore.QSize(16777215, 16777215))
-        icon80 = QtGui.QIcon()
-        icon80.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_viewAlign.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.button_alignview.setIcon(icon80)
+        icon81 = QtGui.QIcon()
+        icon81.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_viewAlign.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.button_alignview.setIcon(icon81)
         self.button_alignview.setIconSize(QtCore.QSize(32, 32))
         self.button_alignview.setObjectName(_fromUtf8("button_alignview"))
         self.gridLayout_124.addWidget(self.button_alignview, 0, 0, 1, 1)
         spacerItem22 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
         self.gridLayout_124.addItem(spacerItem22, 2, 0, 1, 1)
         self.button_trackcamera = QtGui.QPushButton(self.View_Tab_2)
-        icon81 = QtGui.QIcon()
-        icon81.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_trackCamera.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.button_trackcamera.setIcon(icon81)
+        icon82 = QtGui.QIcon()
+        icon82.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_trackCamera.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.button_trackcamera.setIcon(icon82)
         self.button_trackcamera.setIconSize(QtCore.QSize(32, 32))
         self.button_trackcamera.setObjectName(_fromUtf8("button_trackcamera"))
         self.gridLayout_124.addWidget(self.button_trackcamera, 1, 0, 1, 1)
-        icon82 = QtGui.QIcon()
-        icon82.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_view.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.tabWidget_7.addTab(self.View_Tab_2, icon82, _fromUtf8(""))
+        icon83 = QtGui.QIcon()
+        icon83.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_view.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.tabWidget_7.addTab(self.View_Tab_2, icon83, _fromUtf8(""))
         self.tab_24 = QtGui.QWidget()
         self.tab_24.setObjectName(_fromUtf8("tab_24"))
         self.gridLayout_125 = QtGui.QGridLayout(self.tab_24)
         self.gridLayout_125.setObjectName(_fromUtf8("gridLayout_125"))
-        spacerItem23 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
-        self.gridLayout_125.addItem(spacerItem23, 9, 0, 1, 1)
         self.button_isView = QtGui.QPushButton(self.tab_24)
-        icon83 = QtGui.QIcon()
-        icon83.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_FCCamera_02.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.button_isView.setIcon(icon83)
+        icon84 = QtGui.QIcon()
+        icon84.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_FCCamera_02.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.button_isView.setIcon(icon84)
         self.button_isView.setIconSize(QtCore.QSize(32, 32))
         self.button_isView.setObjectName(_fromUtf8("button_isView"))
-        self.gridLayout_125.addWidget(self.button_isView, 8, 0, 1, 1)
+        self.gridLayout_125.addWidget(self.button_isView, 9, 0, 1, 1)
+        spacerItem23 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
+        self.gridLayout_125.addItem(spacerItem23, 10, 0, 1, 1)
         self.button_isParallel = QtGui.QPushButton(self.tab_24)
-        icon84 = QtGui.QIcon()
-        icon84.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_isParallel.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.button_isParallel.setIcon(icon84)
+        icon85 = QtGui.QIcon()
+        icon85.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_isParallel.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.button_isParallel.setIcon(icon85)
         self.button_isParallel.setIconSize(QtCore.QSize(32, 32))
         self.button_isParallel.setObjectName(_fromUtf8("button_isParallel"))
         self.gridLayout_125.addWidget(self.button_isParallel, 0, 0, 1, 1)
         self.button_isAngle = QtGui.QPushButton(self.tab_24)
-        icon85 = QtGui.QIcon()
-        icon85.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_angleBetween.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.button_isAngle.setIcon(icon85)
+        icon86 = QtGui.QIcon()
+        icon86.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_angleBetween.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.button_isAngle.setIcon(icon86)
         self.button_isAngle.setIconSize(QtCore.QSize(32, 32))
         self.button_isAngle.setObjectName(_fromUtf8("button_isAngle"))
         self.gridLayout_125.addWidget(self.button_isAngle, 4, 0, 1, 1)
         self.button_isLength = QtGui.QPushButton(self.tab_24)
-        icon86 = QtGui.QIcon()
-        icon86.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_isLength.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.button_isLength.setIcon(icon86)
+        icon87 = QtGui.QIcon()
+        icon87.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_isLength.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.button_isLength.setIcon(icon87)
         self.button_isLength.setIconSize(QtCore.QSize(32, 32))
         self.button_isLength.setObjectName(_fromUtf8("button_isLength"))
         self.gridLayout_125.addWidget(self.button_isLength, 6, 0, 1, 1)
-        self.button_isPerpendicular = QtGui.QPushButton(self.tab_24)
-        icon87 = QtGui.QIcon()
-        icon87.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_isPerpendicular.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.button_isPerpendicular.setIcon(icon87)
-        self.button_isPerpendicular.setIconSize(QtCore.QSize(32, 32))
-        self.button_isPerpendicular.setObjectName(_fromUtf8("button_isPerpendicular"))
-        self.gridLayout_125.addWidget(self.button_isPerpendicular, 1, 0, 1, 1)
         self.button_isDistance = QtGui.QPushButton(self.tab_24)
         icon88 = QtGui.QIcon()
         icon88.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_distanceBetween.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
@@ -2281,30 +2286,44 @@ class Ui_Form(object):
         self.button_isDistance.setIconSize(QtCore.QSize(32, 32))
         self.button_isDistance.setObjectName(_fromUtf8("button_isDistance"))
         self.gridLayout_125.addWidget(self.button_isDistance, 5, 0, 1, 1)
-        self.button_isArea = QtGui.QPushButton(self.tab_24)
-        icon89 = QtGui.QIcon()
-        icon89.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_isArea.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.button_isArea.setIcon(icon89)
-        self.button_isArea.setIconSize(QtCore.QSize(32, 32))
-        self.button_isArea.setObjectName(_fromUtf8("button_isArea"))
-        self.gridLayout_125.addWidget(self.button_isArea, 7, 0, 1, 1)
         self.button_isCoplanar = QtGui.QPushButton(self.tab_24)
-        icon90 = QtGui.QIcon()
-        icon90.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_isCoplanar.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.button_isCoplanar.setIcon(icon90)
+        icon89 = QtGui.QIcon()
+        icon89.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_isCoplanar.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.button_isCoplanar.setIcon(icon89)
         self.button_isCoplanar.setIconSize(QtCore.QSize(32, 32))
         self.button_isCoplanar.setObjectName(_fromUtf8("button_isCoplanar"))
         self.gridLayout_125.addWidget(self.button_isCoplanar, 2, 0, 1, 1)
-        self.button_isClearance = QtGui.QPushButton(self.tab_24)
+        self.button_isArea = QtGui.QPushButton(self.tab_24)
+        icon90 = QtGui.QIcon()
+        icon90.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_isArea.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.button_isArea.setIcon(icon90)
+        self.button_isArea.setIconSize(QtCore.QSize(32, 32))
+        self.button_isArea.setObjectName(_fromUtf8("button_isArea"))
+        self.gridLayout_125.addWidget(self.button_isArea, 7, 0, 1, 1)
+        self.button_isPerpendicular = QtGui.QPushButton(self.tab_24)
         icon91 = QtGui.QIcon()
-        icon91.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_isClearance.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.button_isClearance.setIcon(icon91)
+        icon91.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_isPerpendicular.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.button_isPerpendicular.setIcon(icon91)
+        self.button_isPerpendicular.setIconSize(QtCore.QSize(32, 32))
+        self.button_isPerpendicular.setObjectName(_fromUtf8("button_isPerpendicular"))
+        self.gridLayout_125.addWidget(self.button_isPerpendicular, 1, 0, 1, 1)
+        self.button_isClearance = QtGui.QPushButton(self.tab_24)
+        icon92 = QtGui.QIcon()
+        icon92.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_isClearance.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.button_isClearance.setIcon(icon92)
         self.button_isClearance.setIconSize(QtCore.QSize(32, 32))
         self.button_isClearance.setObjectName(_fromUtf8("button_isClearance"))
         self.gridLayout_125.addWidget(self.button_isClearance, 3, 0, 1, 1)
-        icon92 = QtGui.QIcon()
-        icon92.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_check.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.tabWidget_7.addTab(self.tab_24, icon92, _fromUtf8(""))
+        self.button_isRadius = QtGui.QPushButton(self.tab_24)
+        icon93 = QtGui.QIcon()
+        icon93.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_isRadius.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.button_isRadius.setIcon(icon93)
+        self.button_isRadius.setIconSize(QtCore.QSize(32, 32))
+        self.button_isRadius.setObjectName(_fromUtf8("button_isRadius"))
+        self.gridLayout_125.addWidget(self.button_isRadius, 8, 0, 1, 1)
+        icon94 = QtGui.QIcon()
+        icon94.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_check.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.tabWidget_7.addTab(self.tab_24, icon94, _fromUtf8(""))
         self.gridLayout_128.addWidget(self.tabWidget_7, 0, 0, 1, 1)
         self.scrollArea.setWidget(self.scrollAreaWidgetContents)
         self.gridLayout_34.addWidget(self.scrollArea, 0, 0, 1, 1)
@@ -2321,7 +2340,7 @@ class Ui_Form(object):
         self.gridLayout_34.addLayout(self.horizontalLayout_43, 1, 0, 1, 1)
 
         self.retranslateUi(Form)
-        self.tabWidget_7.setCurrentIndex(4)
+        self.tabWidget_7.setCurrentIndex(7)
         self.point_loc_comboBox.setCurrentIndex(1)
         self.tabWidget_8.setCurrentIndex(0)
         self.transition_comboBox.setCurrentIndex(2)
@@ -2637,7 +2656,8 @@ class Ui_Form(object):
 "- Second push this button\n"
 "\n"
 "NB: \n"
-" - The percentage of  the extension can be defined first.", None))
+" - The percentage of  the extension can be defined first.\n"
+" - Negative percentage will shrink the Axis", None))
         self.button_extension_axis.setText(_translate("Form", "Enlarge(Axis)", None))
         self.extension_axis.setToolTip(_translate("Form", "Extension of the Line in percentage of original length of the Line.\n"
 "If the extension is 50% it means that each side is extended with 25% length.\n"
@@ -2696,7 +2716,7 @@ class Ui_Form(object):
         self.ParCurve_button_store_2.setText(_translate("Form", "Store", None))
         self.ParCurve_button_apply_2.setToolTip(_translate("Form", "Click to visualize the curve.", None))
         self.ParCurve_button_apply_2.setText(_translate("Form", "Apply", None))
-        self.tabWidget_8.setTabText(self.tabWidget_8.indexOf(self.tab_14), _translate("Form", "2D", None))
+        self.tabWidget_8.setTabText(self.tabWidget_8.indexOf(self.tab_14), _translate("Form", "Parametric 2D", None))
         self.ParCurve_comboBox_3.setToolTip(_translate("Form", "Choose another curve from the list.", None))
         self.ParCurve_button_edit_3.setToolTip(_translate("Form", "Click to access to a table where you can edit all parameters of all curves and \n"
 "save your custom curves.", None))
@@ -2734,7 +2754,7 @@ class Ui_Form(object):
         self.ParCurve_button_store_3.setText(_translate("Form", "Store", None))
         self.ParCurve_button_apply_3.setToolTip(_translate("Form", "Click to visualize the curve.", None))
         self.ParCurve_button_apply_3.setText(_translate("Form", "Apply", None))
-        self.tabWidget_8.setTabText(self.tabWidget_8.indexOf(self.tab_15), _translate("Form", "3D", None))
+        self.tabWidget_8.setTabText(self.tabWidget_8.indexOf(self.tab_15), _translate("Form", "Parametric 3D", None))
         self.tabWidget_7.setTabText(self.tabWidget_7.indexOf(self.Wire_Tab_2), _translate("Form", "Wire", None))
         self.button_linecenter_circle.setToolTip(_translate("Form", "Select an Axis and a Point to create a Circle\n"
 "centered on the Point, perpendicular to the Axis \n"
@@ -2807,6 +2827,14 @@ class Ui_Form(object):
 "#     0 (default), 1 (right corners) or 2 (rounded corners).)\n"
 "", None))
         self.button_sweep.setText(_translate("Form", "Section Sweep", None))
+        self.button_beam.setToolTip(_translate("Form", "Beam:\n"
+"Will extrude a Section along a Linear Trajectory.\n"
+"- Select first one Section wire (Closed wire will generate volumes by default)\n"
+"(This Section can be a compound from sketch to realize \"tube\")\n"
+"- Select one or several wire(s) as Trajectory(ies)\n"
+"- Then push this button\n"
+"", None))
+        self.button_beam.setText(_translate("Form", "Beam", None))
         self.tabWidget_7.setTabText(self.tabWidget_7.indexOf(self.tab_17), _translate("Form", "Sweeping", None))
         self.button_click_for_plane.setToolTip(_translate("Form", "Click:\n"
 "Create a rectangular Plane perpendicular to the view at location of one mouse click.\n"
@@ -2994,6 +3022,11 @@ class Ui_Form(object):
         self.button_revolve.setText(_translate("Form", "Revolve", None))
         self.angle_revolve.setToolTip(_translate("Form", "Angle of the revolution in degrees.", None))
         self.angle_revolve.setText(_translate("Form", "360", None))
+        self.button_copy_objects.setToolTip(_translate("Form", "Duplicate:\n"
+"Make a copy of an object or a selected subObject part:\n"
+"- Select one or several object(s) or subobject(s)\n"
+"- Then push this button", None))
+        self.button_copy_objects.setText(_translate("Form", "Duplicate", None))
         self.button_common.setToolTip(_translate("Form", "Compute the common parts between selected shapes.\n"
 "- Select at least two objects and click.\n"
 "\n"
@@ -3287,34 +3320,39 @@ class Ui_Form(object):
 "Click this button\n"
 " ", None))
         self.button_isLength.setText(_translate("Form", "Length ?", None))
-        self.button_isPerpendicular.setToolTip(_translate("Form", "Check if two faces or two Edges are Perpendicular:\n"
-"- Select the 2 faces/planes or 2 Edges/Lines and\n"
-"Click this button\n"
-"\n"
-"NB: You can change the tolerance in \"Ori. Pref.\"  TAB", None))
-        self.button_isPerpendicular.setText(_translate("Form", "are Perpendicular ?", None))
         self.button_isDistance.setToolTip(_translate("Form", "Check for two Points distance:\n"
 "Distances measurement and Delta values (on main Axes) between two Points\n"
 "- Select the 2 Points and\n"
 "Click this button\n"
 " ", None))
         self.button_isDistance.setText(_translate("Form", "Distance ?", None))
-        self.button_isArea.setToolTip(_translate("Form", "Check for surface Area:\n"
-"Area measurement for a Plane or a set of Planes.\n"
-"- Select One or several Planes and\n"
-"Click this button", None))
-        self.button_isArea.setText(_translate("Form", "Area ?", None))
         self.button_isCoplanar.setToolTip(_translate("Form", "Check if two faces or two Edges are Coplanar:\n"
 "- Select the 2 faces/planes or 2 Edges/Lines and\n"
 "Click this button\n"
 "\n"
 "NB: You can change the tolerance in \"Ori. Pref.\"  TAB", None))
         self.button_isCoplanar.setText(_translate("Form", "are Coplanar ?", None))
+        self.button_isArea.setToolTip(_translate("Form", "Check for surface Area:\n"
+"Area measurement for a Plane or a set of Planes.\n"
+"- Select One or several Planes and\n"
+"- Then click this button", None))
+        self.button_isArea.setText(_translate("Form", "Area ?", None))
+        self.button_isPerpendicular.setToolTip(_translate("Form", "Check if two faces or two Edges are Perpendicular:\n"
+"- Select the 2 faces/planes or 2 Edges/Lines and\n"
+"Click this button\n"
+"\n"
+"NB: You can change the tolerance in \"Ori. Pref.\"  TAB", None))
+        self.button_isPerpendicular.setText(_translate("Form", "are Perpendicular ?", None))
         self.button_isClearance.setToolTip(_translate("Form", "Check for two Objects Clearance distance:\n"
 "Quick measurements between parallel faces and similarly placed objects\n"
 "- Select the 2 Objects and\n"
 "Click this button", None))
         self.button_isClearance.setText(_translate("Form", "Distance Clearance ?", None))
+        self.button_isRadius.setToolTip(_translate("Form", "Check for Radius:\n"
+"Radius measurement for a Circle or an Arc.\n"
+"- Select One Circle or Arc\n"
+"- Then click this button", None))
+        self.button_isRadius.setText(_translate("Form", "Radius ?", None))
         self.tabWidget_7.setTabText(self.tabWidget_7.indexOf(self.tab_24), _translate("Form", "Check", None))
         self.button_WF_quit.setText(_translate("Form", "Close", None))
         self.label_release.setText(_translate("Form", "2015", None))
diff --git a/WorkFeature/Ui/WFGui_2015.ui b/WorkFeature/Ui/WFGui_2015.ui
index f3f6d99..80abcad 100644
--- a/WorkFeature/Ui/WFGui_2015.ui
+++ b/WorkFeature/Ui/WFGui_2015.ui
@@ -57,7 +57,7 @@
           <enum>QTabWidget::West</enum>
          </property>
          <property name="currentIndex">
-          <number>4</number>
+          <number>0</number>
          </property>
          <widget class="QWidget" name="Origin_Tab_2">
           <attribute name="icon">
@@ -1745,7 +1745,8 @@ Extend an Axis at two extrema.
 - Second push this button
 
 NB: 
- - The percentage of  the extension can be defined first.</string>
+ - The percentage of  the extension can be defined first.
+ - Negative percentage will shrink the Axis</string>
                </property>
                <property name="text">
                 <string>Enlarge(Axis)</string>
@@ -1908,7 +1909,7 @@ Then click on this button.</string>
              </property>
              <widget class="QWidget" name="tab_14">
               <attribute name="title">
-               <string>2D</string>
+               <string>Parametric 2D</string>
               </attribute>
               <layout class="QGridLayout" name="gridLayout_75">
                <item row="0" column="0">
@@ -2514,7 +2515,7 @@ To save your curve you need to go to &quot;Edit&quot;.</string>
              </widget>
              <widget class="QWidget" name="tab_15">
               <attribute name="title">
-               <string>3D</string>
+               <string>Parametric 3D</string>
               </attribute>
               <layout class="QGridLayout" name="gridLayout_80">
                <item row="0" column="0">
@@ -3412,7 +3413,7 @@ Then click on this button.</string>
           <attribute name="title">
            <string>Sweeping</string>
           </attribute>
-          <layout class="QGridLayout" name="gridLayout_85">
+          <layout class="QGridLayout" name="gridLayout_6">
            <item row="0" column="0">
             <widget class="QFrame" name="frame_9">
              <property name="frameShape">
@@ -3560,7 +3561,7 @@ NB: You can change first:
              </layout>
             </widget>
            </item>
-           <item row="1" column="0">
+           <item row="2" column="0">
             <spacer name="verticalSpacer_25">
              <property name="orientation">
               <enum>Qt::Vertical</enum>
@@ -3573,6 +3574,32 @@ NB: You can change first:
              </property>
             </spacer>
            </item>
+           <item row="1" column="0">
+            <widget class="QPushButton" name="button_beam">
+             <property name="toolTip">
+              <string>Beam:
+Will extrude a Section along a Linear Trajectory.
+- Select first one Section wire (Closed wire will generate volumes by default)
+(This Section can be a compound from sketch to realize &quot;tube&quot;)
+- Select one or several wire(s) as Trajectory(ies)
+- Then push this button
+</string>
+             </property>
+             <property name="text">
+              <string>Beam</string>
+             </property>
+             <property name="icon">
+              <iconset>
+               <normaloff>../Icons/WF_Beam.svg</normaloff>../Icons/WF_Beam.svg</iconset>
+             </property>
+             <property name="iconSize">
+              <size>
+               <width>32</width>
+               <height>32</height>
+              </size>
+             </property>
+            </widget>
+           </item>
           </layout>
          </widget>
          <widget class="QWidget" name="Plane_Tab1_3">
@@ -4762,6 +4789,29 @@ NB:
             </layout>
            </item>
            <item row="8" column="0">
+            <widget class="QPushButton" name="button_copy_objects">
+             <property name="toolTip">
+              <string>Duplicate:
+Make a copy of an object or a selected subObject part:
+- Select one or several object(s) or subobject(s)
+- Then push this button</string>
+             </property>
+             <property name="text">
+              <string>Duplicate</string>
+             </property>
+             <property name="icon">
+              <iconset>
+               <normaloff>../Icons/WF_objectCopy.svg</normaloff>../Icons/WF_objectCopy.svg</iconset>
+             </property>
+             <property name="iconSize">
+              <size>
+               <width>32</width>
+               <height>32</height>
+              </size>
+             </property>
+            </widget>
+           </item>
+           <item row="9" column="0">
             <widget class="QPushButton" name="button_common">
              <property name="toolTip">
               <string>Compute the common parts between selected shapes.
@@ -4788,7 +4838,7 @@ Original code from HighlightCommon.FCMacro
              </property>
             </widget>
            </item>
-           <item row="9" column="0">
+           <item row="10" column="0">
             <widget class="QPushButton" name="button_difference">
              <property name="toolTip">
               <string>Compute the difference parts between selected shapes.
@@ -4814,7 +4864,7 @@ Original code from HighlightDifference.FCMacro
              </property>
             </widget>
            </item>
-           <item row="10" column="0">
+           <item row="11" column="0">
             <spacer name="verticalSpacer_28">
              <property name="orientation">
               <enum>Qt::Vertical</enum>
@@ -6633,19 +6683,6 @@ ReClick with same selection, will reverse the direction.</string>
           </attribute>
           <layout class="QGridLayout" name="gridLayout_125">
            <item row="9" column="0">
-            <spacer name="verticalSpacer_34">
-             <property name="orientation">
-              <enum>Qt::Vertical</enum>
-             </property>
-             <property name="sizeHint" stdset="0">
-              <size>
-               <width>20</width>
-               <height>40</height>
-              </size>
-             </property>
-            </spacer>
-           </item>
-           <item row="8" column="0">
             <widget class="QPushButton" name="button_isView">
              <property name="toolTip">
               <string>Detect the position of the camera.
@@ -6667,6 +6704,19 @@ by the function getCameraOrientation().</string>
              </property>
             </widget>
            </item>
+           <item row="10" column="0">
+            <spacer name="verticalSpacer_34">
+             <property name="orientation">
+              <enum>Qt::Vertical</enum>
+             </property>
+             <property name="sizeHint" stdset="0">
+              <size>
+               <width>20</width>
+               <height>40</height>
+              </size>
+             </property>
+            </spacer>
+           </item>
            <item row="0" column="0">
             <widget class="QPushButton" name="button_isParallel">
              <property name="toolTip">
@@ -6747,30 +6797,6 @@ Click this button
              </property>
             </widget>
            </item>
-           <item row="1" column="0">
-            <widget class="QPushButton" name="button_isPerpendicular">
-             <property name="toolTip">
-              <string>Check if two faces or two Edges are Perpendicular:
-- Select the 2 faces/planes or 2 Edges/Lines and
-Click this button
-
-NB: You can change the tolerance in &quot;Ori. Pref.&quot;  TAB</string>
-             </property>
-             <property name="text">
-              <string>are Perpendicular ?</string>
-             </property>
-             <property name="icon">
-              <iconset>
-               <normaloff>../Icons/WF_isPerpendicular.svg</normaloff>../Icons/WF_isPerpendicular.svg</iconset>
-             </property>
-             <property name="iconSize">
-              <size>
-               <width>32</width>
-               <height>32</height>
-              </size>
-             </property>
-            </widget>
-           </item>
            <item row="5" column="0">
             <widget class="QPushButton" name="button_isDistance">
              <property name="toolTip">
@@ -6795,29 +6821,6 @@ Click this button
              </property>
             </widget>
            </item>
-           <item row="7" column="0">
-            <widget class="QPushButton" name="button_isArea">
-             <property name="toolTip">
-              <string>Check for surface Area:
-Area measurement for a Plane or a set of Planes.
-- Select One or several Planes and
-Click this button</string>
-             </property>
-             <property name="text">
-              <string>Area ?</string>
-             </property>
-             <property name="icon">
-              <iconset>
-               <normaloff>../Icons/WF_isArea.svg</normaloff>../Icons/WF_isArea.svg</iconset>
-             </property>
-             <property name="iconSize">
-              <size>
-               <width>32</width>
-               <height>32</height>
-              </size>
-             </property>
-            </widget>
-           </item>
            <item row="2" column="0">
             <widget class="QPushButton" name="button_isCoplanar">
              <property name="toolTip">
@@ -6842,6 +6845,53 @@ NB: You can change the tolerance in &quot;Ori. Pref.&quot;  TAB</string>
              </property>
             </widget>
            </item>
+           <item row="7" column="0">
+            <widget class="QPushButton" name="button_isArea">
+             <property name="toolTip">
+              <string>Check for surface Area:
+Area measurement for a Plane or a set of Planes.
+- Select One or several Planes and
+- Then click this button</string>
+             </property>
+             <property name="text">
+              <string>Area ?</string>
+             </property>
+             <property name="icon">
+              <iconset>
+               <normaloff>../Icons/WF_isArea.svg</normaloff>../Icons/WF_isArea.svg</iconset>
+             </property>
+             <property name="iconSize">
+              <size>
+               <width>32</width>
+               <height>32</height>
+              </size>
+             </property>
+            </widget>
+           </item>
+           <item row="1" column="0">
+            <widget class="QPushButton" name="button_isPerpendicular">
+             <property name="toolTip">
+              <string>Check if two faces or two Edges are Perpendicular:
+- Select the 2 faces/planes or 2 Edges/Lines and
+Click this button
+
+NB: You can change the tolerance in &quot;Ori. Pref.&quot;  TAB</string>
+             </property>
+             <property name="text">
+              <string>are Perpendicular ?</string>
+             </property>
+             <property name="icon">
+              <iconset>
+               <normaloff>../Icons/WF_isPerpendicular.svg</normaloff>../Icons/WF_isPerpendicular.svg</iconset>
+             </property>
+             <property name="iconSize">
+              <size>
+               <width>32</width>
+               <height>32</height>
+              </size>
+             </property>
+            </widget>
+           </item>
            <item row="3" column="0">
             <widget class="QPushButton" name="button_isClearance">
              <property name="toolTip">
@@ -6865,6 +6915,29 @@ Click this button</string>
              </property>
             </widget>
            </item>
+           <item row="8" column="0">
+            <widget class="QPushButton" name="button_isRadius">
+             <property name="toolTip">
+              <string>Check for Radius:
+Radius measurement for a Circle or an Arc.
+- Select One Circle or Arc
+- Then click this button</string>
+             </property>
+             <property name="text">
+              <string>Radius ?</string>
+             </property>
+             <property name="icon">
+              <iconset>
+               <normaloff>../Icons/WF_isRadius.svg</normaloff>../Icons/WF_isRadius.svg</iconset>
+             </property>
+             <property name="iconSize">
+              <size>
+               <width>32</width>
+               <height>32</height>
+              </size>
+             </property>
+            </widget>
+           </item>
           </layout>
          </widget>
         </widget>
diff --git a/WorkFeature/WFGui_2015.py b/WorkFeature/WFGui_2015.py
index 13fb09c..075986e 100644
--- a/WorkFeature/WFGui_2015.py
+++ b/WorkFeature/WFGui_2015.py
@@ -2,8 +2,8 @@
 
 # Form implementation generated from reading ui file 'WFGui_2015.ui'
 #
-# Created: Sat Nov  7 20:09:36 2015
-#      by: PySide UI code generator 4.11.2
+# Created: Sun Dec 13 18:49:39 2015
+#      by: PySide UI code generator 4.11.3
 #
 # WARNING! All changes made in this file will be lost!
 
@@ -636,7 +636,7 @@ class Ui_Form(object):
         self.scrollArea_2.setWidgetResizable(True)
         self.scrollArea_2.setObjectName(_fromUtf8("scrollArea_2"))
         self.scrollAreaWidgetContents_5 = QtGui.QWidget()
-        self.scrollAreaWidgetContents_5.setGeometry(QtCore.QRect(0, 0, 259, 650))
+        self.scrollAreaWidgetContents_5.setGeometry(QtCore.QRect(0, 0, 245, 648))
         self.scrollAreaWidgetContents_5.setObjectName(_fromUtf8("scrollAreaWidgetContents_5"))
         self.gridLayout_76 = QtGui.QGridLayout(self.scrollAreaWidgetContents_5)
         self.gridLayout_76.setObjectName(_fromUtf8("gridLayout_76"))
@@ -1169,8 +1169,8 @@ class Ui_Form(object):
         self.tabWidget_7.addTab(self.tab_16, icon45, _fromUtf8(""))
         self.tab_17 = QtGui.QWidget()
         self.tab_17.setObjectName(_fromUtf8("tab_17"))
-        self.gridLayout_85 = QtGui.QGridLayout(self.tab_17)
-        self.gridLayout_85.setObjectName(_fromUtf8("gridLayout_85"))
+        self.gridLayout_6 = QtGui.QGridLayout(self.tab_17)
+        self.gridLayout_6.setObjectName(_fromUtf8("gridLayout_6"))
         self.frame_9 = QtGui.QFrame(self.tab_17)
         self.frame_9.setFrameShape(QtGui.QFrame.StyledPanel)
         self.frame_9.setFrameShadow(QtGui.QFrame.Raised)
@@ -1209,11 +1209,16 @@ class Ui_Form(object):
         self.button_sweep.setIconSize(QtCore.QSize(32, 32))
         self.button_sweep.setObjectName(_fromUtf8("button_sweep"))
         self.gridLayout_86.addWidget(self.button_sweep, 1, 0, 1, 1)
-        self.gridLayout_85.addWidget(self.frame_9, 0, 0, 1, 1)
+        self.gridLayout_6.addWidget(self.frame_9, 0, 0, 1, 1)
         spacerItem11 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
-        self.gridLayout_85.addItem(spacerItem11, 1, 0, 1, 1)
+        self.gridLayout_6.addItem(spacerItem11, 2, 0, 1, 1)
+        self.button_beam = QtGui.QPushButton(self.tab_17)
         icon47 = QtGui.QIcon()
         icon47.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_Beam.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.button_beam.setIcon(icon47)
+        self.button_beam.setIconSize(QtCore.QSize(32, 32))
+        self.button_beam.setObjectName(_fromUtf8("button_beam"))
+        self.gridLayout_6.addWidget(self.button_beam, 1, 0, 1, 1)
         self.tabWidget_7.addTab(self.tab_17, icon47, _fromUtf8(""))
         self.Plane_Tab1_3 = QtGui.QWidget()
         self.Plane_Tab1_3.setObjectName(_fromUtf8("Plane_Tab1_3"))
@@ -1618,25 +1623,32 @@ class Ui_Form(object):
         self.angle_revolve.setObjectName(_fromUtf8("angle_revolve"))
         self.horizontalLayout_76.addWidget(self.angle_revolve)
         self.gridLayout_5.addLayout(self.horizontalLayout_76, 7, 0, 1, 1)
-        self.button_common = QtGui.QPushButton(self.Objects_Tab2_2)
+        self.button_copy_objects = QtGui.QPushButton(self.Objects_Tab2_2)
         icon67 = QtGui.QIcon()
-        icon67.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_Common.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.button_common.setIcon(icon67)
+        icon67.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_objectCopy.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.button_copy_objects.setIcon(icon67)
+        self.button_copy_objects.setIconSize(QtCore.QSize(32, 32))
+        self.button_copy_objects.setObjectName(_fromUtf8("button_copy_objects"))
+        self.gridLayout_5.addWidget(self.button_copy_objects, 8, 0, 1, 1)
+        self.button_common = QtGui.QPushButton(self.Objects_Tab2_2)
+        icon68 = QtGui.QIcon()
+        icon68.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_Common.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.button_common.setIcon(icon68)
         self.button_common.setIconSize(QtCore.QSize(32, 32))
         self.button_common.setObjectName(_fromUtf8("button_common"))
-        self.gridLayout_5.addWidget(self.button_common, 8, 0, 1, 1)
+        self.gridLayout_5.addWidget(self.button_common, 9, 0, 1, 1)
         self.button_difference = QtGui.QPushButton(self.Objects_Tab2_2)
-        icon68 = QtGui.QIcon()
-        icon68.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_Difference.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.button_difference.setIcon(icon68)
+        icon69 = QtGui.QIcon()
+        icon69.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_Difference.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.button_difference.setIcon(icon69)
         self.button_difference.setIconSize(QtCore.QSize(32, 32))
         self.button_difference.setObjectName(_fromUtf8("button_difference"))
-        self.gridLayout_5.addWidget(self.button_difference, 9, 0, 1, 1)
+        self.gridLayout_5.addWidget(self.button_difference, 10, 0, 1, 1)
         spacerItem14 = QtGui.QSpacerItem(17, 8, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
-        self.gridLayout_5.addItem(spacerItem14, 10, 0, 1, 1)
-        icon69 = QtGui.QIcon()
-        icon69.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_box.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.tabWidget_7.addTab(self.Objects_Tab2_2, icon69, _fromUtf8(""))
+        self.gridLayout_5.addItem(spacerItem14, 11, 0, 1, 1)
+        icon70 = QtGui.QIcon()
+        icon70.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_box.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.tabWidget_7.addTab(self.Objects_Tab2_2, icon70, _fromUtf8(""))
         self.Modif_Tab_2 = QtGui.QWidget()
         self.Modif_Tab_2.setObjectName(_fromUtf8("Modif_Tab_2"))
         self.gridLayout_94 = QtGui.QGridLayout(self.Modif_Tab_2)
@@ -1654,9 +1666,9 @@ class Ui_Form(object):
         sizePolicy.setHeightForWidth(self.button_alignface2view.sizePolicy().hasHeightForWidth())
         self.button_alignface2view.setSizePolicy(sizePolicy)
         self.button_alignface2view.setMaximumSize(QtCore.QSize(220, 16777215))
-        icon70 = QtGui.QIcon()
-        icon70.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_viewAlignFace.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.button_alignface2view.setIcon(icon70)
+        icon71 = QtGui.QIcon()
+        icon71.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_viewAlignFace.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.button_alignface2view.setIcon(icon71)
         self.button_alignface2view.setIconSize(QtCore.QSize(32, 32))
         self.button_alignface2view.setObjectName(_fromUtf8("button_alignface2view"))
         self.gridLayout_95.addWidget(self.button_alignface2view, 0, 0, 1, 1)
@@ -1664,9 +1676,9 @@ class Ui_Form(object):
         self.horizontalLayout_78.setObjectName(_fromUtf8("horizontalLayout_78"))
         self.button_align_faces = QtGui.QPushButton(self.align_tab_2)
         self.button_align_faces.setMaximumSize(QtCore.QSize(220, 16777215))
-        icon71 = QtGui.QIcon()
-        icon71.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_objectAlignFaces.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.button_align_faces.setIcon(icon71)
+        icon72 = QtGui.QIcon()
+        icon72.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_objectAlignFaces.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.button_align_faces.setIcon(icon72)
         self.button_align_faces.setIconSize(QtCore.QSize(32, 32))
         self.button_align_faces.setObjectName(_fromUtf8("button_align_faces"))
         self.horizontalLayout_78.addWidget(self.button_align_faces)
@@ -1685,9 +1697,9 @@ class Ui_Form(object):
         self.horizontalLayout_79.setObjectName(_fromUtf8("horizontalLayout_79"))
         self.button_align_edges = QtGui.QPushButton(self.align_tab_2)
         self.button_align_edges.setMaximumSize(QtCore.QSize(220, 16777215))
-        icon72 = QtGui.QIcon()
-        icon72.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_objectAlignAxes.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.button_align_edges.setIcon(icon72)
+        icon73 = QtGui.QIcon()
+        icon73.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_objectAlignAxes.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.button_align_edges.setIcon(icon73)
         self.button_align_edges.setIconSize(QtCore.QSize(32, 32))
         self.button_align_edges.setObjectName(_fromUtf8("button_align_edges"))
         self.horizontalLayout_79.addWidget(self.button_align_edges)
@@ -1705,16 +1717,16 @@ class Ui_Form(object):
         spacerItem15 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
         self.gridLayout_95.addItem(spacerItem15, 5, 0, 1, 1)
         self.button_joint_points = QtGui.QPushButton(self.align_tab_2)
-        icon73 = QtGui.QIcon()
-        icon73.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_objectJointPoints.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.button_joint_points.setIcon(icon73)
+        icon74 = QtGui.QIcon()
+        icon74.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_objectJointPoints.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.button_joint_points.setIcon(icon74)
         self.button_joint_points.setIconSize(QtCore.QSize(32, 32))
         self.button_joint_points.setObjectName(_fromUtf8("button_joint_points"))
         self.gridLayout_95.addWidget(self.button_joint_points, 3, 0, 1, 1)
         self.button_joint_faces = QtGui.QPushButton(self.align_tab_2)
-        icon74 = QtGui.QIcon()
-        icon74.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_objectJointFaces.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.button_joint_faces.setIcon(icon74)
+        icon75 = QtGui.QIcon()
+        icon75.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_objectJointFaces.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.button_joint_faces.setIcon(icon75)
         self.button_joint_faces.setIconSize(QtCore.QSize(32, 32))
         self.button_joint_faces.setObjectName(_fromUtf8("button_joint_faces"))
         self.gridLayout_95.addWidget(self.button_joint_faces, 4, 0, 1, 1)
@@ -1884,9 +1896,9 @@ class Ui_Form(object):
         self.ObjRot_button_select_axis.setMaximumSize(QtCore.QSize(80, 16777215))
         self.ObjRot_button_select_axis.setObjectName(_fromUtf8("ObjRot_button_select_axis"))
         self.gridLayout_105.addWidget(self.ObjRot_button_select_axis, 1, 0, 1, 1)
-        icon75 = QtGui.QIcon()
-        icon75.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_rotationAxis.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.tabWidget_10.addTab(self.tab_18, icon75, _fromUtf8(""))
+        icon76 = QtGui.QIcon()
+        icon76.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_rotationAxis.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.tabWidget_10.addTab(self.tab_18, icon76, _fromUtf8(""))
         self.tab_19 = QtGui.QWidget()
         self.tab_19.setObjectName(_fromUtf8("tab_19"))
         self.gridLayout_106 = QtGui.QGridLayout(self.tab_19)
@@ -1913,9 +1925,9 @@ class Ui_Form(object):
         self.ObjRot_button_select_center.setMaximumSize(QtCore.QSize(80, 16777215))
         self.ObjRot_button_select_center.setObjectName(_fromUtf8("ObjRot_button_select_center"))
         self.gridLayout_106.addWidget(self.ObjRot_button_select_center, 1, 0, 1, 1)
-        icon76 = QtGui.QIcon()
-        icon76.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_rotationPoint.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.tabWidget_10.addTab(self.tab_19, icon76, _fromUtf8(""))
+        icon77 = QtGui.QIcon()
+        icon77.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_rotationPoint.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.tabWidget_10.addTab(self.tab_19, icon77, _fromUtf8(""))
         self.gridLayout_104.addWidget(self.tabWidget_10, 1, 0, 1, 1)
         self.groupBox_21 = QtGui.QGroupBox(self.frame_11)
         self.groupBox_21.setMinimumSize(QtCore.QSize(150, 67))
@@ -1951,9 +1963,9 @@ class Ui_Form(object):
         self.ObjRot_button_select_angle.setMaximumSize(QtCore.QSize(80, 16777215))
         self.ObjRot_button_select_angle.setObjectName(_fromUtf8("ObjRot_button_select_angle"))
         self.gridLayout_109.addWidget(self.ObjRot_button_select_angle, 0, 0, 1, 1)
-        icon77 = QtGui.QIcon()
-        icon77.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_click.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.tabWidget_11.addTab(self.tab_21, icon77, _fromUtf8(""))
+        icon78 = QtGui.QIcon()
+        icon78.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_click.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.tabWidget_11.addTab(self.tab_21, icon78, _fromUtf8(""))
         self.gridLayout_107.addWidget(self.tabWidget_11, 0, 0, 1, 1)
         self.horizontalLayout_81 = QtGui.QHBoxLayout()
         self.horizontalLayout_81.setObjectName(_fromUtf8("horizontalLayout_81"))
@@ -2102,9 +2114,9 @@ class Ui_Form(object):
         self.gridLayout_114.addLayout(self.gridLayout_117, 2, 0, 1, 1)
         self.gridLayout_113.addLayout(self.gridLayout_114, 2, 0, 1, 1)
         self.gridLayout_112.addWidget(self.groupBox_22, 0, 0, 1, 1)
-        icon78 = QtGui.QIcon()
-        icon78.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_startPoint.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.tabWidget_12.addTab(self.tab_22, icon78, _fromUtf8(""))
+        icon79 = QtGui.QIcon()
+        icon79.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_startPoint.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.tabWidget_12.addTab(self.tab_22, icon79, _fromUtf8(""))
         self.tab_23 = QtGui.QWidget()
         self.tab_23.setObjectName(_fromUtf8("tab_23"))
         self.gridLayout_118 = QtGui.QGridLayout(self.tab_23)
@@ -2179,9 +2191,9 @@ class Ui_Form(object):
         self.gridLayout_120.addLayout(self.gridLayout_123, 0, 0, 1, 1)
         self.gridLayout_119.addLayout(self.gridLayout_120, 2, 0, 1, 1)
         self.gridLayout_118.addWidget(self.groupBox_23, 0, 0, 1, 1)
-        icon79 = QtGui.QIcon()
-        icon79.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_endPoint.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.tabWidget_12.addTab(self.tab_23, icon79, _fromUtf8(""))
+        icon80 = QtGui.QIcon()
+        icon80.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_endPoint.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.tabWidget_12.addTab(self.tab_23, icon80, _fromUtf8(""))
         self.gridLayout_111.addWidget(self.tabWidget_12, 2, 0, 1, 1)
         self.horizontalLayout_84 = QtGui.QHBoxLayout()
         self.horizontalLayout_84.setObjectName(_fromUtf8("horizontalLayout_84"))
@@ -2215,65 +2227,58 @@ class Ui_Form(object):
         sizePolicy.setHeightForWidth(self.button_alignview.sizePolicy().hasHeightForWidth())
         self.button_alignview.setSizePolicy(sizePolicy)
         self.button_alignview.setMaximumSize(QtCore.QSize(16777215, 16777215))
-        icon80 = QtGui.QIcon()
-        icon80.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_viewAlign.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.button_alignview.setIcon(icon80)
+        icon81 = QtGui.QIcon()
+        icon81.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_viewAlign.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.button_alignview.setIcon(icon81)
         self.button_alignview.setIconSize(QtCore.QSize(32, 32))
         self.button_alignview.setObjectName(_fromUtf8("button_alignview"))
         self.gridLayout_124.addWidget(self.button_alignview, 0, 0, 1, 1)
         spacerItem22 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
         self.gridLayout_124.addItem(spacerItem22, 2, 0, 1, 1)
         self.button_trackcamera = QtGui.QPushButton(self.View_Tab_2)
-        icon81 = QtGui.QIcon()
-        icon81.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_trackCamera.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.button_trackcamera.setIcon(icon81)
+        icon82 = QtGui.QIcon()
+        icon82.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_trackCamera.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.button_trackcamera.setIcon(icon82)
         self.button_trackcamera.setIconSize(QtCore.QSize(32, 32))
         self.button_trackcamera.setObjectName(_fromUtf8("button_trackcamera"))
         self.gridLayout_124.addWidget(self.button_trackcamera, 1, 0, 1, 1)
-        icon82 = QtGui.QIcon()
-        icon82.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_view.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.tabWidget_7.addTab(self.View_Tab_2, icon82, _fromUtf8(""))
+        icon83 = QtGui.QIcon()
+        icon83.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_view.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.tabWidget_7.addTab(self.View_Tab_2, icon83, _fromUtf8(""))
         self.tab_24 = QtGui.QWidget()
         self.tab_24.setObjectName(_fromUtf8("tab_24"))
         self.gridLayout_125 = QtGui.QGridLayout(self.tab_24)
         self.gridLayout_125.setObjectName(_fromUtf8("gridLayout_125"))
-        spacerItem23 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
-        self.gridLayout_125.addItem(spacerItem23, 9, 0, 1, 1)
         self.button_isView = QtGui.QPushButton(self.tab_24)
-        icon83 = QtGui.QIcon()
-        icon83.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_FCCamera_02.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.button_isView.setIcon(icon83)
+        icon84 = QtGui.QIcon()
+        icon84.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_FCCamera_02.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.button_isView.setIcon(icon84)
         self.button_isView.setIconSize(QtCore.QSize(32, 32))
         self.button_isView.setObjectName(_fromUtf8("button_isView"))
-        self.gridLayout_125.addWidget(self.button_isView, 8, 0, 1, 1)
+        self.gridLayout_125.addWidget(self.button_isView, 9, 0, 1, 1)
+        spacerItem23 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
+        self.gridLayout_125.addItem(spacerItem23, 10, 0, 1, 1)
         self.button_isParallel = QtGui.QPushButton(self.tab_24)
-        icon84 = QtGui.QIcon()
-        icon84.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_isParallel.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.button_isParallel.setIcon(icon84)
+        icon85 = QtGui.QIcon()
+        icon85.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_isParallel.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.button_isParallel.setIcon(icon85)
         self.button_isParallel.setIconSize(QtCore.QSize(32, 32))
         self.button_isParallel.setObjectName(_fromUtf8("button_isParallel"))
         self.gridLayout_125.addWidget(self.button_isParallel, 0, 0, 1, 1)
         self.button_isAngle = QtGui.QPushButton(self.tab_24)
-        icon85 = QtGui.QIcon()
-        icon85.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_angleBetween.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.button_isAngle.setIcon(icon85)
+        icon86 = QtGui.QIcon()
+        icon86.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_angleBetween.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.button_isAngle.setIcon(icon86)
         self.button_isAngle.setIconSize(QtCore.QSize(32, 32))
         self.button_isAngle.setObjectName(_fromUtf8("button_isAngle"))
         self.gridLayout_125.addWidget(self.button_isAngle, 4, 0, 1, 1)
         self.button_isLength = QtGui.QPushButton(self.tab_24)
-        icon86 = QtGui.QIcon()
-        icon86.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_isLength.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.button_isLength.setIcon(icon86)
+        icon87 = QtGui.QIcon()
+        icon87.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_isLength.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.button_isLength.setIcon(icon87)
         self.button_isLength.setIconSize(QtCore.QSize(32, 32))
         self.button_isLength.setObjectName(_fromUtf8("button_isLength"))
         self.gridLayout_125.addWidget(self.button_isLength, 6, 0, 1, 1)
-        self.button_isPerpendicular = QtGui.QPushButton(self.tab_24)
-        icon87 = QtGui.QIcon()
-        icon87.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_isPerpendicular.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.button_isPerpendicular.setIcon(icon87)
-        self.button_isPerpendicular.setIconSize(QtCore.QSize(32, 32))
-        self.button_isPerpendicular.setObjectName(_fromUtf8("button_isPerpendicular"))
-        self.gridLayout_125.addWidget(self.button_isPerpendicular, 1, 0, 1, 1)
         self.button_isDistance = QtGui.QPushButton(self.tab_24)
         icon88 = QtGui.QIcon()
         icon88.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_distanceBetween.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
@@ -2281,30 +2286,44 @@ class Ui_Form(object):
         self.button_isDistance.setIconSize(QtCore.QSize(32, 32))
         self.button_isDistance.setObjectName(_fromUtf8("button_isDistance"))
         self.gridLayout_125.addWidget(self.button_isDistance, 5, 0, 1, 1)
-        self.button_isArea = QtGui.QPushButton(self.tab_24)
-        icon89 = QtGui.QIcon()
-        icon89.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_isArea.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.button_isArea.setIcon(icon89)
-        self.button_isArea.setIconSize(QtCore.QSize(32, 32))
-        self.button_isArea.setObjectName(_fromUtf8("button_isArea"))
-        self.gridLayout_125.addWidget(self.button_isArea, 7, 0, 1, 1)
         self.button_isCoplanar = QtGui.QPushButton(self.tab_24)
-        icon90 = QtGui.QIcon()
-        icon90.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_isCoplanar.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.button_isCoplanar.setIcon(icon90)
+        icon89 = QtGui.QIcon()
+        icon89.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_isCoplanar.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.button_isCoplanar.setIcon(icon89)
         self.button_isCoplanar.setIconSize(QtCore.QSize(32, 32))
         self.button_isCoplanar.setObjectName(_fromUtf8("button_isCoplanar"))
         self.gridLayout_125.addWidget(self.button_isCoplanar, 2, 0, 1, 1)
-        self.button_isClearance = QtGui.QPushButton(self.tab_24)
+        self.button_isArea = QtGui.QPushButton(self.tab_24)
+        icon90 = QtGui.QIcon()
+        icon90.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_isArea.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.button_isArea.setIcon(icon90)
+        self.button_isArea.setIconSize(QtCore.QSize(32, 32))
+        self.button_isArea.setObjectName(_fromUtf8("button_isArea"))
+        self.gridLayout_125.addWidget(self.button_isArea, 7, 0, 1, 1)
+        self.button_isPerpendicular = QtGui.QPushButton(self.tab_24)
         icon91 = QtGui.QIcon()
-        icon91.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_isClearance.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.button_isClearance.setIcon(icon91)
+        icon91.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_isPerpendicular.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.button_isPerpendicular.setIcon(icon91)
+        self.button_isPerpendicular.setIconSize(QtCore.QSize(32, 32))
+        self.button_isPerpendicular.setObjectName(_fromUtf8("button_isPerpendicular"))
+        self.gridLayout_125.addWidget(self.button_isPerpendicular, 1, 0, 1, 1)
+        self.button_isClearance = QtGui.QPushButton(self.tab_24)
+        icon92 = QtGui.QIcon()
+        icon92.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_isClearance.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.button_isClearance.setIcon(icon92)
         self.button_isClearance.setIconSize(QtCore.QSize(32, 32))
         self.button_isClearance.setObjectName(_fromUtf8("button_isClearance"))
         self.gridLayout_125.addWidget(self.button_isClearance, 3, 0, 1, 1)
-        icon92 = QtGui.QIcon()
-        icon92.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_check.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
-        self.tabWidget_7.addTab(self.tab_24, icon92, _fromUtf8(""))
+        self.button_isRadius = QtGui.QPushButton(self.tab_24)
+        icon93 = QtGui.QIcon()
+        icon93.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_isRadius.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.button_isRadius.setIcon(icon93)
+        self.button_isRadius.setIconSize(QtCore.QSize(32, 32))
+        self.button_isRadius.setObjectName(_fromUtf8("button_isRadius"))
+        self.gridLayout_125.addWidget(self.button_isRadius, 8, 0, 1, 1)
+        icon94 = QtGui.QIcon()
+        icon94.addPixmap(QtGui.QPixmap(_fromUtf8("icons:WF_check.svg")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
+        self.tabWidget_7.addTab(self.tab_24, icon94, _fromUtf8(""))
         self.gridLayout_128.addWidget(self.tabWidget_7, 0, 0, 1, 1)
         self.scrollArea.setWidget(self.scrollAreaWidgetContents)
         self.gridLayout_34.addWidget(self.scrollArea, 0, 0, 1, 1)
@@ -2321,7 +2340,7 @@ class Ui_Form(object):
         self.gridLayout_34.addLayout(self.horizontalLayout_43, 1, 0, 1, 1)
 
         self.retranslateUi(Form)
-        self.tabWidget_7.setCurrentIndex(4)
+        self.tabWidget_7.setCurrentIndex(7)
         self.point_loc_comboBox.setCurrentIndex(1)
         self.tabWidget_8.setCurrentIndex(0)
         self.transition_comboBox.setCurrentIndex(2)
@@ -2637,7 +2656,8 @@ class Ui_Form(object):
 "- Second push this button\n"
 "\n"
 "NB: \n"
-" - The percentage of  the extension can be defined first.", None))
+" - The percentage of  the extension can be defined first.\n"
+" - Negative percentage will shrink the Axis", None))
         self.button_extension_axis.setText(_translate("Form", "Enlarge(Axis)", None))
         self.extension_axis.setToolTip(_translate("Form", "Extension of the Line in percentage of original length of the Line.\n"
 "If the extension is 50% it means that each side is extended with 25% length.\n"
@@ -2696,7 +2716,7 @@ class Ui_Form(object):
         self.ParCurve_button_store_2.setText(_translate("Form", "Store", None))
         self.ParCurve_button_apply_2.setToolTip(_translate("Form", "Click to visualize the curve.", None))
         self.ParCurve_button_apply_2.setText(_translate("Form", "Apply", None))
-        self.tabWidget_8.setTabText(self.tabWidget_8.indexOf(self.tab_14), _translate("Form", "2D", None))
+        self.tabWidget_8.setTabText(self.tabWidget_8.indexOf(self.tab_14), _translate("Form", "Parametric 2D", None))
         self.ParCurve_comboBox_3.setToolTip(_translate("Form", "Choose another curve from the list.", None))
         self.ParCurve_button_edit_3.setToolTip(_translate("Form", "Click to access to a table where you can edit all parameters of all curves and \n"
 "save your custom curves.", None))
@@ -2734,7 +2754,7 @@ class Ui_Form(object):
         self.ParCurve_button_store_3.setText(_translate("Form", "Store", None))
         self.ParCurve_button_apply_3.setToolTip(_translate("Form", "Click to visualize the curve.", None))
         self.ParCurve_button_apply_3.setText(_translate("Form", "Apply", None))
-        self.tabWidget_8.setTabText(self.tabWidget_8.indexOf(self.tab_15), _translate("Form", "3D", None))
+        self.tabWidget_8.setTabText(self.tabWidget_8.indexOf(self.tab_15), _translate("Form", "Parametric 3D", None))
         self.tabWidget_7.setTabText(self.tabWidget_7.indexOf(self.Wire_Tab_2), _translate("Form", "Wire", None))
         self.button_linecenter_circle.setToolTip(_translate("Form", "Select an Axis and a Point to create a Circle\n"
 "centered on the Point, perpendicular to the Axis \n"
@@ -2807,6 +2827,14 @@ class Ui_Form(object):
 "#     0 (default), 1 (right corners) or 2 (rounded corners).)\n"
 "", None))
         self.button_sweep.setText(_translate("Form", "Section Sweep", None))
+        self.button_beam.setToolTip(_translate("Form", "Beam:\n"
+"Will extrude a Section along a Linear Trajectory.\n"
+"- Select first one Section wire (Closed wire will generate volumes by default)\n"
+"(This Section can be a compound from sketch to realize \"tube\")\n"
+"- Select one or several wire(s) as Trajectory(ies)\n"
+"- Then push this button\n"
+"", None))
+        self.button_beam.setText(_translate("Form", "Beam", None))
         self.tabWidget_7.setTabText(self.tabWidget_7.indexOf(self.tab_17), _translate("Form", "Sweeping", None))
         self.button_click_for_plane.setToolTip(_translate("Form", "Click:\n"
 "Create a rectangular Plane perpendicular to the view at location of one mouse click.\n"
@@ -2994,6 +3022,11 @@ class Ui_Form(object):
         self.button_revolve.setText(_translate("Form", "Revolve", None))
         self.angle_revolve.setToolTip(_translate("Form", "Angle of the revolution in degrees.", None))
         self.angle_revolve.setText(_translate("Form", "360", None))
+        self.button_copy_objects.setToolTip(_translate("Form", "Duplicate:\n"
+"Make a copy of an object or a selected subObject part:\n"
+"- Select one or several object(s) or subobject(s)\n"
+"- Then push this button", None))
+        self.button_copy_objects.setText(_translate("Form", "Duplicate", None))
         self.button_common.setToolTip(_translate("Form", "Compute the common parts between selected shapes.\n"
 "- Select at least two objects and click.\n"
 "\n"
@@ -3287,34 +3320,39 @@ class Ui_Form(object):
 "Click this button\n"
 " ", None))
         self.button_isLength.setText(_translate("Form", "Length ?", None))
-        self.button_isPerpendicular.setToolTip(_translate("Form", "Check if two faces or two Edges are Perpendicular:\n"
-"- Select the 2 faces/planes or 2 Edges/Lines and\n"
-"Click this button\n"
-"\n"
-"NB: You can change the tolerance in \"Ori. Pref.\"  TAB", None))
-        self.button_isPerpendicular.setText(_translate("Form", "are Perpendicular ?", None))
         self.button_isDistance.setToolTip(_translate("Form", "Check for two Points distance:\n"
 "Distances measurement and Delta values (on main Axes) between two Points\n"
 "- Select the 2 Points and\n"
 "Click this button\n"
 " ", None))
         self.button_isDistance.setText(_translate("Form", "Distance ?", None))
-        self.button_isArea.setToolTip(_translate("Form", "Check for surface Area:\n"
-"Area measurement for a Plane or a set of Planes.\n"
-"- Select One or several Planes and\n"
-"Click this button", None))
-        self.button_isArea.setText(_translate("Form", "Area ?", None))
         self.button_isCoplanar.setToolTip(_translate("Form", "Check if two faces or two Edges are Coplanar:\n"
 "- Select the 2 faces/planes or 2 Edges/Lines and\n"
 "Click this button\n"
 "\n"
 "NB: You can change the tolerance in \"Ori. Pref.\"  TAB", None))
         self.button_isCoplanar.setText(_translate("Form", "are Coplanar ?", None))
+        self.button_isArea.setToolTip(_translate("Form", "Check for surface Area:\n"
+"Area measurement for a Plane or a set of Planes.\n"
+"- Select One or several Planes and\n"
+"- Then click this button", None))
+        self.button_isArea.setText(_translate("Form", "Area ?", None))
+        self.button_isPerpendicular.setToolTip(_translate("Form", "Check if two faces or two Edges are Perpendicular:\n"
+"- Select the 2 faces/planes or 2 Edges/Lines and\n"
+"Click this button\n"
+"\n"
+"NB: You can change the tolerance in \"Ori. Pref.\"  TAB", None))
+        self.button_isPerpendicular.setText(_translate("Form", "are Perpendicular ?", None))
         self.button_isClearance.setToolTip(_translate("Form", "Check for two Objects Clearance distance:\n"
 "Quick measurements between parallel faces and similarly placed objects\n"
 "- Select the 2 Objects and\n"
 "Click this button", None))
         self.button_isClearance.setText(_translate("Form", "Distance Clearance ?", None))
+        self.button_isRadius.setToolTip(_translate("Form", "Check for Radius:\n"
+"Radius measurement for a Circle or an Arc.\n"
+"- Select One Circle or Arc\n"
+"- Then click this button", None))
+        self.button_isRadius.setText(_translate("Form", "Radius ?", None))
         self.tabWidget_7.setTabText(self.tabWidget_7.indexOf(self.tab_24), _translate("Form", "Check", None))
         self.button_WF_quit.setText(_translate("Form", "Close", None))
         self.label_release.setText(_translate("Form", "2015", None))
diff --git a/WorkFeature/WF_2015.py b/WorkFeature/WF_2015.py
index 1f9d8a1..3689398 100644
--- a/WorkFeature/WF_2015.py
+++ b/WorkFeature/WF_2015.py
@@ -14,6 +14,7 @@
 *   - Ulrich Brammer for Geodesic dome code                               *
 *   - Wmayer Many Thanks for active help on testing and debbuging         *
 *   - Gaƫl Ecorchard for HighlightDifference Macro                        *
+*   - lorenz_l for Beam tool Macro                                        *
 *   Special thanks to Mario52 for diverse MACRO codes as FCCamera,        *
 *   cutCircle, cutWire, Delta xyz, bounding box ...                       *
 *   and other diverse pieces of codes                                     * 
@@ -54,7 +55,7 @@
 # First two lines to be able to launch with python
 import sys
 from WorkFeature import WF_ObjParCurve_2015
-# change this by your own FreeCAD lib path import FreeCAD
+# Change this by your own FreeCAD lib path to import FreeCAD
 if not sys.path.__contains__("/usr/lib/freecad/lib"): 
     sys.path.append("/usr/lib/freecad/lib")     
  
@@ -64,7 +65,7 @@ from   WF_Utils_2015 import *
 from   WF_ObjParCurve_2015 import *
 
 global myRelease
-myRelease = "2015_11_08"
+myRelease = "2015_12_16"
 
 import os.path
 import time
@@ -380,7 +381,7 @@ def get_typefromSelection(objectType="Edge", info=0):
             if info != 0:
                 print("SubObject  = " + str(SubObject))
                 print("SubObject.ShapeType  = " + str(SubObject.ShapeType))
-            if SubObject.ShapeType == "Edge":
+            if SubObject.ShapeType == objectType:
                 m_found = True
                 break
     if m_found:
@@ -444,7 +445,6 @@ def get_InfoObjects(info=0, printError=True):
                   ", m_objNames=" + str(m_objNames))
     return m_num, m_selEx, m_objs, m_objNames
 
-
 def reset_SelectedObjects(Selection, info=0):
     """ Reset the selection changed by Draft.rotate for example
     Selection is the original selection you want to reset. Must be saved before any
@@ -515,7 +515,6 @@ def get_SelectedObjectsWithParent(info=0, printError=True):
         printError_msg("No active document !")
     return 
 
-
 def get_SelectedObjects(info=0, printError=True):
     """ Return selected objects as
         Selection = (Number_of_Points, Number_of_Edges, Number_of_Planes,
@@ -717,7 +716,6 @@ def getEdgeType(edge):
     except:
         return "Unknown"
         
-
 def getShapeType(subObject):
     try:       
         if isinstance(subObject,Part.Edge):
@@ -733,9 +731,8 @@ def getShapeType(subObject):
     except:
         return "Unknown"
 
-
 def definePropOfActiveObj():
-    Gui.activeDocument().activeObject().LineColor = (red, green, blue)
+    Gui.activeDocument().activeObject().LineColor = (1.00,0.67,0.00)
     Gui.activeDocument().activeObject().ShapeColor = (0.33,1.00,1.00)
     Gui.activeDocument().activeObject().Transparency = (50)
     
@@ -747,7 +744,6 @@ def addObjectToGrp(obj,grp,info=0):
     if info != 0:
         print_msg("Object " + str(m_obj) + " added to Group : " + str(m_grp))
     
-
 def addObjectToGrp2(obj,grp,info=0):
     m_obj = obj
     m_grp = grp
@@ -911,6 +907,7 @@ def minMaxObjectsLimits(objs,info=0):
     return xmax, xmin, ymax, ymin, zmax, zmin
 
 
+
 def baseObjectPoint(obj,info=0):
     """ Return the base point of selected Object.
     """
@@ -921,7 +918,6 @@ def baseObjectPoint(obj,info=0):
         print_point(base,"Base of object selected is :")           
     return base
 
-
 def meanVectorsPoint(vertx,info=0):
     """ Return the mean point of all selected Vectors. 
     """
@@ -955,7 +951,6 @@ def meanVectorsPoint(vertx,info=0):
         print_point(mean,"Mean of all vectors selected is : ")
     return mean
             
-
 def centerBBVectorsPoint(vertx,info=0):
     """ Return the center point of the bounding box of all selected Vectors. 
     """
@@ -1037,7 +1032,6 @@ def distanceBetween(A, B):
     except Part.OCCError:
         return 0.0
    
-
 def angleBetween(e1, e2):
     """ Return the angle (in degrees) between 2 edges.
     """
@@ -1636,7 +1630,6 @@ def attachPoint(*argc):
     if msg != 0:
         print_msg("argc is " + str(*argc) + " and Attach point " + str(m_attach_point) + " selected !")    
 
-
 def intersecPlanePlane(Plane_Normal1, Plane_Point1, Plane_Normal2, Plane_Point2, info=0): 
     """ Return the intersection Line between two Planes.
     """
@@ -2047,6 +2040,9 @@ def plot_sweep(traj, section, makeSolid=True, isFrenet=True, transition=2 , part
 def bounding_box(grp,ori_X,ori_Y,ori_Z,length_X,length_Y,length_Z,createVol=False,info=0):
     """ Create a bounding box.
     """
+    global verbose
+    msg=verbose
+    
     m_grp = grp
     m_l_X = length_X
     m_l_Y = length_Y
@@ -6672,10 +6668,10 @@ def plot_boundingBoxes():
             m_grp=m_actDoc.getObject( str(m_dir) )
             # Create a solid out of the shells of a shape
             try:
-              m_s = m_obj.Shape
+                m_s = m_obj.Shape
             except:
-              printError_msg( "This object has no attribute 'Shape' !\nSelect another one !\n")
-              break
+                printError_msg( "This object has no attribute 'Shape' !\nSelect another one !\n")
+                break
             # Get a boundBox A bounding box is an orthographic cube which is a way to describe outer boundaries
             m_boundBox = m_s.BoundBox
             if msg != 0:
@@ -7727,7 +7723,7 @@ def plot_sectionSweep():
     "INCORRECT Object(s) Selection :\n" +\
     "First select the wire you want as section for Section Sweep (must be closed for solid creation!)\n" +\
     "Then select the second wire for the trajectory of the Sweep !"
-    result_msg = " : Section Sweep created !"
+    result_msg = " : Section Sweep created into WorkFeatures/WorkObjects!"
     name = "SectionSweep"
     part = "Part::Feature"
 
@@ -7909,7 +7905,54 @@ def plot_sectionSweep():
 
     except:
         printError_msg(error_msg)
+        
+        
+def plot_sectionBeam():
+    """Section Beam:
+    """
+    import WorkFeature.Beam.beam as BM
+    msg=verbose
+    msg=1
     
+    createFolders('WorkObjects')
+    error_msg =\
+    "INCORRECT Object(s) Selection :\n" +\
+    "First select the wire you want as section for Section Beam \n" +\
+    "Then select the second wire for the strait path trajectory of the Beam !"
+    result_msg = " : Section Beam created into WorkFeatures/WorkObjects!"
+    name = "Beam"
+    part = "Part::FeaturePython"
+    
+    m_actDoc=App.activeDocument()
+    if m_actDoc.Name:     
+        m_sel = Gui.Selection.getSelection(m_actDoc.Name)
+        m_selEx = Gui.Selection.getSelectionEx(m_actDoc.Name)
+    else:
+        return
+        
+    try:
+        m_profile = m_sel[0]
+        if msg != 0: 
+            print_msg("m_profile !" + str(m_profile))
+            print_msg("m_selEx !" + str(m_selEx))
+        for m_path_selected in m_selEx[1:]:
+            m_path = m_path_selected.Object
+            #m_path_name = m_path_selected.SubElementNames[0]
+            for m_path_name in m_path_selected.SubElementNames:
+                if msg != 0: 
+                    print_msg("m_path !" + str(m_path))
+                    print_msg("m_path_name !" + str(m_path_name)) 
+                m_beam = App.ActiveDocument.addObject(part,name)
+                BM.Beam(m_beam, m_profile, m_path, m_path_name)
+                BM.ViewProviderBeam(m_beam.ViewObject)
+                App.ActiveDocument.getObject( 'WorkObjects' ).addObject(m_beam)
+            
+        App.ActiveDocument.recompute()
+        print_msg(m_beam.Label + str(result_msg))
+    except:
+        printError_msg(error_msg)
+     
+      
 def plot_sectionSweep2():
     """
     Beam Sweep:
@@ -9306,6 +9349,7 @@ def line_length():
     msg=verbose
             
     error_msg = "INCORRECT Object(s) Selection :\n\nYou Must Select One Line !"
+    m_length = None
     
     Selection = get_SelectedObjects(info=msg, printError=False)
     try:
@@ -9337,24 +9381,73 @@ def line_length():
         if msg!=0:
             print_msg("Distance is : " + str(m_dist))
             
+        if hasattr(edge, 'Length'):
+            m_length = edge.Length
+            
         msg=\
         "Begin : X1 "+str(pos_X1)+" Y1: "+str(pos_Y1)+" Z1: "+str(pos_Z1)+"\n\n" +\
         "End : X2 "+str(pos_X2)+" Y2: "+str(pos_Y2)+" Z2: "+str(pos_Z2)+"\n\n" +\
         "Delta X : "+str(abs(pos_X1-pos_X2))+"\n" +\
         "Delta Y : "+str(abs(pos_Y1-pos_Y2))+"\n" +\
         "Delta Z : "+str(abs(pos_Z1-pos_Z2))+"\n\n" +\
-        "Distance : " + str(m_dist)        
+        "Distance : " + str(m_dist)+"\n\n"
+        
+        if m_length:
+            msg+="Length along edge/arc : " + str(m_length)
+                  
 
         print_gui_msg(msg)
     except:
         printError_msg(error_msg)
 
+
+def object_radius():
+    """
+    Check for Radius:
+
+    """
+    msg=verbose
+    error_msg = "INCORRECT Object(s) Selection :\n\nYou Must Select One Arc!"
+    
+    Selection = Gui.Selection.getSelectionEx()
+
+    try:
+        result = "Radius :"
+        m_found = False
+        for m_sel in Selection:
+            m_name = m_sel.ObjectName
+            if hasattr(m_sel, 'SubObjects'):                 
+                for m_sub,m_sub_name in zip(m_sel.SubObjects,m_sel.SubElementNames):
+                    if hasattr(m_sub, 'Curve'):  
+                        r = m_sub.Curve
+                        if hasattr(r, 'Radius'):
+                            m_radius = r.Radius
+                            result += "\nObject : " + str(m_name) + "." + str(m_sub_name)
+                            result += "\nRadius is " + str(m_radius)
+                            m_found = True
+            else:
+                if hasattr(m_sel, 'Curve'):
+                    r = m_sel.Curve
+                    if hasattr(r, 'Radius'):
+                        m_radius = r.Radius
+                        result += "\nObject : " + str(m_name) 
+                        result += "\nRadius is " + str(m_radius)
+                        m_found = True
+
         
+        if m_found:
+            print_gui_msg(result)
+        else :
+            printError_msg(error_msg)
+    except:
+        printError_msg(error_msg)
+        
+           
 def plane_area():
     """
     Check for surface Area:
         Area measurement for a Plane or a set of Planes.
-        - Select One or several Planes and
+        - Select One or several Face(s)
 
     """
     msg=verbose
@@ -9745,6 +9838,82 @@ def angleAlignFaces(value):
     except ValueError:
         printError_msg("Angle must be valid number !")
         
+               
+def object_copy():
+    """
+    Duplicate:
+    Make a copy of an object or a selected subObject part:
+    - Select one or several object(s) or subobject(s)
+       
+    Original code from Macro_ReproWire
+    Authors = 2015 Mario52
+    """
+    msg=verbose
+    msg=1
+            
+    error_msg = "INCORRECT Object(s) Selection :\n\nYou Must Select at least one Object !"
+    
+    sel = Gui.Selection.getSelection()
+    s  = Gui.Selection.getSelectionEx()
+    
+    try:
+        if len(sel) != 0:
+#            print "Object(s) : ", len(sel), " , SubObject(s) : ", len(s)
+            i2 = ii2 = -1 
+            for i in s:
+                i2 += 1
+                ii2 = -1
+                try:
+                    FreeCADGui.Selection.getSelectionEx()[i2].SubObjects[ii2]
+                    for ii in i.SubElementNames:
+#                        print "SubObject"
+                        ii2 += 1
+                        # create repro shape subObject
+                        Part.show(FreeCADGui.Selection.getSelectionEx()[i2].SubObjects[ii2].copy())   
+                        # display the info SubObject
+                        print i2+1 ,"/", ii2+1 ,"/", len(s) ," ", i.ObjectName ," ", ii               
+                        
+                        a = App.ActiveDocument.ActiveObject
+                        # Label for the repro shape
+                        #          object Name  / original object Name / SubObject Name
+                        a.Label = a.Name + " " + i.ObjectName + " " + ii                              
+                        try:
+                            # give LineColor
+                            FreeCADGui.activeDocument().activeObject().LineColor  = (1.0,0.0,0.0)
+                            # give PointColor     
+                            FreeCADGui.activeDocument().activeObject().PointColor = (1.0,0.0,0.0)     
+                            # give ShapeColor
+                            FreeCADGui.activeDocument().activeObject().ShapeColor = (1.0,0.0,0.0)     
+                            
+                        except Exception:
+                            None
+                except Exception:
+#                    print "Not SubObject"
+                    # create repro shape object
+                    Part.show(sel[i2].Shape)                                                          
+                    # display the info SubObject
+                    print i2+1 ,"/", ii2+1 ,"/", len(s) ," ", sel[i2].Name                            
+                    
+                    a = App.ActiveDocument.ActiveObject
+                    # Label for the repro shape
+                    #        object Name  /  original object Name
+                    a.Label =a.Name + " " +  sel[i2].Name                                             
+                    
+                    try:
+                        # give LineColor
+                        FreeCADGui.activeDocument().activeObject().LineColor  = (1.0,0.0,0.0)         
+                        # give PointColor
+                        FreeCADGui.activeDocument().activeObject().PointColor = (1.0,0.0,0.0)         
+                        # give ShapeColor
+                        FreeCADGui.activeDocument().activeObject().ShapeColor = (1.0,0.0,0.0)         
+                        
+                    except Exception:
+                        None
+        else :
+            printError_msg(error_msg) 
+        pass
+    except:
+        printError_msg(error_msg)    
         
 def object_alignFaces():
     """
@@ -10247,7 +10416,9 @@ class WorkFeatureTab():
                              "button_revolve"              : "plot_revolution",
                              "button_common"               : "object_common",
                              "button_difference"           : "object_difference",
+                             "button_copy_objects"         : "object_copy",
                              "button_sweep"                : "plot_sectionSweep",
+                             "button_beam"                 : "plot_sectionBeam",
                              
                              "button_alignview"            : "view_align",
                              "button_trackcamera"          : "view_trackCamera",                            
@@ -10265,6 +10436,7 @@ class WorkFeatureTab():
                              "button_isAngle"              : "object_angle",
                              "button_isDistance"           : "points_distance",
                              "button_isLength"             : "line_length",
+                             "button_isRadius"             : "object_radius",
                              "button_isArea"               : "plane_area",
                              "button_isView"               : "camera_orientation",
                              
diff --git a/WorkFeature/WF_ObjParCurve_2015.py b/WorkFeature/WF_ObjParCurve_2015.py
index f8a8e84..51592f5 100644
--- a/WorkFeature/WF_ObjParCurve_2015.py
+++ b/WorkFeature/WF_ObjParCurve_2015.py
@@ -94,7 +94,7 @@ class Parametric():
         self.updateOptions()
 
 
-    def plot_matriz(self, matriz):
+    def plot_matriz_old(self, matriz):
         """ Plot the dataset with different options.
         """
         if self.debug != 0:
@@ -116,7 +116,44 @@ class Parametric():
                     Draft.upgrade(FreeCADGui.Selection.getSelection(),delete=True)
                     FreeCAD.ActiveDocument.recompute() 
  
-                
+    def plot_matriz(self, matriz):
+        """ Plot the dataset with different options.
+        """
+        if self.debug != 0:
+            print self.plot_matriz.__name__       
+               
+        doc = FreeCAD.ActiveDocument
+        if doc == None:
+            doc = FreeCAD.newDocument()
+ 
+        if self.points == True:
+            for point in matriz:
+                a = Draft.makePoint(point)
+                FreeCAD.ActiveDocument.ActiveObject.Label = str(a.Name)+"_Point_"+str(self.name.text())
+        else:
+            curva = Part.makePolygon(matriz)
+            if self.bspline == True:
+                a = Draft.makeBSpline(curva,closed=self.close,face=False)
+                FreeCAD.ActiveDocument.ActiveObject.Label = str(a.Name)+"_BSpline_"+str(self.name.text())
+            if self.bezier == True:
+                a = Draft.makeBezCurve(curva,closed=self.close,face=False)
+                FreeCAD.ActiveDocument.ActiveObject.Label = str(a.Name)+"_BezCurve_"+str(self.name.text())
+            if self.poly == True:
+                a = Draft.makeWire(curva,closed=self.close,face=False)
+                FreeCAD.ActiveDocument.ActiveObject.Label = str(a.Name)+"_Wire_"+str(self.name.text())
+#             if self.arcs == True:
+#                 s=Part.BSplineCurve()
+#                 s.interpolate(matriz, True)
+#                 s.buildFromPoles(matriz)
+#                 #Part.show(s.toShape())
+#                 arcs=s.toBiArcs(0.1)
+#                 wire=Part.Wire([Part.Edge(i) for i in arcs])
+#                 Part.show(wire)
+        if self.close == True and self.face == True:
+            Draft.upgrade(FreeCADGui.Selection.getSelection(),delete=True)
+        FreeCAD.ActiveDocument.recompute()
+        FreeCADGui.ActiveDocument.ActiveView.fitAll()
+               
     def edit(self):
         """ Launch the edit panel curve.
         """
diff --git a/start_WF.FCMacro b/start_WF.FCMacro
index 90f8607..d64f160 100644
--- a/start_WF.FCMacro
+++ b/start_WF.FCMacro
@@ -2,6 +2,10 @@
 import sys
 import os.path
 
+# Change this by your own FreeCAD lib path to import FreeCAD
+if not sys.path.__contains__("/usr/lib/freecad/lib"): 
+    sys.path.append("/usr/lib/freecad/lib")
+    
 try:
     # try import
     import WorkFeature.WF_2015 as WF