diff --git a/bordeaux/learning/multiclass_pa/jni/jni_multiclass_pa.cpp b/bordeaux/learning/multiclass_pa/jni/jni_multiclass_pa.cpp
index 65575de..3825586 100644
--- a/bordeaux/learning/multiclass_pa/jni/jni_multiclass_pa.cpp
+++ b/bordeaux/learning/multiclass_pa/jni/jni_multiclass_pa.cpp
@@ -33,8 +33,8 @@
   }
 }
 
-jlong Java_android_bordeaux_learning_MulticlassPA_initNativeClassifier(JNIEnv* env,
-                                                       jobject thiz,
+jlong Java_android_bordeaux_learning_MulticlassPA_initNativeClassifier(JNIEnv* /* env */,
+                                                       jobject /* thiz */,
                                                        jint num_classes,
                                                        jint num_dims,
                                                        jfloat aggressiveness) {
@@ -45,8 +45,8 @@
 }
 
 
-jboolean Java_android_bordeaux_learning_MulticlassPA_deleteNativeClassifier(JNIEnv* env,
-                                                             jobject thiz,
+jboolean Java_android_bordeaux_learning_MulticlassPA_deleteNativeClassifier(JNIEnv* /* env */,
+                                                             jobject /* thiz */,
                                                              jlong paPtr) {
   MulticlassPA* classifier = (MulticlassPA*) paPtr;
   delete classifier;
@@ -54,7 +54,7 @@
 }
 
 jboolean Java_android_bordeaux_learning_MulticlassPA_nativeSparseTrainOneExample(JNIEnv* env,
-                                                                  jobject thiz,
+                                                                  jobject /* thiz */,
                                                                   jintArray index_array,
                                                                   jfloatArray value_array,
                                                                   jint target,
@@ -87,7 +87,7 @@
 
 
 jint Java_android_bordeaux_learning_MulticlassPA_nativeSparseGetClass(JNIEnv* env,
-                                                       jobject thiz,
+                                                       jobject /* thiz */,
                                                        jintArray index_array,
                                                        jfloatArray value_array,
                                                        jlong paPtr) {
diff --git a/bordeaux/learning/multiclass_pa/jni/jni_multiclass_pa.h b/bordeaux/learning/multiclass_pa/jni/jni_multiclass_pa.h
index 81fca8a..dd0f43d 100644
--- a/bordeaux/learning/multiclass_pa/jni/jni_multiclass_pa.h
+++ b/bordeaux/learning/multiclass_pa/jni/jni_multiclass_pa.h
@@ -15,7 +15,7 @@
  */
 
 #ifndef LEARNINGFW_JNI_MULTICLASS_PA_H
-#define LEAENINGFW_JNI_MULTICLASS_PA_H
+#define LEARNINGFW_JNI_MULTICLASS_PA_H
 
 #include <jni.h>
 
@@ -56,4 +56,4 @@
 }
 #endif
 
-#endif /* ANDROID_LERNINGFW_JNI_MULTICLASS_PA_H */
+#endif /* ANDROID_LEARNINGFW_JNI_MULTICLASS_PA_H */
diff --git a/bordeaux/learning/stochastic_linear_ranker/jni/jni_stochastic_linear_ranker.cpp b/bordeaux/learning/stochastic_linear_ranker/jni/jni_stochastic_linear_ranker.cpp
index f54b33e..fd45eda 100644
--- a/bordeaux/learning/stochastic_linear_ranker/jni/jni_stochastic_linear_ranker.cpp
+++ b/bordeaux/learning/stochastic_linear_ranker/jni/jni_stochastic_linear_ranker.cpp
@@ -49,7 +49,7 @@
 }
 
 void DecomposeSparseWeightVector(JNIEnv* env, jobjectArray *keys, jfloatArray *values,
-    const int length, SparseWeightVector<string> *sample) {
+    SparseWeightVector<string> *sample) {
 
   SparseWeightVector<string>::Wmap w_ = sample->GetMap();
   int i=0;
@@ -68,7 +68,7 @@
 
 jboolean Java_android_bordeaux_learning_StochasticLinearRanker_nativeSetWeightClassifier(
     JNIEnv* env,
-    jobject thiz,
+    jobject /* thiz */,
     jobjectArray key_array_model,
     jfloatArray value_array_model,
     jfloat normalizer_model,
@@ -94,7 +94,7 @@
 
 jboolean Java_android_bordeaux_learning_StochasticLinearRanker_nativeSetParameterClassifier(
     JNIEnv* env,
-    jobject thiz,
+    jobject /* thiz */,
     jstring key,
     jstring value,
     jlong paPtr) {
@@ -227,8 +227,8 @@
 }
 
 jint Java_android_bordeaux_learning_StochasticLinearRanker_nativeGetLengthClassifier(
-  JNIEnv* env,
-  jobject thiz,
+  JNIEnv* /* env */,
+  jobject /* thiz */,
   jlong paPtr) {
 
   StochasticLinearRanker<string>* classifier = (StochasticLinearRanker<string>*) paPtr;
@@ -248,7 +248,7 @@
 
 void Java_android_bordeaux_learning_StochasticLinearRanker_nativeGetParameterClassifier(
     JNIEnv* env,
-    jobject thiz,
+    jobject /* thiz */,
     jobjectArray key_array_param,
     jobjectArray value_array_param,
     jlong paPtr){
@@ -367,7 +367,7 @@
 
 void Java_android_bordeaux_learning_StochasticLinearRanker_nativeGetWeightClassifier(
   JNIEnv* env,
-  jobject thiz,
+  jobject /* thiz */,
   jobjectArray key_array_model,
   jfloatArray value_array_model,
   jfloat normalizer,
@@ -380,18 +380,20 @@
   int array_len = w_map.size();
 
   normalizer = M_weights.GetNormalizer();
-  DecomposeSparseWeightVector(env, &key_array_model, &value_array_model, array_len, &M_weights);
+  DecomposeSparseWeightVector(env, &key_array_model, &value_array_model, &M_weights);
 }
 
-jlong Java_android_bordeaux_learning_StochasticLinearRanker_initNativeClassifier(JNIEnv* env,
-                             jobject thiz) {
+jlong Java_android_bordeaux_learning_StochasticLinearRanker_initNativeClassifier(
+  JNIEnv* /* env */,
+  jobject /* thiz */) {
   StochasticLinearRanker<string>* classifier = new StochasticLinearRanker<string>();
   return ((jlong) classifier);
 }
 
-jboolean Java_android_bordeaux_learning_StochasticLinearRanker_deleteNativeClassifier(JNIEnv* env,
-                               jobject thiz,
-                               jlong paPtr) {
+jboolean Java_android_bordeaux_learning_StochasticLinearRanker_deleteNativeClassifier(
+  JNIEnv* /* env */,
+  jobject /* thiz */,
+  jlong paPtr) {
   StochasticLinearRanker<string>* classifier = (StochasticLinearRanker<string>*) paPtr;
   delete classifier;
   return JNI_TRUE;
@@ -399,7 +401,7 @@
 
 jboolean Java_android_bordeaux_learning_StochasticLinearRanker_nativeUpdateClassifier(
   JNIEnv* env,
-  jobject thiz,
+  jobject /* thiz */,
   jobjectArray key_array_positive,
   jfloatArray value_array_positive,
   jobjectArray key_array_negative,
@@ -438,7 +440,7 @@
 
 jfloat Java_android_bordeaux_learning_StochasticLinearRanker_nativeScoreSample(
   JNIEnv* env,
-  jobject thiz,
+  jobject /* thiz */,
   jobjectArray key_array,
   jfloatArray value_array,
   jlong paPtr) {
diff --git a/bordeaux/learning/stochastic_linear_ranker/jni/jni_stochastic_linear_ranker.h b/bordeaux/learning/stochastic_linear_ranker/jni/jni_stochastic_linear_ranker.h
index 09a7047..fd187b0 100644
--- a/bordeaux/learning/stochastic_linear_ranker/jni/jni_stochastic_linear_ranker.h
+++ b/bordeaux/learning/stochastic_linear_ranker/jni/jni_stochastic_linear_ranker.h
@@ -15,7 +15,7 @@
  */
 
 #ifndef LEARNING_JNI_STOCHASTIC_LINEAR_RANKER_H
-#define LEAENING_JNI_STOCHASTIC_LINEAR_RANKER_H
+#define LEARNING_JNI_STOCHASTIC_LINEAR_RANKER_H
 
 #include <jni.h>
 
@@ -179,4 +179,4 @@
 }
 #endif
 
-#endif /* ANDROID_LERNING_JNI_STOCHASTIC_LINEAR_RANKER_H */
+#endif /* ANDROID_LEARNING_JNI_STOCHASTIC_LINEAR_RANKER_H */
