diff --git a/src/helper_files/helper.cpp b/src/helper_files/helper.cpp
index b421ff73d9061fa4bf2afad760e48f9f25a044d0..59681cab32ca766bcf150426367350fddc7b2ba0 100644
--- a/src/helper_files/helper.cpp
+++ b/src/helper_files/helper.cpp
@@ -1,4 +1,4 @@
-
+#include <sicstus/sicstus.h>
 #include "helper.hpp"
 
 // adding some testing to the functions
@@ -20,6 +20,7 @@ float *convertToArray(colvec vec)
 	}
 	return arr;
 }
+
 float *convertToArray(rowvec vec)
 {
 	colvec newVec = conv_to<colvec>::from(vec);
@@ -94,3 +95,41 @@ mat convertArrayToMat(float *arr, int vecSize, int rowCount)
 	}
 	return matrix;
 }
+
+void returnMatrixInformation(mat matrix, float **mat, SP_integer *matColNum, SP_integer *matRowNum)
+{    
+    // return the Matrix dimensions
+    *matColNum = matrix.n_cols;
+    *matRowNum = matrix.n_rows;
+    
+    // return the Matrix as one long Array
+    *mat = convertToArray(matrix);
+}
+
+void returnMatrixInformation(Mat< size_t > matrix, float **mat, SP_integer *matColNum, SP_integer *matRowNum)
+{    
+    // return the Matrix dimensions
+    *matColNum = matrix.n_cols;
+    *matRowNum = matrix.n_rows;
+    
+    // return the Matrix as one long Array
+    *mat = convertToArray(matrix);
+}
+
+void returnVectorInformation(vec vector, float **vecArr, SP_integer *vecArrSize)
+{    
+    // return the Matrix dimensions
+    *vecArrSize = vector.size();
+    
+    // return the Matrix as one long Array
+    *vecArr = convertToArray(vector);
+}
+
+void returnVectorInformation(Row< size_t > vector, float **vecArr, SP_integer *vecArrSize)
+{    
+    // return the Matrix dimensions
+    *vecArrSize = vector.size();
+    
+    // return the Matrix as one long Array
+    *vecArr = convertToArray(vector);
+}
\ No newline at end of file
diff --git a/src/helper_files/helper.hpp b/src/helper_files/helper.hpp
index 0a7d8f50e344220d593c84a2e4534cabb1d2c525..234cbade9c08af1ec5d96718e69b87be8dec4133 100644
--- a/src/helper_files/helper.hpp
+++ b/src/helper_files/helper.hpp
@@ -28,4 +28,12 @@ Row<size_t> convertArrayToVec(float *arr, int vecSize);
 
 mat convertArrayToMat(float *arr, int vecSize, int rowCount);
 
+void returnMatrixInformation(mat matrix, float **mat, SP_integer *matColNum, SP_integer *matRowNum);
+
+void returnMatrixInformation(Mat< size_t > matrix, float **mat, SP_integer *matColNum, SP_integer *matRowNum);
+
+void returnVectorInformation(vec vector, float **vecArr, SP_integer *vecArrSize);
+
+void returnVectorInformation(Row< size_t > vector, float **vecArr, SP_integer *vecArrSize);
+
 #endif
diff --git a/src/methods/perceptron/perceptron.cpp b/src/methods/perceptron/perceptron.cpp
index 789cf0a07725c63164a06db460a346eb8ef55875..2c8630c8e45bdfa7916aa1f5f6d8feee880568b9 100644
--- a/src/methods/perceptron/perceptron.cpp
+++ b/src/methods/perceptron/perceptron.cpp
@@ -116,10 +116,6 @@ void weights(float **weightsMatArr, SP_integer *weightsMatColNum, SP_integer *we
     // create the ReturnMat
     mat weightsReturnMat = perceptronGlobal.Weights();
     
-    // return the Matrix dimensions
-    *weightsMatColNum = weightsReturnMat.n_cols;
-    *weightsMatRowNum = weightsReturnMat.n_rows;
-    
-    // return the Matrix as one long Array
-    *weightsMatArr = convertToArray(weightsReturnMat);
+    // return the Mat
+    returnMatrixInformation(weightsReturnMat, weightsMatArr, weightsMatColNum, weightsMatRowNum);
 }