diff --git a/resources/xsl/4.1/doi2landing.xsl b/resources/xsl/4.1/doi2landing.xsl
index 786d2e19cd9750c307be75db40fb95361c70e0b3..dcf94ec8e93c2337c65d6040f375156a5131f0e2 100644
--- a/resources/xsl/4.1/doi2landing.xsl
+++ b/resources/xsl/4.1/doi2landing.xsl
@@ -161,7 +161,8 @@
                 <xsl:apply-templates select="./d:subjects"/>
                 <xsl:apply-templates select="./d:geoLocations"/>
                 <xsl:apply-templates select="./d:dates"/>
-
+                <xsl:apply-templates select="./d:contributors"/>
+                <xsl:apply-templates select="./d:fundingReferences"/>
 
                 <!-- remaining meta data -->
                 <xsl:apply-templates select="./*[not(local-name() = 'identifier'
@@ -175,6 +176,8 @@
                                                 or local-name() = 'subjects'
                                                 or local-name() = 'geoLocations'
                                                 or local-name() = 'dates'
+                                                or local-name() = 'contributors'
+                                                or local-name() = 'fundingReferences'
                                             )]"/>
             </tbody>
         </table>
@@ -580,17 +583,24 @@
 
     <xsl:template match="d:geoLocations/d:geoLocation">
         <li>
-            <!-- TODO: tokenize and display properly point and box -->
             <xsl:choose>
                 <xsl:when test="d:geoLocationPlace">
                     <xsl:value-of select="d:geoLocationPlace" />
                 </xsl:when>
                 <xsl:when test="d:geoLocationPoint">
-                    <xsl:value-of select="d:geoLocationPoint" />
+                    <xsl:value-of select="d:geoLocationPoint/d:pointLatitude" />
+                    <xsl:text> </xsl:text>
+                    <xsl:value-of select="d:geoLocationPoint/d:pointLongitude" />
                     <xsl:text> (N. E.)</xsl:text>
                 </xsl:when>
                 <xsl:when test="d:geoLocationBox">
-                    <xsl:value-of select="d:geoLocationBox" />
+                    <xsl:value-of select="d:geoLocationBox/d:southBoundLatitude" />
+                    <xsl:text> </xsl:text>
+                    <xsl:value-of select="d:geoLocationBox/d:westBoundLongitude" />
+                    <xsl:text> </xsl:text>
+                    <xsl:value-of select="d:geoLocationBox/d:northBoundLatitude" />
+                    <xsl:text> </xsl:text>
+                    <xsl:value-of select="d:geoLocationBox/d:eastBoundLongitude" />
                     <xsl:text> (S. W. N. E.)</xsl:text>
                 </xsl:when>
             </xsl:choose>
@@ -598,6 +608,33 @@
     </xsl:template>
 
 
+    <!-- 7. FundingReference(s) -->
+    <xsl:template match="d:fundingReferences">
+        <tr>
+            <th class="flabel" colspan="2">Funding References</th>
+        </tr>
+        <xsl:apply-templates />
+    </xsl:template>
+
+    <xsl:template match="d:fundingReferences/d:fundingReference">
+        <tr class="no-border">
+            <td/>
+            <td>
+                <xsl:value-of select="d:funderName"/>
+                <xsl:if test="./d:awardTitle">
+                    :<b>
+                        <br/>
+                        <xsl:value-of select="./d:awardTitle/text()" />
+                        <xsl:text> (</xsl:text>
+                        <xsl:value-of select="./d:awardNumber/text()" />
+                        <xsl:text>)</xsl:text>
+                    </b>
+                </xsl:if>
+            </td>
+        </tr>
+    </xsl:template>
+
+
 
 
     <!-- utility templates -->
diff --git a/resources/xsl/4.1/xml2doi.xsl b/resources/xsl/4.1/xml2doi.xsl
index 672f3acd6c3e205c930cb6185612ed6445d9f77a..e1f0c773ef7b91f6644fc100de7aaf8edea9dae6 100644
--- a/resources/xsl/4.1/xml2doi.xsl
+++ b/resources/xsl/4.1/xml2doi.xsl
@@ -377,12 +377,50 @@
         <xsl:if test="text()">
             <geoLocation>
                 <xsl:element name="{@key}">
-                    <xsl:value-of select="text()"/>
+                    <xsl:choose>
+                        <xsl:when test="@key = 'geoLocationPoint' or @key = 'geoLocationBox'">
+                            <xsl:variable name="tokens">
+                                <xsl:call-template name="split">
+                                    <xsl:with-param name="string" select="text()"/>
+                                    <xsl:with-param name="pattern" select="' '" />
+                                </xsl:call-template>
+                            </xsl:variable>
+                            <xsl:variable name="nodes" select="exsl:node-set($tokens)/token"/>
+                            <xsl:choose>
+                                <xsl:when test="@key = 'geoLocationPoint'">
+                                    <pointLatitude>
+                                        <xsl:value-of select="$nodes[1]/text()"/>
+                                    </pointLatitude>
+                                    <pointLongitude>
+                                        <xsl:value-of select="$nodes[2]/text()"/>
+                                    </pointLongitude>
+                                </xsl:when>
+                                <xsl:when test="@key = 'geoLocationBox'">
+                                    <southBoundLatitude>
+                                        <xsl:value-of select="$nodes[1]/text()"/>
+                                    </southBoundLatitude>
+                                    <westBoundLongitude>
+                                        <xsl:value-of select="$nodes[2]/text()"/>
+                                    </westBoundLongitude>
+                                    <northBoundLatitude>
+                                        <xsl:value-of select="$nodes[3]/text()"/>
+                                    </northBoundLatitude>
+                                    <eastBoundLongitude>
+                                        <xsl:value-of select="$nodes[4]/text()"/>
+                                    </eastBoundLongitude>
+                                </xsl:when>
+                            </xsl:choose>
+                        </xsl:when>
+                        <xsl:otherwise>
+                            <xsl:value-of select="text()"/>
+                        </xsl:otherwise>
+                    </xsl:choose>
                 </xsl:element>
             </geoLocation>
         </xsl:if>
     </xsl:template>
 
+    <!-- fundingReference (4.0) -->
     <xsl:template match="property" mode="funder">
         <xsl:if test="text()">
             <fundingReference>
@@ -426,6 +464,7 @@
         </xsl:if>
     </xsl:template>
 
+    <!-- fundingReference attributes (4.0) -->
     <xsl:template match="attribute" mode="awardNumber">
         <xsl:if test="text()">
             <awardNumber>
@@ -442,4 +481,61 @@
         </xsl:if>
     </xsl:template>
 
+
+
+    <!-- split pattern -->
+    <xsl:template name="split">
+        <xsl:param name="string" select="''" />
+        <xsl:param name="pattern" select="' '" />
+        <xsl:choose>
+            <xsl:when test="not($string)" />
+            <xsl:when test="not($pattern)">
+                <xsl:call-template name="_split-characters">
+                    <xsl:with-param name="string" select="$string" />
+                </xsl:call-template>
+            </xsl:when>
+            <xsl:otherwise>
+                <xsl:call-template name="_split-pattern">
+                    <xsl:with-param name="string" select="$string" />
+                    <xsl:with-param name="pattern" select="$pattern" />
+                </xsl:call-template>
+            </xsl:otherwise>
+        </xsl:choose>
+    </xsl:template>
+
+    <xsl:template name="_split-characters">
+        <xsl:param name="string" />
+        <xsl:if test="$string">
+            <token>
+                <xsl:value-of select="substring($string, 1, 1)" />
+            </token>
+            <xsl:call-template name="_split-characters">
+                <xsl:with-param name="string" select="substring($string, 2)" />
+            </xsl:call-template>
+        </xsl:if>
+    </xsl:template>
+
+    <xsl:template name="_split-pattern">
+        <xsl:param name="string" />
+        <xsl:param name="pattern" />
+        <xsl:choose>
+            <xsl:when test="contains($string, $pattern)">
+                <xsl:if test="not(starts-with($string, $pattern))">
+                    <token>
+                        <xsl:value-of select="substring-before($string, $pattern)" />
+                    </token>
+                </xsl:if>
+                <xsl:call-template name="_split-pattern">
+                    <xsl:with-param name="string" select="substring-after($string, $pattern)" />
+                    <xsl:with-param name="pattern" select="$pattern" />
+                </xsl:call-template>
+            </xsl:when>
+            <xsl:otherwise>
+                <token>
+                    <xsl:value-of select="$string" />
+                </token>
+            </xsl:otherwise>
+        </xsl:choose>
+    </xsl:template>
+
 </xsl:stylesheet>
diff --git a/src/main/java/fr/osug/doi/Const.java b/src/main/java/fr/osug/doi/Const.java
index 95bbaf1ccea483c8bbec4f546f51008685849717..a626a6442014e188b828cbc94dbde982f5c95ba5 100644
--- a/src/main/java/fr/osug/doi/Const.java
+++ b/src/main/java/fr/osug/doi/Const.java
@@ -15,7 +15,7 @@ public interface Const {
     public final static float F_SCHEMA_VERSION_4_1 = Float.valueOf(SCHEMA_VERSION_4_1);
 
     /** datacite schema version '3.1' or '4.1' */
-    public final static String SCHEMA_VERSION = SCHEMA_VERSION_3_1;
+    public final static String SCHEMA_VERSION = SCHEMA_VERSION_4_1;
     public final static float F_SCHEMA_VERSION = Float.valueOf(SCHEMA_VERSION);
 
     public final static String DOI_PREFIX_TEST = "10.5072";
diff --git a/src/main/java/fr/osug/doi/DoiTemplates.java b/src/main/java/fr/osug/doi/DoiTemplates.java
index 6c3303062ec5b9c09bfb0024b4540df1b8f4a6cd..38bffa69ad92a56eea82603d9d41d9cac7edfd7d 100644
--- a/src/main/java/fr/osug/doi/DoiTemplates.java
+++ b/src/main/java/fr/osug/doi/DoiTemplates.java
@@ -40,6 +40,9 @@ public final class DoiTemplates {
                     logger.debug("initialize: [{}] \n{}", data.getFilePath(), data);
                 }
 
+                // Upgrade metadata:
+                ProcessPipeline.upgradeData(data, templatePath);
+
                 final String doiId = data.getDoiId();
                 if (doiId != null) {
                     final DoiCsvData prevData = identifiers.put(doiId, data);
diff --git a/src/main/java/fr/osug/doi/ProcessPipeline.java b/src/main/java/fr/osug/doi/ProcessPipeline.java
index ba69c36c8eb8350f7bf651dd700143ee69c68dda..5f839332b75535b4290d344c76eed7d9f87ace14 100644
--- a/src/main/java/fr/osug/doi/ProcessPipeline.java
+++ b/src/main/java/fr/osug/doi/ProcessPipeline.java
@@ -254,7 +254,7 @@ public final class ProcessPipeline extends AbstractPipeline<ProcessPipelineData>
                         }
 
                         // Upgrade metadata:
-                        upgradeData(data, doiData);
+                        upgradeData(data, doiData.getDoiId());
 
                         // Validate metadata:
                         validateData(projectConfig, data, doiData);
@@ -458,9 +458,9 @@ public final class ProcessPipeline extends AbstractPipeline<ProcessPipelineData>
         pipeData.addRefs(doiData.getDoiId(), refs);
     }
 
-    private void upgradeData(final DoiCsvData data, final ProcessPipelineDoiData doiData) throws IOException {
+    public static void upgradeData(final DoiCsvData data, final String id) throws IOException {
         if (Const.F_SCHEMA_VERSION >= Const.F_SCHEMA_VERSION_4_1) {
-            logger.debug("upgradeData [{}] to schema {}", doiData.getDoiId(), Const.SCHEMA_VERSION);
+            logger.debug("upgradeData[{}] to schema {}", id, Const.SCHEMA_VERSION);
 
             for (ListIterator<String[]> it = data.getRows().listIterator(); it.hasNext();) {
                 String[] cols = it.next();
@@ -470,7 +470,7 @@ public final class ProcessPipeline extends AbstractPipeline<ProcessPipelineData>
                     // Convert 'contributorName:Funder' (deprecated ContributorType=Funder) to 'funderName' (fundingReference)
                     if (Const.KEY_CONTRIBUTOR_FUNDER_NAME.equals(key)) {
                         if (cols.length > 2) {
-                            logger.warn("upgradeData [{}] : Complex Contributor::Funder = {}", Arrays.toString(cols));
+                            logger.warn("upgradeData[{}] : Complex Contributor::Funder = {}", Arrays.toString(cols));
                             // trim (optional attributes like affiliation or orcid)
                             final String value = cols[1];
                             cols = new String[2];
@@ -478,12 +478,11 @@ public final class ProcessPipeline extends AbstractPipeline<ProcessPipelineData>
                         }
                         cols[0] = Const.KEY_FUNDER_NAME;
                         
-                        logger.info("upgradeData [{}]: Fixed Funder = {}", doiData.getDoiId(), cols[1]);
+                        logger.info("upgradeData[{}]: Fixed Funder: '{}'", id, cols[1]);
                         it.set(cols);
                     }
                 }
             }
         }
-
     }
 }