diff --git a/codemeta.csv b/codemeta.csv
new file mode 100644
index 0000000..a1d3a50
--- /dev/null
+++ b/codemeta.csv
@@ -0,0 +1,69 @@
+Parent Type	Property	Type	Description
+schema:SoftwareSourceCode	codeRepository	URL	Link to the repository where the un-compiled, human readable code and related code is located (SVN, github, CodePlex).
+schema:SoftwareSourceCode	programmingLanguage	ComputerLanguage  or Text	The computer programming language.
+schema:SoftwareSourceCode	runtimePlatform	Text	Runtime platform or script interpreter dependencies (Example - Java v1, Python2.3, .Net Framework 3.0). Supersedes runtime.
+schema:SoftwareSourceCode	targetProduct	SoftwareApplication	Target Operating System / Product to which the code applies. If applies to several versions, just the product name can be used.
+schema:SoftwareApplication	applicationCategory	Text  or URL	Type of software application, e.g. 'Game, Multimedia'.
+schema:SoftwareApplication	applicationSubCategory	Text  or URL	Subcategory of the application, e.g. 'Arcade Game'.
+schema:SoftwareApplication	downloadUrl	URL	If the file can be downloaded, URL to download the binary.
+schema:SoftwareApplication	fileSize	Text	Size of the application / package (e.g. 18MB). In the absence of a unit (MB, KB etc.), KB will be assumed.
+schema:SoftwareApplication	installUrl	URL	URL at which the app may be installed, if different from the URL of the item.
+schema:SoftwareApplication	memoryRequirements	Text  or URL	Minimum memory requirements.
+schema:SoftwareApplication	operatingSystem	Text	Operating systems supported (Windows 7, OSX 10.6, Android 1.6).
+schema:SoftwareApplication	permissions	Text	Permission(s) required to run the app (for example, a mobile app may require full internet access or may run only on wifi).
+schema:SoftwareApplication	processorRequirements	Text	Processor architecture required to run the application (e.g. IA64).
+schema:SoftwareApplication	releaseNotes	Text  or URL	Description of what changed in this version.
+schema:SoftwareApplication	softwareHelp	CreativeWork	Software application help.
+schema:SoftwareApplication	softwareRequirements	SoftwareSourceCode	Required software dependencies
+schema:SoftwareApplication	softwareVersion	Text	Version of the software instance.
+schema:SoftwareApplication	storageRequirements	Text  or URL	Storage requirements (free space required).
+schema:SoftwareApplication	supportingData	DataFeed	Supporting data for a SoftwareApplication.
+schema:CreativeWork	author	Organization  or Person	The author of this content or rating. Please note that author is special in that HTML 5 provides a special mechanism for indicating authorship via the rel tag. That is equivalent to this and may be used interchangeably.
+schema:CreativeWork	citation	CreativeWork  or URL	A citation or reference to another creative work, such as another publication, web page, scholarly article, etc.
+schema:CreativeWork	contributor	Organization  or Person	A secondary contributor to the CreativeWork or Event.
+schema:CreativeWork	copyrightHolder	Organization  or Person	The party holding the legal copyright to the CreativeWork.
+schema:CreativeWork	copyrightYear	Number	The year during which the claimed copyright for the CreativeWork was first asserted.
+schema:CreativeWork	creator	Organization  or Person	The creator/author of this CreativeWork. This is the same as the Author property for CreativeWork.
+schema:CreativeWork	dateCreated	Date  or DateTime	The date on which the CreativeWork was created or the item was added to a DataFeed.
+schema:CreativeWork	dateModified	Date  or DateTime	The date on which the CreativeWork was most recently modified or when the item's entry was modified within a DataFeed.
+schema:CreativeWork	datePublished	Date	Date of first broadcast/publication.
+schema:CreativeWork	editor	Person	Specifies the Person who edited the CreativeWork.
+schema:CreativeWork	encoding	MediaObject	A media object that encodes this CreativeWork. This property is a synonym for associatedMedia. Supersedes encodings.
+schema:CreativeWork	fileFormat	Text  or URL	Media type, typically MIME format (see IANA site) of the content e.g. application/zip of a SoftwareApplication binary. In cases where a CreativeWork has several media type representations, 'encoding' can be used to indicate each MediaObject alongside particular fileFormat information. Unregistered or niche file formats can be indicated instead via the most appropriate URL, e.g. defining Web page or a Wikipedia entry.
+schema:CreativeWork	funder	Organization or Person	A person or organization that supports (sponsors) something through some kind of financial contribution.
+schema:CreativeWork	keywords	Text	Keywords or tags used to describe this content. Multiple entries in a keywords list are typically delimited by commas.
+schema:CreativeWork	license	CreativeWork  or URL	A license document that applies to this content, typically indicated by URL.
+schema:CreativeWork	producer	Organization  or Person	The person or organization who produced the work (e.g. music album, movie, tv/radio series etc.).
+schema:CreativeWork	provider	Organization  or Person	The service provider, service operator, or service performer; the goods producer. Another party (a seller) may offer those services or goods on behalf of the provider. A provider may also serve as the seller. Supersedes carrier.
+schema:CreativeWork	publisher	Organization  or Person	The publisher of the creative work.
+schema:CreativeWork	sponsor	Organization  or Person	A person or organization that supports a thing through a pledge, promise, or financial contribution. e.g. a sponsor of a Medical Study or a corporate sponsor of an event.
+schema:CreativeWork	version	Number  or Text	The version of the CreativeWork embodied by a specified resource.
+schema:CreativeWork	isAccessibleForFree	Boolean	A flag to signal that the publication is accessible for free.
+schema:CreativeWork	isPartOf	CreativeWork	Indicates a CreativeWork that this CreativeWork is (in some sense) part of. Reverse property hasPart
+schema:CreativeWork	hasPart	CreativeWork	Indicates a CreativeWork that is (in some sense) a part of this CreativeWork. Reverse property isPartOf
+schema:CreativeWork	position	Integer or Text	The position of an item in a series or sequence of items. (While schema.org considers this a property of CreativeWork, it is also the way to indicate ordering in any list (e.g. the Authors list).  By default arrays are unordered in JSON-LD
+schema:Thing	description	Text	A description of the item.
+schema:Thing	identifier	PropertyValue  or URL	The identifier property represents any kind of identifier for any kind of Thing, such as ISBNs, GTIN codes, UUIDs etc. Schema.org provides dedicated properties for representing many of these, either as textual strings or as URL (URI) links. See background notes for more details.
+schema:Thing	name	Text	The name of the item (software, Organization)
+schema:Thing	sameAs	URL	URL of a reference Web page that unambiguously indicates the item's identity. E.g. the URL of the item's Wikipedia page, Wikidata entry, or official website.
+schema:Thing	url	URL	URL of the item.
+schema:Thing	relatedLink	URL	A link related to this object, e.g. related web pages
+schema:Person	givenName	Text	Given name. In the U.S., the first name of a Person. This can be used along with familyName instead of the name property
+schema:Person	familyName	Text	Family name. In the U.S., the last name of an Person. This can be used along with givenName instead of the name property.
+schema:Person	email	Text	Email address
+schema:Person	affiliation	Text	An organization that this person is affiliated with. For example, a school/university
+schema:Person	identifier	URL	URL identifer, ideally an ORCID ID for individuals, a FundRef ID for funders
+schema:Person	name	Text	The name of an Organization, or if separate given and family names cannot be resolved for a Person
+schema:Person	address	PostalAddress or Text	Physical address of the item.
+schema	type	Object Type (from context or URI)	"The object type (e.g. ""Person"", ""Organization"", ""ScientificArticle"", ""SoftwareApplication"", etc)."
+schema	id	URL	Primary identifier for an object. Must be a resolvable URL or a string used to refer to this node elsewhere in the same document
+codemeta:SoftwareSourceCode	softwareSuggestions	SoftwareSourceCode	Optional dependencies , e.g. for optional features, code development, etc
+codemeta:SoftwareSourceCode	maintainer	Person	Individual responsible for maintaining the software (usually includes an email contact address)
+codemeta:SoftwareSourceCode	contIntegration	URL	link to continuous integration service
+codemeta:SoftwareSourceCode	buildInstructions	URL	link to installation instructions/documentation
+codemeta:SoftwareSourceCode	developmentStatus	Text	Description of development status, e.g. Active, inactive, supsended. See repostatus.org
+codemeta:SoftwareSourceCode	embargoDate	Date	Software may be embargoed from public access until a specified date (e.g. pending publication, 1 year from publication)
+codemeta:SoftwareSourceCode	funding	Text	Funding source (e.g. specific grant)
+codemeta:SoftwareSourceCode	issueTracker	URL	link to software bug reporting or issue tracking system
+codemeta:SoftwareSourceCode	referencePublication	ScholarlyArticle	An academic publication related to the software.
+codemeta:SoftwareSourceCode	readme	URL	link to software Readme file
diff --git a/codemeta.ods b/codemeta.ods
new file mode 100644
index 0000000..574f1c3
Binary files /dev/null and b/codemeta.ods differ
diff --git a/codemeta_generation.js b/codemeta_generation.js
index c88ea1e..0be74ea 100644
--- a/codemeta_generation.js
+++ b/codemeta_generation.js
@@ -1,180 +1,181 @@
 /**
  * Copyright (C) 2019  The Software Heritage developers
  * See the AUTHORS file at the top-level directory of this distribution
  * License: GNU Affero General Public License version 3, or any later version
  * See top-level LICENSE file for more information
  */
 
 "use strict";
 
 const SPDX_PREFIX = 'https://spdx.org/licenses/';
 
 function emptyToUndefined(v) {
     if (v == null || v == "")
         return undefined;
     else
         return v;
 }
 
 function getIfSet(query) {
     return emptyToUndefined(document.querySelector(query).value);
 }
 
 function setIfDefined(query, value) {
     if (value !== undefined) {
         document.querySelector(query).value = value;
     }
 }
 
 // Names of codemeta properties with a matching HTML field name
 const directCodemetaFields = [
     'codeRepository',
     'contIntegration',
     'dateCreated',
     'datePublished',
     'dateModified',
     'issueTracker',
     'name',
     'version',
     'identifier',
     'description',
     'applicationCategory',
     //keywords TODO:keywords array 
     'releaseNotes',
     'funding',
     'runtimePlatform',
-    //softwareRequiremnts
+    //softwareRequiremnts,
+    'operatingSystem',
     'developmentStatus',
     //relatedLink
     'programmingLanguage',
     'isPartOf',
     //'referencePublication'
     //      "@type": "ScholarlyArticle",
     //      "idendifier": "https://doi.org/xx.xxxx/xxxx.xxxx.xxxx",
     //      "name": "title of publication"
     
 ];
 
 // Names of codemeta properties with a matching HTML field name,
 // in a Person object
 const directPersonCodemetaFields = [
     'givenName',
     'familyName',
     'email',
     'affiliation'   
 ];
 
 function generatePerson(idPrefix) {
     var doc = {
         "@type": "Person",
         "@id": getIfSet(`#${idPrefix}_id`),
     }
     directPersonCodemetaFields.forEach(function (item, index) {
         doc[item] = getIfSet(`#${idPrefix}_${item}`);
     });
 
     return doc;
 }
 
 function generatePersons(prefix) {
     var persons = [];
     var nbPersons = getNbPersons(prefix);
 
     for (let personId = 1; personId <= nbPersons; personId++) {
         persons.push(generatePerson(`${prefix}_${personId}`));
     }
 
     return persons;
 }
 
 function generateCodemeta() {
     var inputForm = document.querySelector('#inputForm');
     var codemetaText, errorHTML;
 
     if (inputForm.checkValidity()) {
         var doc = {
             "@context": "https://doi.org/10.5063/schema/codemeta-2.0",
             "@type": "SoftwareSourceCode",
             "license": SPDX_PREFIX + getIfSet('#license'),
         };
 
         // Generate most fields
         directCodemetaFields.forEach(function (item, index) {
             doc[item] = getIfSet('#' + item)
         });
 
         // Generate dynamic fields
         doc = Object.assign(doc, {
             "author": generatePersons('author'),
             "contributor": generatePersons('contributor'),
         });
 
         codemetaText = JSON.stringify(doc, null, 4);
         errorHTML = "";
     }
     else {
         codemetaText = "";
         errorHTML = "invalid input (see error above)";
         inputForm.reportValidity();
     }
 
     document.querySelector('#codemetaText').innerText = codemetaText;
     setError(errorHTML);
 
     if (codemetaText) {
         // For restoring the form state on page reload
         sessionStorage.setItem('codemetaText', codemetaText);
     }
 }
 
 function importPersons(prefix, legend, docs) {
     if (docs === 'undefined') {
         return;
     }
 
     docs.forEach(function (doc, index) {
         var personId = addPerson(prefix, legend);
 
         setIfDefined(`#${personId}_id`, doc['@id']);
         directPersonCodemetaFields.forEach(function (item, index) {
             setIfDefined(`#${prefix}_${personId}_${item}`, doc[item]);
         });
     })
 }
 
 function importCodemeta() {
     var inputForm = document.querySelector('#inputForm');
     var codemetaText = document.querySelector('#codemetaText').innerText;
     var doc;
 
     try {
         doc = JSON.parse(codemetaText);
     }
     catch (e) {
         setError(`Could not read codemeta document because it is not valid JSON (${e})`);
         return;
     }
     resetForm();
 
     if (doc['license'] !== undefined && doc['license'].indexOf(SPDX_PREFIX) == 0) {
         var license = doc['license'].substring(SPDX_PREFIX.length);
         document.querySelector('#license').value = license;
     }
 
     directCodemetaFields.forEach(function (item, index) {
         setIfDefined('#' + item, doc[item]);
     });
 
     importPersons('author', 'Author', doc['author'])
     importPersons('contributor', 'Contributor', doc['contributor'])
 
     setError("");
 }
 
 function loadStateFromStorage() {
     codemetaText = sessionStorage.getItem('codemetaText')
     if (codemetaText) {
         document.querySelector('#codemetaText').innerText = codemetaText;
         importCodemeta();
     }
 }
diff --git a/dynamic_form.js b/dynamic_form.js
index a62ad96..50e58d9 100644
--- a/dynamic_form.js
+++ b/dynamic_form.js
@@ -1,120 +1,120 @@
 /**
  * Copyright (C) 2019  The Software Heritage developers
  * See the AUTHORS file at the top-level directory of this distribution
  * License: GNU Affero General Public License version 3, or any later version
  * See top-level LICENSE file for more information
  */
 
 "use strict";
 
 function createPersonFieldset(personPrefix, legend) {
     // Creates a fieldset containing inputs for informations about a person
     var fieldset = document.createElement("fieldset")
     fieldset.classList.add("person");
     fieldset.id = personPrefix;
     
     fieldset.innerHTML = `
         <legend>${legend}</legend>
         <p>
             <label for="${personPrefix}_givenName">Given name</label>
             <input type="text" id="${personPrefix}_givenName" name="${personPrefix}_givenName"
                 placeholder="Jane" required="true" />
         </p>
         <p>
             <label for="${personPrefix}_familyName">Family name</label>
             <input type="text" id="${personPrefix}_familyName" name="${personPrefix}_familyName"
                 placeholder="Doe" />
         </p>
         <p>
             <label for="${personPrefix}_email">E-mail address</label>
             <input type="email" id="${personPrefix}_email" name="${personPrefix}_email"
                 placeholder="jane.doe@example.org" />
         </p>
         <p>
             <label for="${personPrefix}_id">URI</label>
             <input type="url" id="${personPrefix}_id" name="${personPrefix}_id"
                 placeholder="http://orcid.org/0000-0002-1825-0097" />
         </p>
         <p>
         <label for="${personPrefix}_affiliation">Affiliation</label>
         <input type="url" id="${personPrefix}_affiliation" name="${personPrefix}_affiliation"
             placeholder="Department of Computer Science, University of Pisa" />
-    </p>
+        </p>
     `;
 
     return fieldset;
 }
 
 function addPersonWithId(container, prefix, legend, id) {
     var fieldset = createPersonFieldset(`${prefix}_${id}`, `${legend} #${id}`);
 
     container.appendChild(fieldset);
 }
 
 function addPerson(prefix, legend) {
     var container = document.querySelector(`#${prefix}_container`);
     var personId = getNbPersons(prefix) + 1;
 
     addPersonWithId(container, prefix, legend, personId);
 
     setNbPersons(prefix, personId);
 
     return personId;
 }
 
 function removePerson(prefix) {
     var personId = getNbPersons(prefix);
 
     document.querySelector(`#${prefix}_${personId}`).remove();
 
     setNbPersons(prefix, personId-1);
 }
 
 // Initialize a group of persons (authors, contributors) on page load.
 // Useful if the page is reloaded.
 function initPersons(prefix, legend) {
     var nbPersons = getNbPersons(prefix);
     var personContainer = document.querySelector(`#${prefix}_container`)
 
     for (let personId = 1; personId <= nbPersons; personId++) {
         addPersonWithId(personContainer, prefix, legend, personId);
     }
 }
 
 function removePersons(prefix) {
     var nbPersons = getNbPersons(prefix);
     var personContainer = document.querySelector(`#${prefix}_container`)
 
     for (let personId = 1; personId <= nbPersons; personId++) {
         removePerson(prefix)
     }
 }
 
 function resetForm() {
     removePersons('author');
     removePersons('contributor');
 
     // Reset the form after deleting elements, so nbPersons doesn't get
     // reset before it's read.
     document.querySelector('#inputForm').reset();
 }
 
 function initCallbacks() {
     document.querySelector('#license')
         .addEventListener('change', validateLicense);
 
     document.querySelector('#generateCodemeta')
         .addEventListener('click', generateCodemeta);
 
     document.querySelector('#resetForm')
         .addEventListener('click', resetForm);
 
     document.querySelector('#importCodemeta')
         .addEventListener('click', importCodemeta);
 
     document.querySelector('#inputForm')
         .addEventListener('change', generateCodemeta);
 
     initPersons('author', 'Author');
     initPersons('contributor', 'Contributor');
 }
diff --git a/fields_data.js b/fields_data.js
index 004a4dc..b60374e 100644
--- a/fields_data.js
+++ b/fields_data.js
@@ -1,50 +1,51 @@
 /**
  * Copyright (C) 2019  The Software Heritage developers
  * See the AUTHORS file at the top-level directory of this distribution
  * License: GNU Affero General Public License version 3, or any later version
  * See top-level LICENSE file for more information
  */
 
 "use strict";
 
 var SPDX_LICENSES = null;
 var SPDX_LICENSE_IDS = null;
 
+
 function initSpdx() {
     var xhr = new XMLHttpRequest();
     xhr.open('GET', './data/spdx/licenses.json', true);
     xhr.onload = function () {
         if (xhr.status === 200) {
             SPDX_LICENSES = JSON.parse(xhr.response)['licenses'];
 
             var datalist = document.getElementById('licenses');
 
             SPDX_LICENSES.forEach(function (license) {
                 var option = document.createElement('option');
                 option.value = license['licenseId'];
                 option.label = `${license['licenseId']}: ${license['name']}`;
                 datalist.appendChild(option);
             });
             SPDX_LICENSE_IDS = SPDX_LICENSES.map(function (license) {
                 return license['licenseId'];
             })
         }
     }
     xhr.send();
 }
 
 function validateLicense() {
     var licenseField = document.getElementById('license');
     var license = licenseField.value;
     if (SPDX_LICENSE_IDS !== null && SPDX_LICENSE_IDS.indexOf(license) == -1) {
         licenseField.setCustomValidity('Unknown license id');
     }
     else {
         licenseField.setCustomValidity('');
     }
 
 }
 
 function initFieldsData() {
     initSpdx();
 }
diff --git a/index.html b/index.html
index 14caa29..cb6509a 100644
--- a/index.html
+++ b/index.html
@@ -1,208 +1,243 @@
 <!doctype html>
 <!--
 Copyright (C) 2019  The Software Heritage developers
 See the AUTHORS file at the top-level directory of this distribution
 License: GNU Affero General Public License version 3, or any later version
 See top-level LICENSE file for more information
 -->
 <html lang="en">
 <head>
     <meta charset="utf-8">
     <title>CodeMeta generator</title>
     <script src="./utils.js"></script>
     <script src="./fields_data.js"></script>
     <script src="./dynamic_form.js"></script>
     <script src="./codemeta_generation.js"></script>
     <link rel="stylesheet" type="text/css" href="./style.css">
 </head>
 <body>
     <h1>CodeMeta generator</h1>
 
     <p>Most fields are optional. Mandatory fields will be highlighted when generating Codemeta.</p>
 
     <form id="inputForm">
         <fieldset id="fieldsetSoftwareItself">
             <legend>The software itself</legend>
 
             <p title="The name of the software">
                 <label for="name">Name</label>
                 <input type="text" name="name" id="name"
                     placeholder="My Software" required="true" />
+                <description>the software title</description>
             </p>
 
 
-            <p title="A unique identifier">
+            <p title="Unique identifier">
                 <label for="identifier">Unique identifier</label>
                 <input type="text" name="identifier" id="identifier"
-                    placeholder="?????"  />
-            </p> <!-- TODO:define better-->
+                    placeholder="10.151.xxxxx"  />
+                    <description>such as ISBNs, GTIN codes, UUIDs etc..  <a href="http://schema.org/identifier">http://schema.org/identifier</a> </description>
+            </p> 
+            <!-- TODO:define better
+            
+            I looked at the schema.org definition of identifier (https://schema.org/identifier),
+            it can be text, url or PropertyValue.
+            Used as follows in data representation with microdata:
+
+            <div property="identifier" typeof="PropertyValue">
+            <span property="propertyID">DOI</span>: 
+            <span property="value">10.151.xxxxx</span>
+            </div>
+            we can use that with identifier-type and identifier-value to have a clearer idea 
+            of what needs to be in the input.
+            
+            -->
 
             <p title="Type of the software application">
                 <label for="applicationCategory">Application category</label>
                 <input type="text" name="applicationCategory" id="applicationCategory"
                     placeholder="Astronomy"  />
             </p>
 
             <p title="a brief description of the software">
                 <label for="description">Description</label>
                 <br>
                 <textarea rows="4" cols="50" 
                     name="description" id="description"
                     placeholder="My Software computes ephemerides and orbit propagation. It has been developed from early ´80." ></textarea>
             </p> 
             
 
             <p title="The date on which the software was created.">
                 <label for="dateCreated">Creation date</label>
                 <input type="text" name="dateCreated" id="dateCreated"
                     placeholder="YYYY-MM-DD" pattern="\d{4}-\d{2}-\d{2}" />
             </p>
 
             <p title="Date of first publication.">
                 <label for="datePublished">First release date</label>
                 <input type="text" name="datePublished" id="datePublished"
                     placeholder="YYYY-MM-DD" pattern="\d{4}-\d{2}-\d{2}" />
             </p>
 
             <p>
                 <label for="license">License</label>
                 <input list="licenses" name="license" id="license">
                 <datalist id="licenses">
-                </datalist>
-            </p>
-        </fieldset>
-
-        <fieldset id="fieldsetDevelopmentCommunity">
-            <legend>Additional Info</legend>
-            <p title="Funding">
-                <label for="funding">Funding</label>
-                <input type="text" name="funding" id="funding"
-                    placeholder="software funded by...(e.g. specific grant)"  />
-            </p>
-
-            <p title="Runtime Platform">
-                <label for="runtimePlatform">Runtime Platform</label>
-                <input type="text" name="runtimePlatform" id="runtimePlatform"
-                    placeholder="Operating system"  />
-            </p>
-
-            <p title="Development Status">
-                <label for="developmentStatus">Development Status</label>
-                <input type="text" name="developmentStatus" id="developmentStatus"
-                    placeholder="Concept/WIP/Suspended/Abandoned/Active/Inactive/Unsupported/Moved - (www.repostatus.org)"  />
-            </p>
-
-            <p title="Programming Language">
-                <label for="programmingLanguage">Programming Language</label>
-                <input type="text" name="programmingLanguage" id="programmingLanguage"
-                    placeholder="C#"  />
-            </p>
-
-            <p title="Part of">
-                <label for="isPartOf">Funding</label>
-                <input type="text" name="isPartOf" id="isPartOf"
-                    placeholder="part of ... project"  />
+                </datalist> <!-- TODO: insert placeholder -->
+                <description>from <a href="https://spdx.org/license-list">SPDX licence list</a></description>
             </p>
         </fieldset>
 
         <fieldset id="fieldsetDevelopmentCommunity">
             <legend>Development community / tools</legend>
 
             <p title="Link to the repository where the un-compiled, human readable code and related code is located (SVN, Git, GitHub, CodePlex, institutional GitLab instance, etc.).">
                 <label for="codeRepository">Code repository</label>
                 <input type="URL" name="codeRepository" id="codeRepository"
                     placeholder="git+https://github.com/You/RepoName.git" />
             </p>
 
             <p title="Link to continuous integration service (Travis-CI, Gitlab CI, etc.).">
                 <label for="contIntegration">Continuous integration</label>
                 <input type="URL" name="contIntegration" id="contIntegration"
                     placeholder="https://travis-ci.org/You/RepoName" />
             </p>
 
             <p title="Link to a place for users/developpers to report and manage bugs (JIRA, GitHub issues, etc.).">
                 <label for="issueTracker">Issue tracker</label>
                 <input type="URL" name="issueTracker" id="issueTracker"
                     placeholder="https://github.com/You/RepoName/issues" />
             </p>
         </fieldset>
 
         <fieldset id="fieldsetCurrentVersion">
             <legend>Current version of the software</legend>
 
             <p title="Version number of the software">
                 <label for="version">Version number</label>
                 <input type="text" name="version" id="version"
                     placeholder="1.0.0" />
             </p>
 
             <p title="The date on which the software was most recently modified.">
                 <label for="dateModified">Release date</label>
                 <input type="text" name="dateModified" id="dateModified"
                     placeholder="YYYY-MM-DD" pattern="\d{4}-\d{2}-\d{2}" />
             </p>
 
             <p title="a brief description of the software">
                 <label for="releaseNotes">Release notes</label>
                 <br>
                 <textarea rows="4" cols="50" 
                     name="releaseNotes" id="releaseNotes"
                     placeholder=
 "Change log: this and that; 
 Bugfixes: that and this." ></textarea>
             </p> 
 <!--TODO: keywords as a string array -->
 
 <!--TODO: software requirements as string array -->
 
 <!--TODO: related links as URL array -->
 
 <!--TODO: referencePublication as ScholarlyArticle array -->
 
         </fieldset>
 
         <fieldset class="persons" id="author_container">
             <legend>Authors</legend>
 
             <p>Order of authors does not matter.</p>
 
             <input type="hidden" id="author_nb" value="0" />
             <div id="addRemoveAuthor">
                 <input type="button" id="author_add" value="Add one"
                     onclick="addPerson('author', 'Author');" />
                 <input type="button" id="author_remove" value="Remove last"
                     onclick="removePerson('author');" />
             </div>
         </fieldset>
 
         <fieldset class="persons" id="contributor_container">
             <legend>Contributors</legend>
 
             <p>Order of contributors does not matter.</p>
 
             <input type="hidden" id="contributor_nb" value="0" />
             <div id="addRemoveContributor">
                 <input type="button" id="contributor_add" value="Add one"
                     onclick="addPerson('contributor', 'Contributor');" />
                 <input type="button" id="contributor_remove" value="Remove last"
                     onclick="removePerson('contributor');" />
             </div>
         </fieldset>
+
+        <fieldset id="fieldsetAdditionalInfo">
+            <legend>Additional Info</legend>
+            <p title="Funding">
+                <label for="funding">Funding</label>
+                <input type="text" name="funding" id="funding"
+                    placeholder="Università di Pisa (PRA_2018_73)"/>
+                <description>software funded by (e.g. specific grant)</description>
+            </p>
+
+            <p title="Runtime Platform">
+                <label for="runtimePlatform">Runtime Platform</label>
+                <input type="text" name="runtimePlatform" id="runtimePlatform"
+                    placeholder="Python2.3"  />
+            </p>
+
+            <p title="Operating System">
+                <label for="operatingSystem">Operating System</label>
+                <input type="text" name="operatingSystem" id="operatingSystem"
+                    placeholder="Android 1.6"  />
+            </p>
+
+            <p title="Development Status">
+            <label for="developmentStatus">Development Status</label>
+                <datalist id="developmentStatuses">
+                        <option value="Concept">
+                        <option value="WIP">
+                        <option value="Suspended">
+                        <option value="Abandoned">
+                        <option value="Active">
+                        <option value="Inactive">
+                        <option value="Unsupported">
+                        <option value="Moved">
+                </datalist>
+                <input list="developmentStatuses" id="developmentStatus" 
+                pattern="Concept|WIP|Suspended|Abandoned|Active|Inactive|Unsupported|Moved">
+                <description>see <a href="http://www.repostatus.org">www.repostatus.org</a> for details</description>
+            </p>
+
+            <p title="Programming Language">
+                <label for="programmingLanguage">Programming Language</label>
+                <input type="text" name="programmingLanguage" id="programmingLanguage"
+                    placeholder="C#"  />
+            </p> <!-- TODO: We should add support for multiple languages, eg. by splitting on commas when exporting. -->
+
+            <p title="Part of">
+                <label for="isPartOf">I part of </label>
+                <input type="URL" name="isPartOf" id="isPartOf"
+                    placeholder="http://The.Bigger.Framework.org"  />
+            </p>
+        </fieldset>
     </form>
     <form>
         <input type="button" id="generateCodemeta" value="Generate Codemeta" />
         <input type="button" id="resetForm" value="Reset form" />
         <input type="button" id="importCodemeta" value="Import Codemeta" />
     </form>
 
     <p id="errorMessage">
     </p>
     <pre contentEditable="true" id="codemetaText"></pre>
 
     <script>
         initFieldsData();
         initCallbacks();
         loadStateFromStorage();
     </script>
 </body>
 </html>
diff --git a/style.css b/style.css
index 67e7e65..c44c8aa 100644
--- a/style.css
+++ b/style.css
@@ -1,35 +1,53 @@
 /**
  * Copyright (C) 2019  The Software Heritage developers
  * See the AUTHORS file at the top-level directory of this distribution
  * License: GNU Affero General Public License version 3, or any later version
  * See top-level LICENSE file for more information
  */
 
 
 .person {
     display: inline-block;
 }
 
 #fieldsetSoftwareItself, #fieldsetDevelopmentCommunity, #fieldsetCurrentVersion {
     display: inline-block;
 }
 
 #license {
     /* License names are long */
     min-width: 20em;
 }
 
+#funding {
+    /* Funding names are long */
+    min-width: 20em;
+}
+
 input[type=URL] {
     /* URLs are longer than the other fields */
     min-width: 20em;
 }
+description {
+    color : rgb(100, 104, 103);
+    font-size: small;
+    display: block;
+}
 
 #codemetaText {
     width: 100%;
     min-height: 10em;
     border: 1px solid black;
 }
 
 #errorMessage {
     color: red;
 }
+
+input:valid {
+    color: black;
+  }
+input:invalid {
+    color: red;
+  }
+