diff --git a/docs.it4i/software/numerical-languages/introduction.md b/docs.it4i/software/numerical-languages/introduction.md
index 50ef104606a5ff3c4c011c3685444be683521189..0f462ce3d9bcf3a238a1f2652b891e3fc80a3187 100644
--- a/docs.it4i/software/numerical-languages/introduction.md
+++ b/docs.it4i/software/numerical-languages/introduction.md
@@ -15,7 +15,7 @@ $ ml MATLAB
 $ matlab
 ```
 
-Read more at the [Matlab page](software/numerical-languages/matlab/).
+Read more at the [Matlab page][1](software/numerical-languages/matlab/).
 
 ## Octave
 
@@ -26,7 +26,7 @@ $ ml Octave
 $ octave
 ```
 
-Read more at the [Octave page](software/numerical-languages/octave/).
+Read more at the [Octave page][2](software/numerical-languages/octave/).
 
 ## R
 
@@ -37,4 +37,8 @@ $ ml R
 $ R
 ```
 
-Read more at the [R page](software/numerical-languages/r/).
+Read more at the [R page][3](software/numerical-languages/r/).
+
+[1]: matlab.md
+[2]: octave.md
+[3]: r.md
diff --git a/docs.it4i/software/numerical-languages/matlab.md b/docs.it4i/software/numerical-languages/matlab.md
index 73a283ae903216f0c28b4c08cc7650e3ab5a0d8d..39afc2eb9acad18aa91d57c43bee27ca3d9cf225 100644
--- a/docs.it4i/software/numerical-languages/matlab.md
+++ b/docs.it4i/software/numerical-languages/matlab.md
@@ -21,9 +21,9 @@ $ ml av MATLAB
 
 If you need to use the Matlab GUI to prepare your Matlab programs, you can use Matlab directly on the login nodes. But for all computations use Matlab on the compute nodes via PBS Pro scheduler.
 
-If you require the Matlab GUI, follow the general information about [running graphical applications](general/accessing-the-clusters/graphical-user-interface/x-window-system/).
+If you require the Matlab GUI, follow the general information about [running graphical applications][1].
 
-Matlab GUI is quite slow using the X forwarding built in the PBS (qsub -X), so using X11 display redirection either via SSH or directly by xauth (see the "GUI Applications on Compute Nodes over VNC" part [here](general/accessing-the-clusters/graphical-user-interface/x-window-system/)) is recommended.
+Matlab GUI is quite slow using the X forwarding built in the PBS (qsub -X), so using X11 display redirection either via SSH or directly by xauth (see the "GUI Applications on Compute Nodes over VNC" part [here][1]) is recommended.
 
 To run Matlab with GUI, use
 
@@ -43,7 +43,7 @@ plots, images, etc... will be still available.
 
 Distributed toolbox is available only for the EDU variant
 
-The MPIEXEC mode available in previous versions is no longer available in MATLAB 2015. Also, the programming interface has changed. Refer to [Release Notes](http://www.mathworks.com/help/distcomp/release-notes.html#buanp9e-1).
+The MPIEXEC mode available in previous versions is no longer available in MATLAB 2015. Also, the programming interface has changed. Refer to [Release Notes][a].
 
 Delete previously used file mpiLibConf.m, we have observed crashes when using Intel MPI.
 
@@ -68,7 +68,7 @@ With the new mode, MATLAB itself launches the workers via PBS, so you can either
 
 ### Parallel Matlab Interactive Session
 
-Following example shows how to start interactive session with support for Matlab GUI. For more information about GUI based applications on Anselm see [this page](general/accessing-the-clusters/graphical-user-interface/x-window-system/).
+Following example shows how to start interactive session with support for Matlab GUI. For more information about GUI based applications on Anselm see [this page][1].
 
 ```console
 $ xhost +
@@ -218,7 +218,7 @@ This method is a "hack" invented by us to emulate the mpiexec functionality foun
 !!! warning
     This method is experimental.
 
-For this method, you need to use SalomonDirect profile, import it using [the same way as SalomonPBSPro](#running-parallel-matlab-using-distributed-computing-toolbox---engine)
+For this method, you need to use SalomonDirect profile, import it using [the same way as SalomonPBSPro][2].
 
 This is an example of m-script using direct mode:
 
@@ -249,11 +249,11 @@ delete(pool)
 
 ### Non-Interactive Session and Licenses
 
-If you want to run batch jobs with Matlab, be sure to request appropriate license features with the PBS Pro scheduler, at least the `-l __feature__matlab__MATLAB=1` for EDU variant of Matlab. More information about how to check the license features states and how to request them with PBS Pro, [look here](software/isv_licenses/).
+If you want to run batch jobs with Matlab, be sure to request appropriate license features with the PBS Pro scheduler, at least the `-l __feature__matlab__MATLAB=1` for EDU variant of Matlab. More information about how to check the license features states and how to request them with PBS Pro, [look here][3].
 
 The licensing feature of PBS is currently disabled.
 
-In case of non-interactive session read the [following information](software/isv_licenses/) on how to modify the qsub command to test for available licenses prior getting the resource allocation.
+In case of non-interactive session read the [following information][3] on how to modify the qsub command to test for available licenses prior getting the resource allocation.
 
 ### Matlab Distributed Computing Engines Start Up Time
 
@@ -278,4 +278,11 @@ Since this is a SMP machine, you can completely avoid using Parallel Toolbox and
 
 ### Local Cluster Mode
 
-You can also use Parallel Toolbox on UV2000. Use [local cluster mode](#parallel-matlab-batch-job-in-local-mode), "SalomonPBSPro" profile will not work.
+You can also use Parallel Toolbox on UV2000. Use [local cluster mode][4], "SalomonPBSPro" profile will not work.
+
+[1]: ../../general/accessing-the-clusters/graphical-user-interface/x-window-system.md
+[2]: #running-parallel-matlab-using-distributed-computing-toolbox---engine
+[3]: ../isv_licenses.md
+[4]: #parallel-matlab-batch-job-in-local-mode
+
+[a]: http://www.mathworks.com/help/distcomp/release-notes.html#buanp9e-1
diff --git a/docs.it4i/software/numerical-languages/matlab_1314.md b/docs.it4i/software/numerical-languages/matlab_1314.md
index 8197edccb9ae71ee180cfedc1d8a47342ac79bef..a95422ce6d876191513ef2bdaf5cbf3c1421f402 100644
--- a/docs.it4i/software/numerical-languages/matlab_1314.md
+++ b/docs.it4i/software/numerical-languages/matlab_1314.md
@@ -3,7 +3,7 @@
 ## Introduction
 
 !!! note
-    This document relates to the old versions R2013 and R2014. For MATLAB 2015 use [this documentation instead](software/numerical-languages/matlab/).
+    This document relates to the old versions R2013 and R2014. For MATLAB 2015 use [this documentation instead][1].
 
 Matlab is available in the latest stable version. There are always two variants of the release:
 
@@ -190,9 +190,9 @@ You can copy and paste the example in a .m file and execute. Note that the matla
 
 ### Non-Interactive Session and Licenses
 
-If you want to run batch jobs with Matlab, be sure to request appropriate license features with the PBS Pro scheduler, at least the ` -l __feature__matlab__MATLAB=1` for EDU variant of Matlab. More information about how to check the license features states and how to request them with PBS Pro, [look here](software/isv_licenses/).
+If you want to run batch jobs with Matlab, be sure to request appropriate license features with the PBS Pro scheduler, at least the ` -l __feature__matlab__MATLAB=1` for EDU variant of Matlab. More information about how to check the license features states and how to request them with PBS Pro, [look here][2].
 
-In case of non-interactive session read the [following information](software/isv_licenses/) on how to modify the qsub command to test for available licenses prior getting the resource allocation.
+In case of non-interactive session read the [following information][2] on how to modify the qsub command to test for available licenses prior getting the resource allocation.
 
 ### Matlab Distributed Computing Engines Start Up Time
 
@@ -204,3 +204,6 @@ Starting Matlab workers is an expensive process that requires certain amount of
 | 8             | 128               | 534              |
 | 4             | 64                | 333              |
 | 2             | 32                | 210              |
+
+[1]: matlab.md
+[2]: ../isv_licenses.md
diff --git a/docs.it4i/software/numerical-languages/octave.md b/docs.it4i/software/numerical-languages/octave.md
index 5246115022ad5d054876899a943b84ac2af046d7..6049537bce2a3672fc1f2d02330f088700dbc712 100644
--- a/docs.it4i/software/numerical-languages/octave.md
+++ b/docs.it4i/software/numerical-languages/octave.md
@@ -2,7 +2,7 @@
 
 ## Introduction
 
-GNU Octave is a high-level interpreted language, primarily intended for numerical computations. It provides capabilities for the numerical solution of linear and nonlinear problems, and for performing other numerical experiments. It also provides extensive graphics capabilities for data visualization and manipulation. Octave is normally used through its interactive command line interface, but it can also be used to write non-interactive programs. The Octave language is quite similar to Matlab so that most programs are easily portable. Read more on [http://www.gnu.org/software/octave/](http://www.gnu.org/software/octave/)
+GNU Octave is a high-level interpreted language, primarily intended for numerical computations. It provides capabilities for the numerical solution of linear and nonlinear problems, and for performing other numerical experiments. It also provides extensive graphics capabilities for data visualization and manipulation. Octave is normally used through its interactive command line interface, but it can also be used to write non-interactive programs. The Octave language is quite similar to Matlab so that most programs are easily portable. Read more [her][a].
 
 For looking for avaible modules, type:
 
@@ -48,7 +48,7 @@ cp output.out $PBS_O_WORKDIR/.
 exit
 ```
 
-This script may be submitted directly to the PBS workload manager via the qsub command.  The inputs are in octcode.m file, outputs in output.out file. See the single node jobscript example in the [Job execution section](../../salomon/job-submission-and-execution/).
+This script may be submitted directly to the PBS workload manager via the qsub command.  The inputs are in octcode.m file, outputs in output.out file. See the single node jobscript example in the [Job execution section][1].
 
 The octave c compiler mkoctfile calls the GNU gcc 4.8.1 for compiling native c code. This is very useful for running native c subroutines in octave environment.
 
@@ -56,15 +56,15 @@ The octave c compiler mkoctfile calls the GNU gcc 4.8.1 for compiling native c c
 $ mkoctfile -v
 ```
 
-Octave may use MPI for interprocess communication This functionality is currently not supported on Anselm cluster. In case you require the octave interface to MPI, contact [Anselm support](https://support.it4i.cz/rt/).
+Octave may use MPI for interprocess communication This functionality is currently not supported on Anselm cluster. In case you require the octave interface to MPI, contact [Anselm support][b].
 
 ## Xeon Phi Support
 
-Octave may take advantage of the Xeon Phi accelerators. This will only work on the  [Intel Xeon Phi](software/intel/intel-xeon-phi-salomon/)  [accelerated nodes](salomon/compute-nodes/).
+Octave may take advantage of the Xeon Phi accelerators. This will only work on the [Intel Xeon Phi][2] [accelerated nodes][3].
 
 ### Automatic Offload Support
 
-Octave can accelerate BLAS type operations (in particular the Matrix Matrix multiplications] on the Xeon Phi accelerator, via [Automatic Offload using the MKL library](software/intel/intel-xeon-phi-salomon/)
+Octave can accelerate BLAS type operations (in particular the Matrix Matrix multiplications] on the Xeon Phi accelerator, via [Automatic Offload using the MKL library][2].
 
 Example
 
@@ -88,7 +88,7 @@ In this example, the calculation was automatically divided among the CPU cores a
 
 ### Native Support
 
-A version of [native](software/intel/intel-xeon-phi-salomon/) Octave is compiled for Xeon Phi accelerators. Some limitations apply for this version:
+A version of [native][2] Octave is compiled for Xeon Phi accelerators. Some limitations apply for this version:
 
 * Only command line support. GUI, graph plotting etc. is not supported.
 * Command history in interactive mode is not supported.
@@ -97,7 +97,7 @@ Octave is linked with parallel Intel MKL, so it best suited for batch processing
 variable.
 
 !!! note
-    Calculations that do not employ parallelism (either by using parallel MKL e.g. via matrix operations,  fork() function, [parallel package](http://octave.sourceforge.net/parallel/) or other mechanism) will actually run slower than on host CPU.
+    Calculations that do not employ parallelism (either by using parallel MKL e.g. via matrix operations,  fork() function, [parallel package][c] or other mechanism) will actually run slower than on host CPU.
 
 To use Octave on a node with Xeon Phi:
 
@@ -106,3 +106,10 @@ $ ssh mic0                                               # login to the MIC card
 $ source /apps/tools/octave/3.8.2-mic/bin/octave-env.sh  # set up environment variables
 $ octave -q /apps/tools/octave/3.8.2-mic/example/test0.m # run an example
 ```
+[1]: ../../salomon/job-submission-and-execution.md
+[2]: ../intel/intel-xeon-phi-salomon.md
+[3]: ../../salomon/compute-nodes.md
+
+[a]: http://www.gnu.org/software/octave/
+[b]: https://support.it4i.cz/rt/
+[c]: http://octave.sourceforge.net/parallel/
diff --git a/docs.it4i/software/numerical-languages/opencoarrays.md b/docs.it4i/software/numerical-languages/opencoarrays.md
index c909838d95e84e5361d03c1554ec4f3870c56b4f..8bcc5e3494e52d8a1f30306257de73ebee8a6ada 100644
--- a/docs.it4i/software/numerical-languages/opencoarrays.md
+++ b/docs.it4i/software/numerical-languages/opencoarrays.md
@@ -11,7 +11,7 @@ The variable syntax of Fortran language is extended with indexes in square brack
 
 By default, the CAF is using Message Passing Interface (MPI) for lower-level communication, so there are some similarities with MPI.
 
-Read more on [http://www.opencoarrays.org/](http://www.opencoarrays.org/)
+Read more [here][a].
 
 ## Coarray Basics
 
@@ -124,4 +124,8 @@ $ mpiexec -np 4 ./synchronization_test.x
 
 **-np 4** is number of images to run. The parameters of **cafrun** and **mpiexec** are the same.
 
-For more information about running CAF program follow [Running OpenMPI - Salomon](../mpi/running_openmpi.md)
+For more information about running CAF program follow [Running OpenMPI - Salomon][1].
+
+[1]: ../mpi/running_openmpi.md
+
+[a]: http://www.opencoarrays.org/
diff --git a/docs.it4i/software/numerical-languages/r.md b/docs.it4i/software/numerical-languages/r.md
index 27b2d550d81509f9e0056426bf3d19c9c2877d62..8351cd0f67d4d8e17cb317f0d18507f8f1ac89e1 100644
--- a/docs.it4i/software/numerical-languages/r.md
+++ b/docs.it4i/software/numerical-languages/r.md
@@ -10,7 +10,7 @@ Another convenience is the ease with which the C code or third party libraries m
 
 Extensive support for parallel computing is available within R.
 
-Read more on [http://www.r-project.org/](http://www.r-project.org/), [http://cran.r-project.org/doc/manuals/r-release/R-lang.html](http://cran.r-project.org/doc/manuals/r-release/R-lang.html)
+Read more on [http://www.r-project.org/][a], [http://cran.r-project.org/doc/manuals/r-release/R-lang.html][b].
 
 ## Modules
 
@@ -66,11 +66,11 @@ cp routput.out $PBS_O_WORKDIR/.
 exit
 ```
 
-This script may be submitted directly to the PBS workload manager via the qsub command.  The inputs are in rscript.R file, outputs in routput.out file. See the single node jobscript example in the [Job execution section - Anselm](anselm/job-submission-and-execution/).
+This script may be submitted directly to the PBS workload manager via the qsub command. The inputs are in rscript.R file, outputs in routput.out file. See the single node jobscript example in the [Job execution section - Anselm][1].
 
 ## Parallel R
 
-Parallel execution of R may be achieved in many ways. One approach is the implied parallelization due to linked libraries or specially enabled functions, as [described above](#interactive-execution). In the following sections, we focus on explicit parallelization, where parallel constructs are directly stated within the R script.
+Parallel execution of R may be achieved in many ways. One approach is the implied parallelization due to linked libraries or specially enabled functions, as [described above][2]. In the following sections, we focus on explicit parallelization, where parallel constructs are directly stated within the R script.
 
 ## Package Parallel
 
@@ -144,9 +144,9 @@ Every evaluation of the integrad function runs in parallel on different process.
 
 package Rmpi provides an interface (wrapper) to MPI APIs.
 
-It also provides interactive R slave environment. On the cluster, Rmpi provides interface to the [OpenMPI](software/mpi/running_openmpi/).
+It also provides interactive R slave environment. On the cluster, Rmpi provides interface to the [OpenMPI][3].
 
-Read more on Rmpi at <http://cran.r-project.org/web/packages/Rmpi/>, reference manual is available at [here](http://cran.r-project.org/web/packages/Rmpi/Rmpi.pdf)
+Read more on Rmpi [here][c], reference manual is available [here][d].
 
 When using package Rmpi, both openmpi and R modules must be loaded
 
@@ -345,7 +345,7 @@ while (TRUE)
 mpi.quit()
 ```
 
-The above is the mpi.apply MPI example for calculating the number π. Only the slave processes carry out the calculation. Note the **mpi.parSapply()**, function call. The package parallel [example](#package-parallel) [above](#package-parallel) may be trivially adapted (for much better performance) to this structure using the mclapply() in place of mpi.parSapply().
+The above is the mpi.apply MPI example for calculating the number π. Only the slave processes carry out the calculation. Note the **mpi.parSapply()**, function call. The package parallel example above may be trivially adapted (for much better performance) to this structure using the mclapply() in place of mpi.parSapply().
 
 Execute the example as:
 
@@ -361,7 +361,7 @@ Currently, the two packages can not be combined for hybrid calculations.
 
 The R parallel jobs are executed via the PBS queue system exactly as any other parallel jobs. User must create an appropriate jobscript and submit via the **qsub**
 
-Example jobscript for [static Rmpi](#static-rmpi) parallel R execution, running 1 process per core:
+Example jobscript for [static Rmpi][4] parallel R execution, running 1 process per core:
 
 ```bash
 #!/bin/bash
@@ -390,7 +390,7 @@ cp routput.out $PBS_O_WORKDIR/.
 exit
 ```
 
-For more information about jobscripts and MPI execution refer to the [Job submission](anselm/job-submission-and-execution/) and general [MPI](software/mpi/mpi/) sections.
+For more information about jobscripts and MPI execution refer to the [Job submission][1] and general [MPI][5] sections.
 
 ## Xeon Phi Offload
 
@@ -400,4 +400,16 @@ By leveraging MKL, R can accelerate certain computations, most notably linear al
 $ export MKL_MIC_ENABLE=1
 ```
 
-[Read more about automatic offload](software/intel/intel-xeon-phi-salomon/)
+Read more about automatic offload [here][6].
+
+[1]: ../../anselm/job-submission-and-execution.md
+[2]: #interactive-execution
+[3]: ../mpi/running_openmpi.md
+[4]: #static-rmpi
+[5]: ../mpi/mpi.md
+[6]: ../intel/intel-xeon-phi-salomon.md
+
+[a]: http://www.r-project.org/
+[b]: http://cran.r-project.org/doc/manuals/r-release/R-lang.html
+[c]: http://cran.r-project.org/web/packages/Rmpi/
+[d]: http://cran.r-project.org/web/packages/Rmpi/Rmpi.pdf