Index: /js/human_3d_alignment/src/utils/genotypes.js
===================================================================
--- /js/human_3d_alignment/src/utils/genotypes.js	(revision 943)
+++ /js/human_3d_alignment/src/utils/genotypes.js	(revision 944)
@@ -30,6 +30,6 @@
         rawFile.onload = (e) => {
             if (rawFile.readyState === 4) {
-                if (rawFile.status === 200) {
-                    this.readGenotypesFromText(rawFile.responseText);
+                if (rawFile.status === 200 || rawFile.status === 0) {
+                      this.readGenotypesFromGenotypeLoader(rawFile.responseText);
                 } else {
                     console.error(rawFile.statusText);
@@ -44,50 +44,24 @@
 
     /**
-     * Read genotypes from text read from genotypes.gen. TODO mk> This function should be removed; use SDK functionality instead for reliable parsing.
+     * Read genotypes from text read from genotypes.gen.
      * @param {string} text 
      */
-    readGenotypesFromText(text) {
-        let textTable = text.split('org:\n');
-        let i = 1;
-        while (i < textTable.length) {
-            let lines = textTable[i].split('\n');
-            if (lines[0].includes('name:')) {
-                let j = 0;
-                let gen = '';
-                let name = '';
-                let id = '';
-                while (j < lines.length) {
-                    if (lines[j].includes('name:')) {
-                        name += lines[j].split(':')[1];
-                    } else if (lines[j].includes('genotype:')) {
-                        gen += lines[j].replace('genotype:', '');
-                        let k = j + 1;
-                        while (!lines[k].includes('info_timestamp:')) {
-                            if (lines[k] != '\n') {
-                                gen += ' ' + lines[k];
-                            } else {
-                                gen += ' '
-                            }
-                            k++;
-                        }
-                        gen = gen.split('~').join('');
-                    } else if (lines[j].includes('num:')) {
-                        id += lines[j].split(':')[1];
-                    }
-                    j++;
-                }
-                if (!gen.includes('//0')) {
-                    this.name.push(name);
-                    this.genotype.push(gen);
-                    this.id.push(id);
-                }
-            }
+    readGenotypesFromGenotypeLoader(text) {
+        let textStringFile = new Module.StringFILE2(text, 0);
+        let genotypeLoader = new Module.GenotypeMiniLoader(textStringFile);
+        let loaded = genotypeLoader.loadNextGenotype();
+        let i = 0;
+        while (loaded.genotype.c_str()!="")
+        {
+            this.name.push(loaded.name.c_str());
+            this.genotype.push(loaded.genotype.c_str());
+            this.id.push(i);
+            i++;
 
-            i++;
+            loaded = genotypeLoader.loadNextGenotype();
         }
         this.loaded = true;
         this.parent.start();
     }
-
 }
 
Index: /js/sdk/js_interface/js_interface.cpp
===================================================================
--- /js/sdk/js_interface/js_interface.cpp	(revision 943)
+++ /js/sdk/js_interface/js_interface.cpp	(revision 944)
@@ -17,8 +17,10 @@
 #include <common/loggers/loggers.h>
 #include <common/loggers/loggertostdout.h>
+#include <common/virtfile/stringfile.h>
 #include <frams/param/param.h>
 #include <frams/param/paramtree.h>
 #include <frams/param/mutableparam.h>
 #include <frams/_demos/genotypemini.h>
+#include <frams/_demos/genotypeloader.h>
 #include "js_types.h"
 #include "js_interface_impl.cpp"
Index: /js/sdk/js_interface/js_interface.idl
===================================================================
--- /js/sdk/js_interface/js_interface.idl	(revision 943)
+++ /js/sdk/js_interface/js_interface.idl	(revision 944)
@@ -170,7 +170,8 @@
 	"NeuroClass::EffectorClass",
 	"NeuroClass::ReceptorClass",
-	"NeuroClass::V1BendMuscle",
-	"NeuroClass::V1RotMuscle",
-	"NeuroClass::LinearMuscle"
+	"NeuroClass::IsV1BendMuscle",
+	"NeuroClass::IsV1RotMuscle",
+	"NeuroClass::IsLinearMuscle",
+	"NeuroClass::IsSolidMuscle"
 };
 
@@ -343,6 +344,9 @@
 };
 
-interface GenotypeMiniLoader {
-	void GenotypeMiniLoader([Const] DOMString filename);
+interface MultiParamLoader {
+};
+
+interface GenotypeMiniLoader : MultiParamLoader {
+    void GenotypeMiniLoader(VirtFILE f);
 	GenotypeMini loadNextGenotype();
 };
@@ -391,4 +395,8 @@
 
 interface VirtFILE {
+};
+
+interface StringFILE2 : VirtFILE {
+    void StringFILE2([Const] DOMString s, optional long _pos = 0);
 };
 
