diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 9e86a4cc1594fc0d44274018e7ba09ac533e093e..9817c0f235ffa25c76bf4d744b4d22511c4f571e 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -1,4 +1,5 @@
 ADD_SUBDIRECTORY(mtn)
+ADD_SUBDIRECTORY(bin)
 # locate the necessary dependencies
 # add the necessary include directories
 INCLUDE_DIRECTORIES(. ./mtn)
@@ -9,6 +10,6 @@ SET(sources bioloid_motion_pages.cpp)
 SET(headers bioloid_motion_pages.h)
 # create the executable file
 ADD_EXECUTABLE(bioloid_motion_pages ${sources})
-TARGET_LINK_LIBRARIES(bioloid_motion_pages mtn_parser)
+TARGET_LINK_LIBRARIES(bioloid_motion_pages mtn_parser bin_parser)
 # link necessary libraries
-ADD_DEPENDENCIES(bioloid_motion_pages mtn_parser) 
+ADD_DEPENDENCIES(bioloid_motion_pages mtn_parser bin_parser) 
diff --git a/src/bin/CMakeLists.txt b/src/bin/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..6cee083dcf84abf6385f5d7b6d45092d842412e7
--- /dev/null
+++ b/src/bin/CMakeLists.txt
@@ -0,0 +1,7 @@
+SET(bin_SRCS bin_file_parser.cpp ../mtn_file.cpp ../mtn_page.cpp ../mtn_step.cpp)
+
+include_directories(.)
+include_directories(../)
+
+add_library(bin_parser SHARED ${bin_SRCS})
+
diff --git a/src/bin/bin_file_parser.cpp b/src/bin/bin_file_parser.cpp
index 015cedb387ea0e36bd88947b8053f7f3f9b84be1..392de6deb4d91ee70de19d11d36c6dc66563baaa 100644
--- a/src/bin/bin_file_parser.cpp
+++ b/src/bin/bin_file_parser.cpp
@@ -1,6 +1,8 @@
 #include "bin_file_parser.h"
-#include <cctype>
 #include <fstream>
+#include <string.h>
+#include <iostream>
+#include <stdlib.h>
 
 CBinFileParser::CBinFileParser()
 {
@@ -10,9 +12,10 @@ CBinFileParser::CBinFileParser()
 void CBinFileParser::parse(const char *filename)
 {
   std::vector<unsigned short int> angles;
+  std::string motion_type="motion",name;
+  std::vector<unsigned int> compliance;
   std::ifstream in_file(filename);
-  std::vector<int> compliance;
-  int length=0,i=0,j=0;
+  int length=0,i=0,j=0,k=0;
   CMtnPage *page;
   CMtnStep *step;
 
@@ -32,13 +35,14 @@ void CBinFileParser::parse(const char *filename)
   in_file.read((char *)this->pages,length);
   in_file.close();
   // initialize the CMtnFile class
-  this->motions.set_type("motion");
+  this->motions.set_type(motion_type);
   this->motions.set_version(1.0);
   this->motions.set_num_servos(PAGE_MAX_NUM_SERVOS);
   for(i=0;i<MAX_NUM_PAGES;i++)
   {
     page=new CMtnPage(PAGE_MAX_NUM_SERVOS);
-    page->set_name(this->pages[i].header.name);
+    name=std::string((char *)this->pages[i].header.name);
+    page->set_name(name);
     compliance.resize(PAGE_MAX_NUM_SERVOS);
     for(j=0;j<PAGE_MAX_NUM_SERVOS;j++)
       compliance[j]=this->pages[i].header.slope[j];
@@ -48,7 +52,7 @@ void CBinFileParser::parse(const char *filename)
     page->set_repetitions(this->pages[i].header.repeat);
     page->set_speed_rate(this->pages[i].header.speed);
     page->set_inertial(this->pages[i].header.accel);
-    for(j=0;j<this->pages[i].header.num_steps;j++)
+    for(j=0;j<this->pages[i].header.stepnum;j++)
     {
       step=new CMtnStep(PAGE_MAX_NUM_SERVOS);
       step->set_pause_time(this->pages[i].steps[j].pause);
@@ -59,13 +63,13 @@ void CBinFileParser::parse(const char *filename)
       step->set_angles(angles);
       page->add_step(step);
     }
-    this->motions->add_page(page);
+    this->motions.add_page(page);
   }
 }
 
 CMtnFile *CBinFileParser::get_motions(void)
 {
-  return this->motions;
+  return &(this->motions);
 }
 
 CBinFileParser::~CBinFileParser()
diff --git a/src/mtn/CMakeLists.txt b/src/mtn/CMakeLists.txt
index 2c36ec55b20bcd0dc9ba1eea2e3c04e3a5758774..c79dab95ea8faa6539b0c29028b1b60e66cd06f1 100644
--- a/src/mtn/CMakeLists.txt
+++ b/src/mtn/CMakeLists.txt
@@ -25,9 +25,10 @@ IF(FLEX_FOUND)
     )
 ENDIF()
 
-SET(mtn_SRCS mtn_file_parser.cpp mtn_file.cpp mtn_page.cpp mtn_step.cpp)
+SET(mtn_SRCS mtn_file_parser.cpp ../mtn_file.cpp ../mtn_page.cpp ../mtn_step.cpp)
 
-include_directories(${CMAKE_CURRENT_SOURCE_DIR})
+include_directories(.)
+include_directories(..)
 include_directories(${CMAKE_CURRENT_BINARY_DIR})
 add_library(mtn_parser SHARED ${BisonOutput} ${FlexOutput} ${mtn_SRCS})
 
diff --git a/src/mtn/mtn_file.cpp b/src/mtn_file.cpp
similarity index 100%
rename from src/mtn/mtn_file.cpp
rename to src/mtn_file.cpp
diff --git a/src/mtn/mtn_file.h b/src/mtn_file.h
similarity index 100%
rename from src/mtn/mtn_file.h
rename to src/mtn_file.h
diff --git a/src/mtn/mtn_page.cpp b/src/mtn_page.cpp
similarity index 100%
rename from src/mtn/mtn_page.cpp
rename to src/mtn_page.cpp
diff --git a/src/mtn/mtn_page.h b/src/mtn_page.h
similarity index 100%
rename from src/mtn/mtn_page.h
rename to src/mtn_page.h
diff --git a/src/mtn/mtn_step.cpp b/src/mtn_step.cpp
similarity index 100%
rename from src/mtn/mtn_step.cpp
rename to src/mtn_step.cpp
diff --git a/src/mtn/mtn_step.h b/src/mtn_step.h
similarity index 100%
rename from src/mtn/mtn_step.h
rename to src/mtn_step.h