diff --git a/src/methods/linear_regression/linear_regression.cpp b/src/methods/linear_regression/linear_regression.cpp
index 47b9ea2d533148c669e2e29a8872b21f0c9f8815..2fa7ec55068e97a9e0e702b45bd6db5d4d42a507 100644
--- a/src/methods/linear_regression/linear_regression.cpp
+++ b/src/methods/linear_regression/linear_regression.cpp
@@ -19,7 +19,7 @@ LinearRegression regressor;
 
 // input: const arma::mat &data, const arma::rowvec &responses, const double lambda, const bool intercept
 // output:
-void initModel(float *matrix, SP_integer matSize, SP_integer matRowNum, float *responses_arr, SP_integer vecSize, SP_integer lambda, SP_integer bool_intercept)
+void initModel(float *matrix, SP_integer matSize, SP_integer matRowNum, float *responses_arr, SP_integer vecSize, double lambda, SP_integer bool_intercept)
 {
 	if(matSize / matRowNum != vecSize)
 	{
@@ -35,7 +35,7 @@ void initModel(float *matrix, SP_integer matSize, SP_integer matRowNum, float *r
 
 // input: const arma::mat &data, const arma::rowvec &responses, const arma::rowvec &weights, const double lambda, const bool intercept
 // output:
-void initModelWithWeights(float *matrix, SP_integer matSize, SP_integer matRowNum, float *responses_arr, SP_integer vecSize, float *weights_arr, SP_integer weightsSize, SP_integer lambda, SP_integer bool_intercept)
+void initModelWithWeights(float *matrix, SP_integer matSize, SP_integer matRowNum, float *responses_arr, SP_integer vecSize, float *weights_arr, SP_integer weightsSize, double lambda, SP_integer bool_intercept)
 {
 	if(matSize / matRowNum != vecSize)
 	{
@@ -50,16 +50,9 @@ void initModelWithWeights(float *matrix, SP_integer matSize, SP_integer matRowNu
 	regressor = LinearRegression(data, responses, weights, lambda, bool_intercept);
 }
 
-// input:
-// output:
-void initModelEmpty(SP_integer)
-{
-	regressor = LinearRegression();
-}
-
 // input: const arma::mat &points, const arma::rowvec &responses
 // output: double L2SquardError
-SP_integer computeError(float *points_mat_arr, SP_integer matSize, SP_integer matRowNum, float *responses_arr, SP_integer vecSize)
+double computeError(float *points_mat_arr, SP_integer matSize, SP_integer matRowNum, float *responses_arr, SP_integer vecSize)
 {
 	if(matSize / matRowNum != vecSize)
 	{
@@ -74,30 +67,6 @@ SP_integer computeError(float *points_mat_arr, SP_integer matSize, SP_integer ma
 	return regressor.ComputeError(data, responses);
 }
 
-// input:
-// output: double
-SP_integer intercept()
-{
-	if(regressor.Intercept()) {return 1;}
-	else {return 0;}
-}
-
-// input:
-// output: double Tikhonov regularization parameter
-SP_integer lambda()
-{
-	return regressor.Lambda();;
-}
-
-// input: double new Tikhonov regularization parameter
-// output:
-void modifyLambda(SP_integer new_lambda)
-{
-	double& lambda_ref = regressor.Lambda();
-	lambda_ref = new_lambda;
-}
-
-
 // input:
 // output: const arma::vec & parameters b vector
 float * parameters(SP_integer *arraySize)
@@ -149,7 +118,7 @@ void predict(float *pointsArr, SP_integer pointsSize, SP_integer pointsRowNum, f
 
 // input: const arma::mat &data, const arma::rowvec &responses, const bool intercept
 // output:
-SP_integer train(float *matrix, SP_integer matSize, SP_integer matRowNum, float *responses_arr, SP_integer vecSize, SP_integer bool_intercept)
+double train(float *matrix, SP_integer matSize, SP_integer matRowNum, float *responses_arr, SP_integer vecSize, SP_integer bool_intercept)
 {
 	if(matSize / matRowNum != vecSize)
 	{
@@ -166,7 +135,7 @@ SP_integer train(float *matrix, SP_integer matSize, SP_integer matRowNum, float
 
 // input: const arma::mat &data, const arma::rowvec &responses, const arma::rowvec &weights, const bool intercept
 // output:
-SP_integer trainWithWeights(float *matrix, SP_integer matSize, SP_integer matRowNum, float *responses_arr, SP_integer vecSize, float *weights_arr, SP_integer weightsSize, SP_integer bool_intercept)
+double trainWithWeights(float *matrix, SP_integer matSize, SP_integer matRowNum, float *responses_arr, SP_integer vecSize, float *weights_arr, SP_integer weightsSize, SP_integer bool_intercept)
 {
 	if(matSize / matRowNum != vecSize)
 	{
diff --git a/src/methods/linear_regression/linear_regression.pl b/src/methods/linear_regression/linear_regression.pl
index 9e25233750c4671b44e4b0a30b74f6aec03a5bca..7bc477e97a3f51382b063d63a4292edc8e1bebcb 100644
--- a/src/methods/linear_regression/linear_regression.pl
+++ b/src/methods/linear_regression/linear_regression.pl
@@ -1,4 +1,12 @@
-:- module(linear_regression, [initModel/7, initModelWithWeights/9, initModelEmpty/1, computeError/6, intercept/1, lambda/1, modifyLambda/1, parameters/2, modifyParameters/2, predict/5, train/7, trainWithWeights/9]).
+
+:- module(linear_regression, [  initModel/7, 
+                                initModelWithWeights/9, 
+                                computeError/6, 
+                                parameters/2, 
+                                modifyParameters/2, 
+                                predict/5, 
+                                train/7, 
+                                trainWithWeights/9]).
 
 :- load_files(library(str_decl),
                 [when(compile_time), if(changed)]).
@@ -9,111 +17,146 @@
 
 %% type definitions for the float array
 :- foreign_type
-       float32          = float_32,
-       float_array      = array(float32).
-
-%% TODO: update Comment docs
+        float32          = float_32,
+        float_array      = array(float32).
 
 %% definitions for the connected function and what there inputs and output arguments are
 
-%% TODO: 
-%% --Input--
-%%
-%% --Output--
-%%
-%% --Description--
-foreign(initModel,  c, initModel(+pointer(float_array), +integer, +integer, +pointer(float_array), +integer, +integer, +integer)).
 
-%% TODO: 
 %% --Input--
+%%              mat     data,
+%%              vec     responses,
+%%              float32 lambda          => 0.0,
+%%              bool    intercept       => (1)true / (0)false => true,
 %%
 %% --Output--
 %%
 %% --Description--
-foreign(initModelWithWeights,  c, initModelWithWeights(+pointer(float_array), +integer, +integer, +pointer(float_array), +integer, +pointer(float_array), +integer, +integer, +integer)).
-
-%% TODO: 
-%% --Input--
+%%              Initializes the linear_regression model and trains it but doesnt include weights.
 %%
-%% --Output--
-%%
-%% --Description--
-foreign(initModelEmpty,  c, initModelEmpty(+integer)).
+foreign(initModel,  c, initModel(       +pointer(float_array), +integer, +integer, 
+                                        +pointer(float_array), +integer, 
+                                        +float32, 
+                                        +integer)).
 
-%% TODO: 
-%% --Input--
-%%
-%% --Output--
-%%
-%% --Description--
-foreign(computeError,  c, computeError(+pointer(float_array), +integer, +integer, +pointer(float_array), +integer, [-integer])).
 
-%% TODO: 
 %% --Input--
+%%              mat     data,
+%%              vec     responses,
+%%              vec     weights,
+%%              float32 lambda          => 0.0,
+%%              bool    intercept       => (1)true / (0)false => true,
 %%
 %% --Output--
 %%
 %% --Description--
-foreign(intercept,  c, intercept([-integer])).
-
-%% TODO: 
-%% --Input--
+%%              Initializes the linear_regression model, trains it and adds weights to it.
 %%
-%% --Output--
-%%
-%% --Description--
-foreign(lambda,  c, lambda([-integer])).
+foreign(initModelWithWeights,  c, initModelWithWeights( +pointer(float_array), +integer, +integer, 
+                                                        +pointer(float_array), +integer, 
+                                                        +pointer(float_array), +integer, 
+                                                        +float32, 
+                                                        +integer)).
+
 
-%% TODO: 
 %% --Input--
+%%              mat     points,
+%%              vec     responses
 %%
 %% --Output--
+%%              float32 error
 %%
 %% --Description--
-foreign(modifyLambda,  c, modifyLambda(+integer)).
+%%              Calculate the L2 squared error on the given predictors and responses using this linear regression model.
+%%
+foreign(computeError,  c, computeError( +pointer(float_array), +integer, +integer, 
+                                        +pointer(float_array), +integer, 
+                                        [-float32])).
+
 
-%% TODO: 
 %% --Input--
 %%
 %% --Output--
+%%              vec     parameters
 %%
 %% --Description--
+%%              Get the parameters (the b vector).
+%%
 foreign(parameters, c, parameters([-pointer(float_array)], -integer)).
 
-%% TODO: 
+
 %% --Input--
+%%              vec     parameters
 %%
 %% --Output--
 %%
 %% --Description--
+%%              Modify the parameters (the b vector).
+%%
 foreign(modifyParameters,  c, modifyParameters(+pointer(float_array), +integer)).
 
-%% TODO: 
+
 %% --Input--
+%%              mat     points
 %%
 %% --Output--
+%%              vec     responses
 %%
 %% --Description--
-foreign(predict,  c, predict(+pointer(float_array), +integer, +integer, -pointer(float_array), -integer)).
+%%              Calculate y_i for each data point in points.
+%%
+foreign(predict,  c, predict(   +pointer(float_array), +integer, +integer, 
+                                -pointer(float_array), -integer)).
+
 
-%% TODO: 
 %% --Input--
+%%              mat     data,
+%%              vec     responses,
+%%              bool    intercept       => (1)true / (0)false => true,
 %%
 %% --Output--
+%%              float32 least quares error after training
 %%
 %% --Description--
-foreign(train,  c, train(+pointer(float_array), +integer, +integer, +pointer(float_array), +integer, +integer, [-integer])).
+%%              Train the linear_regression model on the given data.
+%%              Careful! 
+%%              This will completely ignore and overwrite the existing model. This particular implementation does not have an incremental training algorithm.
+%%
+foreign(train,  c, train(       +pointer(float_array), +integer, +integer, 
+                                +pointer(float_array), +integer, 
+                                +integer, 
+                                [-float32])).
+
 
-%% TODO: 
 %% --Input--
+%%              mat     data,
+%%              vec     responses,
+%%              vec     weights,
+%%              bool    intercept       => (1)true / (0)false => true,
 %%
 %% --Output--
+%%              float32 least quares error after training
 %%
 %% --Description--
-foreign(trainWithWeights,  c, trainWithWeights(+pointer(float_array), +integer, +integer, +pointer(float_array), +integer, +pointer(float_array), +integer, +integer, [-integer])).
+%%              Train the linear_regression model on the given data and weights.
+%%              Careful! 
+%%              This will completely ignore and overwrite the existing model. This particular implementation does not have an incremental training algorithm.
+%%
+foreign(trainWithWeights,  c, trainWithWeights( +pointer(float_array), +integer, +integer, 
+                                                +pointer(float_array), +integer, 
+                                                +pointer(float_array), +integer, 
+                                                +integer, 
+                                                [-float32])).
 
 
 %% Defines what functions should be connected from main.cpp
-foreign_resource(linear_regression, [initModel, initModelWithWeights, initModelEmpty, computeError, intercept, lambda, modifyLambda, parameters, modifyParameters, predict, train, trainWithWeights]).
+foreign_resource(linear_regression, [   initModel, 
+                                        initModelWithWeights, 
+                                        computeError, 
+                                        parameters, 
+                                        modifyParameters, 
+                                        predict, 
+                                        train, 
+                                        trainWithWeights]).
 
 :- load_foreign_resource(linear_regression).
diff --git a/src/methods/logistic_regression/logistic_regression.cpp b/src/methods/logistic_regression/logistic_regression.cpp
index 4f79bf1deeca6a16cda4f317d309e2dc0fd7f6fe..f206bda7e273146d487352d0d70307866f4fa45d 100644
--- a/src/methods/logistic_regression/logistic_regression.cpp
+++ b/src/methods/logistic_regression/logistic_regression.cpp
@@ -183,4 +183,4 @@ void train(float *predictorsMatArr, SP_integer predictorsMatSize, SP_integer pre
 	{
 		cout << "Wrong optimizer input" << endl;
 	}
-}
\ No newline at end of file
+}
diff --git a/src/methods/logistic_regression/logistic_regression.pl b/src/methods/logistic_regression/logistic_regression.pl
index 8a1ab26a4e3b148e11734e716a3ea9c5fea3522d..ea7b70ad67f5c64a5e755548e0d819f2e7dd79e3 100644
--- a/src/methods/logistic_regression/logistic_regression.pl
+++ b/src/methods/logistic_regression/logistic_regression.pl
@@ -1,3 +1,4 @@
+
 :- module(logistic_regression, [        initModelNoOptimizer/6,
                                         initModelWithOptimizer/7,
                                         classifyPoint/4,
@@ -17,74 +18,132 @@
 
 %% type definitions for the float array
 :- foreign_type
-       float32          = float_32,
-       float_array      = array(float32).
+        float32          = float_32,
+        float_array      = array(float32).
 
 %% definitions for the connected function
 
-%% TODO: 
+
 %% --Input--
+%%              mat     data,
+%%              vec     responses,
+%%              float32 lambda          => 0.0
 %%
 %% --Output--
 %%
 %% --Description--
-foreign(initModelNoOptimizer, c, initModelNoOptimizer(+pointer(float_array), +integer, +integer, +pointer(float_array), +integer, +float32)).
+%%              Initialize the logistic_regression model without specifing a optimizer.
+%%
+foreign(initModelNoOptimizer, c, initModelNoOptimizer(  +pointer(float_array), +integer, +integer, 
+                                                        +pointer(float_array), +integer, 
+                                                        +float32)).
+
 
-%% TODO: 
 %% --Input--
+%%              mat     data,
+%%              vec     responses,
+%%              string  optimizer       => "lbfgs", "psgd" => lbfgs,
+%%              float32 lambda          => 0.0
 %%
 %% --Output--
 %%
 %% --Description--
-foreign(initModelWithOptimizer, c, initModelWithOptimizer(+pointer(float_array), +integer, +integer, +pointer(float_array), +integer, +string, +float32)).
+%%              Initialize the logistic_regression model and specify the optimizer.
+%%
+foreign(initModelWithOptimizer, c, initModelWithOptimizer(      +pointer(float_array), +integer, +integer, 
+                                                                +pointer(float_array), +integer, 
+                                                                +string, 
+                                                                +float32)).
+
 
-%% TODO: 
 %% --Input--
+%%              vec     point,
+%%              float32 decisionBoundary        => 0.5
 %%
 %% --Output--
+%%              int     predicLabel
 %%
 %% --Description--
-foreign(classifyPoint, c, classifyPoint(+pointer(float_array), +integer, +float32, [-integer])).
+%%              Classify the given point.
+%%
+foreign(classifyPoint, c, classifyPoint(+pointer(float_array), +integer, 
+                                        +float32, 
+                                        [-integer])).
+
 
-%% TODO: 
 %% --Input--
+%%              mat     data,
+%%              float32 decisionBoundary        => 0.5
 %%
 %% --Output--
+%%              vec     predicLabels
 %%
 %% --Description--
-foreign(classifyLabels, c, classifyLabels(+pointer(float_array), +integer, +integer, -pointer(float_array), -integer, +float32)).
+%%              Classify the given points, returning the predicted labels for each point.
+%%
+foreign(classifyLabels, c, classifyLabels(      +pointer(float_array), +integer, +integer, 
+                                                -pointer(float_array), -integer, 
+                                                +float32)).
+
 
-%% TODO: 
 %% --Input--
+%%              mat     data
 %%
 %% --Output--
+%%              mat     probabilities
 %%
 %% --Description--
-foreign(classifyProbs, c, classifyProbs(+pointer(float_array), +integer, +integer, -pointer(float_array), -integer, -integer)).
+%%              Classify the given points, returning class probabilities for each point.
+%%
+foreign(classifyProbs, c, classifyProbs(+pointer(float_array), +integer, +integer, 
+                                        -pointer(float_array), -integer, -integer)).
+
 
-%% TODO: 
 %% --Input--
+%%              mat     data,
+%%              vec     responses,
+%%              float32 decisionBoundary        => 0.5
 %%
 %% --Output--
+%%              float32 accuracy
 %%
 %% --Description--
-foreign(computeAccuracy, c, computeAccuracy(+pointer(float_array), +integer, +integer, +pointer(float_array), +integer, +float32, [-float32])).
+%%              Compute the accuracy of the model on the given predictors and responses, using the given decision boundary.
+%%
+foreign(computeAccuracy, c, computeAccuracy(    +pointer(float_array), +integer, +integer, 
+                                                +pointer(float_array), +integer, 
+                                                +float32, 
+                                                [-float32])).
+
 
-%% TODO: 
 %% --Input--
+%%              mat     data,
+%%              vec     responses,
 %%
 %% --Output--
+%%              float32 error
 %%
 %% --Description--
-foreign(computeError, c, computeError(+pointer(float_array), +integer, +integer, +pointer(float_array), +integer, [-float32])).
+%%              Compute the error of the model.
+%%
+foreign(computeError, c, computeError(  +pointer(float_array), +integer, +integer, 
+                                        +pointer(float_array), +integer, 
+                                        [-float32])).
+
 
-%% TODO: 
 %% --Input--
+%%              mat     data,
+%%              vec     responses,
+%%              string  optimizer       => "lbfgs", "psgd" => lbfgs
 %%
 %% --Output--
 %%
 %% --Description--
-foreign(train, c, train(+pointer(float_array), +integer, +integer, +pointer(float_array), +integer, +string)).
+%%              Train the logistic_regression model on the given input data.
+%%
+foreign(train, c, train(+pointer(float_array), +integer, +integer, 
+                        +pointer(float_array), +integer, 
+                        +string)).
 
 
 %% Defines the functions that get connected from main.cpp