summary refs log tree commit diff
path: root/gnu
diff options
context:
space:
mode:
authorMarius Bakke <mbakke@fastmail.com>2020-04-24 17:28:11 +0200
committerMarius Bakke <mbakke@fastmail.com>2020-04-24 17:28:11 +0200
commitc57d649de380da890f296428b85564cbc527bbad (patch)
tree79e9c0b5407aea91c421f7004a0da7bb1e207ba4 /gnu
parent69c2e0103ab64aa6e0beb7651797de9cfd22a6d7 (diff)
parent9b42918edd3f7e9d505c874d3947c0a0815fe551 (diff)
downloadguix-c57d649de380da890f296428b85564cbc527bbad.tar.gz
Merge branch 'master' into core-updates
Diffstat (limited to 'gnu')
-rw-r--r--gnu/local.mk2
-rw-r--r--gnu/packages/aux-files/run-in-namespace.c10
-rw-r--r--gnu/packages/cran.scm242
-rw-r--r--gnu/packages/datamash.scm4
-rw-r--r--gnu/packages/datastructures.scm4
-rw-r--r--gnu/packages/dictionaries.scm16
-rw-r--r--gnu/packages/fonts.scm3
-rw-r--r--gnu/packages/linux.scm12
-rw-r--r--gnu/packages/llvm.scm54
-rw-r--r--gnu/packages/music.scm80
-rw-r--r--gnu/packages/networking.scm5
-rw-r--r--gnu/packages/package-management.scm6
-rw-r--r--gnu/packages/patches/biber-sortinithash.patch1657
-rw-r--r--gnu/packages/patches/clang-10.0-libc-search-path.patch84
-rw-r--r--gnu/packages/radio.scm118
-rw-r--r--gnu/packages/tex.scm61
-rw-r--r--gnu/packages/web.scm10
17 files changed, 2321 insertions, 47 deletions
diff --git a/gnu/local.mk b/gnu/local.mk
index 7c117b7a6b..2780434455 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -778,6 +778,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/beignet-correct-file-names.patch		\
   %D%/packages/patches/benchmark-unbundle-googletest.patch	\
   %D%/packages/patches/biber-fix-encoding-write.patch		\
+  %D%/packages/patches/biber-sortinithash.patch			\
   %D%/packages/patches/bidiv-update-fribidi.patch		\
   %D%/packages/patches/binutils-boot-2.20.1a.patch		\
   %D%/packages/patches/binutils-loongson-workaround.patch	\
@@ -807,6 +808,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/clang-6.0-libc-search-path.patch		\
   %D%/packages/patches/clang-7.0-libc-search-path.patch		\
   %D%/packages/patches/clang-9.0-libc-search-path.patch		\
+  %D%/packages/patches/clang-10.0-libc-search-path.patch	\
   %D%/packages/patches/clang-runtime-asan-build-fixes.patch	\
   %D%/packages/patches/clang-runtime-esan-build-fixes.patch	\
   %D%/packages/patches/clang-runtime-9-libsanitizer-mode-field.patch	\
diff --git a/gnu/packages/aux-files/run-in-namespace.c b/gnu/packages/aux-files/run-in-namespace.c
index 551f4db88a..160f7da1c8 100644
--- a/gnu/packages/aux-files/run-in-namespace.c
+++ b/gnu/packages/aux-files/run-in-namespace.c
@@ -1,5 +1,5 @@
 /* GNU Guix --- Functional package management for GNU
-   Copyright (C) 2018, 2019 Ludovic Courtès <ludo@gnu.org>
+   Copyright (C) 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
 
    This file is part of GNU Guix.
 
@@ -343,7 +343,13 @@ Please refer to the 'guix pack' documentation for more information.\n");
 	    chdir ("/");			  /* avoid EBUSY */
 	    rm_rf (new_root);
 	    free (new_root);
-	    exit (status);
+
+	    if (WIFEXITED (status))
+	      exit (WEXITSTATUS (status));
+	    else
+	      /* Abnormal termination cannot really be reproduced, so exit
+		 with 255.  */
+	      exit (255);
 	  }
 	}
     }
diff --git a/gnu/packages/cran.scm b/gnu/packages/cran.scm
index f31187b5c3..5c2e623705 100644
--- a/gnu/packages/cran.scm
+++ b/gnu/packages/cran.scm
@@ -21162,3 +21162,245 @@ evaluated interactively.")
 Bayes factors, posterior model probabilities, and normalizing constants in
 general, via different versions of bridge sampling.")
     (license license:gpl2+)))
+
+(define-public r-tea
+  (package
+    (name "r-tea")
+    (version "1.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "tea" version))
+       (sha256
+        (base32
+         "0ql7lrxk0ihm49kqsvz79ig8i54rwiy9nxav4v9hy72j9kj5bgjn"))))
+    (properties
+     `((upstream-name . "tea")))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-matrix" ,r-matrix)))
+    (home-page "https://cran.r-project.org/web/packages/tea/")
+    (synopsis "Threshold estimation approaches")
+    (description
+     "This package provides different approaches for selecting the threshold
+in generalized Pareto distributions.  Most of them are based on minimizing the
+AMSE-criterion or atleast by reducing the bias of the assumed GPD-model.
+Others are heuristically motivated by searching for stable sample paths, i.e.
+a nearly constant region of the tail index estimator with respect to k, which
+is the number of data in the tail.  The third class is motivated by graphical
+inspection.  In addition, a sequential testing procedure for GPD-GoF-tests
+is also implemented here.")
+    (license license:gpl3)))
+
+(define-public r-awsmethods
+  (package
+    (name "r-awsmethods")
+    (version "1.1-1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "awsMethods" version))
+       (sha256
+        (base32
+         "0hbmrcpdyg15zg4rysscsmxpxlpy0dkxx2aa63qibq7l1k14v4sh"))))
+    (properties
+     `((upstream-name . "awsMethods")))
+    (build-system r-build-system)
+    (home-page "http://www.wias-berlin.de/software/imaging/")
+    (synopsis "Class and methods definitions")
+    (description
+     "This package defines the generic method @code{extract} and provides
+@code{openMP} support as needed in several packages like
+@code{aws}, @code{adimpro}, @code{fmri}, and @code{dwi}.")
+    (license license:gpl2+)))
+
+(define-public r-aws
+  (package
+    (name "r-aws")
+    (version "2.4-2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "aws" version))
+       (sha256
+        (base32
+         "1czlsy64nx6j7h1smgb561yyv3f98pwqwglk77yla4mx3fp14bvq"))))
+    (properties
+     `((upstream-name . "aws")))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-awsmethods" ,r-awsmethods)
+       ("r-gsl" ,r-gsl)))
+    (native-inputs
+     `(("gfortran" ,gfortran)))
+    (home-page "https://cran.r-project.org/web/packages/aws/")
+    (synopsis "Adaptive weights smoothing")
+    (description
+     "This package provides a collection of R-functions implementing adaptive
+smoothing procedures in 1D, 2D and 3D.  This includes the
+Propagation-Separation approach to adaptive smoothing, the @dfn{Intersecting
+Confidence Intervals} (ICI), variational approaches, and a non-local means
+filter.")
+    (license license:gpl2+)))
+
+(define-public r-sgloptim
+  (package
+    (name "r-sgloptim")
+    (version "1.3.8")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "sglOptim" version))
+       (sha256
+        (base32
+         "15bkkvgp9v9vsp65wps48g3c2fa0fj1025hbrziywq14j7wayyjr"))))
+    (properties
+     `((upstream-name . "sglOptim")))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-bh" ,r-bh)
+       ("r-doparallel" ,r-doparallel)
+       ("r-foreach" ,r-foreach)
+       ("r-matrix" ,r-matrix)
+       ("r-rcpp" ,r-rcpp)
+       ("r-rcpparmadillo" ,r-rcpparmadillo)
+       ("r-rcppprogress" ,r-rcppprogress)))
+    (native-inputs
+     `(("r-knitr" ,r-knitr)))
+    (home-page "https://github.com/nielsrhansen/sglOptim")
+    (synopsis "Generic sparse group Lasso solver")
+    (description
+     "This package provides a fast generic solver for sparse group lasso
+optimization problems.  The loss (objective) function must be defined in a C++
+module.  The optimization problem is solved using a coordinate gradient
+descent algorithm.  Convergence of the algorithm is established and the
+algorithm is applicable to a broad class of loss functions.  Use of parallel
+computing for cross validation and subsampling is supported through the
+@code{foreach} and @code{doParallel} packages.")
+    (license license:gpl2+)))
+
+(define-public r-grouped
+  (package
+    (name "r-grouped")
+    (version "0.6-0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "grouped" version))
+       (sha256
+        (base32
+         "1glxgacpwk7yjbkwg5ci6bmb2il6hf5zhydwi5bbq6hc032m9976"))))
+    (properties
+     `((upstream-name . "grouped")))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-mass" ,r-mass)))
+    (home-page "https://cran.r-project.org/web/packages/grouped/")
+    (synopsis "Regression analysis of grouped and coarse data")
+    (description
+     "This package provides regression models for grouped and coarse data,
+under the coarsened at random assumption.")
+    (license license:gpl2+)))
+
+(define-public r-stam
+  (package
+    (name "r-stam")
+    (version "0.0-1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "stam" version))
+       (sha256
+        (base32
+         "1x1j45fir64kffny0nssb2hwn4rcp8gd2cjv6fw4yy0l4d0xi5iv"))))
+    (properties
+     `((upstream-name . "stam")))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-np" ,r-np)
+       ("r-sp" ,r-sp)))
+    (home-page "https://cran.r-project.org/web/packages/stam")
+    (synopsis "Spatio-temporal analysis and modelling")
+    (description
+     "This package provides various methods to conduct Spatio-Temporal
+Analysis and Modelling, including Exploratory Spatio-Temporal Analysis and
+Inferred Spatio-Temporal Modelling.")
+    (license license:gpl2+)))
+
+(define-public r-dcv
+  (package
+    (name "r-dcv")
+    (version "0.1.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "dcv" version))
+       (sha256
+        (base32
+         "12c716x8dnxnqksibpmyysqp2axggvy9dpd55s9bhnsvqvi6dshj"))))
+    (properties
+     `((upstream-name . "dcv")))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-lmtest" ,r-lmtest)))
+    (home-page "https://cran.r-project.org/web/packages/dcv/")
+    (synopsis "Conventional cross-validation statistics for climate-growth model")
+    (description
+     "This package performs several conventional cross-validation statistical
+methods for climate-growth model in the climate reconstruction from tree
+rings, including Sign Test statistic, Reduction of Error statistic, Product
+Mean Test, Durbin-Watson statistic etc.")
+    (license license:gpl2)))
+
+(define-public r-rcdd
+  (package
+    (name "r-rcdd")
+    (version "1.2-2")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "rcdd" version))
+       (sha256
+        (base32
+         "0pzpbqnlgzr240iici70278py5wnbbxkzlgn112f9wv5ga3riric"))))
+    (properties
+     `((upstream-name . "rcdd")))
+    (build-system r-build-system)
+    (inputs
+     `(("gmp" ,gmp)))
+    (home-page "https://www.stat.umn.edu/geyer/rcdd/")
+    (synopsis "Computational geometry")
+    (description
+     "This package converts back and forth between two representations of a
+convex polytope: as solution of a set of linear equalities and inequalities
+and as convex hull of set of points and rays.  Also does linear programming
+and redundant generator elimination.  All functions can use exact
+infinite-precision rational arithmetic.")
+    (license license:gpl2)))
+
+(define-public r-rxnat
+  (package
+    (name "r-rxnat")
+    (version "1.0.8")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (cran-uri "Rxnat" version))
+       (sha256
+        (base32
+         "12xcs2l6vn50bwzfmv60j1qahjw2npfm1a3yjhffcxzh6p8chwbg"))))
+    (properties
+     `((upstream-name . "Rxnat")))
+    (build-system r-build-system)
+    (propagated-inputs
+     `(("r-httr" ,r-httr)
+       ("r-rcurl" ,r-rcurl)))
+    (native-inputs
+     `(("r-knitr" ,r-knitr)))
+    (home-page "https://cran.r-project.org/web/packages/Rxnat/")
+    (synopsis "Queries and extracts images from neuroimaging datasets")
+    (description
+     "This package allows communication with the Extensible Neuroimaging
+Archive Toolkit.  Rxnat uses the XNAT REST API to perform data queries and
+download images.")
+    (license license:gpl2)))
diff --git a/gnu/packages/datamash.scm b/gnu/packages/datamash.scm
index a61ee96fec..d0f4bdfbc0 100644
--- a/gnu/packages/datamash.scm
+++ b/gnu/packages/datamash.scm
@@ -29,7 +29,7 @@
 (define-public datamash
   (package
     (name "datamash")
-    (version "1.6")
+    (version "1.7")
     (source
      (origin
       (method url-fetch)
@@ -37,7 +37,7 @@
                           version ".tar.gz"))
       (sha256
        (base32
-        "1jvqxcyh0aghnqh3m2rk5av1x0038flcmfzd493vasv1k69vgfdr"))))
+        "1cxdlhgz3wzjqlq8bgwad93fgqymk2abbldfzw1ffnhcp4mmjjjp"))))
     (native-inputs
      `(("which" ,which)                 ;for tests
        ("perl" ,perl)))                 ;for help2man
diff --git a/gnu/packages/datastructures.scm b/gnu/packages/datastructures.scm
index 3c8814348f..0f106b7ce9 100644
--- a/gnu/packages/datastructures.scm
+++ b/gnu/packages/datastructures.scm
@@ -129,14 +129,14 @@ in between these sequences may be different in both content and length.")
 (define-public liburcu
   (package
     (name "liburcu")
-    (version "0.12.0")
+    (version "0.12.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://www.lttng.org/files/urcu/"
                                   "userspace-rcu-" version ".tar.bz2"))
               (sha256
                (base32
-                "15wzk3nyy6gh6i7xhksxzs8fjar1g4ddz51iahk1v7lq0vjip6s0"))))
+                "03nd1gy2c3fdb6xwdrd5lr1jcjxbzffqh3z91mzbjhjn6k8fmymv"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("perl" ,perl)))                 ; for tests
diff --git a/gnu/packages/dictionaries.scm b/gnu/packages/dictionaries.scm
index d481b139a5..06ccfafb40 100644
--- a/gnu/packages/dictionaries.scm
+++ b/gnu/packages/dictionaries.scm
@@ -205,24 +205,24 @@ It comes with a German-English dictionary with approximately 270,000 entries.")
 (define-public grammalecte
   (package
     (name "grammalecte")
-    (version "1.8.0")
+    (version "1.9.0")
     (source
      (origin
        (method url-fetch/zipbomb)
        (uri (string-append "https://grammalecte.net/grammalecte/zip/"
                            "Grammalecte-fr-v" version ".zip"))
        (sha256
-        (base32 "06z2na1zs5q6vla45q5b8fzjwpckanmwh42r8in8vhb7a8v2fkyp"))))
+        (base32 "1dmbmvf27dy0cnq2x7ldp9xmni8fl1p7vflgpy0yrgifgrjvnxzr"))))
     (build-system python-build-system)
     (home-page "https://grammalecte.net")
     (synopsis "French spelling and grammar checker")
-    (description "Grammalecte is a grammar checker dedicated to the French
-language, derived from Lightproof.
+    (description "Grammalecte is a grammar checker for the French language,
+derived from Lightproof.
 
-Grammalecte aims at helping to write a proper French without distracting users
-with false positives.  This grammar checker follows the principle: the less
-false positives, the better; if it cannot know with a good chance if
-a dubious expression is wrong, it will keep silent.
+Grammalecte helps writing a proper French, without distracting users with
+false positives.  This grammar checker follows the principle: the less false
+positives, the better; if it cannot know with a good chance that a dubious
+expression is wrong, it keeps silent.
 
 The package provides the command line interface, along with a server
 and a Python library.")
diff --git a/gnu/packages/fonts.scm b/gnu/packages/fonts.scm
index 34db6ff3ec..21423baefd 100644
--- a/gnu/packages/fonts.scm
+++ b/gnu/packages/fonts.scm
@@ -305,6 +305,9 @@ The Lato 2.010 family supports more than 100 Latin-based languages, over
     (properties '((upstream-name . "freefont")
                   (ftp-directory . "/gnu/freefont")))))
 
+(define-public font-gnu-freefont-ttf
+  (deprecated-package "font-gnu-freefont-ttf" font-gnu-freefont))
+
 (define-public font-liberation
   (package
     (name "font-liberation")
diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm
index dccf41df21..6315183b48 100644
--- a/gnu/packages/linux.scm
+++ b/gnu/packages/linux.scm
@@ -369,26 +369,26 @@ corresponding UPSTREAM-SOURCE (an origin), using the given DEBLOB-SCRIPTS."
     (sha256 hash)))
 
 
-(define-public linux-libre-5.6-version "5.6.6")
+(define-public linux-libre-5.6-version "5.6.7")
 (define-public linux-libre-5.6-pristine-source
   (let ((version linux-libre-5.6-version)
-        (hash (base32 "1m3blvkma08v5y11jh0vhf4sr7jbcylkh15bssb5dgp40p8cx134")))
+        (hash (base32 "1jljcva3gxg1yc2kw3jjgmhzzdm16nylzxl63zbndjza547l5813")))
    (make-linux-libre-source version
                             (%upstream-linux-source version hash)
                             deblob-scripts-5.6)))
 
-(define-public linux-libre-5.4-version "5.4.34")
+(define-public linux-libre-5.4-version "5.4.35")
 (define-public linux-libre-5.4-pristine-source
   (let ((version linux-libre-5.4-version)
-        (hash (base32 "1ljcsrw9jknw2d9hb0yfr1pwy85l8z4rqycgd0kad9mb9lrw2glh")))
+        (hash (base32 "1m06k19pbb3wz8z2dgf03jvzbbdh6q8jwwdz509s902a53vxasz1")))
    (make-linux-libre-source version
                             (%upstream-linux-source version hash)
                             deblob-scripts-5.4)))
 
-(define-public linux-libre-4.19-version "4.19.117")
+(define-public linux-libre-4.19-version "4.19.118")
 (define-public linux-libre-4.19-pristine-source
   (let ((version linux-libre-4.19-version)
-        (hash (base32 "12xc1pwhwq4vp67hmn7hdynl4ik76cni79356hpzf1lbiqlrya6n")))
+        (hash (base32 "15lcq3xky59v88vb8vvnmgcsmm1fadz0m4jyrii6rynsz5jr6x49")))
     (make-linux-libre-source version
                              (%upstream-linux-source version hash)
                              deblob-scripts-4.19)))
diff --git a/gnu/packages/llvm.scm b/gnu/packages/llvm.scm
index 9ffb31cb9a..bda002e313 100644
--- a/gnu/packages/llvm.scm
+++ b/gnu/packages/llvm.scm
@@ -1,7 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2014, 2016, 2018 Eric Bavier <bavier@member.fsf.org>
 ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
-;;; Copyright © 2015, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2015, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2016 Dennis Mungai <dmngaie@gmail.com>
 ;;; Copyright © 2016, 2018, 2019, 2020 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2017 Roel Janssen <roel@gnu.org>
@@ -85,17 +85,17 @@ as \"x86_64-linux\"."
       (string-append "https://releases.llvm.org/" version "/" component "-"
                      version ".src.tar.xz")))
 
-(define-public llvm
+(define-public llvm-10
   (package
     (name "llvm")
-    (version "9.0.1")
+    (version "10.0.0")
     (source
      (origin
       (method url-fetch)
       (uri (llvm-download-uri "llvm" version))
       (sha256
        (base32
-        "16hwp3qa54c3a3v7h8nlw0fh5criqh0hlr1skybyk0cz70gyx880"))))
+        "1pwgm6cr0xr5a0hrbqs1zvsvvjvy0yq1y47c96804wcs795s90yz"))))
     (build-system cmake-build-system)
     (outputs '("out" "opt-viewer"))
     (native-inputs
@@ -405,24 +405,50 @@ output), and Binutils.")
               ("libc-debug" ,glibc "debug")
               ("libc-static" ,glibc "static")))))
 
-(define-public clang-runtime
+(define-public clang-runtime-10
+  (clang-runtime-from-llvm
+   llvm-10
+   "0x9c531k6ww21s2mkdwqx1vbdjmx6d4wmfb8gdbj0wqa796sczba"))
+
+(define-public clang-10
+  (clang-from-llvm llvm-10 clang-runtime-10
+                   "08fbxa2a0kr3ni35ckppj0kyvlcyaywrhpqwcdrdy0z900mhcnw8"
+                   #:patches '("clang-10.0-libc-search-path.patch")))
+
+(define-public clang-toolchain-10
+  (make-clang-toolchain clang-10))
+
+(define-public llvm-9
+  (package
+    (inherit llvm-10)
+    (version "9.0.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (llvm-download-uri "llvm" version))
+       (sha256
+        (base32
+         "16hwp3qa54c3a3v7h8nlw0fh5criqh0hlr1skybyk0cz70gyx880"))))))
+
+(define-public clang-runtime-9
   (clang-runtime-from-llvm
-   llvm
+   llvm-9
    "0xwh79g3zggdabxgnd0bphry75asm1qz7mv3hcqihqwqr6aspgy2"
    '("clang-runtime-9-libsanitizer-mode-field.patch")))
 
-(define-public clang
-  (clang-from-llvm llvm clang-runtime
+(define-public clang-9
+  (clang-from-llvm llvm-9 clang-runtime-9
                    "0ls2h3iv4finqyflyhry21qhc9cm9ga7g1zq21020p065qmm2y2p"
                    #:patches '("clang-9.0-libc-search-path.patch")))
 
-(define-public clang-toolchain
-  (make-clang-toolchain clang))
+(define-public clang-toolchain-9
+  (make-clang-toolchain clang-9))
 
-(define-public llvm-9 llvm)
-(define-public clang-runtime-9 clang-runtime)
-(define-public clang-9 clang)
-(define-public clang-toolchain-9 clang-toolchain)
+;; Default LLVM and Clang version.
+(define-public llvm llvm-9)
+(define-public clang-runtime clang-runtime-9)
+(define-public clang clang-9)
+(define-public clang-toolchain clang-toolchain-9)
 
 (define-public llvm-8
   (package
diff --git a/gnu/packages/music.scm b/gnu/packages/music.scm
index 41f323ee78..ababcd8aaa 100644
--- a/gnu/packages/music.scm
+++ b/gnu/packages/music.scm
@@ -5423,3 +5423,83 @@ plugin and a standalone JACK application.")
   offers an LV2 version ported by moddevices.")
       (home-page "http://tap-plugins.sourceforge.net/")
       (license license:gpl2))))
+
+(define-public wolf-shaper
+  (package
+    (name "wolf-shaper")
+    (version "0.1.7")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/pdesaulniers/wolf-shaper.git")
+               (commit (string-append "v" version))
+               ;; Bundles a specific commit of the DISTRHO plugin framework.
+               (recursive? #t)))
+        (file-name (git-file-name name version))
+        (sha256
+          (base32
+            "0lllgcbnnh1m95bp29hh17x170hl7170zizjrvy892qfkn36830d"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:tests? #f                      ; no check target
+       #:make-flags (list "CC=gcc")
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure)            ;no configure target
+         (replace 'install              ;no install target
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (bin (string-append out "/bin"))
+                    (lv2 (string-append out "/lib/lv2")))
+               ;; Install LV2.
+               (for-each
+                (lambda (file)
+                  (copy-recursively file
+                                    (string-append lv2 "/" (basename file))))
+                (find-files "bin" "\\.lv2$" #:directories? #t))
+               ;; Install executables.
+               (for-each
+                 (lambda (file)
+                   (install-file file bin))
+                 (find-files "bin"
+                             (lambda (name stat)
+                               (and
+                                 (equal? (dirname name) "bin")
+                                 (not (string-suffix? ".so" name))
+                                 (not (string-suffix? ".lv2" name))))))
+               #t))))))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (inputs
+      `(("jack", jack-1)
+        ("lv2", lv2)
+        ("mesa", mesa)))
+    (synopsis "Waveshaper plugin")
+    (description "Wolf Shaper is a waveshaper plugin with a graph editor.
+It is provided as an LV2 plugin and as a standalone Jack application.")
+    (home-page "https://pdesaulniers.github.io/wolf-shaper/")
+    (license license:gpl3)))
+
+(define-public wolf-spectrum
+  (package
+    (inherit wolf-shaper)
+    (name "wolf-spectrum")
+    (version "1.0.0")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/pdesaulniers/wolf-spectrum")
+               (commit (string-append "v" version))
+               ;; Bundles a specific commit of the DISTRHO plugin framework.
+               (recursive? #t)))
+        (file-name (git-file-name name version))
+        (sha256
+          (base32
+            "17db1jlj7vb1xyvkdhhrsvdbwb7jqw6i4168cdvlj3yvn2ra8gpm"))))
+    (synopsis "2D spectrogram plugin")
+    (description "Wolf Spectrum is a real-time 2D spectrogram plugin.
+It is provided as an LV2 plugin and as a standalone Jack application.")
+    (home-page "https://github.com/pdesaulniers/wolf-spectrum")
+    (license license:gpl3)))
diff --git a/gnu/packages/networking.scm b/gnu/packages/networking.scm
index ef510e3122..0962737536 100644
--- a/gnu/packages/networking.scm
+++ b/gnu/packages/networking.scm
@@ -919,14 +919,15 @@ TCP connection, TLS handshake and so on) in the terminal.")
 (define-public squid
   (package
     (name "squid")
-    (version "4.10")
+    (version "4.11")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "http://www.squid-cache.org/Versions/v4/squid-"
                            version ".tar.xz"))
        (sha256
-        (base32 "07sz0adv8nkhy797675bpra7lvdkwjq9isw1ddgylhlazl511w4q"))))
+        (base32
+          "0z986kykx539wjqd7mr8y0abf3z6hz8byf8fmmbky9hh4ihlgnaf"))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases
diff --git a/gnu/packages/package-management.scm b/gnu/packages/package-management.scm
index 33c0d90cf9..3bfee16832 100644
--- a/gnu/packages/package-management.scm
+++ b/gnu/packages/package-management.scm
@@ -112,8 +112,8 @@
   ;; Note: the 'update-guix-package.scm' script expects this definition to
   ;; start precisely like this.
   (let ((version "1.1.0")
-        (commit "d62c9b2671be55ae0305bebfda17b595f33797f2")
-        (revision 0))
+        (commit "7dd05396ef4539165f955d9ab57225091f801ce9")
+        (revision 1))
     (package
       (name "guix")
 
@@ -129,7 +129,7 @@
                       (commit commit)))
                 (sha256
                  (base32
-                  "0v76hb0pidfgvxa22gq6hqf5yc3m527gl7hpzykazgjh881g2vmy"))
+                  "110fz4qay4iywpynw1cbv6if8ac0pxp21zhzwvnp2jn1f6vbwf64"))
                 (file-name (string-append "guix-" version "-checkout"))))
       (build-system gnu-build-system)
       (arguments
diff --git a/gnu/packages/patches/biber-sortinithash.patch b/gnu/packages/patches/biber-sortinithash.patch
new file mode 100644
index 0000000000..1f054d25e4
--- /dev/null
+++ b/gnu/packages/patches/biber-sortinithash.patch
@@ -0,0 +1,1657 @@
+This is a backport of this upstream commit to Biber 2.12:
+
+  From 6b61b4c13778cf638f82569ab9e413f09f111ba5 Mon Sep 17 00:00:00 2001
+  From: Philip Kime <Philip@kime.org.uk>
+  Date: Sat, 12 Jan 2019 17:19:51 +0100
+  Subject: [PATCH] Updated tests after U::C upgrade changed sortinit hashes
+
+It addresses test failures found with recent versions of the
+Biber dependencies.
+
+diff --git a/t/annotations.t b/t/annotations.t
+index b4f641e..c6f86c7 100644
+--- a/t/annotations.t
++++ b/t/annotations.t
+@@ -73,7 +73,7 @@ my $ann1 = q|    \entry{ann1}{misc}{}
+       \strng{authorfullhash}{90ae96c82de92e36949bc64254bbde0c}
+       \field{extraname}{1}
+       \field{sortinit}{L}
+-      \field{sortinithash}{2c7981aaabc885868aba60f0c09ee20f}
++      \field{sortinithash}{dad3efd0836470093a7b4a7bb756eb8c}
+       \field{labelnamesource}{author}
+       \field{labeltitlesource}{title}
+       \field{title}{The Title}
+diff --git a/t/basic-misc.t b/t/basic-misc.t
+index d4664b1..a9168cc 100644
+--- a/t/basic-misc.t
++++ b/t/basic-misc.t
+@@ -97,7 +97,7 @@ my $u1 = q|    \entry{u1}{misc}{}
+       \strng{authorfullhash}{b78abdc838d79b6576f2ed0021642766}
+       \field{labelalpha}{AAA\textbf{+}00}
+       \field{sortinit}{A}
+-      \field{sortinithash}{d77c7cdd82ff690d4c3ef13216f92f0b}
++      \field{sortinithash}{a3dcedd53b04d1adfd5ac303ecd5e6fa}
+       \true{singletitle}
+       \true{uniquework}
+       \field{labelnamesource}{author}
+@@ -231,7 +231,7 @@ my $murray1 = q|    \entry{murray}{article}{}
+       \strng{authorfullhash}{1572cc3fd324f560e5e71d041a6bd764}
+       \field{labelalpha}{Hos\textbf{+}98}
+       \field{sortinit}{H}
+-      \field{sortinithash}{5f15a7bc777ad49ff15aa4d2831b1681}
++      \field{sortinithash}{6db6145dae8dc9e1271a8d556090b50a}
+       \true{singletitle}
+       \true{uniquework}
+       \field{labelnamesource}{author}
+@@ -348,7 +348,7 @@ my $murray2 = q|    \entry{murray}{article}{}
+       \strng{authorfullhash}{1572cc3fd324f560e5e71d041a6bd764}
+       \field{labelalpha}{Hos98}
+       \field{sortinit}{H}
+-      \field{sortinithash}{5f15a7bc777ad49ff15aa4d2831b1681}
++      \field{sortinithash}{6db6145dae8dc9e1271a8d556090b50a}
+       \true{singletitle}
+       \true{uniquework}
+       \field{labelnamesource}{author}
+@@ -389,7 +389,7 @@ my $t1 = q+    \entry{t1}{misc}{}
+       \field{extraname}{1}
+       \field{labelalpha}{Bro92}
+       \field{sortinit}{B}
+-      \field{sortinithash}{276475738cc058478c1677046f857703}
++      \field{sortinithash}{8de16967003c7207dae369d874f1456e}
+       \true{uniquework}
+       \field{labelnamesource}{author}
+       \field{labeltitlesource}{title}
+@@ -419,7 +419,7 @@ my $t2 = q|    \entry{t2}{misc}{}
+       \field{extraname}{2}
+       \field{labelalpha}{Bro94}
+       \field{sortinit}{B}
+-      \field{sortinithash}{276475738cc058478c1677046f857703}
++      \field{sortinithash}{8de16967003c7207dae369d874f1456e}
+       \true{uniquework}
+       \field{labelnamesource}{author}
+       \field{labeltitlesource}{title}
+@@ -452,7 +452,7 @@ my $anon1 = q|    \entry{anon1}{unpublished}{}
+       \strng{shortauthorfullhash}{9873a6cc65c553faa2b21aaad626fe4b}
+       \field{labelalpha}{XAn35}
+       \field{sortinit}{A}
+-      \field{sortinithash}{d77c7cdd82ff690d4c3ef13216f92f0b}
++      \field{sortinithash}{a3dcedd53b04d1adfd5ac303ecd5e6fa}
+       \true{singletitle}
+       \true{uniquework}
+       \field{labelnamesource}{shortauthor}
+@@ -491,7 +491,7 @@ my $anon2 = q|    \entry{anon2}{unpublished}{}
+       \strng{shortauthorfullhash}{f64c29e89ea49402b997956610b58ef6}
+       \field{labelalpha}{YAn39}
+       \field{sortinit}{A}
+-      \field{sortinithash}{d77c7cdd82ff690d4c3ef13216f92f0b}
++      \field{sortinithash}{a3dcedd53b04d1adfd5ac303ecd5e6fa}
+       \true{singletitle}
+       \true{uniquework}
+       \field{labelnamesource}{shortauthor}
+@@ -526,7 +526,7 @@ my $url1 = q|    \entry{url1}{misc}{}
+       \field{extraname}{4}
+       \field{labelalpha}{Ali05}
+       \field{sortinit}{A}
+-      \field{sortinithash}{d77c7cdd82ff690d4c3ef13216f92f0b}
++      \field{sortinithash}{a3dcedd53b04d1adfd5ac303ecd5e6fa}
+       \field{extraalpha}{4}
+       \field{labelnamesource}{author}
+       \field{year}{2005}
+@@ -710,7 +710,7 @@ my $isbn1 = q|    \entry{isbn1}{misc}{}
+       \field{extraname}{1}
+       \field{labelalpha}{Flu}
+       \field{sortinit}{F}
+-      \field{sortinithash}{669c706c6f1fbf3b5a83d26f1d9e9e72}
++      \field{sortinithash}{fb0c0faa89eb6abae8213bf60e6799ea}
+       \field{extraalpha}{1}
+       \field{labelnamesource}{author}
+       \field{isbn}{978-0-8165-2066-4}
+@@ -735,7 +735,7 @@ my $isbn2 = q|    \entry{isbn2}{misc}{}
+       \field{extraname}{2}
+       \field{labelalpha}{Flu}
+       \field{sortinit}{F}
+-      \field{sortinithash}{669c706c6f1fbf3b5a83d26f1d9e9e72}
++      \field{sortinithash}{fb0c0faa89eb6abae8213bf60e6799ea}
+       \field{extraalpha}{2}
+       \field{labelnamesource}{author}
+       \field{isbn}{978-0-8165-2066-4}
+@@ -778,7 +778,7 @@ my $clone1 = q|    \entry{snk1}{book}{}
+       \field{extraname}{2}
+       \field{labelalpha}{vDoe}
+       \field{sortinit}{v}
+-      \field{sortinithash}{75dd7385c90b2252c3ae853a80ca853b}
++      \field{sortinithash}{02432525618c08e2b03cac47c19764af}
+       \field{extraalpha}{2}
+       \field{labelnamesource}{author}
+     \endentry
+@@ -807,7 +807,7 @@ my $clone2 = q|    \entry{clone-snk1}{book}{}
+       \field{extraname}{1}
+       \field{labelalpha}{vDoe}
+       \field{sortinit}{v}
+-      \field{sortinithash}{75dd7385c90b2252c3ae853a80ca853b}
++      \field{sortinithash}{02432525618c08e2b03cac47c19764af}
+       \field{extraalpha}{1}
+       \field{labelnamesource}{author}
+       \field{addendum}{add}
+@@ -839,7 +839,7 @@ my $ent1 = q|    \entry{ent1}{book}{}
+       \strng{authorfullhash}{b2536a425d549b46de5f21c4d468050a}
+       \field{labelalpha}{SdB}
+       \field{sortinit}{S}
+-      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
++      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
+       \true{singletitle}
+       \field{labelnamesource}{author}
+     \endentry
+@@ -862,7 +862,7 @@ my $verb1 = q|    \entry{verb1}{book}{}
+       \strng{authorfullhash}{cac5a25f503e71f5ef28f474e14007b6}
+       \field{labelalpha}{All}
+       \field{sortinit}{A}
+-      \field{sortinithash}{d77c7cdd82ff690d4c3ef13216f92f0b}
++      \field{sortinithash}{a3dcedd53b04d1adfd5ac303ecd5e6fa}
+       \true{singletitle}
+       \field{labelnamesource}{author}
+       \verb{verba}
+diff --git a/t/biblatexml.t b/t/biblatexml.t
+index ad9ad25..0959bfa 100644
+--- a/t/biblatexml.t
++++ b/t/biblatexml.t
+@@ -111,7 +111,7 @@ my $l1 = q|    \entry{bltx1}{misc}{useprefix=false}
+       \strng{translatornamehash}{b44eba830fe9817fbe8e53c82f1cbe04}
+       \strng{translatorfullhash}{b44eba830fe9817fbe8e53c82f1cbe04}
+       \field{sortinit}{v}
+-      \field{sortinithash}{75dd7385c90b2252c3ae853a80ca853b}
++      \field{sortinithash}{02432525618c08e2b03cac47c19764af}
+       \field{extradatescope}{labelyear}
+       \field{labeldatesource}{}
+       \field{labelnamesource}{author}
+@@ -158,7 +158,7 @@ my $l1 = q|    \entry{bltx1}{misc}{useprefix=false}
+ 
+ my $l2 = q|    \entry{loopkey:a}{book}{}
+       \field{sortinit}{0}
+-      \field{sortinithash}{168ad0c7c5ed09f1d28c6675717b5b03}
++      \field{sortinithash}{bcf7a1f4afb88b7299f988caccb80d1c}
+     \endentry
+ |;
+ 
+diff --git a/t/crossrefs.t b/t/crossrefs.t
+index 915b52b..b6191c6 100644
+--- a/t/crossrefs.t
++++ b/t/crossrefs.t
+@@ -82,7 +82,7 @@ my $cr1 = q|    \entry{cr1}{inbook}{}
+       \strng{editornamehash}{c129df5593fdaa7475548811bfbb227d}
+       \strng{editorfullhash}{c129df5593fdaa7475548811bfbb227d}
+       \field{sortinit}{G}
+-      \field{sortinithash}{5e8d2bf9d38de41b1528bd307546008f}
++      \field{sortinithash}{62eb2aa29549e4fdbd3cb154ec5711cb}
+       \true{singletitle}
+       \true{uniquetitle}
+       \true{uniquework}
+@@ -131,7 +131,7 @@ my $cr2 = q|    \entry{cr2}{inbook}{}
+       \strng{editornamehash}{c129df5593fdaa7475548811bfbb227d}
+       \strng{editorfullhash}{c129df5593fdaa7475548811bfbb227d}
+       \field{sortinit}{F}
+-      \field{sortinithash}{669c706c6f1fbf3b5a83d26f1d9e9e72}
++      \field{sortinithash}{fb0c0faa89eb6abae8213bf60e6799ea}
+       \true{singletitle}
+       \true{uniquetitle}
+       \true{uniquework}
+@@ -165,7 +165,7 @@ my $cr_m = q|    \entry{cr_m}{book}{}
+       \strng{editornamehash}{c129df5593fdaa7475548811bfbb227d}
+       \strng{editorfullhash}{c129df5593fdaa7475548811bfbb227d}
+       \field{sortinit}{G}
+-      \field{sortinithash}{5e8d2bf9d38de41b1528bd307546008f}
++      \field{sortinithash}{62eb2aa29549e4fdbd3cb154ec5711cb}
+       \true{crossrefsource}
+       \true{uniquetitle}
+       \field{labeltitlesource}{title}
+@@ -203,7 +203,7 @@ my $cr3 = q|    \entry{cr3}{inbook}{}
+       \strng{editornamehash}{a1f5c22413396d599ec766725b226735}
+       \strng{editorfullhash}{a1f5c22413396d599ec766725b226735}
+       \field{sortinit}{A}
+-      \field{sortinithash}{d77c7cdd82ff690d4c3ef13216f92f0b}
++      \field{sortinithash}{a3dcedd53b04d1adfd5ac303ecd5e6fa}
+       \true{singletitle}
+       \true{uniquetitle}
+       \true{uniquework}
+@@ -248,7 +248,7 @@ my $cr4 = q|    \entry{cr4}{inbook}{}
+       \strng{editornamehash}{6ea89bd4958743a20b70fe17647d6af5}
+       \strng{editorfullhash}{6ea89bd4958743a20b70fe17647d6af5}
+       \field{sortinit}{M}
+-      \field{sortinithash}{cfd219b90152c06204fab207bc6c7cab}
++      \field{sortinithash}{2e5c2f51f7fa2d957f3206819bf86dc3}
+       \true{singletitle}
+       \true{uniquetitle}
+       \true{uniquework}
+@@ -279,7 +279,7 @@ my $crt = q|    \entry{crt}{book}{}
+       \strng{editornamehash}{a1f5c22413396d599ec766725b226735}
+       \strng{editorfullhash}{a1f5c22413396d599ec766725b226735}
+       \field{sortinit}{B}
+-      \field{sortinithash}{276475738cc058478c1677046f857703}
++      \field{sortinithash}{8de16967003c7207dae369d874f1456e}
+       \true{uniquetitle}
+       \field{labeltitlesource}{title}
+       \field{title}{Beasts of the Burbling Burns}
+@@ -315,7 +315,7 @@ my $cr6 = q|    \entry{cr6}{inproceedings}{}
+       \strng{editorfullhash}{344a7f427fb765610ef96eb7bce95257}
+       \field{extraname}{2}
+       \field{sortinit}{A}
+-      \field{sortinithash}{d77c7cdd82ff690d4c3ef13216f92f0b}
++      \field{sortinithash}{a3dcedd53b04d1adfd5ac303ecd5e6fa}
+       \true{uniquetitle}
+       \true{uniquework}
+       \field{labelnamesource}{author}
+@@ -366,7 +366,7 @@ my $cr7 = q|    \entry{cr7}{inbook}{}
+       \strng{bookauthorfullhash}{91a1dd4aeed3c4ec29ca74c4e778be5f}
+       \field{extraname}{1}
+       \field{sortinit}{A}
+-      \field{sortinithash}{d77c7cdd82ff690d4c3ef13216f92f0b}
++      \field{sortinithash}{a3dcedd53b04d1adfd5ac303ecd5e6fa}
+       \true{uniquetitle}
+       \true{uniquework}
+       \field{labelnamesource}{author}
+@@ -401,7 +401,7 @@ my $cr8 = q|    \entry{cr8}{incollection}{}
+       \strng{authorfullhash}{3d449e56eb3ca1ae80dc99a18d689795}
+       \field{extraname}{4}
+       \field{sortinit}{S}
+-      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
++      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
+       \true{singletitle}
+       \true{uniquetitle}
+       \true{uniquework}
+@@ -431,7 +431,7 @@ my $xr1 = q|    \entry{xr1}{inbook}{}
+       \strng{authornamehash}{e0ecc4fc668ee499d1afba44e1ac064d}
+       \strng{authorfullhash}{e0ecc4fc668ee499d1afba44e1ac064d}
+       \field{sortinit}{Z}
+-      \field{sortinithash}{156173bd08b075d7295bc3e0f4735a04}
++      \field{sortinithash}{8f7b480688e809b50b6f6577b16f3db5}
+       \true{singletitle}
+       \true{uniquetitle}
+       \true{uniquework}
+@@ -460,7 +460,7 @@ my $xr2 = q|    \entry{xr2}{inbook}{}
+       \strng{authornamehash}{6afa09374ecfd6b394ce714d2d9709c7}
+       \strng{authorfullhash}{6afa09374ecfd6b394ce714d2d9709c7}
+       \field{sortinit}{I}
+-      \field{sortinithash}{320bc8fe8101b9376f9f21cd507de0e8}
++      \field{sortinithash}{9417e9a1288a9371e2691d999083ed39}
+       \true{singletitle}
+       \true{uniquetitle}
+       \true{uniquework}
+@@ -491,7 +491,7 @@ my $xrm = q|    \entry{xrm}{book}{}
+       \strng{editornamehash}{809950f9b59ae207092b909a19dcb27b}
+       \strng{editorfullhash}{809950f9b59ae207092b909a19dcb27b}
+       \field{sortinit}{C}
+-      \field{sortinithash}{963e9d84a3da2344e8833203de5aed05}
++      \field{sortinithash}{4c244ceae61406cdc0cc2ce1cb1ff703}
+       \true{xrefsource}
+       \true{uniquetitle}
+       \field{labeltitlesource}{title}
+@@ -516,7 +516,7 @@ my $xr3 = q|    \entry{xr3}{inbook}{}
+       \strng{authornamehash}{9788055665b9bb4b37c776c3f6b74f16}
+       \strng{authorfullhash}{9788055665b9bb4b37c776c3f6b74f16}
+       \field{sortinit}{N}
+-      \field{sortinithash}{f7242c3ed3dc50029fca1be76c497c7c}
++      \field{sortinithash}{98cf339a479c0454fe09153a08675a15}
+       \true{singletitle}
+       \true{uniquetitle}
+       \true{uniquework}
+@@ -546,7 +546,7 @@ my $xrt = q|    \entry{xrt}{book}{}
+       \strng{editornamehash}{bf7d6b02f3e073913e5bfe5059508dd5}
+       \strng{editorfullhash}{bf7d6b02f3e073913e5bfe5059508dd5}
+       \field{sortinit}{K}
+-      \field{sortinithash}{9fd838a31ba64d981e8f44562bd33f89}
++      \field{sortinithash}{d3edc18d54b9438a72c24c925bfb38f4}
+       \true{uniquetitle}
+       \field{labeltitlesource}{title}
+       \field{title}{Kings, Cork and Calculation}
+@@ -572,7 +572,7 @@ my $xr4 = q|    \entry{xr4}{inbook}{}
+       \strng{authorfullhash}{7804ffef086c0c4686c235807f5cb502}
+       \field{extraname}{1}
+       \field{sortinit}{M}
+-      \field{sortinithash}{cfd219b90152c06204fab207bc6c7cab}
++      \field{sortinithash}{2e5c2f51f7fa2d957f3206819bf86dc3}
+       \field{labelnamesource}{author}
+       \field{labeltitlesource}{title}
+       \field{origyear}{1933}
+@@ -600,7 +600,7 @@ my $mxr = q|    \entry{mxr}{inbook}{}
+       \strng{authorfullhash}{7804ffef086c0c4686c235807f5cb502}
+       \field{extraname}{2}
+       \field{sortinit}{M}
+-      \field{sortinithash}{cfd219b90152c06204fab207bc6c7cab}
++      \field{sortinithash}{2e5c2f51f7fa2d957f3206819bf86dc3}
+       \field{labelnamesource}{author}
+       \field{labeltitlesource}{title}
+       \field{origyear}{1933}
+@@ -625,7 +625,7 @@ my $mcr = q|    \entry{mcr}{inbook}{}
+       \strng{authorfullhash}{7804ffef086c0c4686c235807f5cb502}
+       \field{extraname}{3}
+       \field{sortinit}{M}
+-      \field{sortinithash}{cfd219b90152c06204fab207bc6c7cab}
++      \field{sortinithash}{2e5c2f51f7fa2d957f3206819bf86dc3}
+       \field{labelnamesource}{author}
+       \field{labeltitlesource}{title}
+       \field{origyear}{1933}
+@@ -660,7 +660,7 @@ my $ccr1 = q|    \entry{ccr2}{book}{}
+       \strng{editorfullhash}{cfee758a1c82df2e26af1985e061bb0a}
+       \field{extraname}{1}
+       \field{sortinit}{V}
+-      \field{sortinithash}{75dd7385c90b2252c3ae853a80ca853b}
++      \field{sortinithash}{02432525618c08e2b03cac47c19764af}
+       \true{uniquetitle}
+       \true{uniquework}
+       \field{labelnamesource}{author}
+@@ -694,7 +694,7 @@ my $ccr2 = q|    \entry{ccr3}{inbook}{}
+       \strng{editornamehash}{cfee758a1c82df2e26af1985e061bb0a}
+       \strng{editorfullhash}{cfee758a1c82df2e26af1985e061bb0a}
+       \field{sortinit}{P}
+-      \field{sortinithash}{8d51b3d5b78d75b54308d706b9bbe285}
++      \field{sortinithash}{bb5b15f2db90f7aef79bb9e83defefcb}
+       \true{uniquetitle}
+       \field{labeltitlesource}{title}
+       \field{booktitle}{Misc etc.}
+@@ -726,7 +726,7 @@ my $ccr3 = q|    \entry{ccr4}{inbook}{}
+ 
+ my $s1 = q|    \entry{s1}{inbook}{}
+       \field{sortinit}{S}
+-      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
++      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
+       \true{uniquetitle}
+       \field{labeltitlesource}{title}
+       \strng{crossref}{s2}
+@@ -760,7 +760,7 @@ my $xc2 = q|    \entry{xc2}{inbook}{}
+       \strng{bookauthorfullhash}{1a0f7d518cccdad859a74412ef956474}
+       \field{extraname}{2}
+       \field{sortinit}{C}
+-      \field{sortinithash}{963e9d84a3da2344e8833203de5aed05}
++      \field{sortinithash}{4c244ceae61406cdc0cc2ce1cb1ff703}
+       \true{xrefsource}
+       \field{labelnamesource}{author}
+       \field{booktitle}{Title}
+@@ -769,7 +769,7 @@ my $xc2 = q|    \entry{xc2}{inbook}{}
+ 
+ my $b1 = q|    \entry{b1}{inbook}{}
+       \field{sortinit}{2}
+-      \field{sortinithash}{cbff857e587bcb4635511624d773949e}
++      \field{sortinithash}{ed39bb39cf854d5250e95b1c1f94f4ed}
+       \strng{crossref}{b2}
+       \field{day}{3}
+       \field{month}{3}
+@@ -803,7 +803,7 @@ my $sup1 = q|    \entry{sup1}{mvbook}{}
+       \strng{authorfullhash}{556c8dba145b472e6a8598d506f7cbe2}
+       \field{extraname}{3}
+       \field{sortinit}{S}
+-      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
++      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
+       \true{crossrefsource}
+       \true{singletitle}
+       \field{labelnamesource}{author}
+@@ -828,7 +828,7 @@ my $sup2 = q|    \entry{sup2}{book}{}
+       \strng{authorfullhash}{556c8dba145b472e6a8598d506f7cbe2}
+       \field{extraname}{1}
+       \field{sortinit}{S}
+-      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
++      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
+       \true{singletitle}
+       \field{labelnamesource}{author}
+       \field{labeltitlesource}{title}
+diff --git a/t/datalists.t b/t/datalists.t
+index 3081cc4..4855e3d 100644
+--- a/t/datalists.t
++++ b/t/datalists.t
+@@ -187,7 +187,7 @@ my $K11 = q|    \entry{K11}{book}{}
+       \strng{authornamehash}{4edc280a0ef229f9c061e3b121b17482}
+       \strng{authorfullhash}{4edc280a0ef229f9c061e3b121b17482}
+       \field{sortinit}{a}
+-      \field{sortinithash}{d77c7cdd82ff690d4c3ef13216f92f0b}
++      \field{sortinithash}{a3dcedd53b04d1adfd5ac303ecd5e6fa}
+       \field{extradatescope}{labelyear}
+       \field{labeldatesource}{}
+       \field{labelnamesource}{author}
+@@ -219,7 +219,7 @@ my $K12 = q|    \entry{K12}{book}{}
+       \strng{authornamehash}{a846a485fc9cbb59b0ebeedd6ac637e4}
+       \strng{authorfullhash}{a846a485fc9cbb59b0ebeedd6ac637e4}
+       \field{sortinit}{Z}
+-      \field{sortinithash}{156173bd08b075d7295bc3e0f4735a04}
++      \field{sortinithash}{8f7b480688e809b50b6f6577b16f3db5}
+       \field{extradatescope}{labelyear}
+       \field{labeldatesource}{}
+       \field{labelnamesource}{author}
+diff --git a/t/dateformats.t b/t/dateformats.t
+index 6beb567..0d5072a 100644
+--- a/t/dateformats.t
++++ b/t/dateformats.t
+@@ -88,7 +88,7 @@ my $l13c = q|    \entry{L13}{book}{}
+       \strng{authorfullhash}{8c77336299b25bdada7bf8038f46722f}
+       \field{extraname}{3}
+       \field{sortinit}{D}
+-      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
++      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
+       \field{extradatescope}{labelyear}
+       \field{labeldatesource}{}
+       \field{labelnamesource}{author}
+@@ -126,7 +126,7 @@ my $l14 = q|    \entry{L14}{book}{}
+       \strng{authorfullhash}{8c77336299b25bdada7bf8038f46722f}
+       \field{extraname}{4}
+       \field{sortinit}{D}
+-      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
++      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
+       \field{extradate}{3}
+       \field{extradatescope}{labelyear}
+       \field{labeldatesource}{}
+@@ -168,7 +168,7 @@ my $l15 = q|    \entry{L15}{book}{}
+       \strng{authorfullhash}{8c77336299b25bdada7bf8038f46722f}
+       \field{extraname}{12}
+       \field{sortinit}{D}
+-      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
++      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
+       \field{extradate}{4}
+       \field{labelnamesource}{author}
+       \field{labeltitlesource}{title}
+@@ -201,7 +201,7 @@ my $l16 = q|    \entry{L16}{proceedings}{}
+       \strng{editorfullhash}{8c77336299b25bdada7bf8038f46722f}
+       \field{extraname}{13}
+       \field{sortinit}{D}
+-      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
++      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
+       \field{extradate}{7}
+       \field{extradatescope}{labelyear}
+       \field{labeldatesource}{event}
+@@ -240,7 +240,7 @@ my $l17 = q|    \entry{L17}{proceedings}{}
+       \strng{editorfullhash}{8c77336299b25bdada7bf8038f46722f}
+       \field{extraname}{5}
+       \field{sortinit}{D}
+-      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
++      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
+       \field{extradate}{4}
+       \field{extradatescope}{labelyear}
+       \field{labeldatesource}{}
+@@ -299,7 +299,7 @@ my $l17c = q|    \entry{L17}{proceedings}{}
+       \strng{editorfullhash}{8c77336299b25bdada7bf8038f46722f}
+       \field{extraname}{5}
+       \field{sortinit}{D}
+-      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
++      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
+       \field{extradatescope}{labelyear}
+       \field{labeldatesource}{orig}
+       \field{labelnamesource}{editor}
+@@ -357,7 +357,7 @@ my $l17e = q|    \entry{L17}{proceedings}{}
+       \strng{editorfullhash}{8c77336299b25bdada7bf8038f46722f}
+       \field{extraname}{5}
+       \field{sortinit}{D}
+-      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
++      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
+       \field{extradatescope}{labelyear}
+       \field{labeldatesource}{event}
+       \field{labelnamesource}{editor}
+@@ -479,7 +479,7 @@ my $era1 = q|    \entry{era1}{article}{}
+       \strng{authorfullhash}{556c8dba145b472e6a8598d506f7cbe2}
+       \field{extraname}{9}
+       \field{sortinit}{S}
+-      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
++      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
+       \field{extradatescope}{labelyear}
+       \field{labeldatesource}{}
+       \field{labelnamesource}{author}
+@@ -512,7 +512,7 @@ my $era2 = q|    \entry{era2}{inproceedings}{}
+       \strng{authorfullhash}{556c8dba145b472e6a8598d506f7cbe2}
+       \field{extraname}{10}
+       \field{sortinit}{S}
+-      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
++      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
+       \field{extradatescope}{labelyear}
+       \field{labeldatesource}{}
+       \field{labelnamesource}{author}
+@@ -546,7 +546,7 @@ my $era3 = q|    \entry{era3}{inproceedings}{}
+       \strng{authorfullhash}{556c8dba145b472e6a8598d506f7cbe2}
+       \field{extraname}{11}
+       \field{sortinit}{S}
+-      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
++      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
+       \field{extradatescope}{labelyear}
+       \field{labeldatesource}{}
+       \field{labelnamesource}{author}
+@@ -580,7 +580,7 @@ my $era4 = q|    \entry{era4}{inproceedings}{}
+       \strng{authorfullhash}{556c8dba145b472e6a8598d506f7cbe2}
+       \field{extraname}{6}
+       \field{sortinit}{S}
+-      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
++      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
+       \field{extradatescope}{labelyear}
+       \field{labeldatesource}{}
+       \field{labelnamesource}{author}
+@@ -622,7 +622,7 @@ my $time1 = q|    \entry{time1}{article}{}
+       \strng{authorfullhash}{556c8dba145b472e6a8598d506f7cbe2}
+       \field{extraname}{2}
+       \field{sortinit}{S}
+-      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
++      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
+       \field{extradatescope}{labelyear}
+       \field{labeldatesource}{}
+       \field{labelnamesource}{author}
+@@ -671,7 +671,7 @@ my $range1 = q|    \entry{range1}{inproceedings}{}
+       \strng{authorfullhash}{556c8dba145b472e6a8598d506f7cbe2}
+       \field{extraname}{7}
+       \field{sortinit}{S}
+-      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
++      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
+       \field{extradate}{1}
+       \field{extradatescope}{labelyear}
+       \field{labeldatesource}{}
+@@ -712,7 +712,7 @@ my $range2 = q|    \entry{range2}{inproceedings}{}
+       \strng{authorfullhash}{556c8dba145b472e6a8598d506f7cbe2}
+       \field{extraname}{8}
+       \field{sortinit}{S}
+-      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
++      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
+       \field{extradate}{2}
+       \field{extradatescope}{labelyear}
+       \field{labeldatesource}{}
+@@ -753,7 +753,7 @@ my $season1 = q|    \entry{season1}{inproceedings}{}
+       \strng{authorfullhash}{556c8dba145b472e6a8598d506f7cbe2}
+       \field{extraname}{1}
+       \field{sortinit}{S}
+-      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
++      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
+       \field{extradatescope}{labelyear}
+       \field{labeldatesource}{}
+       \field{labelnamesource}{author}
+@@ -785,7 +785,7 @@ my $unspec1 = q|    \entry{unspec1}{inproceedings}{}
+       \strng{authorfullhash}{556c8dba145b472e6a8598d506f7cbe2}
+       \field{extraname}{4}
+       \field{sortinit}{S}
+-      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
++      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
+       \field{extradatescope}{labelyear}
+       \field{labeldatesource}{}
+       \field{labelnamesource}{author}
+@@ -838,7 +838,7 @@ my $unspec2 = q|    \entry{unspec2}{article}{}
+       \strng{authorfullhash}{556c8dba145b472e6a8598d506f7cbe2}
+       \field{extraname}{3}
+       \field{sortinit}{S}
+-      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
++      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
+       \field{extradatescope}{labelyear}
+       \field{labeldatesource}{}
+       \field{labelnamesource}{author}
+diff --git a/t/encoding.t b/t/encoding.t
+index a150b4f..36d9955 100644
+--- a/t/encoding.t
++++ b/t/encoding.t
+@@ -52,7 +52,7 @@ my $encode1 = q|    \entry{testŠ}{book}{}
+       \strng{authorfullhash}{06a47edae2e847800cfd78323a0e6be8}
+       \field{labelalpha}{Enc99}
+       \field{sortinit}{E}
+-      \field{sortinithash}{f615fb9c6fba11c6f962fb3fd599810e}
++      \field{sortinithash}{c554bd1a0b76ea92b9f105fe36d9c7b0}
+       \field{labeldatesource}{year}
+       \true{singletitle}
+       \field{labelnamesource}{author}
+@@ -82,7 +82,7 @@ my $encode2 = q|    \entry{test1}{book}{}
+       \strng{authorfullhash}{06a47edae2e847800cfd78323a0e6be8}
+       \field{labelalpha}{Enc99}
+       \field{sortinit}{E}
+-      \field{sortinithash}{f615fb9c6fba11c6f962fb3fd599810e}
++      \field{sortinithash}{c554bd1a0b76ea92b9f105fe36d9c7b0}
+       \field{labeldatesource}{year}
+       \true{singletitle}
+       \field{labelnamesource}{author}
+@@ -112,7 +112,7 @@ my $encode3 = q|    \entry{test1}{book}{}
+       \strng{authorfullhash}{06a47edae2e847800cfd78323a0e6be8}
+       \field{labelalpha}{Enc99}
+       \field{sortinit}{E}
+-      \field{sortinithash}{f615fb9c6fba11c6f962fb3fd599810e}
++      \field{sortinithash}{c554bd1a0b76ea92b9f105fe36d9c7b0}
+       \field{labeldatesource}{year}
+       \true{singletitle}
+       \field{labelnamesource}{author}
+@@ -142,7 +142,7 @@ my $encode5 = q|    \entry{test}{book}{}
+       \strng{authorfullhash}{06a47edae2e847800cfd78323a0e6be8}
+       \field{labelalpha}{Enc99}
+       \field{sortinit}{E}
+-      \field{sortinithash}{f615fb9c6fba11c6f962fb3fd599810e}
++      \field{sortinithash}{c554bd1a0b76ea92b9f105fe36d9c7b0}
+       \field{labeldatesource}{year}
+       \true{singletitle}
+       \field{labelnamesource}{author}
+@@ -172,7 +172,7 @@ my $encode6 = q|    \entry{test}{book}{}
+       \strng{authorfullhash}{06a47edae2e847800cfd78323a0e6be8}
+       \field{labelalpha}{Enc99}
+       \field{sortinit}{E}
+-      \field{sortinithash}{f615fb9c6fba11c6f962fb3fd599810e}
++      \field{sortinithash}{c554bd1a0b76ea92b9f105fe36d9c7b0}
+       \field{labeldatesource}{year}
+       \true{singletitle}
+       \field{labelnamesource}{author}
+@@ -202,7 +202,7 @@ my $encode7 = q|    \entry{test}{book}{}
+       \strng{authorfullhash}{06a47edae2e847800cfd78323a0e6be8}
+       \field{labelalpha}{Enc99}
+       \field{sortinit}{E}
+-      \field{sortinithash}{f615fb9c6fba11c6f962fb3fd599810e}
++      \field{sortinithash}{c554bd1a0b76ea92b9f105fe36d9c7b0}
+       \field{labeldatesource}{year}
+       \true{singletitle}
+       \field{labelnamesource}{author}
+diff --git a/t/names.t b/t/names.t
+index 7228042..b73f2ed 100644
+--- a/t/names.t
++++ b/t/names.t
+@@ -188,7 +188,7 @@ my $l1 = q|    \entry{L1}{book}{}
+       \strng{authornamehash}{72287a68c1714cb1b9f4ab9e03a88b96}
+       \strng{authorfullhash}{72287a68c1714cb1b9f4ab9e03a88b96}
+       \field{sortinit}{A}
+-      \field{sortinithash}{d77c7cdd82ff690d4c3ef13216f92f0b}
++      \field{sortinithash}{a3dcedd53b04d1adfd5ac303ecd5e6fa}
+       \field{labelnamesource}{author}
+     \endentry
+ |;
+@@ -208,7 +208,7 @@ my $l2 = q|    \entry{L2}{book}{}
+       \strng{authornamehash}{2098d59d0f19a2e003ee06c1aa750d57}
+       \strng{authorfullhash}{2098d59d0f19a2e003ee06c1aa750d57}
+       \field{sortinit}{B}
+-      \field{sortinithash}{276475738cc058478c1677046f857703}
++      \field{sortinithash}{8de16967003c7207dae369d874f1456e}
+       \field{labelnamesource}{author}
+     \endentry
+ |;
+@@ -228,7 +228,7 @@ my $l3 = q|    \entry{L3}{book}{}
+       \strng{authornamehash}{c8b06fe88bde128b25eb0b3b1cc5837c}
+       \strng{authorfullhash}{c8b06fe88bde128b25eb0b3b1cc5837c}
+       \field{sortinit}{C}
+-      \field{sortinithash}{963e9d84a3da2344e8833203de5aed05}
++      \field{sortinithash}{4c244ceae61406cdc0cc2ce1cb1ff703}
+       \field{labelnamesource}{author}
+     \endentry
+ |;
+@@ -248,7 +248,7 @@ my $l4 = q|    \entry{L4}{book}{}
+       \strng{authornamehash}{5ec958b850c0c2de7de7c42c84b9c419}
+       \strng{authorfullhash}{5ec958b850c0c2de7de7c42c84b9c419}
+       \field{sortinit}{D}
+-      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
++      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
+       \field{labelnamesource}{author}
+     \endentry
+ |;
+@@ -270,7 +270,7 @@ my $l5 = q|    \entry{L5}{book}{}
+       \strng{authornamehash}{c6b9d281cc1ff3f35570f76f463d4244}
+       \strng{authorfullhash}{c6b9d281cc1ff3f35570f76f463d4244}
+       \field{sortinit}{v}
+-      \field{sortinithash}{75dd7385c90b2252c3ae853a80ca853b}
++      \field{sortinithash}{02432525618c08e2b03cac47c19764af}
+       \field{labelnamesource}{author}
+     \endentry
+ |;
+@@ -292,7 +292,7 @@ my $l6 = q|    \entry{L6}{book}{}
+       \strng{authornamehash}{5fd24d3d1608a310ec205a6b201a5495}
+       \strng{authorfullhash}{5fd24d3d1608a310ec205a6b201a5495}
+       \field{sortinit}{v}
+-      \field{sortinithash}{75dd7385c90b2252c3ae853a80ca853b}
++      \field{sortinithash}{02432525618c08e2b03cac47c19764af}
+       \field{labelnamesource}{author}
+     \endentry
+ |;
+@@ -314,7 +314,7 @@ my $l7 = q|    \entry{L7}{book}{}
+       \strng{authornamehash}{98edb0b90251df22b74328d9227eceb7}
+       \strng{authorfullhash}{98edb0b90251df22b74328d9227eceb7}
+       \field{sortinit}{v}
+-      \field{sortinithash}{75dd7385c90b2252c3ae853a80ca853b}
++      \field{sortinithash}{02432525618c08e2b03cac47c19764af}
+       \field{labelnamesource}{author}
+     \endentry
+ |;
+@@ -336,7 +336,7 @@ my $l8 = q|    \entry{L8}{book}{}
+       \strng{authornamehash}{1211dc8dbbc191cbcab4da3c3c1fc48a}
+       \strng{authorfullhash}{1211dc8dbbc191cbcab4da3c3c1fc48a}
+       \field{sortinit}{v}
+-      \field{sortinithash}{75dd7385c90b2252c3ae853a80ca853b}
++      \field{sortinithash}{02432525618c08e2b03cac47c19764af}
+       \field{labelnamesource}{author}
+     \endentry
+ |;
+@@ -356,7 +356,7 @@ my $l9 = q|    \entry{L9}{book}{}
+       \strng{authornamehash}{bae61a889ab149a6deafe45333204cf0}
+       \strng{authorfullhash}{bae61a889ab149a6deafe45333204cf0}
+       \field{sortinit}{I}
+-      \field{sortinithash}{320bc8fe8101b9376f9f21cd507de0e8}
++      \field{sortinithash}{9417e9a1288a9371e2691d999083ed39}
+       \field{labelnamesource}{author}
+     \endentry
+ |;
+@@ -379,7 +379,7 @@ my $l10 = q|    \entry{L10}{book}{}
+       \strng{authornamehash}{37b4325752e394ddfb2fc810f6c88e27}
+       \strng{authorfullhash}{37b4325752e394ddfb2fc810f6c88e27}
+       \field{sortinit}{J}
+-      \field{sortinithash}{fce5f8d0bd05e8d93f3dbe21c78897ca}
++      \field{sortinithash}{c45040a764d616897e7f5b30174d7b92}
+       \field{labelnamesource}{author}
+     \endentry
+ |;
+@@ -402,7 +402,7 @@ my $l10a = q|    \entry{L10a}{book}{}
+       \strng{authornamehash}{7bf2c9d8b89a1930ee91bfddcaf20c9c}
+       \strng{authorfullhash}{7bf2c9d8b89a1930ee91bfddcaf20c9c}
+       \field{sortinit}{P}
+-      \field{sortinithash}{8d51b3d5b78d75b54308d706b9bbe285}
++      \field{sortinithash}{bb5b15f2db90f7aef79bb9e83defefcb}
+       \field{labelnamesource}{author}
+     \endentry
+ |;
+@@ -427,7 +427,7 @@ my $l11 = q|    \entry{L11}{book}{}
+       \strng{authornamehash}{9f48d231be68c9435fab4faca55a5caf}
+       \strng{authorfullhash}{9f48d231be68c9435fab4faca55a5caf}
+       \field{sortinit}{v}
+-      \field{sortinithash}{75dd7385c90b2252c3ae853a80ca853b}
++      \field{sortinithash}{02432525618c08e2b03cac47c19764af}
+       \field{labelnamesource}{author}
+     \endentry
+ |;
+@@ -449,7 +449,7 @@ my $l12 = q|    \entry{L12}{book}{}
+       \strng{authornamehash}{d7ca88c13a8f7ce1c23e920010a31f83}
+       \strng{authorfullhash}{d7ca88c13a8f7ce1c23e920010a31f83}
+       \field{sortinit}{d}
+-      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
++      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
+       \true{uniqueprimaryauthor}
+       \field{labelnamesource}{author}
+     \endentry
+@@ -470,7 +470,7 @@ my $l13 = q|    \entry{L13}{book}{}
+       \strng{authornamehash}{227ac48bb788a658cfaa4eefc71ff0cc}
+       \strng{authorfullhash}{227ac48bb788a658cfaa4eefc71ff0cc}
+       \field{sortinit}{V}
+-      \field{sortinithash}{75dd7385c90b2252c3ae853a80ca853b}
++      \field{sortinithash}{02432525618c08e2b03cac47c19764af}
+       \field{labelnamesource}{author}
+     \endentry
+ |;
+@@ -490,7 +490,7 @@ my $l14 = q|    \entry{L14}{book}{}
+       \strng{authornamehash}{779475052c17ed56dc3be900d0dfdf87}
+       \strng{authorfullhash}{779475052c17ed56dc3be900d0dfdf87}
+       \field{sortinit}{S}
+-      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
++      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
+       \field{labelnamesource}{author}
+     \endentry
+ |;
+@@ -513,7 +513,7 @@ my $l15 = q|    \entry{L15}{book}{}
+       \strng{authorfullhash}{783c636e853e47a854ae034ebe9dde62}
+       \field{extraname}{1}
+       \field{sortinit}{v}
+-      \field{sortinithash}{75dd7385c90b2252c3ae853a80ca853b}
++      \field{sortinithash}{02432525618c08e2b03cac47c19764af}
+       \field{labelnamesource}{author}
+     \endentry
+ |;
+@@ -536,7 +536,7 @@ my $l16 = q|    \entry{L16}{book}{}
+       \strng{authorfullhash}{783c636e853e47a854ae034ebe9dde62}
+       \field{extraname}{2}
+       \field{sortinit}{v}
+-      \field{sortinithash}{75dd7385c90b2252c3ae853a80ca853b}
++      \field{sortinithash}{02432525618c08e2b03cac47c19764af}
+       \field{labelnamesource}{author}
+     \endentry
+ |;
+@@ -557,7 +557,7 @@ my $l17 = q|    \entry{L17}{book}{}
+       \strng{authorfullhash}{b51f667a3384d92ea5458ba80716bff7}
+       \field{extraname}{1}
+       \field{sortinit}{L}
+-      \field{sortinithash}{2c7981aaabc885868aba60f0c09ee20f}
++      \field{sortinithash}{dad3efd0836470093a7b4a7bb756eb8c}
+       \field{labelnamesource}{author}
+     \endentry
+ |;
+@@ -578,7 +578,7 @@ my $l18 = q|    \entry{L18}{book}{}
+       \strng{authorfullhash}{b51f667a3384d92ea5458ba80716bff7}
+       \field{extraname}{2}
+       \field{sortinit}{L}
+-      \field{sortinithash}{2c7981aaabc885868aba60f0c09ee20f}
++      \field{sortinithash}{dad3efd0836470093a7b4a7bb756eb8c}
+       \field{labelnamesource}{author}
+     \endentry
+ |;
+@@ -598,7 +598,7 @@ my $l19 = q|    \entry{L19}{book}{}
+       \strng{authornamehash}{83caa52f21f97e572dd3267bdf62978a}
+       \strng{authorfullhash}{83caa52f21f97e572dd3267bdf62978a}
+       \field{sortinit}{M}
+-      \field{sortinithash}{cfd219b90152c06204fab207bc6c7cab}
++      \field{sortinithash}{2e5c2f51f7fa2d957f3206819bf86dc3}
+       \field{labelnamesource}{author}
+     \endentry
+ |;
+@@ -618,7 +618,7 @@ my $l19a = q|    \entry{L19a}{book}{}
+       \strng{authornamehash}{0963f6904ccfeaac2770c5882a587001}
+       \strng{authorfullhash}{0963f6904ccfeaac2770c5882a587001}
+       \field{sortinit}{L}
+-      \field{sortinithash}{2c7981aaabc885868aba60f0c09ee20f}
++      \field{sortinithash}{dad3efd0836470093a7b4a7bb756eb8c}
+       \field{labelnamesource}{author}
+     \endentry
+ |;
+@@ -639,7 +639,7 @@ my $l20 = q|    \entry{L20}{book}{}
+       \strng{authornamehash}{5f26c2f3b33095d5b005714893f4d698}
+       \strng{authorfullhash}{5f26c2f3b33095d5b005714893f4d698}
+       \field{sortinit}{F}
+-      \field{sortinithash}{669c706c6f1fbf3b5a83d26f1d9e9e72}
++      \field{sortinithash}{fb0c0faa89eb6abae8213bf60e6799ea}
+       \field{labelnamesource}{author}
+     \endentry
+ |;
+@@ -660,7 +660,7 @@ my $l21 = q|    \entry{L21}{book}{}
+       \strng{authorfullhash}{4389a3c0dc7da74487b50808ba9436ad}
+       \field{extraname}{1}
+       \field{sortinit}{S}
+-      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
++      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
+       \field{labelnamesource}{author}
+     \endentry
+ |;
+@@ -681,7 +681,7 @@ my $l22u = q|    \entry{L22}{book}{}
+       \strng{authorfullhash}{e58b861545799d0eaf883402a882126e}
+       \field{extraname}{1}
+       \field{sortinit}{Š}
+-      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
++      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
+       \field{labelnamesource}{author}
+     \endentry
+ |;
+@@ -703,7 +703,7 @@ my $l22 = q|    \entry{L22}{book}{}
+       \strng{authorfullhash}{e58b861545799d0eaf883402a882126e}
+       \field{extraname}{1}
+       \field{sortinit}{\v{S}}
+-      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
++      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
+       \true{uniqueprimaryauthor}
+       \field{labelnamesource}{author}
+     \endentry
+@@ -726,7 +726,7 @@ my $l23 = q|    \entry{L23}{book}{}
+       \strng{authorfullhash}{4389a3c0dc7da74487b50808ba9436ad}
+       \field{extraname}{3}
+       \field{sortinit}{S}
+-      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
++      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
+       \field{labelnamesource}{author}
+     \endentry
+ |;
+@@ -747,7 +747,7 @@ my $l24 = q|    \entry{L24}{book}{}
+       \strng{authorfullhash}{e58b861545799d0eaf883402a882126e}
+       \field{extraname}{2}
+       \field{sortinit}{Š}
+-      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
++      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
+       \field{labelnamesource}{author}
+     \endentry
+ |;
+@@ -765,7 +765,7 @@ my $l25 = q|    \entry{L25}{book}{}
+       \strng{authornamehash}{d7cd2c5ea0848abc3e90609558b84a45}
+       \strng{authorfullhash}{d7cd2c5ea0848abc3e90609558b84a45}
+       \field{sortinit}{A}
+-      \field{sortinithash}{d77c7cdd82ff690d4c3ef13216f92f0b}
++      \field{sortinithash}{a3dcedd53b04d1adfd5ac303ecd5e6fa}
+       \field{labelnamesource}{author}
+     \endentry
+ |;
+@@ -783,7 +783,7 @@ my $l26 = q|    \entry{L26}{book}{}
+       \strng{authornamehash}{8eee1dbafdbd0a4b73157e60f18b4784}
+       \strng{authorfullhash}{8eee1dbafdbd0a4b73157e60f18b4784}
+       \field{sortinit}{S}
+-      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
++      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
+       \field{labelnamesource}{author}
+     \endentry
+ |;
+@@ -791,7 +791,7 @@ my $l26 = q|    \entry{L26}{book}{}
+ # Malformed anyway but a decent test
+ my $l28 = q|    \entry{L28}{book}{}
+       \field{sortinit}{0}
+-      \field{sortinithash}{168ad0c7c5ed09f1d28c6675717b5b03}
++      \field{sortinithash}{bcf7a1f4afb88b7299f988caccb80d1c}
+       \warn{\item Name "Deux et al.,, O." is malformed (consecutive commas): skipping name}
+     \endentry
+ |;
+@@ -810,7 +810,7 @@ my $l29 = q|    \entry{L29}{book}{}
+       \strng{authornamehash}{27ad192a3a715aa89152b2a4ee392e8c}
+       \strng{authorfullhash}{27ad192a3a715aa89152b2a4ee392e8c}
+       \field{sortinit}{U}
+-      \field{sortinithash}{36a2444f5238e0dcf4bb59704df6624d}
++      \field{sortinithash}{77a6935510e008adcf5b555e7b4f0711}
+       \field{labelnamesource}{author}
+     \endentry
+ |;
+@@ -850,7 +850,7 @@ my $l31 = q|    \entry{L31}{book}{}
+       \strng{translatornamehash}{29c3ff92fff79d09a8b44d2f775de0b1}
+       \strng{translatorfullhash}{29c3ff92fff79d09a8b44d2f775de0b1}
+       \field{sortinit}{\~{Z}}
+-      \field{sortinithash}{156173bd08b075d7295bc3e0f4735a04}
++      \field{sortinithash}{8f7b480688e809b50b6f6577b16f3db5}
+       \true{uniqueprimaryauthor}
+       \field{labelnamesource}{author}
+     \endentry
+diff --git a/t/options.t b/t/options.t
+index 940a282..c14d694 100644
+--- a/t/options.t
++++ b/t/options.t
+@@ -100,7 +100,7 @@ my $l1 = q|    \entry{L1}{book}{}
+       \strng{authornamehash}{bd051a2f7a5f377e3a62581b0e0f8577}
+       \strng{authorfullhash}{bd051a2f7a5f377e3a62581b0e0f8577}
+       \field{sortinit}{D}
+-      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
++      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
+       \field{extradatescope}{labelyear}
+       \field{labeldatesource}{}
+       \field{labelnamesource}{author}
+@@ -137,7 +137,7 @@ my $l2 = q|    \entry{L2}{book}{maxcitenames=3,maxbibnames=3,maxsortnames=3,maxi
+       \strng{authornamehash}{19eec87c959944d6d9c72434a42856ba}
+       \strng{authorfullhash}{19eec87c959944d6d9c72434a42856ba}
+       \field{sortinit}{E}
+-      \field{sortinithash}{f615fb9c6fba11c6f962fb3fd599810e}
++      \field{sortinithash}{c554bd1a0b76ea92b9f105fe36d9c7b0}
+       \field{extradatescope}{labelyear}
+       \field{labeldatesource}{}
+       \field{labelnamesource}{author}
+@@ -169,7 +169,7 @@ my $l3 = q|    \entry{L3}{book}{blah=10}
+       \strng{authornamehash}{490250da1f3b92580d97563dc96c6c84}
+       \strng{authorfullhash}{490250da1f3b92580d97563dc96c6c84}
+       \field{sortinit}{B}
+-      \field{sortinithash}{276475738cc058478c1677046f857703}
++      \field{sortinithash}{8de16967003c7207dae369d874f1456e}
+       \field{extradatescope}{labelyear}
+       \field{labeldatesource}{}
+       \field{labelnamesource}{author}
+diff --git a/t/related-entries.t b/t/related-entries.t
+index 53dce64..b38ac79 100644
+--- a/t/related-entries.t
++++ b/t/related-entries.t
+@@ -56,7 +56,7 @@ my $k1 = q|    \entry{key1}{article}{}
+       \strng{authorfullhash}{a517747c3d12f99244ae598910d979c5}
+       \field{extraname}{1}
+       \field{sortinit}{1}
+-      \field{sortinithash}{2174f786c6195e7fe2ee1c229b416e29}
++      \field{sortinithash}{50c6687d7fc80f50136d75228e3c59ba}
+       \field{extradatescope}{labelyear}
+       \field{labeldatesource}{}
+       \field{labelnamesource}{author}
+@@ -95,7 +95,7 @@ my $k2 = q|    \entry{key2}{inbook}{}
+       \strng{authorfullhash}{a517747c3d12f99244ae598910d979c5}
+       \field{extraname}{2}
+       \field{sortinit}{2}
+-      \field{sortinithash}{cbff857e587bcb4635511624d773949e}
++      \field{sortinithash}{ed39bb39cf854d5250e95b1c1f94f4ed}
+       \field{extradatescope}{labelyear}
+       \field{labeldatesource}{}
+       \field{labelnamesource}{author}
+@@ -243,7 +243,7 @@ my $kck4 = q|    \entry{caf8e34be07426ae7127c1b4829983c1}{inbook}{dataonly,useed
+ 
+ my $c1 = q|    \entry{c1}{book}{}
+       \field{sortinit}{3}
+-      \field{sortinithash}{a4b52e5432884761f50fb9571273b93e}
++      \field{sortinithash}{a37a8ef248a93c322189792c34fc68c9}
+       \field{related}{9ab62b5ef34a985438bfdf7ee0102229}
+     \endentry
+ |;
+@@ -330,7 +330,7 @@ my $un1 = q|    \entry{kullback}{book}{}
+       \strng{authorfullhash}{34c5bbf9876c37127c3abe4e7d7a7198}
+       \field{extraname}{1}
+       \field{sortinit}{5}
+-      \field{sortinithash}{3c19c3776b658b3558e9e2e4840c01e2}
++      \field{sortinithash}{5dd416adbafacc8226114bc0202d5fdd}
+       \field{extradatescope}{year}
+       \field{labelnamesource}{author}
+       \field{labeltitlesource}{title}
+@@ -364,7 +364,7 @@ my $un2 = q|    \entry{kullback:related}{book}{}
+       \strng{authorfullhash}{34c5bbf9876c37127c3abe4e7d7a7198}
+       \field{extraname}{2}
+       \field{sortinit}{6}
+-      \field{sortinithash}{57e57fb8451e7fcfa45d1e069f6d3136}
++      \field{sortinithash}{7851c86048328b027313775d8fbd2131}
+       \field{extradatescope}{year}
+       \field{labelnamesource}{author}
+       \field{labeltitlesource}{title}
+diff --git a/t/remote-files.t b/t/remote-files.t
+index c747dcd..6f4cf4d 100644
+--- a/t/remote-files.t
++++ b/t/remote-files.t
+@@ -86,7 +86,7 @@ my $cu1 = q|    \entry{citeulike:8283461}{article}{}
+       \strng{authornamehash}{a700cc0bdce78f5a1f50ff6314ff6f2a}
+       \strng{authorfullhash}{094b095bbb7ac93fdd3e2eafdcec0cac}
+       \field{sortinit}{M}
+-      \field{sortinithash}{cfd219b90152c06204fab207bc6c7cab}
++      \field{sortinithash}{2e5c2f51f7fa2d957f3206819bf86dc3}
+       \field{extradatescope}{labelyear}
+       \field{labeldatesource}{year}
+       \field{labelnamesource}{author}
+@@ -133,7 +133,7 @@ my $dl1 = q|    \entry{AbdelbarH98}{article}{}
+       \strng{authornamehash}{bb887c5d0458bfb1f3f7e6afc8d1def4}
+       \strng{authorfullhash}{bb887c5d0458bfb1f3f7e6afc8d1def4}
+       \field{sortinit}{A}
+-      \field{sortinithash}{d77c7cdd82ff690d4c3ef13216f92f0b}
++      \field{sortinithash}{a3dcedd53b04d1adfd5ac303ecd5e6fa}
+       \field{extradatescope}{labelyear}
+       \field{labeldatesource}{year}
+       \field{labelnamesource}{author}
+diff --git a/t/set-dynamic.t b/t/set-dynamic.t
+index 9ab5fdd..0846f8a 100644
+--- a/t/set-dynamic.t
++++ b/t/set-dynamic.t
+@@ -51,7 +51,7 @@ my $out = $biber->get_output_obj;
+ my $string1 = q|    \entry{DynSet}{set}{}
+       \set{Dynamic1,Dynamic2,Dynamic3}
+       \field{sortinit}{1}
+-      \field{sortinithash}{2174f786c6195e7fe2ee1c229b416e29}
++      \field{sortinithash}{50c6687d7fc80f50136d75228e3c59ba}
+     \endentry
+ |;
+ 
+@@ -71,7 +71,7 @@ my $string2 = q|    \entry{Dynamic1}{book}{}
+       \strng{authornamehash}{252caa7921a061ca92087a1a52f15b78}
+       \strng{authorfullhash}{252caa7921a061ca92087a1a52f15b78}
+       \field{sortinit}{8}
+-      \field{sortinithash}{07edf88d4ea82509b9c4b4d13f41c452}
++      \field{sortinithash}{1b24cab5087933ef0826a7cd3b99e994}
+       \field{labeldatesource}{year}
+       \field{labelnamesource}{author}
+       \field{labeltitlesource}{title}
+@@ -98,7 +98,7 @@ my $string3 = q|    \entry{Dynamic2}{book}{}
+       \strng{authornamehash}{894a5fe6de820f5dcce84a65581667f4}
+       \strng{authorfullhash}{894a5fe6de820f5dcce84a65581667f4}
+       \field{sortinit}{9}
+-      \field{sortinithash}{1dd72ab054147731c9d824b49aba0534}
++      \field{sortinithash}{54047ffb55bdefa0694bbd554c1b11a0}
+       \field{labeldatesource}{year}
+       \field{labelnamesource}{author}
+       \field{labeltitlesource}{title}
+@@ -124,7 +124,7 @@ my $string4 = q|    \entry{Dynamic3}{book}{}
+       \strng{authornamehash}{fc3cc97631ceaecdde2aee6cc60ab42b}
+       \strng{authorfullhash}{fc3cc97631ceaecdde2aee6cc60ab42b}
+       \field{sortinit}{1}
+-      \field{sortinithash}{2174f786c6195e7fe2ee1c229b416e29}
++      \field{sortinithash}{50c6687d7fc80f50136d75228e3c59ba}
+       \field{labeldatesource}{year}
+       \field{labelnamesource}{author}
+       \field{labeltitlesource}{title}
+@@ -151,7 +151,7 @@ my $string5 = q|    \entry{Dynamic3}{book}{}
+       \strng{authornamehash}{fc3cc97631ceaecdde2aee6cc60ab42b}
+       \strng{authorfullhash}{fc3cc97631ceaecdde2aee6cc60ab42b}
+       \field{sortinit}{1}
+-      \field{sortinithash}{2174f786c6195e7fe2ee1c229b416e29}
++      \field{sortinithash}{50c6687d7fc80f50136d75228e3c59ba}
+       \field{labeldatesource}{year}
+       \field{labelnamesource}{author}
+       \field{labeltitlesource}{title}
+diff --git a/t/set-legacy.t b/t/set-legacy.t
+index 4e56991..9d40acb 100644
+--- a/t/set-legacy.t
++++ b/t/set-legacy.t
+@@ -45,7 +45,7 @@ my $out = $biber->get_output_obj;
+ my $string1 = q|    \entry{Elias1955}{set}{}
+       \set{Elias1955a,Elias1955b}
+       \field{sortinit}{1}
+-      \field{sortinithash}{2174f786c6195e7fe2ee1c229b416e29}
++      \field{sortinithash}{50c6687d7fc80f50136d75228e3c59ba}
+     \endentry
+ |;
+ 
+diff --git a/t/set-static.t b/t/set-static.t
+index 1e45d4d..a6cbe73 100644
+--- a/t/set-static.t
++++ b/t/set-static.t
+@@ -47,7 +47,7 @@ my $out = $biber->get_output_obj;
+ my $string1 = q|    \entry{Static1}{set}{}
+       \set{Static2,Static4,Static3}
+       \field{sortinit}{B}
+-      \field{sortinithash}{276475738cc058478c1677046f857703}
++      \field{sortinithash}{8de16967003c7207dae369d874f1456e}
+       \field{annotation}{Some notes}
+     \endentry
+ |;
+@@ -68,7 +68,7 @@ my $string2 = q|    \entry{Static2}{book}{}
+       \strng{authornamehash}{43874d80d7ce68027102819f16c47df1}
+       \strng{authorfullhash}{43874d80d7ce68027102819f16c47df1}
+       \field{sortinit}{B}
+-      \field{sortinithash}{276475738cc058478c1677046f857703}
++      \field{sortinithash}{8de16967003c7207dae369d874f1456e}
+       \field{labeldatesource}{year}
+       \field{labelnamesource}{author}
+       \field{labeltitlesource}{title}
+@@ -94,7 +94,7 @@ my $string3 = q|    \entry{Static3}{book}{}
+       \strng{authornamehash}{22dafa5cd57bb5dd7f3e3bab98fd539c}
+       \strng{authorfullhash}{22dafa5cd57bb5dd7f3e3bab98fd539c}
+       \field{sortinit}{D}
+-      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
++      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
+       \field{labeldatesource}{year}
+       \field{labelnamesource}{author}
+       \field{labeltitlesource}{title}
+@@ -119,7 +119,7 @@ my $string4 = q|    \entry{Static4}{book}{}
+       \strng{authornamehash}{da80091c8cd89e5269bd55af1bd5d2fa}
+       \strng{authorfullhash}{da80091c8cd89e5269bd55af1bd5d2fa}
+       \field{sortinit}{C}
+-      \field{sortinithash}{963e9d84a3da2344e8833203de5aed05}
++      \field{sortinithash}{4c244ceae61406cdc0cc2ce1cb1ff703}
+       \field{labeldatesource}{year}
+       \field{labelnamesource}{author}
+       \field{labeltitlesource}{title}
+@@ -145,7 +145,7 @@ my $string5 = q|    \entry{Static2}{book}{}
+       \strng{authornamehash}{43874d80d7ce68027102819f16c47df1}
+       \strng{authorfullhash}{43874d80d7ce68027102819f16c47df1}
+       \field{sortinit}{1}
+-      \field{sortinithash}{2174f786c6195e7fe2ee1c229b416e29}
++      \field{sortinithash}{50c6687d7fc80f50136d75228e3c59ba}
+       \field{labeldatesource}{year}
+       \field{labelnamesource}{author}
+       \field{labeltitlesource}{title}
+diff --git a/t/skips.t b/t/skips.t
+index 7c80d39..caa835f 100644
+--- a/t/skips.t
++++ b/t/skips.t
+@@ -50,7 +50,7 @@ my $set1 = q|    \entry{seta}{set}{}
+       \field{labelalpha}{Doe10}
+       \field{extraalpha}{1}
+       \field{sortinit}{D}
+-      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
++      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
+     \endentry
+ |;
+ 
+@@ -70,7 +70,7 @@ my $set2 = q|    \entry{set:membera}{book}{}
+       \strng{authornamehash}{bd051a2f7a5f377e3a62581b0e0f8577}
+       \strng{authorfullhash}{bd051a2f7a5f377e3a62581b0e0f8577}
+       \field{sortinit}{D}
+-      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
++      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
+       \field{labeldatesource}{}
+       \field{labelnamesource}{author}
+       \field{labeltitlesource}{title}
+@@ -97,7 +97,7 @@ my $set3 = q|    \entry{set:memberb}{book}{}
+       \strng{authornamehash}{bd051a2f7a5f377e3a62581b0e0f8577}
+       \strng{authorfullhash}{bd051a2f7a5f377e3a62581b0e0f8577}
+       \field{sortinit}{D}
+-      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
++      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
+       \field{labeldatesource}{}
+       \field{labelnamesource}{author}
+       \field{labeltitlesource}{title}
+@@ -123,7 +123,7 @@ my $set4 = q|    \entry{set:memberc}{book}{}
+       \strng{authornamehash}{bd051a2f7a5f377e3a62581b0e0f8577}
+       \strng{authorfullhash}{bd051a2f7a5f377e3a62581b0e0f8577}
+       \field{sortinit}{D}
+-      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
++      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
+       \field{labeldatesource}{}
+       \field{labelnamesource}{author}
+       \field{labeltitlesource}{title}
+@@ -150,7 +150,7 @@ my $noset1 = q|    \entry{noseta}{book}{}
+       \field{extraname}{3}
+       \field{labelalpha}{Doe10}
+       \field{sortinit}{D}
+-      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
++      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
+       \field{extradate}{2}
+       \field{extradatescope}{labelyear}
+       \field{labeldatesource}{}
+@@ -180,7 +180,7 @@ my $noset2 = q|    \entry{nosetb}{book}{}
+       \field{extraname}{4}
+       \field{labelalpha}{Doe10}
+       \field{sortinit}{D}
+-      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
++      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
+       \field{extradate}{3}
+       \field{extradatescope}{labelyear}
+       \field{labeldatesource}{}
+@@ -210,7 +210,7 @@ my $noset3 = q|    \entry{nosetc}{book}{}
+       \field{extraname}{5}
+       \field{labelalpha}{Doe10}
+       \field{sortinit}{D}
+-      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
++      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
+       \field{extradate}{4}
+       \field{extradatescope}{labelyear}
+       \field{labeldatesource}{}
+@@ -244,7 +244,7 @@ my $sk4 = q|    \entry{skip4}{article}{dataonly}
+       \strng{authornamehash}{bd051a2f7a5f377e3a62581b0e0f8577}
+       \strng{authorfullhash}{bd051a2f7a5f377e3a62581b0e0f8577}
+       \field{sortinit}{D}
+-      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
++      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
+       \field{labeldatesource}{year}
+       \field{labelnamesource}{author}
+       \field{labeltitlesource}{title}
+diff --git a/t/sort-complex.t b/t/sort-complex.t
+index aa3e564..d52db08 100644
+--- a/t/sort-complex.t
++++ b/t/sort-complex.t
+@@ -123,7 +123,7 @@ my $l4 = q|    \entry{L4}{book}{}
+       \field{extraname}{2}
+       \field{labelalpha}{Doe\textbf{+}95}
+       \field{sortinit}{D}
+-      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
++      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
+       \field{extraalpha}{2}
+       \field{labelnamesource}{author}
+       \field{labeltitlesource}{title}
+@@ -155,7 +155,7 @@ my $l1 = q|    \entry{L1}{book}{}
+       \field{extraname}{1}
+       \field{labelalpha}{Doe95}
+       \field{sortinit}{D}
+-      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
++      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
+       \field{extraalpha}{1}
+       \field{labelnamesource}{author}
+       \field{labeltitlesource}{title}
+@@ -187,7 +187,7 @@ my $l2 = q|    \entry{L2}{book}{}
+       \field{extraname}{3}
+       \field{labelalpha}{Doe95}
+       \field{sortinit}{D}
+-      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
++      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
+       \field{extraalpha}{3}
+       \field{labelnamesource}{author}
+       \field{labeltitlesource}{title}
+@@ -219,7 +219,7 @@ my $l3 = q|    \entry{L3}{book}{}
+       \field{extraname}{2}
+       \field{labelalpha}{Doe95}
+       \field{sortinit}{D}
+-      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
++      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
+       \field{extraalpha}{2}
+       \field{labelnamesource}{author}
+       \field{labeltitlesource}{title}
+@@ -253,7 +253,7 @@ my $l5 = q|    \entry{L5}{book}{}
+       \field{extraname}{1}
+       \field{labelalpha}{Doe\textbf{+}95}
+       \field{sortinit}{D}
+-      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
++      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
+       \field{extraalpha}{1}
+       \field{labelnamesource}{author}
+       \field{labeltitlesource}{title}
+diff --git a/t/tdata/full-bbl.bbl b/t/tdata/full-bbl.bbl
+index 4f168de..07c2fab 100644
+--- a/t/tdata/full-bbl.bbl
++++ b/t/tdata/full-bbl.bbl
+@@ -36,7 +36,7 @@
+       \strng{authorfullhash}{bd051a2f7a5f377e3a62581b0e0f8577}
+       \field{labelalpha}{\emph{A}}
+       \field{sortinit}{A}
+-      \field{sortinithash}{d77c7cdd82ff690d4c3ef13216f92f0b}
++      \field{sortinithash}{a3dcedd53b04d1adfd5ac303ecd5e6fa}
+       \true{singletitle}
+       \field{labelnamesource}{author}
+       \field{labeltitlesource}{title}
+@@ -63,7 +63,7 @@
+       \strng{authorfullhash}{bd051a2f7a5f377e3a62581b0e0f8577}
+       \field{labelalpha}{\emph{A}}
+       \field{sortinit}{A}
+-      \field{sortinithash}{d77c7cdd82ff690d4c3ef13216f92f0b}
++      \field{sortinithash}{a3dcedd53b04d1adfd5ac303ecd5e6fa}
+       \true{singletitle}
+       \field{labelnamesource}{author}
+       \field{labeltitlesource}{title}
+@@ -90,7 +90,7 @@
+       \strng{authorfullhash}{bd051a2f7a5f377e3a62581b0e0f8577}
+       \field{labelalpha}{\emph{A}}
+       \field{sortinit}{D}
+-      \field{sortinithash}{2ef1bd9a78cc71eb74d7231c635177b8}
++      \field{sortinithash}{c438b3d5d027251ba63f5ed538d98af5}
+       \true{singletitle}
+       \field{labelnamesource}{author}
+       \field{labeltitlesource}{title}
+diff --git a/t/tdata/full-bblxml.bblxml b/t/tdata/full-bblxml.bblxml
+index 9eea7d1..a39a787 100644
+--- a/t/tdata/full-bblxml.bblxml
++++ b/t/tdata/full-bblxml.bblxml
+@@ -47,7 +47,7 @@
+         <bbl:field name="authorbibnamehash">860705eb8ffac6e40507746c7ede79ca</bbl:field>
+         <bbl:field name="labelalpha">Aks\textbf{+}06</bbl:field>
+         <bbl:field name="sortinit">A</bbl:field>
+-        <bbl:field name="sortinithash">d77c7cdd82ff690d4c3ef13216f92f0b</bbl:field>
++        <bbl:field name="sortinithash">a3dcedd53b04d1adfd5ac303ecd5e6fa</bbl:field>
+         <bbl:field name="labelnamesource">author</bbl:field>
+         <bbl:field name="labeltitlesource">title</bbl:field>
+         <bbl:field name="indextitle">Effect of immobilization on catalytic characteristics</bbl:field>
+@@ -79,7 +79,7 @@
+         <bbl:field name="authorbibnamehash">9717d2d959a4b18727868ca7928c34b4</bbl:field>
+         <bbl:field name="labelalpha">Ang02</bbl:field>
+         <bbl:field name="sortinit">A</bbl:field>
+-        <bbl:field name="sortinithash">d77c7cdd82ff690d4c3ef13216f92f0b</bbl:field>
++        <bbl:field name="sortinithash">a3dcedd53b04d1adfd5ac303ecd5e6fa</bbl:field>
+         <bbl:field name="labelnamesource">author</bbl:field>
+         <bbl:field name="labeltitlesource">shorttitle</bbl:field>
+         <bbl:field name="annotation">A German article in a French journal. Apart from that, a typical article entry. Note the indextitle field</bbl:field>
+@@ -109,7 +109,7 @@
+         </bbl:set>
+         <bbl:field name="labelalpha">Gla61</bbl:field>
+         <bbl:field name="sortinit">G</bbl:field>
+-        <bbl:field name="sortinithash">5e8d2bf9d38de41b1528bd307546008f</bbl:field>
++        <bbl:field name="sortinithash">62eb2aa29549e4fdbd3cb154ec5711cb</bbl:field>
+         <bbl:field name="annotation">A set entry with three members discussing the standard model of particle physics.</bbl:field>
+       </bbl:entry>
+       <bbl:entry key="stdmodel:glashow" type="article">
+@@ -129,7 +129,7 @@
+         <bbl:field name="authorfullhash">eb3f242602109f5bdbeb41fdd990fcc0</bbl:field>
+         <bbl:field name="authorbibnamehash">eb3f242602109f5bdbeb41fdd990fcc0</bbl:field>
+         <bbl:field name="sortinit">G</bbl:field>
+-        <bbl:field name="sortinithash">5e8d2bf9d38de41b1528bd307546008f</bbl:field>
++        <bbl:field name="sortinithash">62eb2aa29549e4fdbd3cb154ec5711cb</bbl:field>
+         <bbl:field name="labelnamesource">author</bbl:field>
+         <bbl:field name="labeltitlesource">title</bbl:field>
+         <bbl:field name="journaltitle">Nucl. Phys.</bbl:field>
+@@ -168,7 +168,7 @@
+         <bbl:field name="extraname">1</bbl:field>
+         <bbl:field name="labelalpha">Knu86</bbl:field>
+         <bbl:field name="sortinit">K</bbl:field>
+-        <bbl:field name="sortinithash">9fd838a31ba64d981e8f44562bd33f89</bbl:field>
++        <bbl:field name="sortinithash">d3edc18d54b9438a72c24c925bfb38f4</bbl:field>
+         <bbl:field name="extraalpha">1</bbl:field>
+         <bbl:field name="labelnamesource">author</bbl:field>
+         <bbl:field name="labeltitlesource">shorttitle</bbl:field>
+@@ -207,7 +207,7 @@
+         <bbl:field name="extraname">2</bbl:field>
+         <bbl:field name="labelalpha">Knu86</bbl:field>
+         <bbl:field name="sortinit">K</bbl:field>
+-        <bbl:field name="sortinithash">9fd838a31ba64d981e8f44562bd33f89</bbl:field>
++        <bbl:field name="sortinithash">d3edc18d54b9438a72c24c925bfb38f4</bbl:field>
+         <bbl:field name="extraalpha">2</bbl:field>
+         <bbl:field name="labelnamesource">author</bbl:field>
+         <bbl:field name="labeltitlesource">shorttitle</bbl:field>
+@@ -236,7 +236,7 @@
+         <bbl:field name="authorbibnamehash">d52f05e0199eae563725b4165f4b2520</bbl:field>
+         <bbl:field name="labelalpha">Ree58</bbl:field>
+         <bbl:field name="sortinit">R</bbl:field>
+-        <bbl:field name="sortinithash">da6b42bd3ab22fee61abed031ee405f7</bbl:field>
++        <bbl:field name="sortinithash">b9c68a358aea118dfa887b6e902414a7</bbl:field>
+         <bbl:field name="labelnamesource">author</bbl:field>
+         <bbl:field name="labeltitlesource">title</bbl:field>
+         <bbl:field name="annotation">An article entry with a series and a volume field. Note the format of the series. If the value of the series field is an integer, this number is printed as an ordinal and the string *series is appended automatically</bbl:field>
+@@ -286,7 +286,7 @@
+         <bbl:field name="editorfullhash">d0ec890e59163c24c111a08d2a4be982</bbl:field>
+         <bbl:field name="editorbibnamehash">d0ec890e59163c24c111a08d2a4be982</bbl:field>
+         <bbl:field name="sortinit">S</bbl:field>
+-        <bbl:field name="sortinithash">322b1d5276f2f6c1bccdcd15920dbee6</bbl:field>
++        <bbl:field name="sortinithash">c319cff79d99c853d775f88277d4e45f</bbl:field>
+         <bbl:field name="labelnamesource">author</bbl:field>
+         <bbl:field name="labeltitlesource">title</bbl:field>
+         <bbl:field name="booksubtitle">Relativistic groups and analyticity</bbl:field>
+@@ -317,7 +317,7 @@
+         <bbl:field name="authorbibnamehash">93f17724cbd884231ef39a73755ef5bb</bbl:field>
+         <bbl:field name="labelalpha">Sho91</bbl:field>
+         <bbl:field name="sortinit">S</bbl:field>
+-        <bbl:field name="sortinithash">322b1d5276f2f6c1bccdcd15920dbee6</bbl:field>
++        <bbl:field name="sortinithash">c319cff79d99c853d775f88277d4e45f</bbl:field>
+         <bbl:field name="labelnamesource">author</bbl:field>
+         <bbl:field name="labeltitlesource">title</bbl:field>
+         <bbl:field name="annotation">An article entry with series, volume, and number fields. Note the format of the series which is a localization key</bbl:field>
+@@ -353,7 +353,7 @@
+         <bbl:field name="authorfullhash">15e144c72b0b9d10db00ddc6d37a19e6</bbl:field>
+         <bbl:field name="authorbibnamehash">15e144c72b0b9d10db00ddc6d37a19e6</bbl:field>
+         <bbl:field name="sortinit">W</bbl:field>
+-        <bbl:field name="sortinithash">ecb89ff85896a47dc313960773ac311d</bbl:field>
++        <bbl:field name="sortinithash">1af34bd8c148ffb32de1494636b49713</bbl:field>
+         <bbl:field name="labelnamesource">author</bbl:field>
+         <bbl:field name="labeltitlesource">title</bbl:field>
+         <bbl:field name="journaltitle">Phys. Rev. Lett.</bbl:field>
+@@ -411,7 +411,7 @@
+         <bbl:field name="authorbibnamehash">860705eb8ffac6e40507746c7ede79ca</bbl:field>
+         <bbl:field name="labelalpha">Aks\textbf{+}06</bbl:field>
+         <bbl:field name="sortinit">A</bbl:field>
+-        <bbl:field name="sortinithash">d77c7cdd82ff690d4c3ef13216f92f0b</bbl:field>
++        <bbl:field name="sortinithash">a3dcedd53b04d1adfd5ac303ecd5e6fa</bbl:field>
+         <bbl:field name="labelnamesource">author</bbl:field>
+         <bbl:field name="labeltitlesource">title</bbl:field>
+         <bbl:field name="indextitle">Effect of immobilization on catalytic characteristics</bbl:field>
+@@ -443,7 +443,7 @@
+         <bbl:field name="authorbibnamehash">9717d2d959a4b18727868ca7928c34b4</bbl:field>
+         <bbl:field name="labelalpha">Ang02</bbl:field>
+         <bbl:field name="sortinit">A</bbl:field>
+-        <bbl:field name="sortinithash">d77c7cdd82ff690d4c3ef13216f92f0b</bbl:field>
++        <bbl:field name="sortinithash">a3dcedd53b04d1adfd5ac303ecd5e6fa</bbl:field>
+         <bbl:field name="labelnamesource">author</bbl:field>
+         <bbl:field name="labeltitlesource">shorttitle</bbl:field>
+         <bbl:field name="annotation">A German article in a French journal. Apart from that, a typical article entry. Note the indextitle field</bbl:field>
+@@ -473,7 +473,7 @@
+         </bbl:set>
+         <bbl:field name="labelalpha">Gla61</bbl:field>
+         <bbl:field name="sortinit">G</bbl:field>
+-        <bbl:field name="sortinithash">5e8d2bf9d38de41b1528bd307546008f</bbl:field>
++        <bbl:field name="sortinithash">62eb2aa29549e4fdbd3cb154ec5711cb</bbl:field>
+         <bbl:field name="annotation">A set entry with three members discussing the standard model of particle physics.</bbl:field>
+       </bbl:entry>
+       <bbl:entry key="stdmodel:glashow" type="article">
+@@ -493,7 +493,7 @@
+         <bbl:field name="authorfullhash">eb3f242602109f5bdbeb41fdd990fcc0</bbl:field>
+         <bbl:field name="authorbibnamehash">eb3f242602109f5bdbeb41fdd990fcc0</bbl:field>
+         <bbl:field name="sortinit">G</bbl:field>
+-        <bbl:field name="sortinithash">5e8d2bf9d38de41b1528bd307546008f</bbl:field>
++        <bbl:field name="sortinithash">62eb2aa29549e4fdbd3cb154ec5711cb</bbl:field>
+         <bbl:field name="labelnamesource">author</bbl:field>
+         <bbl:field name="labeltitlesource">title</bbl:field>
+         <bbl:field name="journaltitle">Nucl. Phys.</bbl:field>
+@@ -532,7 +532,7 @@
+         <bbl:field name="extraname">1</bbl:field>
+         <bbl:field name="labelalpha">Knu86</bbl:field>
+         <bbl:field name="sortinit">K</bbl:field>
+-        <bbl:field name="sortinithash">9fd838a31ba64d981e8f44562bd33f89</bbl:field>
++        <bbl:field name="sortinithash">d3edc18d54b9438a72c24c925bfb38f4</bbl:field>
+         <bbl:field name="extraalpha">1</bbl:field>
+         <bbl:field name="labelnamesource">author</bbl:field>
+         <bbl:field name="labeltitlesource">shorttitle</bbl:field>
+@@ -571,7 +571,7 @@
+         <bbl:field name="extraname">2</bbl:field>
+         <bbl:field name="labelalpha">Knu86</bbl:field>
+         <bbl:field name="sortinit">K</bbl:field>
+-        <bbl:field name="sortinithash">9fd838a31ba64d981e8f44562bd33f89</bbl:field>
++        <bbl:field name="sortinithash">d3edc18d54b9438a72c24c925bfb38f4</bbl:field>
+         <bbl:field name="extraalpha">2</bbl:field>
+         <bbl:field name="labelnamesource">author</bbl:field>
+         <bbl:field name="labeltitlesource">shorttitle</bbl:field>
+@@ -600,7 +600,7 @@
+         <bbl:field name="authorbibnamehash">d52f05e0199eae563725b4165f4b2520</bbl:field>
+         <bbl:field name="labelalpha">Ree58</bbl:field>
+         <bbl:field name="sortinit">R</bbl:field>
+-        <bbl:field name="sortinithash">da6b42bd3ab22fee61abed031ee405f7</bbl:field>
++        <bbl:field name="sortinithash">b9c68a358aea118dfa887b6e902414a7</bbl:field>
+         <bbl:field name="labelnamesource">author</bbl:field>
+         <bbl:field name="labeltitlesource">title</bbl:field>
+         <bbl:field name="annotation">An article entry with a series and a volume field. Note the format of the series. If the value of the series field is an integer, this number is printed as an ordinal and the string *series is appended automatically</bbl:field>
+@@ -650,7 +650,7 @@
+         <bbl:field name="editorfullhash">d0ec890e59163c24c111a08d2a4be982</bbl:field>
+         <bbl:field name="editorbibnamehash">d0ec890e59163c24c111a08d2a4be982</bbl:field>
+         <bbl:field name="sortinit">S</bbl:field>
+-        <bbl:field name="sortinithash">322b1d5276f2f6c1bccdcd15920dbee6</bbl:field>
++        <bbl:field name="sortinithash">c319cff79d99c853d775f88277d4e45f</bbl:field>
+         <bbl:field name="labelnamesource">author</bbl:field>
+         <bbl:field name="labeltitlesource">title</bbl:field>
+         <bbl:field name="booksubtitle">Relativistic groups and analyticity</bbl:field>
+@@ -681,7 +681,7 @@
+         <bbl:field name="authorbibnamehash">93f17724cbd884231ef39a73755ef5bb</bbl:field>
+         <bbl:field name="labelalpha">Sho91</bbl:field>
+         <bbl:field name="sortinit">S</bbl:field>
+-        <bbl:field name="sortinithash">322b1d5276f2f6c1bccdcd15920dbee6</bbl:field>
++        <bbl:field name="sortinithash">c319cff79d99c853d775f88277d4e45f</bbl:field>
+         <bbl:field name="labelnamesource">author</bbl:field>
+         <bbl:field name="labeltitlesource">title</bbl:field>
+         <bbl:field name="annotation">An article entry with series, volume, and number fields. Note the format of the series which is a localization key</bbl:field>
+@@ -717,7 +717,7 @@
+         <bbl:field name="authorfullhash">15e144c72b0b9d10db00ddc6d37a19e6</bbl:field>
+         <bbl:field name="authorbibnamehash">15e144c72b0b9d10db00ddc6d37a19e6</bbl:field>
+         <bbl:field name="sortinit">W</bbl:field>
+-        <bbl:field name="sortinithash">ecb89ff85896a47dc313960773ac311d</bbl:field>
++        <bbl:field name="sortinithash">1af34bd8c148ffb32de1494636b49713</bbl:field>
+         <bbl:field name="labelnamesource">author</bbl:field>
+         <bbl:field name="labeltitlesource">title</bbl:field>
+         <bbl:field name="journaltitle">Phys. Rev. Lett.</bbl:field>
+diff --git a/t/tdata/remote-files.bcf b/t/tdata/remote-files.bcf
+index c2d784b..a2a1842 100644
+--- a/t/tdata/remote-files.bcf
++++ b/t/tdata/remote-files.bcf
+@@ -1853,12 +1853,12 @@
+     <bcf:datasource type="file" datatype="bibtex">http://www.citeulike.org/bibtex/group/8082</bcf:datasource>
+     <bcf:datasource type="file" datatype="bibtex">http://people.cs.uu.nl/hansb/graphs-bib/definitions.bib</bcf:datasource>
+     <bcf:datasource type="file" datatype="bibtex">http://people.cs.uu.nl/hansb/graphs-bib/papers.bib</bcf:datasource>
+-    <bcf:datasource type="file" datatype="bibtex">https://api.zotero.org/groups/9097/items/II22KQ7D?format=bibtex&amp;limit=1</bcf:datasource>
++    <bcf:datasource type="file" datatype="bibtex">https://api.zotero.org/groups/9097/items/8VITAT46?format=bibtex&amp;limit=1</bcf:datasource>
+   </bcf:bibdata>
+   <bcf:section number="0">
+     <bcf:citekey order="1">citeulike:8283461</bcf:citekey>
+     <bcf:citekey order="2">AbdelbarH98</bcf:citekey>
+-    <bcf:citekey order="3">merleau-ponty_philosophe_2010</bcf:citekey>
++    <bcf:citekey order="3">crossley_politics_1994</bcf:citekey>
+   </bcf:section>
+   <!-- SORTING TEMPLATES -->
+   <bcf:sortingtemplate name="nty">
+diff --git a/t/uniqueness-nameparts.t b/t/uniqueness-nameparts.t
+index beb2e39..1fb65a8 100644
+--- a/t/uniqueness-nameparts.t
++++ b/t/uniqueness-nameparts.t
+@@ -81,7 +81,7 @@ my $un1 = q|    \entry{un1}{article}{}
+       \strng{authorfullhash}{329d8f9192ea3349d700160c9ddb505d}
+       \field{labelalpha}{SmiJohSim}
+       \field{sortinit}{S}
+-      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
++      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
+       \field{labelnamesource}{author}
+     \endentry
+ |;
+@@ -106,7 +106,7 @@ my $un2 = q|    \entry{un2}{article}{}
+       \strng{authorfullhash}{7551114aede4ef69e4b3683039801706}
+       \field{labelalpha}{SmiJohAla}
+       \field{sortinit}{S}
+-      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
++      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
+       \field{labelnamesource}{author}
+     \endentry
+ |;
+@@ -131,7 +131,7 @@ my $un3 = q|    \entry{un3}{article}{}
+       \strng{authorfullhash}{401aebda288799a7c757526242d8c9fc}
+       \field{labelalpha}{SmiJohArt}
+       \field{sortinit}{S}
+-      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
++      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
+       \field{labelnamesource}{author}
+     \endentry
+ |;
+@@ -156,7 +156,7 @@ my $un4 = q|    \entry{un4}{article}{}
+       \strng{authorfullhash}{f6038a264619efefd49c7daac56424ca}
+       \field{labelalpha}{SmiAlaSim}
+       \field{sortinit}{S}
+-      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
++      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
+       \field{labelnamesource}{author}
+     \endentry
+ |;
+@@ -181,7 +181,7 @@ my $un1a = q|    \entry{un1}{article}{}
+       \strng{authorfullhash}{329d8f9192ea3349d700160c9ddb505d}
+       \field{labelalpha}{SmiJohSim}
+       \field{sortinit}{S}
+-      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
++      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
+       \field{labelnamesource}{author}
+     \endentry
+ |;
+@@ -206,7 +206,7 @@ my $un2a = q|    \entry{un2}{article}{}
+       \strng{authorfullhash}{7551114aede4ef69e4b3683039801706}
+       \field{labelalpha}{SmiJohAla}
+       \field{sortinit}{S}
+-      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
++      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
+       \field{labelnamesource}{author}
+     \endentry
+ |;
+@@ -231,7 +231,7 @@ my $un3a = q|    \entry{un3}{article}{}
+       \strng{authorfullhash}{401aebda288799a7c757526242d8c9fc}
+       \field{labelalpha}{SmiJohArt}
+       \field{sortinit}{S}
+-      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
++      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
+       \field{labelnamesource}{author}
+     \endentry
+ |;
+@@ -257,7 +257,7 @@ my $un4a = q|    \entry{un4}{article}{}
+       \strng{authorfullhash}{f6038a264619efefd49c7daac56424ca}
+       \field{labelalpha}{SmiAlaSim}
+       \field{sortinit}{S}
+-      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
++      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
+       \field{labelnamesource}{author}
+     \endentry
+ |;
+@@ -285,7 +285,7 @@ my $un1b = q|    \entry{un1}{article}{}
+       \field{extraname}{5}
+       \field{labelalpha}{SmiJohSim}
+       \field{sortinit}{S}
+-      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
++      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
+       \field{extradate}{5}
+       \field{labelnamesource}{author}
+     \endentry
+@@ -311,7 +311,7 @@ my $un2b = q|    \entry{un2}{article}{}
+       \strng{authorfullhash}{7551114aede4ef69e4b3683039801706}
+       \field{labelalpha}{SmiJohAla}
+       \field{sortinit}{S}
+-      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
++      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
+       \field{labelnamesource}{author}
+     \endentry
+ |;
+@@ -336,7 +336,7 @@ my $un3b = q|    \entry{un3}{article}{}
+       \strng{authorfullhash}{401aebda288799a7c757526242d8c9fc}
+       \field{labelalpha}{SmiJohArt}
+       \field{sortinit}{S}
+-      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
++      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
+       \field{labelnamesource}{author}
+     \endentry
+ |;
+@@ -364,7 +364,7 @@ my $un4b = q|    \entry{un4}{article}{}
+       \field{extraname}{1}
+       \field{labelalpha}{SmiAlaSim}
+       \field{sortinit}{S}
+-      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
++      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
+       \field{extradate}{1}
+       \field{labelnamesource}{author}
+     \endentry
+@@ -393,7 +393,7 @@ my $un5 = q|    \entry{un5}{article}{uniquenametemplatename=test3}
+       \field{extraname}{2}
+       \field{labelalpha}{SmiArtSim}
+       \field{sortinit}{S}
+-      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
++      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
+       \field{extradate}{2}
+       \field{labelnamesource}{author}
+     \endentry
+@@ -422,7 +422,7 @@ my $un6 = q|    \entry{un6}{article}{}
+       \field{extraname}{3}
+       \field{labelalpha}{SmiArtSmy}
+       \field{sortinit}{S}
+-      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
++      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
+       \field{extradate}{3}
+       \field{labelnamesource}{author}
+     \\endentry
+@@ -451,7 +451,7 @@ my $un7 = q|    \entry{un7}{article}{}
+       \field{extraname}{4}
+       \field{labelalpha}{SmiArtSme}
+       \field{sortinit}{S}
+-      \field{sortinithash}{322b1d5276f2f6c1bccdcd15920dbee6}
++      \field{sortinithash}{c319cff79d99c853d775f88277d4e45f}
+       \field{extradate}{4}
+       \field{labelnamesource}{author}
+     \endentry
+diff --git a/t/xdata.t b/t/xdata.t
+index 7411b1d..73dcb8b 100644
+--- a/t/xdata.t
++++ b/t/xdata.t
+@@ -75,7 +75,7 @@ my $xd1 = q|    \entry{xd1}{book}{}
+       \strng{authorfullhash}{51db4bfd331cba22959ce2d224c517cd}
+       \field{extraname}{2}
+       \field{sortinit}{E}
+-      \field{sortinithash}{f615fb9c6fba11c6f962fb3fd599810e}
++      \field{sortinithash}{c554bd1a0b76ea92b9f105fe36d9c7b0}
+       \field{extradatescope}{labelyear}
+       \field{labeldatesource}{}
+       \field{labelnamesource}{author}
+@@ -107,7 +107,7 @@ my $xd2 = q|    \entry{xd2}{book}{}
+       \strng{authornamehash}{68539e0ce4922cc4957c6cabf35e6fc8}
+       \strng{authorfullhash}{68539e0ce4922cc4957c6cabf35e6fc8}
+       \field{sortinit}{P}
+-      \field{sortinithash}{8d51b3d5b78d75b54308d706b9bbe285}
++      \field{sortinithash}{bb5b15f2db90f7aef79bb9e83defefcb}
+       \field{extradatescope}{labelyear}
+       \field{labeldatesource}{}
+       \field{labelnamesource}{author}
diff --git a/gnu/packages/patches/clang-10.0-libc-search-path.patch b/gnu/packages/patches/clang-10.0-libc-search-path.patch
new file mode 100644
index 0000000000..966e40b93c
--- /dev/null
+++ b/gnu/packages/patches/clang-10.0-libc-search-path.patch
@@ -0,0 +1,84 @@
+Clang attempts to guess file names based on the OS and distro (yes!),
+but unfortunately, that doesn't work for us.
+
+This patch makes it easy to insert libc's $libdir so that Clang passes the
+correct absolute file name of crt1.o etc. to 'ld'.  It also disables all
+the distro-specific stuff and removes the hard-coded FHS directory names
+to make sure Clang also works on non-Guix systems.
+
+diff --git a/lib/Driver/ToolChains/Linux.cpp b/lib/Driver/ToolChains/Linux.cpp
+index bff1ab10..79e1477e 100644
+--- a/lib/Driver/ToolChains/Linux.cpp
++++ b/lib/Driver/ToolChains/Linux.cpp
+@@ -240,6 +240,9 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
+                          .str());
+   }
+ 
++// Comment out the distro-specific tweaks so that they don't bite when
++// using Guix on a foreign distro.
++#if 0
+   Distro Distro(D.getVFS(), Triple);
+ 
+   if (Distro.IsAlpineLinux() || Triple.isAndroid()) {
+@@ -306,6 +309,7 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
+ 
+   if (IsAndroid || Distro.IsOpenSUSE())
+     ExtraOpts.push_back("--enable-new-dtags");
++#endif	// Guix
+ 
+   // The selection of paths to try here is designed to match the patterns which
+   // the GCC driver itself uses, as this is part of the GCC-compatible driver.
+@@ -363,7 +367,7 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
+     // the cross. Note that GCC does include some of these directories in some
+     // configurations but this seems somewhere between questionable and simply
+     // a bug.
+-    if (StringRef(LibPath).startswith(SysRoot)) {
++    if (0) {
+       addPathIfExists(D, LibPath + "/" + MultiarchTriple, Paths);
+       addPathIfExists(D, LibPath + "/../" + OSLibDir, Paths);
+     }
+@@ -382,6 +386,8 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
+   addPathIfExists(D, SysRoot + "/lib/" + MultiarchTriple, Paths);
+   addPathIfExists(D, SysRoot + "/lib/../" + OSLibDir, Paths);
+ 
++// This requires the commented distro tweaks above.
++#if 0
+   if (IsAndroid) {
+     // Android sysroots contain a library directory for each supported OS
+     // version as well as some unversioned libraries in the usual multiarch
+@@ -410,10 +416,15 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
+     addPathIfExists(D, SysRoot + "/" + OSLibDir + "/" + ABIName, Paths);
+     addPathIfExists(D, SysRoot + "/usr/" + OSLibDir + "/" + ABIName, Paths);
+   }
++#endif
+ 
+   // Try walking via the GCC triple path in case of biarch or multiarch GCC
+   // installations with strange symlinks.
+   if (GCCInstallation.isValid()) {
++
++// The following code would end up adding things like
++// "/usr/lib/x86_64-unknown-linux-gnu/../../lib64" to the search path.
++#if 0
+     addPathIfExists(D,
+                     SysRoot + "/usr/lib/" + GCCInstallation.getTriple().str() +
+                         "/../../" + OSLibDir,
+@@ -426,6 +437,7 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
+                              BiarchSibling.gccSuffix(),
+                       Paths);
+     }
++#endif
+ 
+     // See comments above on the multilib variant for details of why this is
+     // included even from outside the sysroot.
+@@ -450,8 +462,9 @@ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
+   if (StringRef(D.Dir).startswith(SysRoot))
+     addPathIfExists(D, D.Dir + "/../lib", Paths);
+ 
+-  addPathIfExists(D, SysRoot + "/lib", Paths);
+-  addPathIfExists(D, SysRoot + "/usr/lib", Paths);
++  // Add libc's lib/ directory to the search path, so that crt1.o, crti.o,
++  // and friends can be found.
++  addPathIfExists(D, "@GLIBC_LIBDIR@", Paths);
+ }
+ 
+ ToolChain::CXXStdlibType Linux::GetDefaultCXXStdlibType() const {
diff --git a/gnu/packages/radio.scm b/gnu/packages/radio.scm
index 8f1562a176..fff68cf657 100644
--- a/gnu/packages/radio.scm
+++ b/gnu/packages/radio.scm
@@ -36,6 +36,8 @@
   #:use-module (gnu packages documentation)
   #:use-module (gnu packages engineering)
   #:use-module (gnu packages fltk)
+  #:use-module (gnu packages gcc)
+  #:use-module (gnu packages gd)
   #:use-module (gnu packages ghostscript)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gstreamer)
@@ -44,6 +46,7 @@
   #:use-module (gnu packages libusb)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages logging)
+  #:use-module (gnu packages lua)
   #:use-module (gnu packages maths)
   #:use-module (gnu packages multiprecision)
   #:use-module (gnu packages networking)
@@ -53,9 +56,13 @@
   #:use-module (gnu packages python-science)
   #:use-module (gnu packages python-xyz)
   #:use-module (gnu packages qt)
+  #:use-module (gnu packages readline)
+  #:use-module (gnu packages ruby)
   #:use-module (gnu packages sphinx)
   #:use-module (gnu packages swig)
+  #:use-module (gnu packages tcl)
   #:use-module (gnu packages tex)
+  #:use-module (gnu packages texinfo)
   #:use-module (gnu packages version-control)
   #:use-module (gnu packages xml)
   #:use-module (gnu packages xorg)
@@ -544,8 +551,10 @@ using GNU Radio and the Qt GUI toolkit.")
     (inputs
      `(("alsa-lib" ,alsa-lib)
        ("fltk" ,fltk)
+       ("hamlib" ,hamlib)
        ("libpng" ,libpng)
        ("libsamplerate" ,libsamplerate)
+       ("libusb" ,libusb)
        ("libx11" ,libx11)
        ("libxext" ,libxext)
        ("libxfixes" ,libxfixes)
@@ -644,3 +653,112 @@ transmitted over any of several digital modes and verified at the receipt end
 for correctness.")
     (home-page "http://www.w1hkj.com/")
     (license license:gpl3+)))
+
+(define-public hamlib
+  (package
+    (name "hamlib")
+    (version "3.3")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://github.com/Hamlib/Hamlib/releases/download/"
+             version "/hamlib-" version ".tar.gz"))
+       (sha256
+        (base32 "10788mgrhbc57zpzakcxv5aqnr2819pcshml6fbh8zvnkja562y9"))))
+    (build-system gnu-build-system)
+    (native-inputs
+     `(("doxygen" ,doxygen)
+       ("lua" ,lua)
+       ("pkg-config" ,pkg-config)
+       ("python-wrapper" ,python-wrapper)
+       ("swig" ,swig)
+       ("tcl" ,tcl)))
+    (inputs
+     `(("gd" ,gd)
+       ("libusb" ,libusb)
+       ("libxml2" ,libxml2)
+       ("readline" ,readline)))
+    (arguments
+     `(#:configure-flags '("--disable-static"
+                           "--with-lua-binding"
+                           "--with-python-binding"
+                           "--with-tcl-binding"
+                           "--with-xml-support")))
+    (synopsis "Tools and API to control radios")
+    (description
+     "The Ham Radio Control Library (Hamlib) is a project to provide programs
+with a consistent Application Programming Interface (API) for controlling the
+myriad of radios and rotators available to amateur radio and communications
+users.")
+    (home-page "https://hamlib.github.io/")
+    (license (list license:gpl2+ license:lgpl2.1+))))
+
+(define wsjtx-hamlib
+  ;; Fork of hamlib with custom patches used by wsjtx.
+  (package
+    (inherit hamlib)
+    (name "wsjtx-hamlib")
+    (version "2.1.2")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://git.code.sf.net/u/bsomervi/hamlib.git")
+             (commit (string-append "wsjtx-" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1ksv3cmr1dl45p0pp1panyc9dngd158gvv9ysv25lq4nqv1wn87i"))))
+    (native-inputs
+     `(("autoconf" ,autoconf)
+       ("automake" ,automake)
+       ("libtool" ,libtool)
+       ("texinfo" ,texinfo)
+       ,@(package-native-inputs hamlib)))))
+
+(define-public wsjtx
+  (package
+    (name "wsjtx")
+    (version "2.1.2")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://git.code.sf.net/p/wsjt/wsjtx.git")
+             (commit (string-append "wsjtx-" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "1fnqzjd3dmxp3yjwjvwz2djk9gzb1y2cqfa188f3x8lynxhdhnfs"))
+       (modules '((guix build utils)))
+       (snippet
+        '(begin
+           ;; Delete bundled boost to use the shared one.
+           (delete-file-recursively "boost")
+           #t))))
+    (build-system qt-build-system)
+    (native-inputs
+     `(("asciidoc" ,asciidoc)
+       ("gfortran" ,gfortran)
+       ("pkg-config" ,pkg-config)
+       ("qttools" ,qttools)
+       ("ruby-asciidoctor" ,ruby-asciidoctor)))
+    (inputs
+     `(("boost" ,boost)
+       ("fftw" ,fftw)
+       ("fftwf" ,fftwf)
+       ("hamlib" ,wsjtx-hamlib)
+       ("libusb" ,libusb)
+       ("qtbase" ,qtbase)
+       ("qtmultimedia" ,qtmultimedia)
+       ("qtserialport" ,qtserialport)))
+    (arguments
+     `(#:tests? #f)) ; No test suite
+    (synopsis "Weak-signal ham radio communication program")
+    (description
+     "WSJT-X implements communication protocols or modes called FT4, FT8,
+JT4, JT9, JT65, QRA64, ISCAT, MSK144, and WSPR, as well as one called Echo for
+detecting and measuring your own radio signals reflected from the Moon.  These
+modes were all designed for making reliable, confirmed QSOs under extreme
+weak-signal conditions.")
+    (home-page "https://www.physics.princeton.edu/pulsar/k1jt/wsjtx.html")
+    (license license:gpl3)))
diff --git a/gnu/packages/tex.scm b/gnu/packages/tex.scm
index 3f210cd6e8..464dbd1b04 100644
--- a/gnu/packages/tex.scm
+++ b/gnu/packages/tex.scm
@@ -6,7 +6,7 @@
 ;;; Copyright © 2016, 2018, 2019 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 Federico Beffa <beffa@fbengineering.ch>
 ;;; Copyright © 2016 Thomas Danckaert <post@thomasdanckaert.be>
-;;; Copyright © 2016, 2017, 2018, 2019 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2016, 2017, 2018, 2019, 2020 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2017 Leo Famulari <leo@famulari.name>
 ;;; Copyright © 2017, 2020 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2017, 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
@@ -5891,7 +5891,7 @@ values (strings, macros, or numbers) pasted together.")
 (define-public biber
   (package
     (name "biber")
-    (version "2.12")
+    (version "2.11")
     (source (origin
               (method git-fetch)
               (uri (git-reference
@@ -5900,10 +5900,11 @@ values (strings, macros, or numbers) pasted together.")
               (file-name (git-file-name name version))
               ;; TODO: Patch awaiting inclusion upstream (see:
               ;; https://github.com/plk/biber/issues/239).
-              (patches (search-patches "biber-fix-encoding-write.patch"))
+              (patches (search-patches "biber-fix-encoding-write.patch"
+                                       "biber-sortinithash.patch"))
               (sha256
                (base32
-                "1g1hi6zvf2hmrjly1sidjaxy5440gfqm4p7p3n7kayshnjsmlskx"))))
+                "0qgkc1k9n36yfmndwz879pak6mjphld0p85lzn9g2ng0vhxsifzz"))))
     (build-system perl-build-system)
     (arguments
      `(#:phases
@@ -7023,6 +7024,32 @@ a different path and manipulating characters.  It includes the functionality
 of the old package @code{pst-char}.")
       (license license:lppl))))
 
+(define-public texlive-marginnote
+  (let ((template (simple-texlive-package
+                   "texlive-marginnote"
+                   (list "/source/latex/marginnote/marginnote.dtx")
+                   (base32
+                    "1vj1k8xm11gjdfj60as42d8lsv3dbzrm5dlgqcfk89d9dzm3k39j"))))
+    (package
+      (inherit template)
+      (home-page "http://www.ctan.org/pkg/marginnote")
+      (arguments
+       (substitute-keyword-arguments (package-arguments template)
+         ((#:tex-directory _ '())
+          "latex/marginnote")
+         ((#:build-targets _ '())
+          ''("marginnote.dtx"))
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-after 'unpack 'chdir
+               (lambda _ (chdir "source/latex/marginnote") #t))))))
+      (synopsis "Notes in the margin")
+      (description "This package provides the command @code{\\marginnote} that
+may be used instead of @code{\\marginpar} at almost every place where
+@code{\\marginpar} cannot be used, e.g., inside floats, footnotes, or in
+frames made with the @code{framed} package.")
+      (license license:lppl1.3c+))))
+
 (define-public texlive-iftex
   (let ((template (simple-texlive-package
                    "texlive-iftex"
@@ -7243,3 +7270,29 @@ commands as well as behind-the-scenes optimisation.  Guidelines are given as
 to what constitutes a good table in this context.  The package offers
 @code{longtable} compatibility.")
     (license license:lppl1.3+)))
+
+(define-public texlive-csquotes
+  (let ((template (simple-texlive-package
+                   "texlive-csquotes"
+                   (list "/doc/latex/csquotes/"
+                         "/tex/latex/csquotes/")
+                   (base32
+                    "15hgn37zg433skn7ijqs1kl2z56fhy29cjxn01b5pjrnrkdar4i4")
+                   #:trivial? #t)))
+    (package
+      (inherit template)
+      (propagated-inputs
+       `(("texlive-etoolbox" ,texlive-etoolbox)))
+      (home-page "https://www.ctan.org/pkg/csquotes")
+      (synopsis "Context sensitive quotation facilities")
+      (description "This package provides advanced facilities for inline and
+display quotations.  It is designed for a wide range of tasks ranging from the
+most simple applications to the more complex demands of formal quotations.
+The facilities include commands, environments, and user-definable 'smart
+quotes' which dynamically adjust to their context.  Quotation marks are
+switched automatically if quotations are nested and they can be adjusted to
+the current language if the babel package is available.  There are additional
+facilities designed to cope with the more specific demands of academic
+writing, especially in the humanities and the social sciences.  All quote
+styles as well as the optional active quotes are freely configurable.")
+      (license license:lppl1.3c+))))
diff --git a/gnu/packages/web.scm b/gnu/packages/web.scm
index 1a70a2b7a1..03cb897c82 100644
--- a/gnu/packages/web.scm
+++ b/gnu/packages/web.scm
@@ -6280,12 +6280,14 @@ technologies.")
     (name "java-eclipse-jetty-test-helper")
     (version "4.2")
     (source (origin
-              (method url-fetch)
-              (uri (string-append "https://github.com/eclipse/jetty.toolchain/"
-                                  "archive/jetty-test-helper-" version ".tar.gz"))
+              (method git-fetch)
+              (uri (git-reference
+                     (url "https://github.com/eclipse/jetty.toolchain/")
+                     (commit (string-append "jetty-test-helper-" version))))
+              (file-name (git-file-name name version))
               (sha256
                (base32
-                "1jd6r9wc26fa11si4rn2gvy8ml8q4zw1nr6v04mjp8wvwpgvzwx5"))))
+                "1g7cdh03nfwbdxzvwm84ysgvw08xx7431lsjryj2gmf3lrqpizgb"))))
     (build-system ant-build-system)
     (arguments
      `(#:jar-name "eclipse-jetty-test-helper.jar"