Index: /java/main/src/main/java/com/framsticks/examples/GenotypeBrowser.java
===================================================================
--- /java/main/src/main/java/com/framsticks/examples/GenotypeBrowser.java	(revision 78)
+++ /java/main/src/main/java/com/framsticks/examples/GenotypeBrowser.java	(revision 79)
@@ -37,6 +37,5 @@
 
 		registry.putInfoIntoCache(new FramsClass("ModelBuilderRoot", "ModelBuilderRoot", null)
-				.append(new ParamBuilder().setType("o Model").setId("f0genotype").setName("f0genotype").build())
-				.append(new ParamBuilder().setType("o F0Model").setId("f0model").setName("f0model").build())
+				.append(new ParamBuilder().setType("o Model").setId("model").setName("model").build())
 		);
 		root = new Node((CompositeParam)new ParamBuilder().setType("o ModelBuilderRoot").setId(name).setName("Instance").build(), PropertiesAccess.createPropertiesMap());
@@ -50,14 +49,9 @@
 			List<AccessInterface> accesses = new F0Parser(schema, GenotypeBrowser.class.getResourceAsStream("/examples/f0_example.txt")).parse();
 			List<Object> objects = Util.stripAccessInterface(accesses);
-			F0Genotype f0Genotype = F0Genotype.build(objects);
-			F0Model f0Model = F0Model.build(f0Genotype);
+			Model model = Model.build(objects);
 
-			for (String n : new String[] {"MechPart", "MechJoint", "Neuro"}) {
-				registry.putInfoIntoCache(FramsClass.readFromStream(GenotypeBrowser.class.getResourceAsStream("/info/" + n + ".info")));
-			}
 			AccessInterface rootAccess = bindAccess(new Path(this, "/"));
 
-			rootAccess.set("f0genotype", f0Genotype);
-			rootAccess.set("f0model", f0Model);
+			rootAccess.set("model", model);
 
 		} catch (Exception e) {
Index: /java/main/src/main/java/com/framsticks/model/BasePart.java
===================================================================
--- /java/main/src/main/java/com/framsticks/model/BasePart.java	(revision 78)
+++ /java/main/src/main/java/com/framsticks/model/BasePart.java	(revision 79)
@@ -1,4 +1,5 @@
 package com.framsticks.model;
 
+import com.framsticks.util.Orientation;
 import com.framsticks.util.Point3d;
 
@@ -29,6 +30,23 @@
 
 
+	public double oxx, oxy, oxz, oyx, oyy, oyz, ozx, ozy, ozz;
+
+	public Orientation getOrientation() { return new Orientation(new Point3d(oxx, oxy, oxz), new Point3d(oyx, oyy, oyz), new Point3d(ozx, ozy, ozz)); }
+
+	public void setOrientation(Orientation o) {
+		oxx = o.x.x;
+		oxy = o.x.y;
+		oxz = o.x.z;
+		oyx = o.y.x;
+		oyy = o.y.y;
+		oyz = o.y.z;
+		ozx = o.z.x;
+		ozy = o.z.y;
+		ozz = o.z.z;
+	}
+
 	public void copyFrom(BasePart p) {
 		setPosition(p.getPosition());
+		setOrientation(p.getOrientation());
 		mass = p.mass;
 		size = p.size;
Index: /java/main/src/main/java/com/framsticks/model/Creature.java
===================================================================
--- /java/main/src/main/java/com/framsticks/model/Creature.java	(revision 78)
+++ /java/main/src/main/java/com/framsticks/model/Creature.java	(revision 79)
@@ -8,5 +8,5 @@
 import java.util.List;
 
-public class Creature extends F0Model {
+public class Creature {
 	public String name;
 
@@ -147,9 +147,15 @@
 	public final List<NeuroDef> neurodefs = new ArrayList<NeuroDef>();
 
-
-
 	public final List<Part> getParts() { return parts; }
 	public final List<Joint> getJoints() { return joints; }
 	public final List<NeuroDef> getNeuroDefs() { return neurodefs; }
+
+	public final List<MechPart> mechparts = new ArrayList<MechPart>();
+	public final List<MechJoint> mechjoints = new ArrayList<MechJoint>();
+	public final List<Neuro> neurons = new ArrayList<Neuro>();
+
+	public final List<MechPart> getMechParts() { return mechparts; }
+	public final List<MechJoint> getMechJoints() { return mechjoints; }
+	public final List<Neuro> getNeurons() { return neurons; }
 
 
@@ -160,4 +166,7 @@
 		constructor.field("joints");
 		constructor.field("neurodefs");
+		constructor.field("mechparts");
+		constructor.field("mechjoints");
+		constructor.field("neurons");
 	}
 
Index: va/main/src/main/java/com/framsticks/model/F0Genotype.java
===================================================================
--- /java/main/src/main/java/com/framsticks/model/F0Genotype.java	(revision 78)
+++ 	(revision )
@@ -1,75 +1,0 @@
-package com.framsticks.model;
-
-import com.framsticks.util.Casting;
-import com.framsticks.util.Containers;
-import org.apache.log4j.Logger;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * Author: Piotr Śniegowski
- */
-public class F0Genotype {
-
-	private final static Logger LOGGER = Logger.getLogger(F0Genotype.class);
-
-	public Double startingEnergy;
-	public Double getEnerg0() { return startingEnergy; }
-	public void setEnerg0(Double energ0) { startingEnergy = energ0; }
-
-	public Double getSe() { return startingEnergy; }
-	public void setSe(Double se) { startingEnergy = se; }
-
-	/** Vstyle */
-	public String visualizationStyle;
-	public String getVstyle() { return visualizationStyle; }
-	public void setVstyle(String Vstyle) { visualizationStyle = Vstyle; }
-
-	public final List<Part> parts = new ArrayList<Part>();
-	public final List<Joint> joints = new ArrayList<Joint>();
-	public final List<NeuroDef> neurodefs = new ArrayList<NeuroDef>();
-
-	public Double getNumparts() { return (double)parts.size(); }
-	public Double getNumjoints() { return (double)joints.size(); }
-	public Double getNumneurons() { return (double)neurodefs.size(); }
-
-	//this is impossible to use, because numparts field is marked as readonly
-	public void setNumparts(Double numparts) { Containers.resizeList(parts, (int) (double) numparts); }
-	public void setNumjoints(Double numjoints) { Containers.resizeList(joints, (int)(double)numjoints); }
-	public void setNumneurons(Double numneurons) { Containers.resizeList(neurodefs, (int)(double)numneurons); }
-
-	public List<Part> getParts() { return parts; }
-	public List<Joint> getJoints() { return joints; }
-	public List<NeuroDef> getNeuroDefs() { return neurodefs; }
-
-	public static F0Genotype build(List<Object> objects) {
-		Iterator<Object> i = objects.iterator();
-		if (!i.hasNext()) {
-			return null;
-		}
-		F0Genotype f0Genotype = Casting.tryCast(F0Genotype.class, i.next());
-		if (f0Genotype == null) {
-			LOGGER.fatal("first object is not a Model");
-			return null;
-		}
-		while (i.hasNext()) {
-			Object object = i.next();
-			if (object instanceof Joint) {
-				f0Genotype.joints.add((Joint)object);
-				continue;
-			}
-			if (object instanceof Part) {
-				f0Genotype.parts.add((Part)object);
-				continue;
-			}
-			if (object instanceof NeuroDef) {
-				f0Genotype.neurodefs.add((NeuroDef) object);
-				continue;
-			}
-			LOGGER.error("invalid class: " + object.getClass().getCanonicalName());
-		}
-		return f0Genotype;
-	}
-}
Index: va/main/src/main/java/com/framsticks/model/F0Model.java
===================================================================
--- /java/main/src/main/java/com/framsticks/model/F0Model.java	(revision 78)
+++ 	(revision )
@@ -1,59 +1,0 @@
-package com.framsticks.model;
-
-import com.framsticks.params.FramsClass;
-import com.framsticks.util.Orientation;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Author: Piotr Śniegowski
- */
-public class F0Model {
-
-	public final List<MechPart> mechparts = new ArrayList<MechPart>();
-	public final List<MechJoint> mechjoints = new ArrayList<MechJoint>();
-	public final List<Neuro> neurons = new ArrayList<Neuro>();
-
-	public final List<MechPart> getMechParts() { return mechparts; }
-	public final List<MechJoint> getMechJoints() { return mechjoints; }
-	public final List<Neuro> getNeurons() { return neurons; }
-
-	public static void constructFramsClass(FramsClass.Constructor constructor) {
-		constructor.field("mechparts");
-		constructor.field("mechjoints");
-		constructor.field("neurons");
-	}
-
-	public static F0Model build(F0Genotype f0Genotype) {
-		F0Model model = new F0Model();
-
-		for (Part p : f0Genotype.getParts()) {
-			/** based on c++ Model::build*/
-			MechPart mp = new MechPart();
-			mp.setPosition(p.getPosition());
-			mp.setOrientation(new Orientation().rotate(p.getRotation()));
-			mp.copyFrom(p);
-			model.mechparts.add(mp);
-		}
-		for (Joint j : f0Genotype.getJoints()) {
-			/** based on c++ Joint::attachToParts*/
-			MechPart mp1 = model.mechparts.get(j.getP1());
-			MechPart mp2 = model.mechparts.get(j.getP2());
-			assert mp1 != null && mp2 != null;
-			MechJoint mj = new MechJoint();
-			mj.copyFrom(j);
-			Orientation o = new Orientation().rotate(j.getRotation());
-			mp2.setOrientation(mp1.getOrientation().transform(o));
-			mp2.setPosition(mp2.getOrientation().transform(j.getDelta()).add(mp1.getPosition()));
-			model.mechjoints.add(mj);
-		}
-		for (NeuroDef nd : f0Genotype.getNeuroDefs()) {
-			Neuro n = new Neuro();
-			n.copyFrom(nd);
-			model.neurons.add(n);
-		}
-
-		return model;
-	}
-}
Index: /java/main/src/main/java/com/framsticks/model/Genotype.java
===================================================================
--- /java/main/src/main/java/com/framsticks/model/Genotype.java	(revision 78)
+++ /java/main/src/main/java/com/framsticks/model/Genotype.java	(revision 79)
@@ -4,5 +4,5 @@
 import org.apache.log4j.Logger;
 
-public class Genotype extends F0Genotype {
+public class Genotype extends Model {
 	private final static Logger LOGGER = Logger.getLogger(Genotype.class);
 
Index: /java/main/src/main/java/com/framsticks/model/MechPart.java
===================================================================
--- /java/main/src/main/java/com/framsticks/model/MechPart.java	(revision 78)
+++ /java/main/src/main/java/com/framsticks/model/MechPart.java	(revision 79)
@@ -19,19 +19,4 @@
 	public void setVelocity(Point3d v) { vx = v.x; vy = v.y; vz = v.z; }
 
-    public double oxx, oxy, oxz, oyx, oyy, oyz, ozx, ozy, ozz;
-
-	public Orientation getOrientation() { return new Orientation(new Point3d(oxx, oxy, oxz), new Point3d(oyx, oyy, oyz), new Point3d(ozx, ozy, ozz)); }
-
-	public void setOrientation(Orientation o) {
-		oxx = o.x.x;
-		oxy = o.x.y;
-		oxz = o.x.z;
-		oyx = o.y.x;
-		oyy = o.y.y;
-		oyz = o.y.z;
-		ozx = o.z.x;
-		ozy = o.z.y;
-		ozz = o.z.z;
-	}
 
 }
Index: /java/main/src/main/java/com/framsticks/model/Model.java
===================================================================
--- /java/main/src/main/java/com/framsticks/model/Model.java	(revision 79)
+++ /java/main/src/main/java/com/framsticks/model/Model.java	(revision 79)
@@ -0,0 +1,89 @@
+package com.framsticks.model;
+
+import com.framsticks.util.Casting;
+import com.framsticks.util.Containers;
+import com.framsticks.util.Orientation;
+import org.apache.log4j.Logger;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * Author: Piotr Śniegowski
+ */
+public class Model {
+
+	private final static Logger LOGGER = Logger.getLogger(Model.class);
+
+	public Double startingEnergy;
+	public Double getEnerg0() { return startingEnergy; }
+	public void setEnerg0(Double energ0) { startingEnergy = energ0; }
+
+	public Double getSe() { return startingEnergy; }
+	public void setSe(Double se) { startingEnergy = se; }
+
+	/** Vstyle */
+	public String visualizationStyle;
+	public String getVstyle() { return visualizationStyle; }
+	public void setVstyle(String Vstyle) { visualizationStyle = Vstyle; }
+
+	public final List<Part> parts = new ArrayList<Part>();
+	public final List<Joint> joints = new ArrayList<Joint>();
+	public final List<NeuroDef> neurodefs = new ArrayList<NeuroDef>();
+
+	public Double getNumparts() { return (double)parts.size(); }
+	public Double getNumjoints() { return (double)joints.size(); }
+	public Double getNumneurons() { return (double)neurodefs.size(); }
+
+	//this is impossible to use, because numparts field is marked as readonly
+	public void setNumparts(Double numparts) { Containers.resizeList(parts, (int) (double) numparts); }
+	public void setNumjoints(Double numjoints) { Containers.resizeList(joints, (int)(double)numjoints); }
+	public void setNumneurons(Double numneurons) { Containers.resizeList(neurodefs, (int)(double)numneurons); }
+
+	public List<Part> getParts() { return parts; }
+	public List<Joint> getJoints() { return joints; }
+	public List<NeuroDef> getNeuroDefs() { return neurodefs; }
+
+	public static Model build(List<Object> objects) {
+		Iterator<Object> i = objects.iterator();
+		if (!i.hasNext()) {
+			return null;
+		}
+		Model f0Genotype = Casting.tryCast(Model.class, i.next());
+		if (f0Genotype == null) {
+			LOGGER.fatal("first object is not a Model");
+			return null;
+		}
+		while (i.hasNext()) {
+			Object object = i.next();
+			if (object instanceof Joint) {
+				f0Genotype.joints.add((Joint)object);
+				continue;
+			}
+			if (object instanceof Part) {
+				f0Genotype.parts.add((Part)object);
+				continue;
+			}
+			if (object instanceof NeuroDef) {
+				f0Genotype.neurodefs.add((NeuroDef) object);
+				continue;
+			}
+			LOGGER.error("invalid class: " + object.getClass().getCanonicalName());
+		}
+
+		for (Part p : f0Genotype.getParts()) {
+			p.setOrientation(new Orientation().rotate(p.getRotation()));
+		}
+		for (Joint j : f0Genotype.getJoints()) {
+			/** based on c++ Joint::attachToParts*/
+			Part p1 = f0Genotype.parts.get(j.getP1());
+			Part p2 = f0Genotype.parts.get(j.getP2());
+			assert p1 != null && p2 != null;
+			Orientation o = new Orientation().rotate(j.getRotation());
+			p2.setOrientation(p1.getOrientation().transform(o));
+			p2.setPosition(p2.getOrientation().transform(j.getDelta()).add(p1.getPosition()));
+		}
+		return f0Genotype;
+	}
+}
Index: /java/main/src/main/java/com/framsticks/model/Package.java
===================================================================
--- /java/main/src/main/java/com/framsticks/model/Package.java	(revision 78)
+++ /java/main/src/main/java/com/framsticks/model/Package.java	(revision 79)
@@ -17,11 +17,8 @@
 		registry.registerReflectedClass("NeuroDef", "n", "com.framsticks.model.NeuroDef");
 		registry.registerReflectedClass("Part", "p", "com.framsticks.model.Part");
-		registry.registerReflectedClass("Model", "m", "com.framsticks.model.F0Genotype");
-		registry.registerReflectedClass("F0Model", null, "com.framsticks.model.F0Model");
-		registry.registerReflectedClass("F0Genotype", null, "com.framsticks.model.F0Genotype");
+		registry.registerReflectedClass("Model", "m", "com.framsticks.model.Model");
 		registry.registerReflectedClass("Creature", null, "com.framsticks.model.Creature");
 		registry.registerReflectedClass("Genotype", null, "com.framsticks.model.Genotype");
 
-		registry.putInfoIntoCache(new FramsClass.Constructor(F0Model.class, "F0Model").getResult());
 	}
 }
Index: /java/main/src/main/java/com/framsticks/model/Part.java
===================================================================
--- /java/main/src/main/java/com/framsticks/model/Part.java	(revision 78)
+++ /java/main/src/main/java/com/framsticks/model/Part.java	(revision 79)
@@ -33,5 +33,4 @@
 	public void setDn(Double dn) { density = dn; }
 
-
 	public Double getIng() { return ingestion; }
 	public void setIng(Double ing) { ingestion = ing; }
Index: /java/main/src/main/java/com/framsticks/parsers/F0Parser.java
===================================================================
--- /java/main/src/main/java/com/framsticks/parsers/F0Parser.java	(revision 78)
+++ /java/main/src/main/java/com/framsticks/parsers/F0Parser.java	(revision 79)
@@ -9,5 +9,5 @@
 import java.util.List;
 
-import com.framsticks.model.F0Genotype;
+import com.framsticks.model.Model;
 import static com.framsticks.params.SimpleAbstractAccess.*;
 
@@ -109,5 +109,5 @@
 
 			/** If no 'm' (Model) line was found, than simulate it on the beginning of the result.*/
-			if (result.isEmpty() || !(result.get(0) instanceof F0Genotype)) {
+			if (result.isEmpty() || !(result.get(0) instanceof Model)) {
 				result.add(0, processLine("m:"));
 			}
Index: /java/main/src/test/java/com/framsticks/parsers/F0ParserTest.java
===================================================================
--- /java/main/src/test/java/com/framsticks/parsers/F0ParserTest.java	(revision 78)
+++ /java/main/src/test/java/com/framsticks/parsers/F0ParserTest.java	(revision 79)
@@ -39,5 +39,5 @@
 		{
 			assertEquals(12, accesses.size());
-			assertTrue(accesses.get(0).getSelected() instanceof F0Genotype);
+			assertTrue(accesses.get(0).getSelected() instanceof Model);
 			assertEquals("1,2,3,\"dsadsa,,,,", accesses.get(5).get("i", String.class));
 			assertEquals("|:p=0.25,r=1", accesses.get(7).get("d", String.class));
@@ -52,25 +52,23 @@
 		}
 
-		F0Genotype f0Genotype = Genotype.build(objects);
+		Model model = Model.build(objects);
 		{
-			assertEquals(3, f0Genotype.getParts().size());
-			assertEquals(6, f0Genotype.getNeuroDefs().size());
-			assertEquals(2, f0Genotype.getJoints().size());
+			assertEquals(3, model.getParts().size());
+			assertEquals(6, model.getNeuroDefs().size());
+			assertEquals(2, model.getJoints().size());
 
-			assertEquals(new Integer(0), f0Genotype.getJoints().get(0).part1);
-			assertEquals(new Integer(1), f0Genotype.getJoints().get(0).part2);
-			assertEquals(new Integer(1), f0Genotype.getNeuroDefs().get(0).part);
-			assertEquals(new Integer(-1), f0Genotype.getNeuroDefs().get(0).joint);
-			assertEquals("|:p=0.25,r=1", f0Genotype.getNeuroDefs().get(1).details);
-			assertEquals("N", f0Genotype.getNeuroDefs().get(3).details);
-			assertEquals(new Integer(-1), f0Genotype.getNeuroDefs().get(4).part);
+			assertEquals(new Integer(0), model.getJoints().get(0).part1);
+			assertEquals(new Integer(1), model.getJoints().get(0).part2);
+			assertEquals(new Integer(1), model.getNeuroDefs().get(0).part);
+			assertEquals(new Integer(-1), model.getNeuroDefs().get(0).joint);
+			assertEquals("|:p=0.25,r=1", model.getNeuroDefs().get(1).details);
+			assertEquals("N", model.getNeuroDefs().get(3).details);
+			assertEquals(new Integer(-1), model.getNeuroDefs().get(4).part);
+
+			assertEquals(2.0, model.getParts().get(1).getPosition().x, 0.0);
+			assertTrue(model.getParts().get(2).getPosition().sub(new Point3d(2.27236, -0.0792596, -0.958924)).length() < 0.0001);
+			assertTrue(model.getParts().get(2).getOrientation().y.sub(new Point3d(0.870277, -0.404792, 0.280644)).length() < 0.0001);
 		}
 
-		F0Model f0model = F0Model.build(f0Genotype);
-		{
-			assertEquals(2.0, f0model.getMechParts().get(1).getPosition().x, 0.0);
-			assertTrue(f0model.getMechParts().get(2).getPosition().sub(new Point3d(2.27236, -0.0792596, -0.958924)).length() < 0.0001);
-			assertTrue(f0model.getMechParts().get(2).getOrientation().y.sub(new Point3d(0.870277, -0.404792, 0.280644)).length() < 0.0001);
-		}
 
 	}
