diff --git a/GridDxFormat/grid_reader.c b/GridDxFormat/grid_reader.c
index ef11ba833c05ea713b15d8dc2ff9d9fdf5f6b9b8..551b4734a5c82dcd83d04bf6096fd3022e3e718e 100644
--- a/GridDxFormat/grid_reader.c
+++ b/GridDxFormat/grid_reader.c
@@ -610,6 +610,14 @@ void sub_grids(void* dest, void* s1, void* s2)
     for(size_t idx = 0; idx < out->size; idx++)
         out->data[idx] = src1->data[idx]-src2->data[idx];
 }
+
+void multiply_constant(void* dest, double a)
+{
+    grid* out = (grid*)dest;
+    for(size_t idx = 0; idx < out->size; idx++)
+        out->data[idx] *= a;
+}
+
 void pad_grid(void** g, int nx, int ny, int nz)
 {
     grid* src = (grid*)(*g);
diff --git a/Makefile b/Makefile
index 14519783b60aa5caa0c82a0ae05863774f5a1ebe..782c700996dbef860c1bd2252a5d8c0a5c838466 100644
--- a/Makefile
+++ b/Makefile
@@ -8,25 +8,25 @@ endif
 CLIB=-lfftw3
 OBJ=main.o GridDxFormat/grid_reader.o Kernel/debye_huckel_kernel.o Kernel/lenard_jones_repulsion_kernel.o Kernel/lenard_jones_trunc_kernel.o \
 LinkList/link_list.o fftw/fftw.o Kernel/lenard_jones_kernel.o Kernel/tabulated_pot_kernel.o Kernel/onc_elec_kernel.o Kernel/gaussian_kernel.o \
-Kernel/lenard_jones_kernel1.o
+Kernel/lenard_jones_kernel1.o 
 
 ifeq ($(dbg),1)
 	EXE=gen_pot-dbg
 else
 	EXE=gen_pot
 endif
-EXE_SUM=sum_grid slice_grid sub_grid
+EXE_SUM=sum_grid slice_grid sub_grid mult_grid
 
 all: ${EXE} ${EXE_SUM}
 
 ${EXE}:${OBJ}
 	${CC} ${CFLAGS} ${INC} ${OBJ} -o ${EXE} ${CLIB}
 
-${EXE_SUM}: grid_tools/sum.o GridDxFormat/grid_reader.o grid_tools/slice.o grid_tools/sub.o
+${EXE_SUM}: grid_tools/sum.o GridDxFormat/grid_reader.o grid_tools/slice.o grid_tools/sub.o grid_tools/multiply.o
 	${CC} ${CFLAGS} ${INC} grid_tools/sum.o GridDxFormat/grid_reader.o -o sum_grid
 	${CC} ${CFLAGS} ${INC} grid_tools/slice.o GridDxFormat/grid_reader.o -o slice_grid
 	${CC} ${CFLAGS} ${INC} grid_tools/sub.o GridDxFormat/grid_reader.o -o sub_grid
-
+	${CC} ${CFLAGS} ${INC} grid_tools/multiply.o GridDxFormat/grid_reader.o -o mult_grid
 main.o: main.c
 	${CC} ${CFLAGS} ${INC} -c main.c -o main.o
 
@@ -36,6 +36,9 @@ grid_tools/sub.o: grid_tools/sub.c
 grid_tools/sum.o: grid_tools/sum.c
 	${CC} ${CFLAGS} ${INC} -c grid_tools/sum.c -o grid_tools/sum.o
 
+grid_tools/multiply.o: grid_tools/multiply.c
+	${CC} ${CFLAGS} ${INC} -c grid_tools/multiply.c -o grid_tools/multiply.o
+
 grid_tools/slice.o: grid_tools/slice.c
 	${CC} ${CFLAGS} ${INC} -c grid_tools/slice.c -o grid_tools/slice.o
 
diff --git a/grid_tools/multiply.c b/grid_tools/multiply.c
new file mode 100644
index 0000000000000000000000000000000000000000..8655d4b69121fce9ae60139935cc464365c9b563
--- /dev/null
+++ b/grid_tools/multiply.c
@@ -0,0 +1,17 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include "grid_reader.h"
+
+int main(int argc, char** argv)
+{
+    double a = (double)atof(argv[3]);
+    void* grid;
+    grid = gridformat_reader(argv[1]);
+    multiply_constant(grid, a);
+
+    gridformat_writer(argv[2], grid); 
+    grid_destroy(grid);
+    return 0;
+}
diff --git a/inc/grid_reader.h b/inc/grid_reader.h
index b3f5f694d03b3af694d2b3f887258f8a000054b9..3817a669659f34d7a59b26b84f4162af3ae8139d 100644
--- a/inc/grid_reader.h
+++ b/inc/grid_reader.h
@@ -22,4 +22,5 @@ void sub_grids(void* dest, void* s1, void* s2);
 void pad_grid(void** g, int nx, int ny, int nz);
 void slice_grid(void** g, int nx, int ny, int nz);
 void* create_new_grid(size_t nx, size_t ny, size_t nz, double* origin, double** basis);
+void multiply_constant(void* dest, double a);
 #endif