diff --git a/README.md b/README.md
index 2e75a08..b14021e 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
 
 # **The AMUN Code**
-## Copyright (C) 2008-2022 Grzegorz Kowal
+## Copyright (C) 2008-2023 Grzegorz Kowal
 
 [![Build Status](https://ampere-orbis.nsupdate.info/api/badges/gkowal/amun-code/status.svg)](https://ampere-orbis.nsupdate.info/gkowal/amun-code)
 
diff --git a/python/amunpy/src/amunpy/__init__.py b/python/amunpy/src/amunpy/__init__.py
index 18e18d5..0ed875e 100644
--- a/python/amunpy/src/amunpy/__init__.py
+++ b/python/amunpy/src/amunpy/__init__.py
@@ -20,7 +20,7 @@ __all__ = [ 'AmunXML', 'AmunH5', 'WriteVTK', \
         'amun_attribute', 'amun_coordinate', 'amun_dataset', 'amun_dataset_vtk', 'amun_integrals' ]
 
 __author__ = "Grzegorz Kowal"
-__copyright__ = "Copyright 2018-2022 Grzegorz Kowal <grzegorz@amuncode.org>"
+__copyright__ = "Copyright 2018-2023 Grzegorz Kowal <grzegorz@amuncode.org>"
 __version__ = "0.9.9"
 __maintainer__ = "Grzegorz Kowal"
 __email__ = "grzegorz@amuncode.org"
diff --git a/python/amunpy/src/amunpy/amun.py b/python/amunpy/src/amunpy/amun.py
index 9e612ad..6871369 100644
--- a/python/amunpy/src/amunpy/amun.py
+++ b/python/amunpy/src/amunpy/amun.py
@@ -5,7 +5,7 @@
   This file is part of the AMUN source code, a program to perform Newtonian or
   relativistic magnetohydrodynamical simulations on uniform or adaptive grid.
 
-  Copyright (C) 2021-2022 Grzegorz Kowal <grzegorz@amuncode.org>
+  Copyright (C) 2021-2023 Grzegorz Kowal <grzegorz@amuncode.org>
 
   This program is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
diff --git a/python/amunpy/src/amunpy/amunh5.py b/python/amunpy/src/amunpy/amunh5.py
index eb59cce..50e794d 100644
--- a/python/amunpy/src/amunpy/amunh5.py
+++ b/python/amunpy/src/amunpy/amunh5.py
@@ -5,7 +5,7 @@
   Newtonian or relativistic magnetohydrodynamical simulations on uniform or
   adaptive mesh.
 
-  Copyright (C) 2018-2022 Grzegorz Kowal <grzegorz@amuncode.org>
+  Copyright (C) 2018-2023 Grzegorz Kowal <grzegorz@amuncode.org>
 
   This program is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
diff --git a/python/amunpy/src/amunpy/amunh5_deprecated.py b/python/amunpy/src/amunpy/amunh5_deprecated.py
index 3d28d81..828107c 100644
--- a/python/amunpy/src/amunpy/amunh5_deprecated.py
+++ b/python/amunpy/src/amunpy/amunh5_deprecated.py
@@ -5,7 +5,7 @@
   Newtonian or relativistic magnetohydrodynamical simulations on uniform or
   adaptive mesh.
 
-  Copyright (C) 2018-2022 Grzegorz Kowal <grzegorz@amuncode.org>
+  Copyright (C) 2018-2023 Grzegorz Kowal <grzegorz@amuncode.org>
 
   This program is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
diff --git a/python/amunpy/src/amunpy/amunxml.py b/python/amunpy/src/amunpy/amunxml.py
index 1a85f52..2c3599b 100644
--- a/python/amunpy/src/amunpy/amunxml.py
+++ b/python/amunpy/src/amunpy/amunxml.py
@@ -5,7 +5,7 @@
   Newtonian or relativistic magnetohydrodynamical simulations on uniform or
   adaptive mesh.
 
-  Copyright (C) 2018-2022 Grzegorz Kowal <grzegorz@amuncode.org>
+  Copyright (C) 2018-2023 Grzegorz Kowal <grzegorz@amuncode.org>
 
   This program is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
diff --git a/python/amunpy/src/amunpy/integrals.py b/python/amunpy/src/amunpy/integrals.py
index 9824a99..55e8fe5 100644
--- a/python/amunpy/src/amunpy/integrals.py
+++ b/python/amunpy/src/amunpy/integrals.py
@@ -5,7 +5,7 @@
   Newtonian or relativistic magnetohydrodynamical simulations on uniform or
   adaptive mesh.
 
-  Copyright (C) 2018-2022 Grzegorz Kowal <grzegorz@amuncode.org>
+  Copyright (C) 2018-2023 Grzegorz Kowal <grzegorz@amuncode.org>
 
   This program is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
diff --git a/python/amunpy/src/amunpy/interpolation.py b/python/amunpy/src/amunpy/interpolation.py
index e38c01d..a71a96d 100644
--- a/python/amunpy/src/amunpy/interpolation.py
+++ b/python/amunpy/src/amunpy/interpolation.py
@@ -5,7 +5,7 @@
   Newtonian or relativistic magnetohydrodynamical simulations on uniform or
   adaptive mesh.
 
-  Copyright (C) 2018-2022 Grzegorz Kowal <grzegorz@amuncode.org>
+  Copyright (C) 2018-2023 Grzegorz Kowal <grzegorz@amuncode.org>
 
   This program is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
diff --git a/python/amunpy/src/amunpy/octree.py b/python/amunpy/src/amunpy/octree.py
index c25afdc..68dc6aa 100644
--- a/python/amunpy/src/amunpy/octree.py
+++ b/python/amunpy/src/amunpy/octree.py
@@ -5,7 +5,7 @@
   Newtonian or relativistic magnetohydrodynamical simulations on uniform or
   adaptive mesh.
 
-  Copyright (C) 2018-2022 Grzegorz Kowal <grzegorz@amuncode.org>
+  Copyright (C) 2018-2023 Grzegorz Kowal <grzegorz@amuncode.org>
 
   This program is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
diff --git a/python/amunpy/src/amunpy/vtkio.py b/python/amunpy/src/amunpy/vtkio.py
index 8091990..d3a90d9 100644
--- a/python/amunpy/src/amunpy/vtkio.py
+++ b/python/amunpy/src/amunpy/vtkio.py
@@ -5,7 +5,7 @@
   Newtonian or relativistic magnetohydrodynamical simulations on uniform or
   adaptive mesh.
 
-  Copyright (C) 2018-2022 Grzegorz Kowal <grzegorz@amuncode.org>
+  Copyright (C) 2018-2023 Grzegorz Kowal <grzegorz@amuncode.org>
 
   This program is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
diff --git a/sources/algebra.F90 b/sources/algebra.F90
index ccec801..18c1166 100644
--- a/sources/algebra.F90
+++ b/sources/algebra.F90
@@ -4,7 +4,7 @@
 !!  Newtonian or relativistic magnetohydrodynamical simulations on uniform or
 !!  adaptive mesh.
 !!
-!!  Copyright (C) 2008-2022 Grzegorz Kowal <grzegorz@amuncode.org>
+!!  Copyright (C) 2008-2023 Grzegorz Kowal <grzegorz@amuncode.org>
 !!
 !!  This program is free software: you can redistribute it and/or modify
 !!  it under the terms of the GNU General Public License as published by
diff --git a/sources/amun.F90 b/sources/amun.F90
index 060e5e4..2ac4e6b 100644
--- a/sources/amun.F90
+++ b/sources/amun.F90
@@ -4,7 +4,7 @@
 !!  Newtonian or relativistic magnetohydrodynamical simulations on uniform or
 !!  adaptive mesh.
 !!
-!!  Copyright (C) 2008-2022 Grzegorz Kowal <grzegorz@amuncode.org>
+!!  Copyright (C) 2008-2023 Grzegorz Kowal <grzegorz@amuncode.org>
 !!
 !!  This program is free software: you can redistribute it and/or modify
 !!  it under the terms of the GNU General Public License as published by
diff --git a/sources/blocks.F90 b/sources/blocks.F90
index e1c84cb..3958571 100644
--- a/sources/blocks.F90
+++ b/sources/blocks.F90
@@ -4,7 +4,7 @@
 !!  Newtonian or relativistic magnetohydrodynamical simulations on uniform or
 !!  adaptive mesh.
 !!
-!!  Copyright (C) 2008-2022 Grzegorz Kowal <grzegorz@amuncode.org>
+!!  Copyright (C) 2008-2023 Grzegorz Kowal <grzegorz@amuncode.org>
 !!
 !!  This program is free software: you can redistribute it and/or modify
 !!  it under the terms of the GNU General Public License as published by
diff --git a/sources/boundaries.F90 b/sources/boundaries.F90
index f698f9d..c55362d 100644
--- a/sources/boundaries.F90
+++ b/sources/boundaries.F90
@@ -4,7 +4,7 @@
 !!  Newtonian or relativistic magnetohydrodynamical simulations on uniform or
 !!  adaptive mesh.
 !!
-!!  Copyright (C) 2008-2022 Grzegorz Kowal <grzegorz@amuncode.org>
+!!  Copyright (C) 2008-2023 Grzegorz Kowal <grzegorz@amuncode.org>
 !!
 !!  This program is free software: you can redistribute it and/or modify
 !!  it under the terms of the GNU General Public License as published by
diff --git a/sources/compression.F90 b/sources/compression.F90
index ab2a13e..60466b8 100644
--- a/sources/compression.F90
+++ b/sources/compression.F90
@@ -4,7 +4,7 @@
 !!  Newtonian or relativistic magnetohydrodynamical simulations on uniform or
 !!  adaptive mesh.
 !!
-!!  Copyright (C) 2020-2022 Grzegorz Kowal <grzegorz@amuncode.org>
+!!  Copyright (C) 2020-2023 Grzegorz Kowal <grzegorz@amuncode.org>
 !!
 !!  This program is free software: you can redistribute it and/or modify
 !!  it under the terms of the GNU General Public License as published by
diff --git a/sources/constants.F90 b/sources/constants.F90
index ff2f90b..2d68e62 100644
--- a/sources/constants.F90
+++ b/sources/constants.F90
@@ -4,7 +4,7 @@
 !!  Newtonian or relativistic magnetohydrodynamical simulations on uniform or
 !!  adaptive mesh.
 !!
-!!  Copyright (C) 2008-2022 Grzegorz Kowal <grzegorz@amuncode.org>
+!!  Copyright (C) 2008-2023 Grzegorz Kowal <grzegorz@amuncode.org>
 !!
 !!  This program is free software: you can redistribute it and/or modify
 !!  it under the terms of the GNU General Public License as published by
diff --git a/sources/coordinates.F90 b/sources/coordinates.F90
index ee7a72b..604354a 100644
--- a/sources/coordinates.F90
+++ b/sources/coordinates.F90
@@ -4,7 +4,7 @@
 !!  Newtonian or relativistic magnetohydrodynamical simulations on uniform or
 !!  adaptive mesh.
 !!
-!!  Copyright (C) 2008-2022 Grzegorz Kowal <grzegorz@amuncode.org>
+!!  Copyright (C) 2008-2023 Grzegorz Kowal <grzegorz@amuncode.org>
 !!
 !!  This program is free software: you can redistribute it and/or modify
 !!  it under the terms of the GNU General Public License as published by
diff --git a/sources/equations.F90 b/sources/equations.F90
index ba96e78..c6dbb3e 100644
--- a/sources/equations.F90
+++ b/sources/equations.F90
@@ -4,7 +4,7 @@
 !!  Newtonian or relativistic magnetohydrodynamical simulations on uniform or
 !!  adaptive mesh.
 !!
-!!  Copyright (C) 2008-2022 Grzegorz Kowal <grzegorz@amuncode.org>
+!!  Copyright (C) 2008-2023 Grzegorz Kowal <grzegorz@amuncode.org>
 !!
 !!  This program is free software: you can redistribute it and/or modify
 !!  it under the terms of the GNU General Public License as published by
diff --git a/sources/evolution.F90 b/sources/evolution.F90
index a7245fa..c953f32 100644
--- a/sources/evolution.F90
+++ b/sources/evolution.F90
@@ -4,7 +4,7 @@
 !!  Newtonian or relativistic magnetohydrodynamical simulations on uniform or
 !!  adaptive mesh.
 !!
-!!  Copyright (C) 2008-2022 Grzegorz Kowal <grzegorz@amuncode.org>
+!!  Copyright (C) 2008-2023 Grzegorz Kowal <grzegorz@amuncode.org>
 !!
 !!  This program is free software: you can redistribute it and/or modify
 !!  it under the terms of the GNU General Public License as published by
diff --git a/sources/forcing.F90 b/sources/forcing.F90
index 4916e49..5a5858b 100644
--- a/sources/forcing.F90
+++ b/sources/forcing.F90
@@ -4,7 +4,7 @@
 !!  Newtonian or relativistic magnetohydrodynamical simulations on uniform or
 !!  adaptive mesh.
 !!
-!!  Copyright (C) 2017-2022 Grzegorz Kowal <grzegorz@amuncode.org>
+!!  Copyright (C) 2017-2023 Grzegorz Kowal <grzegorz@amuncode.org>
 !!
 !!  This program is free software: you can redistribute it and/or modify
 !!  it under the terms of the GNU General Public License as published by
diff --git a/sources/gravity.F90 b/sources/gravity.F90
index d03e01a..3a9cad2 100644
--- a/sources/gravity.F90
+++ b/sources/gravity.F90
@@ -4,7 +4,7 @@
 !!  Newtonian or relativistic magnetohydrodynamical simulations on uniform or
 !!  adaptive mesh.
 !!
-!!  Copyright (C) 2008-2022 Grzegorz Kowal <grzegorz@amuncode.org>
+!!  Copyright (C) 2008-2023 Grzegorz Kowal <grzegorz@amuncode.org>
 !!
 !!  This program is free software: you can redistribute it and/or modify
 !!  it under the terms of the GNU General Public License as published by
diff --git a/sources/hash.F90 b/sources/hash.F90
index c5b9dcb..d2dc2c6 100644
--- a/sources/hash.F90
+++ b/sources/hash.F90
@@ -5,7 +5,7 @@
 !!  adaptive mesh.
 !!
 !!  Copyright (C) 2012-2020 Yann Collet
-!!  Copyright (C) 2020-2022 Grzegorz Kowal <grzegorz@amuncode.org>
+!!  Copyright (C) 2020-2023 Grzegorz Kowal <grzegorz@amuncode.org>
 !!
 !!  This program is free software: you can redistribute it and/or modify
 !!  it under the terms of the GNU General Public License as published by
diff --git a/sources/helpers.F90 b/sources/helpers.F90
index 0c332b9..c8e3ef9 100644
--- a/sources/helpers.F90
+++ b/sources/helpers.F90
@@ -4,7 +4,7 @@
 !!  Newtonian or relativistic magnetohydrodynamical simulations on uniform or
 !!  adaptive mesh.
 !!
-!!  Copyright (C) 2019-2022 Grzegorz Kowal <grzegorz@amuncode.org>
+!!  Copyright (C) 2019-2023 Grzegorz Kowal <grzegorz@amuncode.org>
 !!
 !!  This program is free software: you can redistribute it and/or modify
 !!  it under the terms of the GNU General Public License as published by
@@ -91,7 +91,7 @@ module helpers
     write(*,"(1x,78('-'))")
     write(*,"(1x,18('='),17x,a,17x,19('='))") 'A M U N'
     write(*,"(1x,16('='),4x,a,4x,16('='))")                                    &
-                                      'Copyright (C) 2008-2022 Grzegorz Kowal'
+                                      'Copyright (C) 2008-2023 Grzegorz Kowal'
     write(*,"(1x,18('='),9x,a,9x,19('='))")                                    &
                                         'under GNU GPLv3 license'
     write(*,"(1x,78('-'))")
diff --git a/sources/interpolations.F90 b/sources/interpolations.F90
index 9b21e3f..97f01ac 100644
--- a/sources/interpolations.F90
+++ b/sources/interpolations.F90
@@ -4,7 +4,7 @@
 !!  Newtonian or relativistic magnetohydrodynamical simulations on uniform or
 !!  adaptive mesh.
 !!
-!!  Copyright (C) 2008-2022 Grzegorz Kowal <grzegorz@amuncode.org>
+!!  Copyright (C) 2008-2023 Grzegorz Kowal <grzegorz@amuncode.org>
 !!
 !!  This program is free software: you can redistribute it and/or modify
 !!  it under the terms of the GNU General Public License as published by
@@ -42,7 +42,8 @@ module interpolations
       real(kind=8), dimension(:,:,:)    , intent(in)  :: q
       real(kind=8), dimension(:,:,:,:,:), intent(out) :: qi
     end subroutine
-    subroutine reconstruct_iface(h, fc, fl, fr)
+    subroutine reconstruct_iface(positive, h, fc, fl, fr)
+      logical                   , intent(in)  :: positive
       real(kind=8)              , intent(in)  :: h
       real(kind=8), dimension(:), intent(in)  :: fc
       real(kind=8), dimension(:), intent(out) :: fl, fr
@@ -76,7 +77,6 @@ module interpolations
 ! monotonicity preserving reconstruction coefficients
 !
   real(kind=8), save :: kappa      = 1.0d+00
-  real(kind=8), save :: kbeta      = 1.0d+00
 
 ! number of ghost zones (required for compact schemes)
 !
@@ -218,7 +218,6 @@ module interpolations
     call get_parameter("eps"                 , eps            )
     call get_parameter("limo3_rad"           , rad            )
     call get_parameter("kappa"               , kappa          )
-    call get_parameter("kbeta"               , kbeta          )
     call get_parameter("ppm_const"           , ppm_const      )
     call get_parameter("central_weight"      , cweight        )
     call get_parameter("cfl"                 , cfl            )
@@ -978,20 +977,20 @@ module interpolations
 !
 !   Arguments:
 !
-!     positive - the variable positivity flag;
-!     h        - the spatial step;
-!     q        - the variable array;
-!     qi       - the array of reconstructed interfaces (2 in each direction);
+!     p  - the variable positivity flag;
+!     h  - the spatial step;
+!     q  - the variable array;
+!     qi - the array of reconstructed interfaces (2 in each direction);
 !
 !===============================================================================
 !
-  subroutine interfaces_dir(positive, h, q, qi)
+  subroutine interfaces_dir(p, h, q, qi)
 
     use coordinates, only : nb, ne, nbl, neu
 
     implicit none
 
-    logical                           , intent(in)  :: positive
+    logical                           , intent(in)  :: p
     real(kind=8), dimension(:)        , intent(in)  :: h
     real(kind=8), dimension(:,:,:)    , intent(in)  :: q
     real(kind=8), dimension(:,:,:,:,:), intent(out) :: qi
@@ -1025,23 +1024,23 @@ module interpolations
     do k = nbl, neu
 #endif /* NDIMS == 3 */
       do j = nbl, neu
-        call reconstruct(h(1), q(:,j,k), qi(:,j,k,1,1), qi(:,j,k,2,1))
+        call reconstruct(p, h(1), q(:,j,k), qi(:,j,k,1,1), qi(:,j,k,2,1))
       end do ! j = nbl, neu
       do i = nbl, neu
-        call reconstruct(h(2), q(i,:,k), qi(i,:,k,1,2), qi(i,:,k,2,2))
+        call reconstruct(p, h(2), q(i,:,k), qi(i,:,k,1,2), qi(i,:,k,2,2))
       end do ! i = nbl, neu
 #if NDIMS == 3
     end do ! k = nbl, neu
     do j = nbl, neu
       do i = nbl, neu
-        call reconstruct(h(3), q(i,j,:), qi(i,j,:,1,3), qi(i,j,:,2,3))
+        call reconstruct(p, h(3), q(i,j,:), qi(i,j,:,1,3), qi(i,j,:,2,3))
       end do ! i = nbl, neu
     end do ! j = nbl, neu
 #endif /* NDIMS == 3 */
 
 ! make sure the interface states are positive for positive variables
 !
-    if (positive) then
+    if (p) then
 
 #if NDIMS == 3
       do k = nbl, neu
@@ -1442,6 +1441,7 @@ module interpolations
 !
 !   Arguments:
 !
+!     p  - the flag indicating if the reconstructed variable is positivite;
 !     h  - the spatial step; this is required for some reconstruction methods;
 !     f  - the input vector of cell averaged values;
 !     fl - the left side state reconstructed for location (i+1/2);
@@ -1449,10 +1449,11 @@ module interpolations
 !
 !===============================================================================
 !
-  subroutine reconstruct(h, f, fl, fr)
+  subroutine reconstruct(p, h, f, fl, fr)
 
     implicit none
 
+    logical                   , intent(in)  :: p
     real(kind=8)              , intent(in)  :: h
     real(kind=8), dimension(:), intent(in)  :: f
     real(kind=8), dimension(:), intent(out) :: fl, fr
@@ -1461,7 +1462,7 @@ module interpolations
 !
 ! reconstruct the states using the selected subroutine
 !
-    call reconstruct_states(h, f(:), fl(:), fr(:))
+    call reconstruct_states(p, h, f(:), fl(:), fr(:))
 
 ! correct the reconstruction near extrema by clipping them in order to improve
 ! the stability of scheme
@@ -1485,10 +1486,11 @@ module interpolations
 !
 !===============================================================================
 !
-  subroutine reconstruct_tvd(h, fc, fl, fr)
+  subroutine reconstruct_tvd(p, h, fc, fl, fr)
 
     implicit none
 
+    logical                   , intent(in)  :: p
     real(kind=8)              , intent(in)  :: h
     real(kind=8), dimension(:), intent(in)  :: fc
     real(kind=8), dimension(:), intent(out) :: fl, fr
@@ -1553,10 +1555,11 @@ module interpolations
 !
 !===============================================================================
 !
-  subroutine reconstruct_weno3(h, fc, fl, fr)
+  subroutine reconstruct_weno3(p, h, fc, fl, fr)
 
     implicit none
 
+    logical                   , intent(in)  :: p
     real(kind=8)              , intent(in)  :: h
     real(kind=8), dimension(:), intent(in)  :: fc
     real(kind=8), dimension(:), intent(out) :: fl, fr
@@ -1675,10 +1678,11 @@ module interpolations
 !
 !===============================================================================
 !
-  subroutine reconstruct_limo3(h, fc, fl, fr)
+  subroutine reconstruct_limo3(p, h, fc, fl, fr)
 
     implicit none
 
+    logical                   , intent(in)  :: p
     real(kind=8)              , intent(in)  :: h
     real(kind=8), dimension(:), intent(in)  :: fc
     real(kind=8), dimension(:), intent(out) :: fl, fr
@@ -1818,10 +1822,11 @@ module interpolations
 !
 !===============================================================================
 !
-  subroutine reconstruct_ppm(h, fc, fl, fr)
+  subroutine reconstruct_ppm(p, h, fc, fl, fr)
 
     implicit none
 
+    logical                   , intent(in)  :: p
     real(kind=8)              , intent(in)  :: h
     real(kind=8), dimension(:), intent(in)  :: fc
     real(kind=8), dimension(:), intent(out) :: fl, fr
@@ -2002,10 +2007,11 @@ module interpolations
 !
 !===============================================================================
 !
-  subroutine reconstruct_weno5z(h, fc, fl, fr)
+  subroutine reconstruct_weno5z(p, h, fc, fl, fr)
 
     implicit none
 
+    logical                   , intent(in)  :: p
     real(kind=8)              , intent(in)  :: h
     real(kind=8), dimension(:), intent(in)  :: fc
     real(kind=8), dimension(:), intent(out) :: fl, fr
@@ -2159,10 +2165,11 @@ module interpolations
 !
 !===============================================================================
 !
-  subroutine reconstruct_weno5yc(h, fc, fl, fr)
+  subroutine reconstruct_weno5yc(p, h, fc, fl, fr)
 
     implicit none
 
+    logical                   , intent(in)  :: p
     real(kind=8)              , intent(in)  :: h
     real(kind=8), dimension(:), intent(in)  :: fc
     real(kind=8), dimension(:), intent(out) :: fl, fr
@@ -2317,10 +2324,11 @@ module interpolations
 !
 !===============================================================================
 !
-  subroutine reconstruct_weno5ns(h, fc, fl, fr)
+  subroutine reconstruct_weno5ns(p, h, fc, fl, fr)
 
     implicit none
 
+    logical                   , intent(in)  :: p
     real(kind=8)              , intent(in)  :: h
     real(kind=8), dimension(:), intent(in)  :: fc
     real(kind=8), dimension(:), intent(out) :: fl, fr
@@ -2503,12 +2511,13 @@ module interpolations
 !
 !===============================================================================
 !
-  subroutine reconstruct_crweno5z(h, fc, fl, fr)
+  subroutine reconstruct_crweno5z(p, h, fc, fl, fr)
 
     use algebra, only : tridiag
 
     implicit none
 
+    logical                   , intent(in)  :: p
     real(kind=8)              , intent(in)  :: h
     real(kind=8), dimension(:), intent(in)  :: fc
     real(kind=8), dimension(:), intent(out) :: fl, fr
@@ -2878,12 +2887,13 @@ module interpolations
 !
 !===============================================================================
 !
-  subroutine reconstruct_crweno5yc(h, fc, fl, fr)
+  subroutine reconstruct_crweno5yc(p, h, fc, fl, fr)
 
     use algebra, only : tridiag
 
     implicit none
 
+    logical                   , intent(in)  :: p
     real(kind=8)              , intent(in)  :: h
     real(kind=8), dimension(:), intent(in)  :: fc
     real(kind=8), dimension(:), intent(out) :: fl, fr
@@ -3256,12 +3266,13 @@ module interpolations
 !
 !===============================================================================
 !
-  subroutine reconstruct_crweno5ns(h, fc, fl, fr)
+  subroutine reconstruct_crweno5ns(p, h, fc, fl, fr)
 
     use algebra, only : tridiag
 
     implicit none
 
+    logical                   , intent(in)  :: p
     real(kind=8)              , intent(in)  :: h
     real(kind=8), dimension(:), intent(in)  :: fc
     real(kind=8), dimension(:), intent(out) :: fl, fr
@@ -3647,10 +3658,11 @@ module interpolations
 !
 !===============================================================================
 !
-  subroutine reconstruct_mp5(h, fc, fl, fr)
+  subroutine reconstruct_mp5(p, h, fc, fl, fr)
 
     implicit none
 
+    logical                   , intent(in)  :: p
     real(kind=8)              , intent(in)  :: h
     real(kind=8), dimension(:), intent(in)  :: fc
     real(kind=8), dimension(:), intent(out) :: fl, fr
@@ -3676,7 +3688,7 @@ module interpolations
     u(n-1) = sum(ce3(:) * fc(n-2:n))
     u(n  ) =              fc(n    )
 
-    call mp_limiting(fc(:), u(:))
+    call mp_limiting(p, n, fc(:), u(:))
 
     fl(1:n) = u(1:n)
 
@@ -3694,7 +3706,7 @@ module interpolations
     u(n-1) = sum(ce3(:) * fi(n-2:n))
     u(n  ) =              fi(n    )
 
-    call mp_limiting(fi(:), u(:))
+    call mp_limiting(p, n, fi(:), u(:))
 
     fr(1:n-1) = u(n-1:1:-1)
 
@@ -3724,10 +3736,11 @@ module interpolations
 !
 !===============================================================================
 !
-  subroutine reconstruct_mp7(h, fc, fl, fr)
+  subroutine reconstruct_mp7(p, h, fc, fl, fr)
 
     implicit none
 
+    logical                   , intent(in)  :: p
     real(kind=8)              , intent(in)  :: h
     real(kind=8), dimension(:), intent(in)  :: fc
     real(kind=8), dimension(:), intent(out) :: fl, fr
@@ -3755,7 +3768,7 @@ module interpolations
     u(n-1) = sum(ce3(:) * fc(n-2:n))
     u(n  ) =              fc(n    )
 
-    call mp_limiting(fc(:), u(:))
+    call mp_limiting(p, n, fc(:), u(:))
 
     fl(1:n) = u(1:n)
 
@@ -3775,7 +3788,7 @@ module interpolations
     u(n-1) = sum(ce3(:) * fi(n-2:n))
     u(n  ) =              fi(n    )
 
-    call mp_limiting(fi(:), u(:))
+    call mp_limiting(p, n, fi(:), u(:))
 
     fr(1:n-1) = u(n-1:1:-1)
 
@@ -3805,10 +3818,11 @@ module interpolations
 !
 !===============================================================================
 !
-  subroutine reconstruct_mp9(h, fc, fl, fr)
+  subroutine reconstruct_mp9(p, h, fc, fl, fr)
 
     implicit none
 
+    logical                   , intent(in)  :: p
     real(kind=8)              , intent(in)  :: h
     real(kind=8), dimension(:), intent(in)  :: fc
     real(kind=8), dimension(:), intent(out) :: fl, fr
@@ -3838,7 +3852,7 @@ module interpolations
     u(n-1) = sum(ce3(:) * fc(n-2:n))
     u(n  ) =              fc(n    )
 
-    call mp_limiting(fc(:), u(:))
+    call mp_limiting(p, n, fc(:), u(:))
 
     fl(1:n) = u(1:n)
 
@@ -3860,7 +3874,7 @@ module interpolations
     u(n-1) = sum(ce3(:) * fi(n-2:n))
     u(n  ) =              fi(n    )
 
-    call mp_limiting(fi(:), u(:))
+    call mp_limiting(p, n, fi(:), u(:))
 
     fr(1:n-1) = u(n-1:1:-1)
 
@@ -3902,12 +3916,13 @@ module interpolations
 !
 !===============================================================================
 !
-  subroutine reconstruct_crmp5(h, fc, fl, fr)
+  subroutine reconstruct_crmp5(p, h, fc, fl, fr)
 
     use algebra, only : tridiag
 
     implicit none
 
+    logical                   , intent(in)  :: p
     real(kind=8)              , intent(in)  :: h
     real(kind=8), dimension(:), intent(in)  :: fc
     real(kind=8), dimension(:), intent(out) :: fl, fr
@@ -3958,7 +3973,7 @@ module interpolations
 
     call tridiag(n, a(1:n), b(1:n), c(1:n), r(1:n), u(1:n))
 
-    call mp_limiting(fc(:), u(:))
+    call mp_limiting(p, n, fc(:), u(:))
 
     fl(1:n) = u(1:n)
 
@@ -3983,7 +3998,7 @@ module interpolations
 
     call tridiag(n, a(1:n), b(1:n), c(1:n), r(1:n), u(1:n))
 
-    call mp_limiting(fi(:), u(:))
+    call mp_limiting(p, n, fi(:), u(:))
 
     fr(1:n-1) = u(n-1:1:-1)
 
@@ -4014,12 +4029,13 @@ module interpolations
 !
 !===============================================================================
 !
-  subroutine reconstruct_crmp7(h, fc, fl, fr)
+  subroutine reconstruct_crmp7(p, h, fc, fl, fr)
 
     use algebra, only : tridiag
 
     implicit none
 
+    logical                   , intent(in)  :: p
     real(kind=8)              , intent(in)  :: h
     real(kind=8), dimension(:), intent(in)  :: fc
     real(kind=8), dimension(:), intent(out) :: fl, fr
@@ -4072,7 +4088,7 @@ module interpolations
 
     call tridiag(n, a(1:n), b(1:n), c(1:n), r(1:n), u(1:n))
 
-    call mp_limiting(fc(:), u(:))
+    call mp_limiting(p, n, fc(:), u(:))
 
     fl(1:n) = u(1:n)
 
@@ -4099,7 +4115,7 @@ module interpolations
 
     call tridiag(n, a(1:n), b(1:n), c(1:n), r(1:n), u(1:n))
 
-    call mp_limiting(fi(:), u(:))
+    call mp_limiting(p, n, fi(:), u(:))
 
     fr(1:n-1) = u(n-1:1:-1)
 
@@ -4130,12 +4146,13 @@ module interpolations
 !
 !===============================================================================
 !
-  subroutine reconstruct_crmp9(h, fc, fl, fr)
+  subroutine reconstruct_crmp9(p, h, fc, fl, fr)
 
     use algebra, only : pentadiag
 
     implicit none
 
+    logical                   , intent(in)  :: p
     real(kind=8)              , intent(in)  :: h
     real(kind=8), dimension(:), intent(in)  :: fc
     real(kind=8), dimension(:), intent(out) :: fl, fr
@@ -4196,7 +4213,7 @@ module interpolations
 
     call pentadiag(n, e(:), c(:), d(:), a(:), b(:), r(:), u(:))
 
-    call mp_limiting(fc(:), u(:))
+    call mp_limiting(p, n, fc(:), u(:))
 
     fl(1:n) = u(1:n)
 
@@ -4225,7 +4242,7 @@ module interpolations
 
     call pentadiag(n, e(:), c(:), d(:), a(:), b(:), r(:), u(:))
 
-    call mp_limiting(fi(:), u(:))
+    call mp_limiting(p, n, fi(:), u(:))
 
     fr(1:n-1) = u(n-1:1:-1)
 
@@ -4260,12 +4277,13 @@ module interpolations
 !
 !===============================================================================
 !
-  subroutine reconstruct_ocmp5(h, fc, fl, fr)
+  subroutine reconstruct_ocmp5(p, h, fc, fl, fr)
 
     use algebra, only : tridiag
 
     implicit none
 
+    logical                   , intent(in)  :: p
     real(kind=8)              , intent(in)  :: h
     real(kind=8), dimension(:), intent(in)  :: fc
     real(kind=8), dimension(:), intent(out) :: fl, fr
@@ -4327,7 +4345,7 @@ module interpolations
 
     call tridiag(n, a(1:n), b(1:n), c(1:n), r(1:n), u(1:n))
 
-    call mp_limiting(fc(:), u(:))
+    call mp_limiting(p, n, fc(:), u(:))
 
     fl(1:n) = u(1:n)
 
@@ -4352,7 +4370,7 @@ module interpolations
 
     call tridiag(n, a(1:n), b(1:n), c(1:n), r(1:n), u(1:n))
 
-    call mp_limiting(fi(:), u(:))
+    call mp_limiting(p, n, fi(:), u(:))
 
     fr(1:n-1) = u(n-1:1:-1)
 
@@ -4387,12 +4405,13 @@ module interpolations
 !
 !===============================================================================
 !
-  subroutine reconstruct_ocmp7(h, fc, fl, fr)
+  subroutine reconstruct_ocmp7(p, h, fc, fl, fr)
 
     use algebra, only : pentadiag
 
     implicit none
 
+    logical                   , intent(in)  :: p
     real(kind=8)              , intent(in)  :: h
     real(kind=8), dimension(:), intent(in)  :: fc
     real(kind=8), dimension(:), intent(out) :: fl, fr
@@ -4466,7 +4485,7 @@ module interpolations
 
     call pentadiag(n, e(:), c(:), d(:), a(:), b(:), r(:), u(:))
 
-    call mp_limiting(fc(:), u(:))
+    call mp_limiting(p, n, fc(:), u(:))
 
     fl(1:n) = u(1:n)
 
@@ -4493,7 +4512,7 @@ module interpolations
 
     call pentadiag(n, e(:), c(:), d(:), a(:), b(:), r(:), u(:))
 
-    call mp_limiting(fi(:), u(:))
+    call mp_limiting(p, n, fi(:), u(:))
 
     fr(1:n-1) = u(n-1:1:-1)
 
@@ -4528,12 +4547,13 @@ module interpolations
 !
 !===============================================================================
 !
-  subroutine reconstruct_ocmp9(h, fc, fl, fr)
+  subroutine reconstruct_ocmp9(p, h, fc, fl, fr)
 
     use algebra, only : pentadiag
 
     implicit none
 
+    logical                   , intent(in)  :: p
     real(kind=8)              , intent(in)  :: h
     real(kind=8), dimension(:), intent(in)  :: fc
     real(kind=8), dimension(:), intent(out) :: fl, fr
@@ -4611,7 +4631,7 @@ module interpolations
 
     call pentadiag(n, e(:), c(:), d(:), a(:), b(:), r(:), u(:))
 
-    call mp_limiting(fc(:), u(:))
+    call mp_limiting(p, n, fc(:), u(:))
 
     fl(1:n) = u(1:n)
 
@@ -4640,7 +4660,7 @@ module interpolations
 
     call pentadiag(n, e(:), c(:), d(:), a(:), b(:), r(:), u(:))
 
-    call mp_limiting(fi(:), u(:))
+    call mp_limiting(p, n, fi(:), u(:))
 
     fr(1:n-1) = u(n-1:1:-1)
 
@@ -4773,10 +4793,11 @@ module interpolations
 !
 !===============================================================================
 !
-  subroutine reconstruct_gp(h, fc, fl, fr)
+  subroutine reconstruct_gp(p, h, fc, fl, fr)
 
     implicit none
 
+    logical                   , intent(in)  :: p
     real(kind=8)              , intent(in)  :: h
     real(kind=8), dimension(:), intent(in)  :: fc
     real(kind=8), dimension(:), intent(out) :: fl, fr
@@ -4814,7 +4835,7 @@ module interpolations
 
 ! apply the monotonicity preserving limiting
 !
-    call mp_limiting(fc(:), u(:))
+    call mp_limiting(p, n, fc(:), u(:))
 
 ! copy the interpolation to the respective vector
 !
@@ -4848,7 +4869,7 @@ module interpolations
 
 ! apply the monotonicity preserving limiting
 !
-    call mp_limiting(fi(:), u(:))
+    call mp_limiting(p, n, fi(:), u(:))
 
 ! copy the interpolation to the respective vector
 !
@@ -5325,93 +5346,118 @@ module interpolations
 ! subroutine MP_LIMITING:
 ! ----------------------
 !
-!   Subroutine applies the monotonicity preserving (MP) limiter to a vector of
-!   high order reconstructed interface values.
+!   Subroutine applies the monotonicity preserving (MP) limitation to
+!   the interface states reconstructed using a high order upwind
+!   interpolation.
 !
 !   Arguments:
 !
-!     qc - the vector of cell-centered values;
-!     qi - the vector of interface values obtained from the high order
-!          interpolation as input and its monotonicity limited values as output;
+!     p - the logical flag indicating if the variable is positive;
+!     n - the length of vector u and q;
+!     u - the vector of centered cell-integrated values;
+!     q - the vector of interface values obtained from the high order
+!         interpolation to which the limitation is applied;
 !
 !   References:
 !
 !     [1] Suresh, A. & Huynh, H. T.,
 !         "Accurate Monotonicity-Preserving Schemes with Runge-Kutta
 !          Time Stepping"
-!         Journal on Computational Physics,
-!         1997, vol. 136, pp. 83-99,
-!         http://dx.doi.org/10.1006/jcph.1997.5745
-!     [2] He, ZhiWei, Li, XinLiang, Fu, DeXun, & Ma, YanWen,
-!         "A 5th order monotonicity-preserving upwind compact difference
-!          scheme",
-!         Science China Physics, Mechanics and Astronomy,
-!         Volume 54, Issue 3, pp. 511-522,
-!         http://dx.doi.org/10.1007/s11433-010-4220-x
+!         Journal on Computational Physics, 1997, 136, 83-99,
+!         https://doi.org/10.1006/jcph.1997.5745
+!     [2] Myeong-Hwan Ahn, Duck-Joo Lee,
+!         "Modified Monotonicity Preserving Constraints for High-Resolution
+!          Optimized Compact Scheme",
+!         Journal of Scientific Computing, 2020, 83:34,
+!         https://doi.org/10.1007/s10915-020-01221-0
 !
 !===============================================================================
 !
-  subroutine mp_limiting(qc, qi)
+  subroutine mp_limiting(p, n, u, q)
 
     implicit none
 
-    real(kind=8), dimension(:), intent(in)    :: qc
-    real(kind=8), dimension(:), intent(inout) :: qi
+    logical                   , intent(in)    :: p
+    integer                   , intent(in)    :: n
+    real(kind=8), dimension(n), intent(in)    :: u
+    real(kind=8), dimension(n), intent(inout) :: q
 
-    integer      :: n, i, im1, ip1, ip2
-    real(kind=8) :: dq, ds, dc0, dc4, dm1, dp1, dml, dmr
+    integer      :: i, im2, im1, ip1, ip2
+    real(kind=8) :: du, dm, dc, dp, dc4, dmm, dmp, di, de, bt
     real(kind=8) :: qlc, qmd, qmp, qmn, qmx, qul
 
-    real(kind=8), dimension(0:size(qc)+2) :: dm
+    real(kind=8), dimension(n) :: d
+    real(kind=8), dimension(2) :: umn, umx
 
 !-------------------------------------------------------------------------------
 !
-    n = size(qc)
+    d(1  ) = 0.0d+00
+    d(2:n) = u(2:n) - u(1:n-1)
 
-    dm(0  ) = 0.0d+00
-    dm(1  ) = 0.0d+00
-    dm(2:n) = qc(2:n) - qc(1:n-1)
-    dm(n+1) = 0.0d+00
-    dm(n+2) = 0.0d+00
+    im2 = 1
+    im1 = 1
+    ip1 = 2
+    ip2 = 3
 
-    do i = 1, n - 1
+    do i = 1, n
 
-      ip1 = i + 1
+      du  = kappa * d(i)
 
-      if (dm(i) * dm(ip1) >= 0.0d+00) then
-        dq = kappa * dm(i)
-      else
-        dq = kbeta * dm(i)
-      end if
+      qmp = u(i) + minmod(d(ip1), du)
 
-      qmp  = qc(i) + minmod(dm(ip1), dq)
-      ds   = (qi(i) - qc(i)) * (qi(i) - qmp)
+      if ((q(i) - u(i)) * (q(i) - qmp) > eps) then
 
-      if (ds > eps) then
+        dm  = d(i  ) - d(im1)
+        dc  = d(ip1) - d(i  )
+        dp  = d(ip2) - d(ip1)
+        dc4 = 4.0d+00 * dc
 
-        im1 = i - 1
-        ip2 = i + 2
+        dmp = minmod4(dc4 - dp, 4.0d+00 * dp - dc, dc, dp)
+        dmm = minmod4(dc4 - dm, 4.0d+00 * dm - dc, dc, dm)
 
-        dm1   = dm(i  ) - dm(im1)
-        dc0   = dm(ip1) - dm(i  )
-        dp1   = dm(ip2) - dm(ip1)
-        dc4   = 4.0d+00 * dc0
+        qul = u(i) +            du
+        qmd = u(i) + 5.0d-01 * (d(ip1) -           dmp          )
+        qlc = u(i) + 5.0d-01 * (d(i  ) + 8.0d+00 * dmm / 3.0d+00)
 
-        dml   = 0.5d+00 * minmod4(dc4 - dm1, 4.0d+00 * dm1 - dc0, dc0, dm1)
-        dmr   = 0.5d+00 * minmod4(dc4 - dp1, 4.0d+00 * dp1 - dc0, dc0, dp1)
+        umn(1) = min(u(im1), u(ip1))
+        umn(2) = min(u(im2), u(ip2))
+        umx(1) = max(u(im1), u(ip1))
+        umx(2) = max(u(im2), u(ip2))
 
-        qmd   = qc(i) + 0.5d+00 * dm(ip1) - dmr
-        qul   = qc(i) +           dq
-        qlc   = qc(i) + 0.5d+00 * dq      + dml
+        if ((u(i) > umx(1) .and. umx(1) > umx(2) .and. &
+                                u(im2) <= u(ip1) .and. u(im1) >= u(ip2)) .or. &
+            (u(i) < umn(1) .and. umn(1) < umn(2) .and. &
+                                u(im2) >= u(ip1) .and. u(im1) <= u(ip2))) then
 
-        qmx   = max(min(qc(i), qc(ip1), qmd), min(qc(i), qul, qlc))
-        qmn   = min(max(qc(i), qc(ip1), qmd), max(qc(i), qul, qlc))
+          bt = 2.0d+00 * u(i)
+          di = (u(im1) + u(ip1)) - bt
+          de = (u(im2) + u(ip2)) - bt
+          bt = di / de
+          if (bt > 3.0d-01) qlc = u(im2)
 
-        qi(i) = median(qi(i), qmn, qmx)
+        end if
+
+        qmx   = max(min(u(i), u(ip1), qmd), min(u(i), qul, qlc))
+        qmn   = min(max(u(i), u(ip1), qmd), max(u(i), qul, qlc))
+
+        if (p .and. qmn <= 0.0d+00) then
+          if (d(i) <= 0.0d+00 .and. d(ip1) >= 0.0d+00) then
+            qmn = u(i) * u(ip1) / (u(i) + u(ip1))
+          else
+            qmn = max(eps, min(u(i), u(ip1)))
+          end if
+        end if
+
+        q(i) = median(q(i), qmn, qmx)
 
       end if
 
-    end do ! i = 1, n - 1
+      im2 =     im1
+      im1 =     i
+      ip1 =     ip2
+      ip2 = min(ip2 + 1, n)
+
+    end do
 
 !-------------------------------------------------------------------------------
 !
diff --git a/sources/io.F90 b/sources/io.F90
index a6578dd..56a9988 100644
--- a/sources/io.F90
+++ b/sources/io.F90
@@ -4,7 +4,7 @@
 !!  Newtonian or relativistic magnetohydrodynamical simulations on uniform or
 !!  adaptive mesh.
 !!
-!!  Copyright (C) 2008-2022 Grzegorz Kowal <grzegorz@amuncode.org>
+!!  Copyright (C) 2008-2023 Grzegorz Kowal <grzegorz@amuncode.org>
 !!
 !!  This program is free software: you can redistribute it and/or modify
 !!  it under the terms of the GNU General Public License as published by
diff --git a/sources/mesh.F90 b/sources/mesh.F90
index 692e1dc..42904db 100644
--- a/sources/mesh.F90
+++ b/sources/mesh.F90
@@ -4,7 +4,7 @@
 !!  Newtonian or relativistic magnetohydrodynamical simulations on uniform or
 !!  adaptive mesh.
 !!
-!!  Copyright (C) 2008-2022 Grzegorz Kowal <grzegorz@amuncode.org>
+!!  Copyright (C) 2008-2023 Grzegorz Kowal <grzegorz@amuncode.org>
 !!
 !!  This program is free software: you can redistribute it and/or modify
 !!  it under the terms of the GNU General Public License as published by
diff --git a/sources/mpitools.F90 b/sources/mpitools.F90
index e2343b7..e04915e 100644
--- a/sources/mpitools.F90
+++ b/sources/mpitools.F90
@@ -4,7 +4,7 @@
 !!  Newtonian or relativistic magnetohydrodynamical simulations on uniform or
 !!  adaptive mesh.
 !!
-!!  Copyright (C) 2008-2022 Grzegorz Kowal <grzegorz@amuncode.org>
+!!  Copyright (C) 2008-2023 Grzegorz Kowal <grzegorz@amuncode.org>
 !!
 !!  This program is free software: you can redistribute it and/or modify
 !!  it under the terms of the GNU General Public License as published by
diff --git a/sources/operators.F90 b/sources/operators.F90
index 6230611..1a27970 100644
--- a/sources/operators.F90
+++ b/sources/operators.F90
@@ -4,7 +4,7 @@
 !!  Newtonian or relativistic magnetohydrodynamical simulations on uniform or
 !!  adaptive mesh.
 !!
-!!  Copyright (C) 2008-2022 Grzegorz Kowal <grzegorz@amuncode.org>
+!!  Copyright (C) 2008-2023 Grzegorz Kowal <grzegorz@amuncode.org>
 !!
 !!  This program is free software: you can redistribute it and/or modify
 !!  it under the terms of the GNU General Public License as published by
diff --git a/sources/parameters.F90 b/sources/parameters.F90
index 235b55a..91060c8 100644
--- a/sources/parameters.F90
+++ b/sources/parameters.F90
@@ -4,7 +4,7 @@
 !!  Newtonian or relativistic magnetohydrodynamical simulations on uniform or
 !!  adaptive mesh.
 !!
-!!  Copyright (C) 2008-2022 Grzegorz Kowal <grzegorz@amuncode.org>
+!!  Copyright (C) 2008-2023 Grzegorz Kowal <grzegorz@amuncode.org>
 !!
 !!  This program is free software: you can redistribute it and/or modify
 !!  it under the terms of the GNU General Public License as published by
diff --git a/sources/problems.F90 b/sources/problems.F90
index 0d401d3..1c527a6 100644
--- a/sources/problems.F90
+++ b/sources/problems.F90
@@ -4,7 +4,7 @@
 !!  Newtonian or relativistic magnetohydrodynamical simulations on uniform or
 !!  adaptive mesh.
 !!
-!!  Copyright (C) 2008-2022 Grzegorz Kowal <grzegorz@amuncode.org>
+!!  Copyright (C) 2008-2023 Grzegorz Kowal <grzegorz@amuncode.org>
 !!
 !!  This program is free software: you can redistribute it and/or modify
 !!  it under the terms of the GNU General Public License as published by
diff --git a/sources/random.F90 b/sources/random.F90
index ed42555..d6e909f 100644
--- a/sources/random.F90
+++ b/sources/random.F90
@@ -4,7 +4,7 @@
 !!  Newtonian or relativistic magnetohydrodynamical simulations on uniform or
 !!  adaptive mesh.
 !!
-!!  Copyright (C) 2008-2022 Grzegorz Kowal <grzegorz@amuncode.org>
+!!  Copyright (C) 2008-2023 Grzegorz Kowal <grzegorz@amuncode.org>
 !!
 !!  This program is free software: you can redistribute it and/or modify
 !!  it under the terms of the GNU General Public License as published by
diff --git a/sources/refinement.F90 b/sources/refinement.F90
index 4899822..ccfabe3 100644
--- a/sources/refinement.F90
+++ b/sources/refinement.F90
@@ -4,7 +4,7 @@
 !!  Newtonian or relativistic magnetohydrodynamical simulations on uniform or
 !!  adaptive mesh.
 !!
-!!  Copyright (C) 2008-2022 Grzegorz Kowal <grzegorz@amuncode.org>
+!!  Copyright (C) 2008-2023 Grzegorz Kowal <grzegorz@amuncode.org>
 !!
 !!  This program is free software: you can redistribute it and/or modify
 !!  it under the terms of the GNU General Public License as published by
diff --git a/sources/schemes.F90 b/sources/schemes.F90
index 8bdea42..ea13213 100644
--- a/sources/schemes.F90
+++ b/sources/schemes.F90
@@ -4,7 +4,7 @@
 !!  Newtonian or relativistic magnetohydrodynamical simulations on uniform or
 !!  adaptive mesh.
 !!
-!!  Copyright (C) 2008-2022 Grzegorz Kowal <grzegorz@amuncode.org>
+!!  Copyright (C) 2008-2023 Grzegorz Kowal <grzegorz@amuncode.org>
 !!
 !!  This program is free software: you can redistribute it and/or modify
 !!  it under the terms of the GNU General Public License as published by
diff --git a/sources/shapes.F90 b/sources/shapes.F90
index 05e4b00..8332d74 100644
--- a/sources/shapes.F90
+++ b/sources/shapes.F90
@@ -4,7 +4,7 @@
 !!  Newtonian or relativistic magnetohydrodynamical simulations on uniform or
 !!  adaptive mesh.
 !!
-!!  Copyright (C) 2008-2022 Grzegorz Kowal <grzegorz@amuncode.org>
+!!  Copyright (C) 2008-2023 Grzegorz Kowal <grzegorz@amuncode.org>
 !!
 !!  This program is free software: you can redistribute it and/or modify
 !!  it under the terms of the GNU General Public License as published by
diff --git a/sources/sources.F90 b/sources/sources.F90
index 77151a2..9d46622 100644
--- a/sources/sources.F90
+++ b/sources/sources.F90
@@ -4,7 +4,7 @@
 !!  Newtonian or relativistic magnetohydrodynamical simulations on uniform or
 !!  adaptive mesh.
 !!
-!!  Copyright (C) 2008-2022 Grzegorz Kowal <grzegorz@amuncode.org>
+!!  Copyright (C) 2008-2023 Grzegorz Kowal <grzegorz@amuncode.org>
 !!
 !!  This program is free software: you can redistribute it and/or modify
 !!  it under the terms of the GNU General Public License as published by
diff --git a/sources/statistics.F90 b/sources/statistics.F90
index d07dc2c..577d904 100644
--- a/sources/statistics.F90
+++ b/sources/statistics.F90
@@ -4,7 +4,7 @@
 !!  Newtonian or relativistic magnetohydrodynamical simulations on uniform or
 !!  adaptive mesh.
 !!
-!!  Copyright (C) 2008-2022 Grzegorz Kowal <grzegorz@amuncode.org>
+!!  Copyright (C) 2008-2023 Grzegorz Kowal <grzegorz@amuncode.org>
 !!
 !!  This program is free software: you can redistribute it and/or modify
 !!  it under the terms of the GNU General Public License as published by
@@ -772,10 +772,6 @@ module statistics
         dh(2) = ady(pmeta%level)
         dh(3) = adz(pmeta%level)
 
-! calculate current density (J = ∇xB)
-!
-        call curl(dh(:), pdata%q(ibx:ibz,:,:,:), jc(1:3,:,:,:))
-
 ! total mass
 !
 #if NDIMS == 3
@@ -820,6 +816,11 @@ module statistics
                                     + pdata%q(iby,nb:ne,nb:ne,  :  )**2 &
                                     + pdata%q(ibz,nb:ne,nb:ne,  :  )**2) * dvolh
 #endif /* NDIMS == 3 */
+
+! calculate current density (J = ∇xB)
+!
+          call curl(dh(:), pdata%q(ibx:ibz,:,:,:), jc(1:3,:,:,:))
+
         end if
 
         if (.not. periodic(1)) then
diff --git a/sources/system.F90 b/sources/system.F90
index d0b691b..bf15025 100644
--- a/sources/system.F90
+++ b/sources/system.F90
@@ -4,7 +4,7 @@
 !!  Newtonian or relativistic magnetohydrodynamical simulations on uniform or
 !!  adaptive mesh.
 !!
-!!  Copyright (C) 2017-2022 Grzegorz Kowal <grzegorz@amuncode.org>
+!!  Copyright (C) 2017-2023 Grzegorz Kowal <grzegorz@amuncode.org>
 !!
 !!  This program is free software: you can redistribute it and/or modify
 !!  it under the terms of the GNU General Public License as published by
diff --git a/sources/timers.F90 b/sources/timers.F90
index 0c9bf52..e3fce91 100644
--- a/sources/timers.F90
+++ b/sources/timers.F90
@@ -4,7 +4,7 @@
 !!  Newtonian or relativistic magnetohydrodynamical simulations on uniform or
 !!  adaptive mesh.
 !!
-!!  Copyright (C) 2008-2022 Grzegorz Kowal <grzegorz@amuncode.org>
+!!  Copyright (C) 2008-2023 Grzegorz Kowal <grzegorz@amuncode.org>
 !!
 !!  This program is free software: you can redistribute it and/or modify
 !!  it under the terms of the GNU General Public License as published by
diff --git a/sources/user_problem.F90 b/sources/user_problem.F90
index d1875c2..bfa6e14 100644
--- a/sources/user_problem.F90
+++ b/sources/user_problem.F90
@@ -4,7 +4,7 @@
 !!  Newtonian or relativistic magnetohydrodynamical simulations on uniform or
 !!  adaptive mesh.
 !!
-!!  Copyright (C) 2017-2022 Grzegorz Kowal <grzegorz@amuncode.org>
+!!  Copyright (C) 2017-2023 Grzegorz Kowal <grzegorz@amuncode.org>
 !!
 !!  This program is free software: you can redistribute it and/or modify
 !!  it under the terms of the GNU General Public License as published by
diff --git a/sources/workspace.F90 b/sources/workspace.F90
index 89c0a13..4e94d0b 100644
--- a/sources/workspace.F90
+++ b/sources/workspace.F90
@@ -4,7 +4,7 @@
 !!  Newtonian or relativistic magnetohydrodynamical simulations on uniform or
 !!  adaptive mesh.
 !!
-!!  Copyright (C) 2022 Grzegorz Kowal <grzegorz@amuncode.org>
+!!  Copyright (C) 2022-2023 Grzegorz Kowal <grzegorz@amuncode.org>
 !!
 !!  This program is free software: you can redistribute it and/or modify
 !!  it under the terms of the GNU General Public License as published by