Index: cpp/frams/config/f0-SDK.def
===================================================================
--- cpp/frams/config/f0-SDK.def	(revision 917)
+++ cpp/frams/config/f0-SDK.def	(revision 920)
@@ -13,9 +13,9 @@
 PROP(y,0,1024,position.y,f,,,,p.y)
 PROP(z,0,1024,position.z,f,,,,p.z)
-PROP(sh,1,0,shape,d,0,3,0,shape)
-PROP(s,1,0,size,f,0.1,10.0,1.0,size)
-PROP(sx,1,0,scale.x,f,0.001,1000.0,1.0,scale.x)
-PROP(sy,1,0,scale.y,f,0.001,1000.0,1.0,scale.y)
-PROP(sz,1,0,scale.z,f,0.001,1000.0,1.0,scale.z)
+PROP(sh,0,0,shape,d,0,3,0,shape)
+PROP(s,0,0,size,f,0.1,10.0,1.0,size)
+PROP(sx,0,0,scale.x,f,0.001,1000.0,1.0,scale.x)
+PROP(sy,0,0,scale.y,f,0.001,1000.0,1.0,scale.y)
+PROP(sz,0,0,scale.z,f,0.001,1000.0,1.0,scale.z)
 XPROP(h,1,0,hollow,f,0,1,0,hollow)
 XPROP(dn,1,0,density,f,0.2,5.0,1.0,density)
@@ -47,5 +47,5 @@
 PROP(dy,1,1024,delta.y,f,-2,2,0,d.y)
 PROP(dz,1,1024,delta.z,f,-2,2,0,d.z)
-PROP(sh,1,0,shape,d,0,1,0,shape)
+PROP(sh,1,0,shape,d,0,3,0,shape)
 PROP(hx,1,0,hinge position.x,f,,,0,hinge_pos.x)
 PROP(hy,1,1024,hinge position.y,f,,,0,hinge_pos.y)
@@ -75,5 +75,5 @@
 PROP(p1,0,1024,`part1 ref#',d,-1,999999,-1,p1_refno)
 PROP(p2,0,1024,`part2 ref#',d,-1,999999,-1,p2_refno)
-PROP(sh,1,0,shape,d,0,1,0,shape)
+PROP(sh,1,0,shape,d,0,3,0,shape)
 PROP(hx,1,0,hinge position.x,f,,,0,hinge_pos.x)
 PROP(hy,1,1024,hinge position.y,f,,,0,hinge_pos.y)
@@ -170,4 +170,11 @@
 ENDNEUROCLASS
 
+NEUROCLASS(SolidMuscle,M,Muscle,,1,0,2)
+VISUALHINTS(EffectorClass+AtFirstPart+SolidMuscleFlag)
+SYMBOL(`6,5,25,40,35,40,45,50,35,60,25,60,25,40,4,65,85,65,50,75,50,75,85,65,85,3,65,56,49,29,57,24,72,50,4,68,53,70,53,70,55,68,55,68,53,5,50,21,60,15,70,14,79,15,87,20,81,10,1,86,20,77,21')
+NEUROPROP(p,0,0,power,f,0.01,1.0,1.0,power)
+NEUROPROP(a,0,0,axis,d,0,1,0,axis)
+ENDNEUROCLASS
+
 NEUROCLASS(Diff,D,Differentiate,Calculate the difference between the current and previous input value. Multiple inputs are aggregated with respect to their weights,-1,1,0)
 SYMBOL(`3,3,25,0,25,100,75,50,25,0,1,75,50,100,50,3,44,42,51,57,36,57,44,42')
Index: cpp/frams/config/f0.def
===================================================================
--- cpp/frams/config/f0.def	(revision 917)
+++ cpp/frams/config/f0.def	(revision 920)
@@ -170,4 +170,11 @@
 ENDNEUROCLASS
 
+NEUROCLASS(SolidMuscle,M,Muscle,,1,0,2)
+VISUALHINTS(EffectorClass+AtFirstPart+SolidMuscleFlag)
+SYMBOL(`6,5,25,40,35,40,45,50,35,60,25,60,25,40,4,65,85,65,50,75,50,75,85,65,85,3,65,56,49,29,57,24,72,50,4,68,53,70,53,70,55,68,55,68,53,5,50,21,60,15,70,14,79,15,87,20,81,10,1,86,20,77,21')
+NEUROPROP(p,0,0,power,f,0.01,1.0,1.0,power)
+NEUROPROP(a,0,0,axis,d,0,1,0,axis)
+ENDNEUROCLASS
+
 NEUROCLASS(Diff,D,Differentiate,Calculate the difference between the current and previous input value. Multiple inputs are aggregated with respect to their weights,-1,1,0)
 SYMBOL(`3,3,25,0,25,100,75,50,25,0,1,75,50,100,50,3,44,42,51,57,36,57,44,42')
Index: cpp/frams/model/f0-SDK-classes.h
===================================================================
--- cpp/frams/model/f0-SDK-classes.h	(revision 917)
+++ cpp/frams/model/f0-SDK-classes.h	(revision 920)
@@ -1,4 +1,4 @@
 // This file is a part of Framsticks SDK.  http://www.framsticks.com/
-// Copyright (C) 1999-2015  Maciej Komosinski and Szymon Ulatowski.
+// Copyright (C) 1999-2020  Maciej Komosinski and Szymon Ulatowski.
 // See LICENSE.txt for details.
 
@@ -30,9 +30,9 @@
  {"y",0,1024,"position.y","f",FIELD(p.y),},
  {"z",0,1024,"position.z","f",FIELD(p.z),},
- {"sh",1,0,"shape","d 0 3 0",FIELD(shape),},
- {"s",1,0,"size","f 0.1 10.0 1.0",FIELD(size),},
- {"sx",1,0,"scale.x","f 0.001 1000.0 1.0",FIELD(scale.x),},
- {"sy",1,0,"scale.y","f 0.001 1000.0 1.0",FIELD(scale.y),},
- {"sz",1,0,"scale.z","f 0.001 1000.0 1.0",FIELD(scale.z),},
+ {"sh",0,0,"shape","d 0 3 0",FIELD(shape),},
+ {"s",0,0,"size","f 0.1 10.0 1.0",FIELD(size),},
+ {"sx",0,0,"scale.x","f 0.001 1000.0 1.0",FIELD(scale.x),},
+ {"sy",0,0,"scale.y","f 0.001 1000.0 1.0",FIELD(scale.y),},
+ {"sz",0,0,"scale.z","f 0.001 1000.0 1.0",FIELD(scale.z),},
  {"h",1,0,"hollow","f 0 1 0",FIELD(hollow),},
  {"dn",1,0,"density","f 0.2 5.0 1.0",FIELD(density),},
@@ -83,5 +83,5 @@
  {"dy",1,1024,"delta.y","f -2 2 0",FIELD(d.y),},
  {"dz",1,1024,"delta.z","f -2 2 0",FIELD(d.z),},
- {"sh",1,0,"shape","d 0 1 0",FIELD(shape),},
+ {"sh",1,0,"shape","d 0 3 0",FIELD(shape),},
  {"hx",1,0,"hinge position.x","f",FIELD(hinge_pos.x),},
  {"hy",1,1024,"hinge position.y","f",FIELD(hinge_pos.y),},
@@ -126,5 +126,5 @@
  {"p1",0,1024,"part1 ref#","d -1 999999 -1",FIELD(p1_refno),},
  {"p2",0,1024,"part2 ref#","d -1 999999 -1",FIELD(p2_refno),},
- {"sh",1,0,"shape","d 0 1 0",FIELD(shape),},
+ {"sh",1,0,"shape","d 0 3 0",FIELD(shape),},
  {"hx",1,0,"hinge position.x","f",FIELD(hinge_pos.x),},
  {"hy",1,1024,"hinge position.y","f",FIELD(hinge_pos.y),},
@@ -223,2 +223,3 @@
 
 
+
Index: cpp/frams/model/modelparts.h
===================================================================
--- cpp/frams/model/modelparts.h	(revision 917)
+++ cpp/frams/model/modelparts.h	(revision 920)
@@ -1,4 +1,4 @@
 // This file is a part of Framsticks SDK.  http://www.framsticks.com/
-// Copyright (C) 1999-2018  Maciej Komosinski and Szymon Ulatowski.
+// Copyright (C) 1999-2020  Maciej Komosinski and Szymon Ulatowski.
 // See LICENSE.txt for details.
 
@@ -283,5 +283,6 @@
 		V1BendMuscle = 64,
 		V1RotMuscle = 128,
-		LinearMuscle = 256
+		LinearMuscle = 256,
+		SolidMuscleFlag = 512 // the "Flag" suffix should be unified/made consistent with other enum items
 	};
 
Index: cpp/frams/neuro/impl/neuroimpl-body-sdk.h
===================================================================
--- cpp/frams/neuro/impl/neuroimpl-body-sdk.h	(revision 917)
+++ cpp/frams/neuro/impl/neuroimpl-body-sdk.h	(revision 920)
@@ -1,4 +1,4 @@
 // This file is a part of Framsticks SDK.  http://www.framsticks.com/
-// Copyright (C) 1999-2015  Maciej Komosinski and Szymon Ulatowski.
+// Copyright (C) 1999-2020  Maciej Komosinski and Szymon Ulatowski.
 // See LICENSE.txt for details.
 
@@ -57,4 +57,15 @@
 };
 
+extern ParamEntry NI_SolidMuscle_tab[];
+class NI_SolidMuscle : public NeuroImpl
+{
+public:
+	paInt axis;
+	NeuroImpl* makeNew() { return new NI_SolidMuscle(); } // for NeuroFactory
+	NI_SolidMuscle() { paramentries = NI_SolidMuscle_tab; }
+	int lateinit() { if (!neuro->joint) return 0; simorder = 2; return 1; }
+	void go() {}
+};
+
 extern ParamEntry NI_LinearMuscle_tab[];
 class NI_LinearMuscle : public NeuroImpl
