diff --git a/CHANGELOG.md b/CHANGELOG.md
index 09a9cee915d140fed3bcad96a4640c90485b9bb5..70c69dd2809fd89cb9c9b03ed3ca4bf9cc26e168 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,197 +1,241 @@
-### v0.4.1 ###
-** Optimisation - Memetic Algorithm**\
-\* Update `mutPop()` to use the parallel for-loop (`parfor`) whenever it is available.\
-\* Update `selParents()` to use the parallel for-loop (`parfor`) whenever it is available.
-
--------------------------------------------
-
-
-### v0.4 ###
-**Utilities - Generic**\
-\* Change the interface of `rotMat3d()`, so that the last argument is a boolean (`logical` in MATLAB), declaring whether the given angles are in degrees (if false, the angles are treated as radians). This is a **backwards incompatible** change.\
-\* The following functions are changed internally to apply the changes in `rotMat3d()`:
-  - `rcvGeo()`
-  - `srcGeo()`
-  - `virtMicGeo()`
-
--------------------------------------------
-
-
-### v0.3.2 ###
-**Signal Processing - Generic**\
-\+ Add option to use negative delay values with the `winSincFracDel()` function.
-
-**Signal Processing - Array Processing**\
-\* Fix error in `arrMan()` in the inner product of the source directions matrix and the sensor position vectors.\
-\* Fix error in `arrMan()` where the returned array manifold had incorrect dimensions. It was $N_{\textrm{d}} \times N_{\textrm{m}} \times N_{\textrm{k}}$, where $N_{\textrm{d}}$ is the number of source directions, $N_{\textrm{m}}$ the number of sensors and $N_{\textrm{k}}$ the number of frequencies. Now it is $N_{\textrm{m}} \times N_{\textrm{d}} \times N_{\textrm{k}}$.
-
-**Utilities - Geometries**\
-\* Fix bug in `virtMicGeo()` where translation and rotation were not applied to the geometry mesh coordinates array.
-
-**Virtual Sensing - Remote Microphone Technique**\
-\* Update `obsFiltEstTD()`, removing the observatoin filter replication when a single filter is provided for many trials/sound field realisations to reduce the memory footprint of the function.\
-\* Update `obsFiltTD()`, performing the delay operation for the virtual microphone signals only when needed and added check for $SNR = \infty$ to calculate the SNR matrix appropriately.
-\* Fix bug in `obsFiltTD()`, returning the condition number without taking into account the regularisation and SNR values.
-
--------------------------------------------
-
-
-### v0.3.1 ###
-**Virtual Sensing - Remote Microphone Technique**\
-\+ Add the option to add "noise" to the monitoring microphone signals in the time domain estimation of the optimal observation filters in `obsFiltTD()` to replicate the feature of `obsFilt()`. This change **breaks** backwards compatibility.
-
--------------------------------------------  
-
-
-### v0.3.0 ###
-**General**\
-\* Convert the project to accept column position and direction vectors as input. The affected functions are:
-- `srcGeo()`
-- `rcvGeo()`
-- `virtMicGeo()`
-- `arrMan()`
-- `firstOrderDMA()`
-- `ptsOnSphere()`
-- `twoPtDist()`
-- `circHarm()`
-- `sphHarm()`
-- `planeWave()`
-- `planeWaveSH()`
-- `ptSrcField()`
-- `ptSrcFieldSH()`
-- `ptSrcFieldTD()`
-
--------------------------------------------
-
-
-### v0.2.8 ###
-**Utilities - Generic**\
-\+ Add the option to pick the order the rotations will be performed in the `rotMat3d()` function. This results is a **backward incompatible** change.
-
-**Utilities - Geometries**\
-\* Update the geometry generating functions `rcvGeo()`, `srcGeo()` and `virtMicGeo` to accommodate the changes in `rotMat3d()`.
-
--------------------------------------------
-
-
-### v0.2.7 ###
-**Signal Processing - Measurements**\
-\+ Introduction of the *Measurements* "topic" in the Signal Processing part of the codebase.\
-\+ Function to estimate the impulse responses from sweep measurements.
-
--------------------------------------------
-
-
-### v0.2.6 ###
-**Signal Processing - Generic**\
-\+ Add function to perform fractional octave smoothing of spectra.
-
--------------------------------------------
-
-
-### v0.2.5 ###
-**Utilities - Geometries**\
-\* Combine translation offsets to a single vector input argument for the `rcvGeo()` MATLAB function.\
-\* Combine translation offsets to a single vector input argument for th `virtMicGeo()` MATLAB function.\
-\* Add the ability to rotate the receiver geometries in `rcvGeo()` MATLAB function.
-
--------------------------------------------
-
-
-### v0.2.4 ###
-**Virtual Sensing**\
-\* Corrected time-domain observation filter calculations.\
-\* Removed scaling from the cross-correlation calculations in the time-domain optimal observation filters.\
-\* Fixed bug in time-domain observation filter that screwed up dimensions of the filters when only one source was present.
-
-**Sound Fields**\
-\* Fixed bug in time-domain point source signal calculations that screwed up dimensions of the resulting arrays when only one source was present.
-
-**Utilities - Geometries**\
-\* The virtual microphone geometry generation function has been heavily modified and its interface has changed in a **backward incompatible** way. It is now more generic and allows for "arbitrary" size of each Cartesian dimension of the geometries as well as different number of sensors along each dimension.
-
--------------------------------------------
-
-
-### v0.2.3 ###
-**Virtual Sensing**\
-\+ Added function to estimate the observation filters in the time-domain.\
-\+ Added function to perform estimation with observation filters in the time-domain.
-
-**Signal Processing - Generic**\
-\* Fixed bugs, improved calculations and removed output arguments for the windowed sinc FIR fractional delay filters
-\+ Added four window functions in the calculation of windowed sinc FIR fractional delay filters.\
-
-**Sound Fields**\
-\+ Added function to calculate signals generated by ideal point sources in the time-domain.
-
--------------------------------------------
-
-
-### v0.2.2 ###
-**Virtual Sensing**\
-\* Update the observation filter and estimation with observation filter functions with better input argument checking and changed the name of variables to match those in the literature.
-
--------------------------------------------
-
-
-### v0.2.1 ###
-**Virtual Sensing**\
-\* Fix a bug where noise was added to the power spectral density matrix for the optimal observation filter calculations in the noiseless case.
-
--------------------------------------------
-
-
-### v0.2.0 ###
-**Utilities**\
-\+ Added a bisection method for single-valued functions.\
-\* Improved rotation matrix calculation function with degrees and radian calculations available.\
-\+ Added function to calculate a double-sided spectrum from a single-sided spectrum.\
-\+ Added a function to calculate the intersection of three vectors.\
-\+ Added a pair of functions to check for even or odd elements.\
-\+ Added a function to pick values from a vector based on given probabilities.\
-\+ Added a function to pick randomly unique rows from a matrix.\
-\+ Added a Heaviside step function.\
-\+ Added function to swap argument values.
-
-**Optimisation**\
-\+ Added a MATLAB Memetic Algorithm (MA) implementation.\
-\* The algorithm calls provided functions and can solve generic problems.
-
-**Control**\
-\+ Added tonal control in the frequency domain.\
-\* Control is contained in a single function.\
-\* Can be used with or without virtual sensing.\
-\* Implementations of optimal control and FxLMS (still frequency domain) calculations are available.
-
-**Signal Processing - Array Processing**\
-\+ Added array manifold (steering vector) calculation function.
-
-**Signal Processing - Generic**\
-\+ Added frequency band calculation function with 1/1 octave and 1/3 octave bands.\
-\+ Add fractional delay filter impulse response generation function.
-
-**Virtual Sensing - Generic**\
-\+ Added a multiple coherence calculation function.
-
-**Virtual Sensing - Remote Microphone Technique**\
-\* Divide the observation filter and estimation with the observation filter in two functions. The return arguments are split appropriately to the function they relate.\
-\+ Added option to include noise in the monitoring microphone power spectral density matrix with specified SNR value.
-
-**Sound Fields**\
-\+ Added plane wave calculation function.\
-\+ Added Circular Harmonics calculation function.\
-\+ Added Spherical Harmonics calculation function.\
-\+ Added Discrete Circular Fourier Transform (DCFT) calculation function.\
-\+ Added Inverse Discrete Circular Fourier Transform (IDCFT) calculation function.\
-\+ Added Discrete Spherical Fourier Transform (DSFT) calculation function.\
-\+ Added Inverse Discrete Spherical Fourier Transform (IDSFT) calculation function.\
-\+ Added function to extrapolate a sound field in the Spherical Harmonics domain.\
-\+ Added function to calculate sound field generated by a point source in the Spherical Harmonics domain (truncated order).\
-\+ Added function to calculate sound field generated by a plane wave in the Spherical Harmonics domain (truncated order).
-
--------------------------------------------
-
-
-### v0.1.0 ###
-This is the initial version of the project.
+### v0.5.0 ###
+**Signal Processing - Generic**\
+\* Fix bug returning wrong length filter when negative delays are use in `winSincFracDel()`.
+
+**Signal Processing - Measurements**\
+\* Fix error in `invSweep()` throwing an error when the `causIrLen` input argument was not provided.
+
+**Signal Processing - Array Processing**\
+\+ Add function `arrManTd()` to calculate the time domain equivalent of the *array manifold* of an arbitrary array.\
+\+ Add function `firstOrderDmaTd()` to calculate the FIR filter and filtered output(s) for a first order Differential Microphone Array (DMA) in the time domain.\
+\* Changed the name of `firstOrderDMA()` to `firstOrderDma()` (cameltoe). This change **breaks** backward compatibility!\
+\* Modify `firstOrderDma()` to return the filters as the first argument, in order to avoid calculating the output if it is not required.\
+\* Correct error in `firstOrderDma()` header (documentation) and changed name of local array manifold calculation function to clarify that a local function is called.\
+\* Correct erroneous output calculations in `firstOrderDma()`.\
+\* Moved the `input` input argument to the last of the input arguments list in `firstOrderDma()` and updated the input argument checks. This change **breaks backward compatibility**.
+
+**Optimisation - Memetic Algorithm**\
+\* Removed redundant code to handle serial for-loop if parfor is not available.
+
+**Sound Fields**\
+\+ Add `lineSrcField()` to calculate the sound field due to line sources in the frequency domain (tonal).
+\* Parallelize the for-loops in `ptSrcField()` and `lineSrcField()`. While execution may be slower for a small number of sources and receiver positions, the overall execution time will not increase significantly due to the functions' generally fast performance.\
+\* Rename the following functions (this **breaks** backward compatibility):
+  - `extrpFieldSH()` to `extrpFieldSh()`
+  - `planeWaveSH()` to `planeWaveSh()`
+  - `ptSrcFieldSH()` to `ptSrcFieldSh()`
+  - `ptSrcFieldTD()` to `ptSrcFieldTd()`
+
+**Utilities - Geometries**\
+\* Fix error in `rcvGeo()` applying incorrect rotation to the elements in the Uniform Circular Array.\
+\* Fix error in `virtMicGeo()` not returning the z coordinates of the virtual microphones in the mesh. This fix **breaks backward compatibility**.\
+\* Change name of `virtMicGeo()` to `vMicGeo()`. This **breaks** backward compatibility.
+
+**Virtual Sensing - Remote Microphone Technique**\
+\* Parallelise the for-loops in `obsFiltEst()`. While execution may be slower for a small number of sources and receiver positions, the overall execution time will not increase significantly due to the functions' generally fast performance.\
+\* Parallelise on of the for-loops in `obsFiltTD()`. While execution may be slower for a small number of sources and receiver positions, the overall execution time will not increase significantly due to the functions' generally fast performance.\
+\* Update `obsFilt()` to return the condition of the perturbed power spectral density matrix.
+\* Rename the following functions (this **breaks** backward compatibility):
+  - `obsFiltTD()` to `obsFiltTd()`
+  - `obsFiltEstTD()` to `obsFiltEstTd()`
+
+-------------------------------------------
+
+
+### v0.4.1 ###
+** Optimisation - Memetic Algorithm**\
+\* Update `mutPop()` to use the parallel for-loop (`parfor`) whenever it is available.\
+\* Update `selParents()` to use the parallel for-loop (`parfor`) whenever it is available.
+
+-------------------------------------------
+
+
+### v0.4.0 ###
+**Utilities - Generic**\
+\* Change the interface of `rotMat3d()`, so that the last argument is a boolean (`logical` in MATLAB), declaring whether the given angles are in degrees (if false, the angles are treated as radians). This is a **backwards incompatible** change.\
+\* The following functions are changed internally to apply the changes in `rotMat3d()`:
+  - `rcvGeo()`
+  - `srcGeo()`
+  - `virtMicGeo()`
+
+-------------------------------------------
+
+
+### v0.3.2 ###
+**Signal Processing - Generic**\
+\+ Add option to use negative delay values with the `winSincFracDel()` function.
+
+**Signal Processing - Array Processing**\
+\* Fix error in `arrMan()` in the inner product of the source directions matrix and the sensor position vectors.\
+\* Fix error in `arrMan()` where the returned array manifold had incorrect dimensions. It was $N_{\textrm{d}} \times N_{\textrm{m}} \times N_{\textrm{k}}$, where $N_{\textrm{d}}$ is the number of source directions, $N_{\textrm{m}}$ the number of sensors and $N_{\textrm{k}}$ the number of frequencies. Now it is $N_{\textrm{m}} \times N_{\textrm{d}} \times N_{\textrm{k}}$.
+
+**Utilities - Geometries**\
+\* Fix bug in `virtMicGeo()` where translation and rotation were not applied to the geometry mesh coordinates array.
+
+**Virtual Sensing - Remote Microphone Technique**\
+\* Update `obsFiltEstTD()`, removing the observatoin filter replication when a single filter is provided for many trials/sound field realisations to reduce the memory footprint of the function.\
+\* Update `obsFiltTD()`, performing the delay operation for the virtual microphone signals only when needed and added check for $SNR = \infty$ to calculate the SNR matrix appropriately.
+\* Fix bug in `obsFiltTD()`, returning the condition number without taking into account the regularisation and SNR values.
+
+-------------------------------------------
+
+
+### v0.3.1 ###
+**Virtual Sensing - Remote Microphone Technique**\
+\+ Add the option to add "noise" to the monitoring microphone signals in the time domain estimation of the optimal observation filters in `obsFiltTD()` to replicate the feature of `obsFilt()`. This change **breaks** backwards compatibility.
+
+-------------------------------------------  
+
+
+### v0.3.0 ###
+**General**\
+\* Convert the project to accept column position and direction vectors as input. The affected functions are:
+- `srcGeo()`
+- `rcvGeo()`
+- `virtMicGeo()`
+- `arrMan()`
+- `firstOrderDMA()`
+- `ptsOnSphere()`
+- `twoPtDist()`
+- `circHarm()`
+- `sphHarm()`
+- `planeWave()`
+- `planeWaveSH()`
+- `ptSrcField()`
+- `ptSrcFieldSH()`
+- `ptSrcFieldTD()`
+
+-------------------------------------------
+
+
+### v0.2.8 ###
+**Utilities - Generic**\
+\+ Add the option to pick the order the rotations will be performed in the `rotMat3d()` function. This results is a **backward incompatible** change.
+
+**Utilities - Geometries**\
+\* Update the geometry generating functions `rcvGeo()`, `srcGeo()` and `virtMicGeo` to accommodate the changes in `rotMat3d()`.
+
+-------------------------------------------
+
+
+### v0.2.7 ###
+**Signal Processing - Measurements**\
+\+ Introduction of the *Measurements* "topic" in the Signal Processing part of the codebase.\
+\+ Function to estimate the impulse responses from sweep measurements.
+
+-------------------------------------------
+
+
+### v0.2.6 ###
+**Signal Processing - Generic**\
+\+ Add function to perform fractional octave smoothing of spectra.
+
+-------------------------------------------
+
+
+### v0.2.5 ###
+**Utilities - Geometries**\
+\* Combine translation offsets to a single vector input argument for the `rcvGeo()` MATLAB function.\
+\* Combine translation offsets to a single vector input argument for th `virtMicGeo()` MATLAB function.\
+\* Add the ability to rotate the receiver geometries in `rcvGeo()` MATLAB function.
+
+-------------------------------------------
+
+
+### v0.2.4 ###
+**Virtual Sensing**\
+\* Corrected time-domain observation filter calculations.\
+\* Removed scaling from the cross-correlation calculations in the time-domain optimal observation filters.\
+\* Fixed bug in time-domain observation filter that screwed up dimensions of the filters when only one source was present.
+
+**Sound Fields**\
+\* Fixed bug in time-domain point source signal calculations that screwed up dimensions of the resulting arrays when only one source was present.
+
+**Utilities - Geometries**\
+\* The virtual microphone geometry generation function has been heavily modified and its interface has changed in a **backward incompatible** way. It is now more generic and allows for "arbitrary" size of each Cartesian dimension of the geometries as well as different number of sensors along each dimension.
+
+-------------------------------------------
+
+
+### v0.2.3 ###
+**Virtual Sensing**\
+\+ Added function to estimate the observation filters in the time-domain.\
+\+ Added function to perform estimation with observation filters in the time-domain.
+
+**Signal Processing - Generic**\
+\* Fixed bugs, improved calculations and removed output arguments for the windowed sinc FIR fractional delay filters
+\+ Added four window functions in the calculation of windowed sinc FIR fractional delay filters.\
+
+**Sound Fields**\
+\+ Added function to calculate signals generated by ideal point sources in the time-domain.
+
+-------------------------------------------
+
+
+### v0.2.2 ###
+**Virtual Sensing**\
+\* Update the observation filter and estimation with observation filter functions with better input argument checking and changed the name of variables to match those in the literature.
+
+-------------------------------------------
+
+
+### v0.2.1 ###
+**Virtual Sensing**\
+\* Fix a bug where noise was added to the power spectral density matrix for the optimal observation filter calculations in the noiseless case.
+
+-------------------------------------------
+
+
+### v0.2.0 ###
+**Utilities**\
+\+ Added a bisection method for single-valued functions.\
+\* Improved rotation matrix calculation function with degrees and radian calculations available.\
+\+ Added function to calculate a double-sided spectrum from a single-sided spectrum.\
+\+ Added a function to calculate the intersection of three vectors.\
+\+ Added a pair of functions to check for even or odd elements.\
+\+ Added a function to pick values from a vector based on given probabilities.\
+\+ Added a function to pick randomly unique rows from a matrix.\
+\+ Added a Heaviside step function.\
+\+ Added function to swap argument values.
+
+**Optimisation**\
+\+ Added a MATLAB Memetic Algorithm (MA) implementation.\
+\* The algorithm calls provided functions and can solve generic problems.
+
+**Control**\
+\+ Added tonal control in the frequency domain.\
+\* Control is contained in a single function.\
+\* Can be used with or without virtual sensing.\
+\* Implementations of optimal control and FxLMS (still frequency domain) calculations are available.
+
+**Signal Processing - Array Processing**\
+\+ Added array manifold (steering vector) calculation function.
+
+**Signal Processing - Generic**\
+\+ Added frequency band calculation function with 1/1 octave and 1/3 octave bands.\
+\+ Add fractional delay filter impulse response generation function.
+
+**Virtual Sensing - Generic**\
+\+ Added a multiple coherence calculation function.
+
+**Virtual Sensing - Remote Microphone Technique**\
+\* Divide the observation filter and estimation with the observation filter in two functions. The return arguments are split appropriately to the function they relate.\
+\+ Added option to include noise in the monitoring microphone power spectral density matrix with specified SNR value.
+
+**Sound Fields**\
+\+ Added plane wave calculation function.\
+\+ Added Circular Harmonics calculation function.\
+\+ Added Spherical Harmonics calculation function.\
+\+ Added Discrete Circular Fourier Transform (DCFT) calculation function.\
+\+ Added Inverse Discrete Circular Fourier Transform (IDCFT) calculation function.\
+\+ Added Discrete Spherical Fourier Transform (DSFT) calculation function.\
+\+ Added Inverse Discrete Spherical Fourier Transform (IDSFT) calculation function.\
+\+ Added function to extrapolate a sound field in the Spherical Harmonics domain.\
+\+ Added function to calculate sound field generated by a point source in the Spherical Harmonics domain (truncated order).\
+\+ Added function to calculate sound field generated by a plane wave in the Spherical Harmonics domain (truncated order).
+
+-------------------------------------------
+
+
+### v0.1.0 ###
+This is the initial version of the project.
diff --git a/Optimisation/Memetic Algorithm/MATLAB/Functions/locSearch.m b/Optimisation/Memetic Algorithm/MATLAB/Functions/locSearch.m
index 9d7a8b74917f4ca1f29492d7c6811e38d5d01d14..9bf65a37b88c1e97c74390f37055fa0aa5e2f0aa 100644
--- a/Optimisation/Memetic Algorithm/MATLAB/Functions/locSearch.m	
+++ b/Optimisation/Memetic Algorithm/MATLAB/Functions/locSearch.m	
@@ -3,7 +3,7 @@
 % Author: Achilles Kappis
 % e-mail: axilleaz@protonmail.com
 %
-% Date: 30/11/2023 (DD/MM/YYYY)
+% Date: 25/11/2024 (DD/MM/YYYY)
 %
 % Copyright: MIT
 % --------------------------------------------------
@@ -161,13 +161,6 @@ function optimPop = locSearch(pop, fitVals, nNeighbourPts, selMeth, stepSize, nI
     % ====================================================
     % Perform the local search
     % ====================================================
-    % Handle parallel execution
-    if locOptParExec
-        nWorkers = gcp().NumWorkers;
-    else
-        nWorkers = 0;
-    end
-
     % Parameters
     rngFactor = stepSize(2, :) - stepSize(1, :); % Factor determining the range of the values
     sftFactor = stepSize(1, :); % Factor shifting the mean of the values
@@ -177,7 +170,7 @@ function optimPop = locSearch(pop, fitVals, nNeighbourPts, selMeth, stepSize, nI
     optimPop = zeros(size(pop));
 
     % Go through the population
-    parfor (popIdx = 1:size(pop, 1), nWorkers)
+    parfor popIdx = 1:size(pop, 1)
         optimPop(popIdx, :) = pop(popIdx, :);
 
         % Loop conditions
@@ -230,4 +223,5 @@ function optimPop = locSearch(pop, fitVals, nNeighbourPts, selMeth, stepSize, nI
                 end
             end
         end
-    end
\ No newline at end of file
+    end
+end
\ No newline at end of file
diff --git a/README.md b/README.md
index 4aac359015cfaa50aa3bf2ab6f6387768f1987d5..6b81538e7f6b9bf0fe9df590d92e5ccb5de4c4b9 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,5 @@
 # IN-NOVA
-This repository holds the open-access codebase used within the [IN-NOVA](https://in-nova-horizon.eu/) project. The codebase is divided into various sections, each relevant to a different topic/problem. The sections will be updated and more sections will be added on an as-needed basis, since the purpose of the project is not to create a software library to tackle the scientific problems.
+This repository holds the open-access codebase used within the "Directional microphone arrays for remote microphone virtual sensing" sub-project, under the [IN-NOVA](https://in-nova-horizon.eu/) project . The codebase is divided into various sections, each relevant to a different topic/problem. The sections will be updated and more sections will be added on an as-needed basis, since the purpose of the project is not to create a software library to tackle the scientific problems.
 
 The codebase under each section may or may not include code implementations in different languages but no plan exists to port each implementation in all available programming languages. More information about the codebase, the available implementations and topics/fields can be found in the [Documentation](https://gitlab.com/in-nova/in-nova/-/tree/main/Documentation/latex?ref_type=heads) of the project and its [Wiki](https://gitlab.com/in-nova/in-nova/-/wikis/home).
 
@@ -24,6 +24,8 @@ The current structure of the codebase is shown below. More information can be fo
   - Memetic Algorithm
 - [Signal Processing](https://gitlab.com/in-nova/in-nova/-/tree/main/Signal%20Processing?ref_type=heads)
   - Array Processing
+    - Frequency domain
+    - Time domain
   - Generic
   - Measurements
 - [Sound fields](https://gitlab.com/in-nova/in-nova/-/tree/main/Sound%20Fields?ref_type=heads)
@@ -44,11 +46,11 @@ If you find any bugs, other issues and/or inconsistencies you can [e-mail](mailt
 
 
 ## Roadmap
-The repository will be updated on an as-needed basis.
+There is no development roadmap for this project. The codebase is developed to cover the needs of the project as they show up, so the repository will be updated on an as-needed basis.
 
 Although the repository is not considered to be *under construction* anymore, there are significant gaps in its structure. At the moment, the main focus is placed on updating code with new features and bug fixes and documenting ideas and useful features for the future (mainly as issues).
 
-As a parallel slow-moving project, porting the codebase to [Julia](https://julialang.org/) has also started, aiming to provide full functionality in the future. Although Julia and MATLAB were designed to tackle similar (if not the same) problems, they are quite different. The facilities and intricacies of Julia dictate the need to dig deeper into the language in order to provide an efficient, maintainable and intuitive codebase that will parallel the current MATLAB implementation in functionality. More time must be spent in the design phase for the Julia implementations, which will, most probably, keep the progress to a slow pace. Although it is a long shot, the target is for the Julia codebase to reach the MATLAB implementation's state and then move forward in tandem.  
+The port of the codebase to [Julia](https://julialang.org/) started a while ago, but it has currently been abandonded. The development requires considerable effort to provide a consistent and performant codebase. Instead of spending time to learn Julia to efficiently port the code, the effort will be put to improve the current codebase and possibly port it to [Python](https://www.python.org/), as it is one of the main languages used in computational sciences and signal processing. 
 
 
 ## Contributing
@@ -70,16 +72,16 @@ To try and maintain a coherent style in the codebase you are encouraged to use t
 Irrespective of style, it is highly advisable to name your variables in a meaningful manner and keep them as short as possible while still communicating their purpose. Comments are highly recommended in your code, especially where they can facilitate a better understanding of the code and the intent of the developer. Over-commented code is better than under-commented code.
 
 
-## Authors and acknowledgment
+## Contributors and acknowledgment
 
-#### Authors
+#### Contributors
 
 The main contributor is Achilles Kappis.
 
 
 #### Acknowledgments
 
-Part of the `ptsOnSphere()` MATLAB/Octave function is an adaptation of a function provided by Prof. Jordan Cheer of the Institute of Sound and Vibration Research (ISVR), University of Southampton.
+Part of the `ptsOnSphere()` MATLAB/Octave function is an adaptation of a function provided by Prof. Jordan Cheer of the Institute of Sound & Vibration Research (ISVR), University of Southampton.
 
 
 ## License
@@ -87,9 +89,9 @@ The project is licensed under the ***MIT License***, which is a rather unrestric
 
 
 ## Versioning ##
-The project uses [semantic versioning](https://semver.org/) and the current version is **v0.4.1**. The project hasn't reached v1.0.0 yet so changes that break backwards compatibility may (and have been) introduced in any version update. For information about the changes in each version consult the [CHANGELOG](https://gitlab.com/in-nova/in-nova/-/blob/main/CHANGELOG.md?ref_type=heads).
+The project uses [semantic versioning](https://semver.org/) and the current version is **v0.5.0**. The project hasn't reached v1.0.0 yet so changes that break backwards compatibility may (and have been) introduced in any version update. For information about the changes in each version consult the [CHANGELOG](https://gitlab.com/in-nova/in-nova/-/blob/main/CHANGELOG.md?ref_type=heads).
 
 
 #### **Important**
 
-If you are unable, or do not want to contribute under this license please do **not** contribute to this project at all. All content within the project must be under the same license.
+If you are unable, or do not want to contribute under the current license please do **not** contribute to this project at all. All content within the project must be under the same license.
diff --git a/Signal Processing/Array Processing/MATLAB/Functions/arrManTD.m b/Signal Processing/Array Processing/MATLAB/Functions/arrManTd.m
similarity index 96%
rename from Signal Processing/Array Processing/MATLAB/Functions/arrManTD.m
rename to Signal Processing/Array Processing/MATLAB/Functions/arrManTd.m
index 81d5499878b1c8568441127becc34ad1fe67987c..1c92e62cc8ac6ed6f6e142dc70595c58028df3ec 100644
--- a/Signal Processing/Array Processing/MATLAB/Functions/arrManTD.m	
+++ b/Signal Processing/Array Processing/MATLAB/Functions/arrManTd.m	
@@ -3,7 +3,7 @@
 % Author: Achilles Kappis
 % e-mail: axilleaz@protonmail.com
 %
-% Date: 02/11/2024 (DD/MM/YYYY)
+% Date: 05/01/2025 (DD/MM/YYYY)
 %
 % Copyright: MIT
 % --------------------------------------------------
@@ -84,14 +84,13 @@
 %   calculated internally with dimensions equal to the mean of each
 %   dimension over all the sensor positions.
 % 
-% - The implementation is based on "First-Order Differential Microphone
-%   Arrays from a Time-Domain Broadband Perspective" by Buchris, Cohen and
-%   Benesty.
+% - The implementation is based on "On the Design of Time-Domain
+%   Differential Microphone Arrays" by Buchris, Cohen and Benesty.
 % 
 % - Dependencies: * winSincFracDel() to calculate the fractional delay
 %                   filters.
 % --------------------------------------------------
-function [am, maxDel, amMtx] = arrManTD(mPos, dirs, filtLen, delLen, delWin, fs, c)
+function [am, maxDel, amMtx] = arrManTd(mPos, dirs, filtLen, delLen, delWin, fs, c)
     % ====================================================
     % Check for number of arguments
     % ====================================================
diff --git a/Signal Processing/Array Processing/MATLAB/Functions/firstOrderDma.m b/Signal Processing/Array Processing/MATLAB/Functions/firstOrderDma.m
index f31cdb6109f79086f2ed2996f168a1a64cbe1c9b..b7b04409e548dd779b6acea0cf2bcfa9e028825e 100644
--- a/Signal Processing/Array Processing/MATLAB/Functions/firstOrderDma.m	
+++ b/Signal Processing/Array Processing/MATLAB/Functions/firstOrderDma.m	
@@ -3,7 +3,7 @@
 % Author: Achilles Kappis
 % e-mail: axilleaz@protonmail.com
 %
-% Date: 05/11/2024 (DD/MM/YYYY)
+% Date: 04/01/2025 (DD/MM/YYYY)
 %
 % Copyright: MIT
 % --------------------------------------------------
@@ -12,13 +12,6 @@
 % --------------------------------------------------
 % Input
 % 
-% input [numeric]: The input to the array. 3D array/matrix with dimensions
-%                  MxIxF, where M represents the number of microphones and
-%                  must be even, I is the number of measurments (or number
-%                  of sources), and F is the number of frequencies of
-%                  interest. Each microphone pair is treated as a first
-%                  order DMA.
-% 
 % freq [numeric]: The frequencies of interest. A vector with number of
 %                 elements matching the third dimension of the "input"
 %                 parameter.
@@ -50,6 +43,13 @@
 %                            appropriate value is automatically set, and
 %                            this argument is ignored. [Default: 0]
 % 
+% input [numeric]: The input to the array. 3D array/matrix with dimensions
+%                  MxIxF, where M represents the number of microphones and
+%                  must be even, I is the number of measurments (or number
+%                  of sources), and F is the number of frequencies of
+%                  interest. Each microphone pair is treated as a first
+%                  order DMA.
+% 
 % --------------------------------------------------
 % Output
 % 
@@ -64,39 +64,44 @@
 % Notes
 % 
 % --------------------------------------------------
-function [h, output] = firstOrderDma(input, freq, d, pPattern, beta)
+function [h, output] = firstOrderDma(freq, d, pPattern, beta, input)
     % ====================================================
     % Check for number of arguments
     % ====================================================
-    narginchk(3, 5);
+    narginchk(2, 5);
     nargoutchk(0, 2);
 
 
     % ====================================================
     % Validate input arguments
     % ====================================================
-    validateattributes(input, {'numeric'}, {'3d', 'nonnan', 'finite', 'nonempty'}, mfilename, 'Input', 1);
+    validateattributes(freq, {'numeric'}, {'real', 'nonnan', 'finite', 'nonempty', 'vector'}, mfilename, 'Frequencies', 1);
+    validateattributes(d, {'numeric'}, {'scalar', 'real', 'nonnan', 'finite', 'nonempty'}, mfilename, 'Inter-element distance', 2);
 
-    if mod(size(input, 2), 2) ~= 0
-        error("Second dimension of 'input' parameter must have even length.")
-    end
+    % Check input
+    if nargin > 4 && ~isempty(input)
+        validateattributes(input, {'numeric'}, {'3d', 'nonnan', 'finite', 'nonempty', 'size', [NaN, NaN, length(freq)]}, mfilename, 'Input', 5);
 
-    validateattributes(freq, {'numeric'}, {'real', 'nonnan', 'finite', 'nonempty', 'vector', 'numel', size(input, 3)}, mfilename, 'Frequencies', 2);
-    validateattributes(d, {'numeric'}, {'scalar', 'real', 'nonnan', 'finite', 'nonempty'}, mfilename, 'Inter-element distance', 3);
+        if mod(size(input, 1), 2) ~= 0
+            error("First dimension of 'input' parameter must have even length.")
+        end
+    else
+        input = [];
+    end
 
     % Check beta
-    if nargin > 4
-        validateattributes(beta, {'numeric'}, {'scalar', 'real', 'finite', 'nonempty', 'nonnan', '<=', 1, '>=', 0}, mfilename, "Beta", 5)
+    if nargin > 3 && ~isempty(beta)
+        validateattributes(beta, {'numeric'}, {'scalar', 'real', 'finite', 'nonempty', 'nonnan', '<=', 1, '>=', 0}, mfilename, "Beta", 4)
     else
         beta = 0;
     end
 
     % Check alpha (angle of null)
-    if nargin > 3
+    if nargin > 2 && ~isempty(pPattern)
         if isstring(pPattern) || ischar(pPattern)
-            validateattributes(pPattern, {'char', 'string'}, {'scalartext', 'nonempty'}, mfilename, 'Polar pattern', 4);
+            validateattributes(pPattern, {'char', 'string'}, {'scalartext', 'nonempty'}, mfilename, 'Polar pattern', 3);
         elseif isnumeric(pPattern)
-            validateattributes(pPattern, {'numeric'}, {'scalar', 'real', 'nonnan', 'finite', 'nonempty'}, mfilename, 'Angle of null', 4);
+            validateattributes(pPattern, {'numeric'}, {'scalar', 'real', 'nonnan', 'finite', 'nonempty'}, mfilename, 'Angle of null', 3);
         end
     else
         pPattern = "dipole";
@@ -151,7 +156,7 @@ function [h, output] = firstOrderDma(input, freq, d, pPattern, beta)
     % ====================================================
     % Calculate array output
     % ====================================================
-    if nargout > 1
+    if nargout > 1 && ~isempty(input)
         % Go through the frequencies
         for freqIdx = length(freq):-1:1
             for pairIdx = size(input, 1)/2:-1:1
@@ -159,6 +164,8 @@ function [h, output] = firstOrderDma(input, freq, d, pPattern, beta)
                 output(pairIdx, :, freqIdx) = h(:, freqIdx)' * input(pairIdx * 2 - 1:pairIdx * 2, :, freqIdx);
             end
         end
+    else
+        output = [];
     end
 end
 
diff --git a/Signal Processing/Array Processing/MATLAB/Functions/firstOrderDmaTd.m b/Signal Processing/Array Processing/MATLAB/Functions/firstOrderDmaTd.m
new file mode 100644
index 0000000000000000000000000000000000000000..f08379a58e143f4b4750d5f1fce8a29b92eb4e8d
--- /dev/null
+++ b/Signal Processing/Array Processing/MATLAB/Functions/firstOrderDmaTd.m	
@@ -0,0 +1,160 @@
+%% 1st order Time-Domain Directional Microphone Array
+% --------------------------------------------------
+% Author: Achilles Kappis
+% e-mail: axilleaz@protonmail.com
+%
+% Date: 05/01/2025 (DD/MM/YYYY)
+%
+% Copyright: MIT
+% --------------------------------------------------
+% Functionality: Calculate the filters and output of a first order
+%                Differential Microphone Array (DMA) in the time-domain.
+% --------------------------------------------------
+% Input
+% 
+% sMtx [numeric]: The steering matrix of the differential array. This must
+%                 be an NxMx2 array, where N is 2 * L with, L the length of
+%                 the desired FIR beamforming filter. M is the length of
+%                 time-domain the steering vectors (see notes). The third
+%                 dimension corresponds to the number of microphones in the
+%                 array; at the moment only first order arrays with two
+%                 microphones are supported.
+% 
+% del [numeric] (Optional): This is a positive real integer corresponding
+%                           to the delay index at which the right-hand side
+%                           vector will have its non-zero sample. For an
+%                           explanation look at the literature referenced
+%                           in the notes, where ways to calculate the
+%                           optimal value are briefly discussed.
+%                           [Default: 14].
+% 
+% regFac [numeric] (Optional): This is a positive scalar that acts to
+%                              regularise the inversion of the constraints
+%                              matrix. [Default: 0].
+% 
+% sig [numeric] (Optional): This must be an KxPx2 array, corresponding to
+%                           the signals to be filtered by the array, with
+%                           real valued elements. The  dimensions are as
+%                           follows: K is the length of the signals in
+%                           samples, P are the number of signals to be
+%                           filtered and the last dimension corresponds to
+%                           the fact that the signals must be given
+%                           separately for each microphone. If no signals
+%                           are given, the output arguments "out" and
+%                           "outSum" will be empty. [Default: []].
+% 
+% --------------------------------------------------
+% Output
+% 
+% hMtx [numeric]: The beamforming FIR filter in vector format. This will be
+%                 an Nx1 vector, where N is again 2 * L, with L the length
+%                 of the beamforming FIR filter. The filters corresponding
+%                 to the microphones are stacked and not interleaved.
+% 
+% h [numeric]: The beamforming FIR filters given for each microphone
+%              separately. This is an Lx2 matrix, with L the length of the
+%              filters.
+% 
+% cNum [numeric]: The condition number of (sMtx.' * sMtx + regFac * I)
+%                 where "I" is an identity matrix of appropriate
+%                 dimensions. This is to provide some indication of the
+%                 conditioning/sensitivity of the filter.
+% 
+% out [numeric]: The output of each microphone (after filtering) for each
+%                signal provided in the input argument "sigs". This is a
+%                KxPx2 array, with K the length of the signals and P the
+%                number of signals.
+% 
+% outSum [numeric]: This is the sum of the output signals (after filtering)
+%                   of each microphone. This is a KxP matrix and
+%                   corresponds to "sum(out, 3)".
+% 
+% --------------------------------------------------
+% Notes
+% 
+% - The implementation is based on: "On the Design of Time-Domain
+%   Differential Microphone Arrays" by Buchris, Cohen and Benesty.
+% 
+% --------------------------------------------------
+function [hMtx, h, cNum, out, outSum] = firstOrderDmaTd(sMtx, del, regFac, sig)
+    % ====================================================
+    % Check for number of arguments
+    % ====================================================
+    narginchk(1, 4);
+    nargoutchk(0, 5);
+    
+
+    % ====================================================
+    % Validate input arguments
+    % ====================================================
+    validateattributes(sMtx, "numeric", {'3d', 'real', 'nonempty', 'nonnan', 'finite', 'size', [NaN, NaN, 2]}, mfilename, "Angle of null response", 1);
+    validateattributes(del, "numeric", {'scalar', 'nonempty', 'integer', 'real', 'finite', 'nonnan', 'nonnegative'}, mfilename, "The maximum delay between sensors and reference point of the array", 2);
+
+    if nargin > 2 && ~isempty(regFac)
+        validateattributes(regFac, "numeric", {'scalar', 'nonempty', 'real', 'finite', 'nonnan', 'nonnegative'}, mfilename, "The regularisation factor", 3);
+    else
+        regFac = 0;
+    end
+
+    if nargin > 3 && ~isempty(sig)
+        validateattributes(sig, "numeric", {'3d', 'nonempty', 'real', 'nonnan', 'finite', 'size', [NaN, NaN, 2]}, mfilename, "Signals to be filtered", 4);
+    else
+        sig = [];
+    end
+    
+
+    % ====================================================
+    % Calculate parameters
+    % ====================================================
+    % Calculate right hand side vector
+    rhsVec = zeros(2 * size(sMtx, 2), 1);
+    rhsVec(del) = 1;
+
+
+    % ====================================================
+    % Pre-process arguments
+    % ====================================================
+    % Stack the array manifolds for the two directions into a single matrix
+    sMtx = reshape(sMtx, size(sMtx, 1), []).';
+    
+
+    % ====================================================
+    % Calculate filter(s)
+    % ====================================================
+    if regFac ~= 0
+        invQty = regFac * eye(size(sMtx, 2));
+    else
+        invQty = 0;
+    end
+    invQty = (sMtx.' * sMtx + invQty);
+    hMtx = invQty\sMtx.' * rhsVec;
+
+    % ====================================================
+    % Return additional output arguments
+    % ====================================================
+    % Return the individual filters
+    if nargout > 1
+        h = reshape(hMtx, [], 2);
+    end
+
+    if nargout > 2
+        cNum = cond(invQty);
+    else
+        cNum = [];
+    end
+
+    % Return the filtered signal(s) [output of the DMA]
+    if nargout > 3 && ~isempty(sig)
+        for idx = size(h, 2):-1:1
+            out(:, :, idx) = filter(h(:, idx), 1, sig(:, :, idx));
+        end
+    else
+        out = [];
+    end
+
+    if nargout > 4 && ~isempty(out)
+        outSum = squeeze(sum(out, 3));
+    else
+        outSum = [];
+    end
+end
\ No newline at end of file
diff --git a/Sound Fields/MATLAB/Functions/extrpFieldSH.m b/Sound Fields/MATLAB/Functions/extrpFieldSh.m
similarity index 98%
rename from Sound Fields/MATLAB/Functions/extrpFieldSH.m
rename to Sound Fields/MATLAB/Functions/extrpFieldSh.m
index 20ca9b523e1b4c08176c309204ffbf5b2ebe06e5..124b43b3113ed0561036c266ed620d3cbf6cf56a 100644
--- a/Sound Fields/MATLAB/Functions/extrpFieldSH.m	
+++ b/Sound Fields/MATLAB/Functions/extrpFieldSh.m	
@@ -3,7 +3,7 @@
 % Author: Achilles Kappis
 % e-mail: axilleaz@protonmail.com
 %
-% Date: 02/06/2024 (DD/MM/YYYY)
+% Date: 05/01/2025 (DD/MM/YYYY)
 %
 % Copyright: MIT
 % --------------------------------------------------
@@ -74,7 +74,7 @@
 % Notes
 % 
 % --------------------------------------------------
-function [extrCoeffs, extrCoeffsReduced] = extrpFieldSH(shCoeffs, r, k, w, dir)
+function [extrCoeffs, extrCoeffsReduced] = extrpFieldSh(shCoeffs, r, k, w, dir)
     % ====================================================
     % Check for number of arguments
     % ====================================================
diff --git a/Sound Fields/MATLAB/Functions/lineSrcField.m b/Sound Fields/MATLAB/Functions/lineSrcField.m
new file mode 100644
index 0000000000000000000000000000000000000000..be28339dd891dba890deabbb642dbcc893a24d9c
--- /dev/null
+++ b/Sound Fields/MATLAB/Functions/lineSrcField.m	
@@ -0,0 +1,132 @@
+%% Calculate wavefield generated by line sources
+% --------------------------------------------------
+% Author: Achilles Kappis
+% e-mail: axilleaz@protonmail.com
+%
+% Date: 19/12/2024 (DD/MM/YYYY)
+%
+% Copyright: MIT
+% --------------------------------------------------
+% Functionality: Calculate the wavefield generated by line sources at
+%                specified locations.
+% --------------------------------------------------
+% Input
+% 
+% sPos [numeric]: The position of the sources in Cartesian coordinates. The
+%                 variable should be a matrix with dimensions 3xN where N
+%                 is the number of sources and the rows represent the x, y
+%                 and z coordinates respectively. IMPORTANT: The z
+%                 components are set to 0 internally to ensure a 2D
+%                 problem.
+% 
+% rPos [numeric]: The position of the receivers in Cartesian coordinates.
+%                 The variable should be a matrix with dimensions 3xM where
+%                 M is the number of receivers and the rows represent the
+%                 x, y and z coordinates respectively. IMPORTANT: The z
+%                 components are set to 0 internally to ensure a 2D
+%                 problem.
+% 
+% freqs [numeric]: The frequencies for which to calculate the wave field.
+%                  It must be a scalar or vector.
+% 
+% Q [numeric] (Optional): The source strength of the line sources. This
+%                         variable must be either a scalar corresponding to
+%                         all sources having the same strength, or a matrix
+%                         with dimensions NxK, where K is the number of
+%                         frequencies of interest. The strengths can be
+%                         complex numbers. [Default: 1].
+% 
+% c [numeric] (Optional): The speed of sound in m/s. [Default: 343].
+% 
+% rho [numeric (Optional): The density of the medium in kg/(m^3).
+%                          [Default: 1.204].
+% 
+% --------------------------------------------------
+% Output
+% 
+% waveField [numeric]: The complex pressures at the position of the
+%                      receivers. The variable is a matrix of dimensions
+%                      MxNxF where M is the number of receivers, N the
+%                      number of sources and F the number of frequencies.
+% 
+% --------------------------------------------------
+% Notes
+% 
+% Dependencies: - twoPtDist(): To calculate the distances between sources
+%                              and receivers.
+% --------------------------------------------------
+function waveField = lineSrcField(sPos, rPos, f, Q, c, rho)
+    % ====================================================
+    % Check for number of arguments
+    % ====================================================
+    narginchk(3, 6);
+    nargoutchk(0, 1);
+
+    % ====================================================
+    % Validate input arguments
+    % ====================================================
+    % Validate mandatory arguments
+    validateattributes(sPos, "numeric", {'2d', 'nrows', 3, 'finite', 'nonnan', 'nonempty', 'real'}, mfilename, "Source positions", 1);
+    validateattributes(rPos, "numeric", {'2d', 'nrows', 3, 'finite', 'nonnan', 'nonempty', 'real'}, mfilename, "Receiver positions", 2);
+    validateattributes(f, "numeric", {'vector', 'finite', 'nonnan', 'nonempty', 'real'}, mfilename, "Frequencies", 3);
+
+    % Validate optional arguments (and set their values)
+    if nargin > 5 && ~isempty(rho)
+        validateattributes(rho, "numeric", {'scalar', 'finite', 'positive', 'nonnan', 'nonempty', 'real'}, mfilename, "Medium density", 6);
+    else
+        rho = 1.204;
+    end
+
+    if nargin > 4 && ~isempty(c)
+        validateattributes(c, "numeric", {'scalar', 'finite', 'positive', 'nonnan', 'nonempty', 'real'}, mfilename, "Speed of propagation", 5);
+    else
+        c = 343;
+    end
+
+    if nargin > 3 && ~isempty(Q)
+        validateattributes(Q, "numeric", {'2d', 'finite', 'nonempty', 'nonnan'}, mfilename, "Source strength(s)", 4);
+
+        % Make sure Q has the correct dimensions
+        if ~isscalar(Q) && sum((size(Q) ~= [size(sPos, 2), length(f)])) > 0
+            error("Source strength(s) must be either a scalar or its length must match the number of sources.");
+        end
+    else
+        Q = 1;
+    end
+
+
+    % ====================================================
+    % "Condition" arguments
+    % ====================================================
+    % Make sure frequencies is a column vector
+    f = f(:);
+
+    % Make sure we work in 2D (z components are zero)
+    sPos(3, :) = 0;
+    rPos(3, :) = 0;
+
+
+    % =============================================
+    %  Calculate variables
+    %  ============================================
+    s2rDist = twoPtDist(sPos, rPos).';
+
+    % Create a vector with appropriate dimensions for the source strength(s)
+    if isscalar(Q)
+        Q = ones(size(sPos, 2), length(f)) * Q;
+    end
+    
+
+    % =============================================
+    %  Calculate variables
+    %  ============================================
+    % Go through the frequencies
+    parfor fIdx = 1:numel(f)
+        % Calculate parameters
+        w = 2 * pi * f(fIdx);
+        kr = w * s2rDist/c;
+
+        % Calculate complex pressure
+        waveField(:, :, fIdx) = -rho * w * Q(:, fIdx).' .* besselh(0, 1, kr)/4;
+    end
+end
\ No newline at end of file
diff --git a/Sound Fields/MATLAB/Functions/planeWaveSH.m b/Sound Fields/MATLAB/Functions/planeWaveSh.m
similarity index 98%
rename from Sound Fields/MATLAB/Functions/planeWaveSH.m
rename to Sound Fields/MATLAB/Functions/planeWaveSh.m
index 3dd6d06ad7d8a1407c6652ed921df4733ae30460..8f48567736ba3e29a775b34860d0e90e7676fd81 100644
--- a/Sound Fields/MATLAB/Functions/planeWaveSH.m	
+++ b/Sound Fields/MATLAB/Functions/planeWaveSh.m	
@@ -3,7 +3,7 @@
 % Author: Achilles Kappis
 % e-mail: axilleaz@protonmail.com
 %
-% Date: 29/09/2024 (DD/MM/YYYY)
+% Date: 05/01/2025 (DD/MM/YYYY)
 %
 % Copyright: MIT
 % --------------------------------------------------
@@ -68,7 +68,7 @@
 % Notes
 % 
 % --------------------------------------------------
-function [pCoeffs, waveFieldDecomp, waveField] = planeWaveSH(sDir, rPos, f, N, Q, c)
+function [pCoeffs, waveFieldDecomp, waveField] = planeWaveSh(sDir, rPos, f, N, Q, c)
     % ====================================================
     % Check for number of arguments
     % ====================================================
diff --git a/Sound Fields/MATLAB/Functions/ptSrcField.m b/Sound Fields/MATLAB/Functions/ptSrcField.m
index fd110c0307b3fff9be54d48233f3d77f1211cf25..b6fcaa1c9f5144ca72737e24f3bc5850a1230bad 100644
--- a/Sound Fields/MATLAB/Functions/ptSrcField.m	
+++ b/Sound Fields/MATLAB/Functions/ptSrcField.m	
@@ -3,7 +3,7 @@
 % Author: Achilles Kappis
 % e-mail: axilleaz@protonmail.com
 %
-% Date: 29/09/2024 (DD/MM/YYYY)
+% Date: 19/12/2024 (DD/MM/YYYY)
 %
 % Copyright: MIT
 % --------------------------------------------------
@@ -25,7 +25,7 @@
 % freqs [numeric]: The frequencies for which to calculate the wave field.
 %                  It must be a scalar or vector.
 % 
-% Q [numeric] (Optional): The source strength of the plane waves. This
+% Q [numeric] (Optional): The source strength of the point sources. This
 %                         variable must be either a scalar corresponding to
 %                         all sources having the same strength, or a matrix
 %                         with dimensions NxK, where K is the number of
@@ -113,7 +113,7 @@ function waveField = ptSrcField(sPos, rPos, f, Q, c, rho)
     %  Calculate variables
     %  ============================================
     % Go through the frequencies
-    for fIdx = numel(f):-1:1
+    parfor fIdx = 1:numel(f)
         % Calculate parameters
         w = 2 * pi * f(fIdx); % Radial frequency
         k = w/c; % Wavenumber
diff --git a/Sound Fields/MATLAB/Functions/ptSrcFieldSH.m b/Sound Fields/MATLAB/Functions/ptSrcFieldSh.m
similarity index 98%
rename from Sound Fields/MATLAB/Functions/ptSrcFieldSH.m
rename to Sound Fields/MATLAB/Functions/ptSrcFieldSh.m
index 2b0c561a3069065426a9132562d546dd0c148ec7..07fec1df48c39345bacb53d915ead894662fe599 100644
--- a/Sound Fields/MATLAB/Functions/ptSrcFieldSH.m	
+++ b/Sound Fields/MATLAB/Functions/ptSrcFieldSh.m	
@@ -3,7 +3,7 @@
 % Author: Achilles Kappis
 % e-mail: axilleaz@protonmail.com
 %
-% Date: 29/09/2024 (DD/MM/YYYY)
+% Date: 05/01/2025 (DD/MM/YYYY)
 %
 % Copyright: MIT
 % --------------------------------------------------
@@ -66,7 +66,7 @@
 % Notes
 % 
 % --------------------------------------------------
-function [pCoeffs, waveFieldDecomp, waveField] = ptSrcFieldSH(sPos, rPos, f, N, Q, c)
+function [pCoeffs, waveFieldDecomp, waveField] = ptSrcFieldSh(sPos, rPos, f, N, Q, c)
     % ====================================================
     % Check for number of arguments
     % ====================================================
diff --git a/Sound Fields/MATLAB/Functions/ptSrcFieldTD.m b/Sound Fields/MATLAB/Functions/ptSrcFieldTd.m
similarity index 99%
rename from Sound Fields/MATLAB/Functions/ptSrcFieldTD.m
rename to Sound Fields/MATLAB/Functions/ptSrcFieldTd.m
index 902e92b3e201d35b90a8e112240d1e46e7619a6d..cd28066acc3ea73ac7bfb601cb2232e1326f77ee 100644
--- a/Sound Fields/MATLAB/Functions/ptSrcFieldTD.m	
+++ b/Sound Fields/MATLAB/Functions/ptSrcFieldTd.m	
@@ -3,7 +3,7 @@
 % Author: Achilles Kappis
 % e-mail: axilleaz@protonmail.com
 %
-% Date: 29/09/2024 (DD/MM/YYYY)
+% Date: 05/01/2025 (DD/MM/YYYY)
 %
 % Copyright: MIT
 % --------------------------------------------------
@@ -83,7 +83,7 @@
 %   long source signals
 % 
 % --------------------------------------------------
-function [rSig, rSigMean, rSigMtx, rSigMtxMean, Q] = ptSrcFieldTD(sPos, rPos, fs, Q, sigLen, nTrials, c)
+function [rSig, rSigMean, rSigMtx, rSigMtxMean, Q] = ptSrcFieldTd(sPos, rPos, fs, Q, sigLen, nTrials, c)
     % ====================================================
     % Check for number of arguments
     % ====================================================
diff --git a/Utilities/Geometries/MATLAB/Functions/rcvGeo.m b/Utilities/Geometries/MATLAB/Functions/rcvGeo.m
index 514a470cbd0ae7022b070cebf85a5820f9ca16bf..cea25d66ccdbf572150877b3e2888a1be58d7e65 100644
--- a/Utilities/Geometries/MATLAB/Functions/rcvGeo.m
+++ b/Utilities/Geometries/MATLAB/Functions/rcvGeo.m
@@ -3,7 +3,7 @@
 % Author: Achilles Kappis
 % e-mail: axilleaz@protonmail.com
 %
-% Date: 14/11/2024 (DD/MM/YYYY)
+% Date: 15/12/2024 (DD/MM/YYYY)
 %
 % Copyright: MIT
 % --------------------------------------------------
@@ -343,7 +343,7 @@ function [omniPos, fig8Pos, triPos, boxPos, box2DPos, tetPos, fig8Vec, triVec, b
                 end
             case "uca"
                 % Get the angle of the positions on the circle
-                az = cart2sph(omniPos(1, :), omniPos(2, :), omniPos(3, :));
+                az = rad2deg(cart2sph(omniPos(1, :), omniPos(2, :), omniPos(3, :)));
                 
                 % Rotate and position tetrahedrals
                 for measPosIdx = numel(az):-1:1
@@ -391,27 +391,27 @@ function [omniPos, fig8Pos, triPos, boxPos, box2DPos, tetPos, fig8Vec, triVec, b
         % ====================================================
         % Provide a Nx3 "Figure-of-Eight" matrix
         if nargout > 6
-            fig8Vec = reshape(fig8Pos, 3, []);
+            fig8Vec = reshape(permute(fig8Pos, [1, 3, 2]), 3, []);
         end
     
         % Provide a Nx3 "Triangle" matrix
         if nargout > 7
-            triVec = reshape(triPos, 3, []);
+            triVec = reshape(permute(triPos, [1, 3, 2]), 3, []);
         end
     
         % Provide a Nx3 "Box" matrix
         if nargout > 8
-            boxVec = reshape(boxPos, 3, []);
+            boxVec = reshape(permute(boxPos, [1, 3, 4, 2]), 3, []);
         end
         
         % Provide a Nx3 "2DBox" matrix
         if nargout > 9
-            box2DVec = reshape(box2DPos, 3, []);
+            box2DVec = reshape(permute(box2DPos, [1, 3, 4, 2]), 3, []);
         end
     
         % Provide a Nx3 Tetrahedron matrix
         if nargout > 10
-            tetVec = reshape(tetPos, 3, []);
+            tetVec = reshape(permute(tetPos, [1, 3, 2]), 3, []);
         end
     end
 end
\ No newline at end of file
diff --git a/Utilities/Geometries/MATLAB/Functions/virtMicGeo.m b/Utilities/Geometries/MATLAB/Functions/vMicGeo.m
similarity index 98%
rename from Utilities/Geometries/MATLAB/Functions/virtMicGeo.m
rename to Utilities/Geometries/MATLAB/Functions/vMicGeo.m
index 3159cfe3cd25b39bb2489b4711c30a9be8fb87a3..723d296a0043c3675347c5eccdc900fcb8984939 100644
--- a/Utilities/Geometries/MATLAB/Functions/virtMicGeo.m
+++ b/Utilities/Geometries/MATLAB/Functions/vMicGeo.m
@@ -3,7 +3,7 @@
 % Author: Achilles Kappis
 % e-mail: axilleaz@protonmail.com
 %
-% Date: 14/11/2024 (DD/MM/YYYY)
+% Date: 05/01/2025 (DD/MM/YYYY)
 %
 % Copyright: MIT
 % --------------------------------------------------
@@ -88,7 +88,7 @@
 %   setup is one dimensional.
 % 
 % --------------------------------------------------
-function [vPos, vPosMesh] = virtMicGeo(gType, geoDim, nSens, trans, rot, rotOrd)
+function [vPos, vPosMesh] = vMicGeo(gType, geoDim, nSens, trans, rot, rotOrd)
     % ====================================================
     % Check for number of arguments
     % ====================================================
@@ -198,7 +198,7 @@ function [vPos, vPosMesh] = virtMicGeo(gType, geoDim, nSens, trans, rot, rotOrd)
 
     % For "Cube" geometry provide the coordinates in a "mesh format"
     if nargout > 1 && strcmpi(gType, "Cube")
-        vPosMesh = reshape(vPos.', size(x, 1), size(x, 2), 3);
+        vPosMesh = reshape(vPos.', size(x, 1), size(x, 2), [], 3);
     elseif nargout > 1
         vPosMesh = [];
     end
diff --git a/Virtual Sensing/Remote Microphone Technique/MATLAB/Functions/obsFilt.m b/Virtual Sensing/Remote Microphone Technique/MATLAB/Functions/obsFilt.m
index 46a7368006ffc3562ec0ff5ddbbe9e6b4aa2e50c..71cb92bd756a9ee1b12ace6677f5de942dd05510 100644
--- a/Virtual Sensing/Remote Microphone Technique/MATLAB/Functions/obsFilt.m	
+++ b/Virtual Sensing/Remote Microphone Technique/MATLAB/Functions/obsFilt.m	
@@ -3,7 +3,7 @@
 % Author: Achilles Kappis
 % e-mail: axilleaz@protonmail.com
 %
-% Date: 04/10/2024 (DD/MM/YYYY)
+% Date: 25/12/2024 (DD/MM/YYYY)
 %
 % Copyright: MIT
 % --------------------------------------------------
@@ -154,13 +154,11 @@ function [oOpt, Sme, Smm, condNum] = obsFilt(Pe, Pm, Svv, regFacs, snrVal)
         snrMtx = 0;
     end
     snrMtx = snrMtx .* eye(size(Pm, 1));
-
-    % Calcualte observation filters
-    invQty = Smm + snrMtx + regMat;
-    oOpt = Sme/invQty;
+    Smm = Smm + snrMtx + regMat;
+    oOpt = Sme/Smm;
 
     % Condition number of auto-correlation (power spectrum) matrix
     if nargout > 3
-        condNum = cond(invQty);
+        condNum = cond(Smm);
     end
 end
\ No newline at end of file
diff --git a/Virtual Sensing/Remote Microphone Technique/MATLAB/Functions/obsFiltEst.m b/Virtual Sensing/Remote Microphone Technique/MATLAB/Functions/obsFiltEst.m
index 99787e1cbdeec1cfb8b0a3c5201b2ea90f0bb882..1b0946d3e36cf6d356c7f435cf380cb0303f3431 100644
--- a/Virtual Sensing/Remote Microphone Technique/MATLAB/Functions/obsFiltEst.m	
+++ b/Virtual Sensing/Remote Microphone Technique/MATLAB/Functions/obsFiltEst.m	
@@ -3,7 +3,7 @@
 % Author: Achilles Kappis
 % e-mail: axilleaz@protonmail.com
 %
-% Date: 01/10/2024 (DD/MM/YYYY)
+% Date: 19/12/2024 (DD/MM/YYYY)
 %
 % Copyright: MIT
 % --------------------------------------------------
@@ -109,7 +109,7 @@ function [est, err, errSqr, normErrSqr, See] = obsFiltEst(Pm, O, Pe, Svv)
 
     % Sum of squared estimation errors
     if nargout > 2
-        for eIdx = size(Pe, 1):-1:1
+        parfor eIdx = 1:size(Pe, 1)
             errSqr(eIdx, 1) = err(eIdx, :) * Svv * err(eIdx, :)';
         end
     end
@@ -117,7 +117,7 @@ function [est, err, errSqr, normErrSqr, See] = obsFiltEst(Pm, O, Pe, Svv)
     % Normalised squared errors
     if nargout > 3
         % Calculate power true spectral density at virtual microphones
-        for eIdx = length(errSqr):-1:1
+        parfor eIdx = 1:length(errSqr)
             See(eIdx, 1) = Pe(eIdx, :) * Svv * Pe(eIdx, :)';
         end
 
diff --git a/Virtual Sensing/Remote Microphone Technique/MATLAB/Functions/obsFiltEstTD.m b/Virtual Sensing/Remote Microphone Technique/MATLAB/Functions/obsFiltEstTd.m
similarity index 98%
rename from Virtual Sensing/Remote Microphone Technique/MATLAB/Functions/obsFiltEstTD.m
rename to Virtual Sensing/Remote Microphone Technique/MATLAB/Functions/obsFiltEstTd.m
index 52b957a8a1722ec31ebb78d41b614e5e0dd0accd..939ea0be7cfaebcbdd9f591fc52f8d1c0bfd1a5a 100644
--- a/Virtual Sensing/Remote Microphone Technique/MATLAB/Functions/obsFiltEstTD.m	
+++ b/Virtual Sensing/Remote Microphone Technique/MATLAB/Functions/obsFiltEstTd.m	
@@ -3,7 +3,7 @@
 % Author: Achilles Kappis
 % e-mail: axilleaz@protonmail.com
 %
-% Date: 13/10/2024 (DD/MM/YYYY)
+% Date: 05/01/2025 (DD/MM/YYYY)
 %
 % Copyright: MIT
 % --------------------------------------------------
@@ -58,7 +58,7 @@
 % Notes
 % 
 % --------------------------------------------------
-function [estPerMic, est, err, estMean, errMean] = obsFiltEstTD(m, O, e)
+function [estPerMic, est, err, estMean, errMean] = obsFiltEstTd(m, O, e)
     % ====================================================
     % Check for number of arguments
     % ====================================================
diff --git a/Virtual Sensing/Remote Microphone Technique/MATLAB/Functions/obsFiltTD.m b/Virtual Sensing/Remote Microphone Technique/MATLAB/Functions/obsFiltTd.m
similarity index 98%
rename from Virtual Sensing/Remote Microphone Technique/MATLAB/Functions/obsFiltTD.m
rename to Virtual Sensing/Remote Microphone Technique/MATLAB/Functions/obsFiltTd.m
index 8559c8c048c054f00a9ae0e2448155a9335b2963..17ca29ab52afa29ddd7a99b0e326adebef6988a6 100644
--- a/Virtual Sensing/Remote Microphone Technique/MATLAB/Functions/obsFiltTD.m	
+++ b/Virtual Sensing/Remote Microphone Technique/MATLAB/Functions/obsFiltTd.m	
@@ -3,7 +3,7 @@
 % Author: Achilles Kappis
 % e-mail: axilleaz@protonmail.com
 %
-% Date: 14/10/2024 (DD/MM/YYYY)
+% Date: 05/01/2025 (DD/MM/YYYY)
 %
 % Copyright: MIT
 % --------------------------------------------------
@@ -157,7 +157,7 @@
 %   for local active sound control" by W. Jung, S. J. Elliott and J. Cheer.
 % 
 % --------------------------------------------------
-function [O, Rme, Rmm, Ovec, RmeMtx, RmmMtx, condNum, mMtx, Omean, RmeMean, RmmMean, Oopt, RmeMtxMean, RmmMtxMean] = obsFiltTD(e, m, beta, snrVal, filtLen, delay, fs)
+function [O, Rme, Rmm, Ovec, RmeMtx, RmmMtx, condNum, mMtx, Omean, RmeMean, RmmMean, Oopt, RmeMtxMean, RmmMtxMean] = obsFiltTd(e, m, beta, snrVal, filtLen, delay, fs)
     % ====================================================
     % Check for number of arguments
     % ====================================================
@@ -241,9 +241,11 @@ function [O, Rme, Rmm, Ovec, RmeMtx, RmmMtx, condNum, mMtx, Omean, RmeMean, RmmM
     for jIdx = size(m, 3):-1:1
         % Go through the monitoring microphones
         for mIdx = size(m, 2):-1:1
+            tmp = m(:, mIdx, jIdx);
+
             % Calculate the cross-correlations between virtual and monitoring microphones
-            for eIdx = size(e, 2):-1:1
-                corr = xcorr(m(:, mIdx, jIdx), e(:, eIdx, jIdx), filtLen);
+            parfor eIdx = 1:size(e, 2)
+                corr = xcorr(tmp, e(:, eIdx, jIdx), filtLen);
 
                 Rme(:, mIdx, eIdx, jIdx) = corr(filtLen + 1:-1:2);
             end