diff --git a/lastwave/DESCR b/lastwave/DESCR
new file mode 100644
index 0000000000000000000000000000000000000000..1835281338954963a9a80dc82ea89d8a3402c785
--- /dev/null
+++ b/lastwave/DESCR
@@ -0,0 +1,4 @@
+LastWave is a signal processing oriented command language.
+It allows to deal with high-level structures such as signals, 
+images, wavelet transforms, extrema representation, short time 
+fourier transform,...
\ No newline at end of file
diff --git a/lastwave/Makefile b/lastwave/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..959a907bb79a6fcd35271ef05c039e660873ae08
--- /dev/null
+++ b/lastwave/Makefile
@@ -0,0 +1,21 @@
+# robotpkg Makefile for:	math/lastwave
+# Created:			Xavier BROQUERE on Thu, 24 Nov 2011
+#
+
+DISTNAME=	LastWave_3_1
+
+CATEGORIES=	math
+MASTER_SITES=	${MASTER_SITE_OPENROBOTS:=lastwave/}
+
+EXTRACT_SUFX=	.unix.zip
+
+MAINTAINER=	openrobots@laas.fr
+HOMEPAGE=	http://www.cmap.polytechnique.fr/~bacry/LastWave/
+COMMENT=	LastWave is a signal processing oriented command language
+
+include ../../mk/sysdep/cmake.mk
+include ../../mk/robotpkg.mk
+
+post-extract:
+	${CP} ${FILESDIR}/CMakeLists.txt ${WRKSRC}
+	${CP} ${FILESDIR}/lastwave.pc.cmake ${WRKSRC}
\ No newline at end of file
diff --git a/lastwave/PLIST b/lastwave/PLIST
new file mode 100644
index 0000000000000000000000000000000000000000..a226db1af7a0e07bcff892285284bb0aa68e8e63
--- /dev/null
+++ b/lastwave/PLIST
@@ -0,0 +1,66 @@
+@comment Thu Nov 24 15:51:21 CET 2011
+include/lastwave/alaw.h
+include/lastwave/arithcode.h
+include/lastwave/atom.h
+include/lastwave/bitio.h
+include/lastwave/coder.h
+include/lastwave/common.h
+include/lastwave/compress2d.h
+include/lastwave/config.h
+include/lastwave/cv.h
+include/lastwave/cv_int.h
+include/lastwave/cv_limits.h
+include/lastwave/double.h
+include/lastwave/dwtrans2d.h
+include/lastwave/event.h
+include/lastwave/extrema1d.h
+include/lastwave/extrema2d.h
+include/lastwave/filter1d.h
+include/lastwave/filter2d.h
+include/lastwave/gobject.h
+include/lastwave/ihisto.h
+include/lastwave/images.h
+include/lastwave/int.h
+include/lastwave/int_fsilist.h
+include/lastwave/int_hash.h
+include/lastwave/int_history.h
+include/lastwave/int_main.h
+include/lastwave/int_parser.h
+include/lastwave/int_procs.h
+include/lastwave/int_streams.h
+include/lastwave/int_toplevel.h
+include/lastwave/int_value.h
+include/lastwave/int_variables.h
+include/lastwave/lastwave.h
+include/lastwave/logMsg.h
+include/lastwave/mainLogMsg.h
+include/lastwave/mp_book.h
+include/lastwave/mrw_predic.h
+include/lastwave/nr_utilities.h
+include/lastwave/owtrans2d.h
+include/lastwave/pcm.h
+include/lastwave/pf_lib.h
+include/lastwave/postscript.h
+include/lastwave/quantize.h
+include/lastwave/sfendian.h
+include/lastwave/signals.h
+include/lastwave/sndfile.h
+include/lastwave/soundlw.h
+include/lastwave/stft.h
+include/lastwave/tabulate.h
+include/lastwave/terminal.h
+include/lastwave/ulaw.h
+include/lastwave/wav.h
+include/lastwave/window_manager.h
+include/lastwave/wt1d.h
+include/lastwave/wt1d_int.h
+include/lastwave/wtmm1d.h
+include/lastwave/wtrans1d.h
+include/lastwave/xx_audio.h
+include/lastwave/xx_graphics.h
+include/lastwave/xx_system.h
+include/lastwave/xx_terminal.h
+lib/liblastwave.so
+lib/liblastwave.so.3
+lib/liblastwave.so.3.1.0
+lib/pkgconfig/lastwave.pc
diff --git a/lastwave/depend.mk b/lastwave/depend.mk
new file mode 100644
index 0000000000000000000000000000000000000000..3300017c05ae9a811069352d6b50be65aeed8292
--- /dev/null
+++ b/lastwave/depend.mk
@@ -0,0 +1,28 @@
+# robotpkg depend.mk for:	math/lastwave
+# Created:			Xavier Broquere on Thu, 24 Nov 2011
+#
+
+DEPEND_DEPTH:=		${DEPEND_DEPTH}+
+LASTWAVE_DEPEND_MK:=	${LASTWAVE_DEPEND_MK}+
+
+ifeq (+,$(DEPEND_DEPTH))
+DEPEND_PKG+=		softMotion-libs
+endif
+
+ifeq (+,$(LASTWAVE_DEPEND_MK)) # ----------------------------------
+
+PREFER.softMotion-libs?=	robotpkg
+
+SYSTEM_SEARCH.softMotion-libs=\
+	include/lastwave/lastwave.h 				\
+	'lib/pkgconfig/lastwave.pc:/Version/s/[^0-9.]//gp'	\
+	'lib/liblastwave.so'
+
+DEPEND_USE+=		lastwave
+
+DEPEND_ABI.lastwave?=lastwave>=3.1
+DEPEND_DIR.lastwave?=../../wip/lastwave
+
+endif # LASTWAVE_DEPEND_MK ----------------------------------------
+
+DEPEND_DEPTH:=		${DEPEND_DEPTH:+=}
diff --git a/lastwave/distinfo b/lastwave/distinfo
new file mode 100644
index 0000000000000000000000000000000000000000..404114d8a344723d9ba6368e686f9b9095459339
--- /dev/null
+++ b/lastwave/distinfo
@@ -0,0 +1,11 @@
+SHA1 (LastWave_3_1.unix.zip) = 0171351159db5c78a117517d76f52ff2c02a9ce8
+RMD160 (LastWave_3_1.unix.zip) = 4a3c41566afd4192e442bdbb1ee0ae8a7546583d
+Size (LastWave_3_1.unix.zip) = 3316290 bytes
+SHA1 (patch-aa) = db0322d2f73f3ed9e3b4022107cbf06bd37e6852
+SHA1 (patch-ab) = 5eaebc183b28a1589de8c0b867fc9902cc33fcea
+SHA1 (patch-ac) = cff780b0389e07076936bf3305a8e38774dd616e
+SHA1 (patch-ad) = 6a9bbc880479c73bda7fd581514d6f8d9113b6a0
+SHA1 (patch-ae) = f55c0d1c48ce69d15e2347d25a98dc71bf8b2c65
+SHA1 (patch-af) = c52f7192ae8e6dcd2a1802edeb64ebd76ce59835
+SHA1 (patch-ag) = 7689174cf10dc37b78e5f662e3cae778359b21a6
+SHA1 (patch-ah) = 33feb11411ffc9db68212ff1eb8d93237a22c6a9
diff --git a/lastwave/files/CMakeLists.txt b/lastwave/files/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..1194ec6b435d5acfae304d35e80d43599d6426c3
--- /dev/null
+++ b/lastwave/files/CMakeLists.txt
@@ -0,0 +1,95 @@
+# cmake file for lapack-3.1
+#
+project(lastwave C)
+cmake_minimum_required(VERSION 2.6)
+
+
+# Set the project version
+set( PROJECT_MAJOR_VERSION 3)
+set( PROJECT_MINOR_VERSION 1)
+set(LASTWAVE_VERSION "${PROJECT_MAJOR_VERSION}.${PROJECT_MINOR_VERSION}")
+
+#include(FindBLAS)
+#link_directories(${BLAS_DIR})
+
+# sources
+file(GLOB sources
+  LastWave/kernel/src/*.c
+  LastWave/package_compress2d/src/*.c
+  LastWave/package_dwtrans2d/src/*.c
+  LastWave/package_extrema1d/src/*.c
+  LastWave/package_image/src/*.c
+  LastWave/package_mp/src/*.c
+  LastWave/package_mrw/src/*.c
+  LastWave/package_owtrans2d/src/*.c
+  LastWave/package_signal/src/*.c
+  LastWave/package_sound/src/*.c
+  LastWave/package_stft/src/*.c
+  LastWave/package_wtmm1d/src/*.c
+  LastWave/package_wtrans1d/src/*.c
+   )
+
+#   LastWave/user/src/*.c
+
+INCLUDE_DIRECTORIES(
+  LastWave/kernel/include
+  LastWave/package_compress2d/include
+  LastWave/package_dwtrans2d/include
+  LastWave/package_extrema1d/include
+  LastWave/package_image/include
+  LastWave/package_mp/include
+  LastWave/package_mrw/include
+  LastWave/package_owtrans2d/include
+  LastWave/package_signal/include
+  LastWave/package_sound/include
+  LastWave/package_stft/include
+  LastWave/package_wtmm1d/include
+  LastWave/package_wtrans1d/include
+  LastWave/user/include
+  LastWave/wxsystem/include 
+)
+
+file(GLOB headers
+  LastWave/kernel/include/*.h
+  LastWave/package_compress2d/include/*.h
+  LastWave/package_dwtrans2d/include/*.h
+  LastWave/package_extrema1d/include/*.h
+  LastWave/package_image/include/*.h
+  LastWave/package_mp/include/*.h
+  LastWave/package_mrw/include/*.h
+  LastWave/package_owtrans2d/include/*.h
+  LastWave/package_signal/include/*.h
+  LastWave/package_sound/include/*.h
+  LastWave/package_stft/include/*.h
+  LastWave/package_wtmm1d/include/*.h
+  LastWave/package_wtrans1d/include/*.h
+  LastWave/wxsystem/include/*.h
+   )
+
+# shared library
+add_library(lastwave SHARED ${sources})
+#target_link_libraries(lapack ${BLAS_LIBRARIES})
+set_target_properties(lastwave
+	PROPERTIES
+	CLEAN_DIRECT_OUTPUT 1
+	VERSION		3.1.0
+	SOVERSION	3
+)
+
+# static library
+#add_library(lapack-static STATIC ${sources})
+#target_link_libraries(lapack-static BLAS_LIBRARIES)
+#set_target_properties(lapack-static
+#	PROPERTIES
+#	CLEAN_DIRECT_OUTPUT 1
+#	OUTPUT_NAME lapack)
+
+# install
+install(TARGETS lastwave
+        LIBRARY DESTINATION lib
+        ARCHIVE DESTINATION lib)
+
+install(FILES ${headers} DESTINATION include/lastwave)
+
+configure_file(${CMAKE_SOURCE_DIR}/lastwave.pc.cmake ${CMAKE_SOURCE_DIR}/lastwave.pc @ONLY)
+install(FILES ${CMAKE_SOURCE_DIR}/lastwave.pc DESTINATION lib/pkgconfig)
diff --git a/lastwave/files/lastwave.pc.cmake b/lastwave/files/lastwave.pc.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..f71f660cee5a7aa3af2a8d3048883d0b7a6f3a86
--- /dev/null
+++ b/lastwave/files/lastwave.pc.cmake
@@ -0,0 +1,10 @@
+prefix=@CMAKE_INSTALL_PREFIX@
+exec_prefix=@CMAKE_INSTALL_PREFIX@
+libdir=@CMAKE_INSTALL_PREFIX@/lib
+includedir=@CMAKE_INSTALL_PREFIX@/include
+ 
+Name: lastwave
+Description: LastWave is a signal processing oriented command language.
+Version: @LASTWAVE_VERSION@
+Libs: -L${libdir} -llastwave
+Cflags: -I${includedir}
diff --git a/lastwave/patches/patch-aa b/lastwave/patches/patch-aa
new file mode 100644
index 0000000000000000000000000000000000000000..ee38d4bab65bd005fc027e423251513e92000713
--- /dev/null
+++ b/lastwave/patches/patch-aa
@@ -0,0 +1,11 @@
+--- LastWave/package_image/src/image_file.c~	2009-02-04 13:14:11.000000000 +0100
++++ LastWave/package_image/src/image_file.c	2011-11-24 13:51:06.655760544 +0100
+@@ -197,7 +197,7 @@
+     for(i = 0; i < ncol*nrow; i++) {
+ #ifdef NUMDOUBLE     
+       fscanf(stream,"%lf ",values+i);
+-#elif      
++#else      
+       fscanf(stream,"%f ",values+i);
+ #endif
+     } 
diff --git a/lastwave/patches/patch-ab b/lastwave/patches/patch-ab
new file mode 100644
index 0000000000000000000000000000000000000000..60fe9b31a77c7dfa705dc5ce1633c72c3d7ecb85
--- /dev/null
+++ b/lastwave/patches/patch-ab
@@ -0,0 +1,11 @@
+--- LastWave/kernel/include/int_parser.h~	2006-12-11 17:41:38.000000000 +0100
++++ LastWave/kernel/include/int_parser.h	2011-11-24 13:51:06.607760542 +0100
+@@ -143,7 +143,7 @@
+ enum Types {  /* Optional types must be even numbers */
+ 
+   MORE = -1,
+-  END = 0,
++  LWEND = 0, /* Daniel S.: change END in LWEND to avoid conflict */
+   
+   tINT,tINT_,
+   tFLOAT,tFLOAT_,
diff --git a/lastwave/patches/patch-ac b/lastwave/patches/patch-ac
new file mode 100644
index 0000000000000000000000000000000000000000..6e3549d4a926692de0bbdde1618c3b54a0d4b4a4
--- /dev/null
+++ b/lastwave/patches/patch-ac
@@ -0,0 +1,11 @@
+--- LastWave/kernel/src/int_parser.c~	2006-12-11 17:41:38.000000000 +0100
++++ LastWave/kernel/src/int_parser.c	2011-11-24 13:51:06.615760543 +0100
+@@ -2841,7 +2841,7 @@
+       
+     /* read the pointer to the next type */
+     type = va_arg(ap,int);
+-    if (type == END) {
++    if (type == LWEND) {
+       flagMoreArgs = NO;
+       break;
+     }
diff --git a/lastwave/patches/patch-ad b/lastwave/patches/patch-ad
new file mode 100644
index 0000000000000000000000000000000000000000..dd2c8e8a931054067ef57a5065f13662e4d3e686
--- /dev/null
+++ b/lastwave/patches/patch-ad
@@ -0,0 +1,47 @@
+--- LastWave/package_signal/src/cv.c~	2006-01-20 12:00:36.000000000 +0100
++++ LastWave/package_signal/src/cv.c	2011-11-24 13:51:06.663760545 +0100
+@@ -12,6 +12,7 @@
+ 
+ #include "lastwave.h"
+ #include "cv_int.h"
++#include <assert.h>
+ 
+ 
+ extern void (*cv_fft_r)  (real    *in, complex *out, int n);
+@@ -228,10 +229,7 @@
+ void
+ cv_set_method (int method)
+ {
+-  assert ((method == CV_UNDEFINED)
+-	  || (method == CV_DI)
+-	  || (method == CV_MP)
+-	  || (method == CV_FT));
++  assert ((method == CV_UNDEFINED) || (method == CV_DI) || (method == CV_MP) || (method == CV_FT));
+ 
+   cv_method = method;
+ }
+@@ -240,11 +238,7 @@
+  * cv_compute --
+  */
+ 
+-void *
+-cv_compute (int  border_effect,
+-	    void *res_data,
+-	    int  *first_exact_ptr,
+-	    int  *last_exact_ptr)
++void * cv_compute (int  border_effect, void *res_data,int  *first_exact_ptr,int  *last_exact_ptr)
+ {
+   void * ret_value = 0;
+   real * old_sig_d_data_r;
+@@ -263,10 +257,7 @@
+   assert (sig_form != CV_UNDEFINED);
+   assert (sig_n >= flt_d_n);
+ 
+-  assert ((border_effect == CV_PERIODIC)
+-	  || (border_effect == CV_MIRROR)
+-	  || (border_effect == CV_PADDING)
+-	  || (border_effect == CV_0_PADDING));
++  assert ((border_effect == CV_PERIODIC)|| (border_effect == CV_MIRROR)|| (border_effect == CV_PADDING)|| (border_effect == CV_0_PADDING));
+   assert (res_data != 0);
+   assert (first_exact_ptr != 0);
+   assert (last_exact_ptr != 0);
diff --git a/lastwave/patches/patch-ae b/lastwave/patches/patch-ae
new file mode 100644
index 0000000000000000000000000000000000000000..b0733fa95d10430602a7052bf4477768506fbb98
--- /dev/null
+++ b/lastwave/patches/patch-ae
@@ -0,0 +1,31 @@
+--- LastWave/package_wtrans1d/include/wtrans1d.h~	2005-03-21 11:39:48.000000000 +0100
++++ LastWave/package_wtrans1d/include/wtrans1d.h	2011-11-24 13:51:06.671760545 +0100
+@@ -34,10 +34,9 @@
+ /**************************************************************/
+ 
+ #ifndef WTRANS_H
+-
+ #define WTRANS_H
+ 
+-
++#include "wt1d.h"
+ /**********************/
+ /* Some constants ... */
+ /**********************/
+@@ -149,7 +148,15 @@
+ /* Display a wtrans */
+ extern void DefineGraphWtrans(void);
+ 
+-#include "wt1d.h"
++/* Computes the continuous wavelet transform using wavelets defined in the physical space */
++extern void CWtd(WTRANS wtrans,LWFLOAT aMin,int nOct,int nVoi,Wavelet *wavelet,
++                  int borderType,int flagMemoryOptimized,int flagCausal,
++		 LWFLOAT expo);
++
++/* The corresponding command */
++extern void C_CWtd(char **argv);
++
++
+ 
+ #endif
+ 
diff --git a/lastwave/patches/patch-af b/lastwave/patches/patch-af
new file mode 100644
index 0000000000000000000000000000000000000000..1b6d5135821f5b58d15d903b10a12f092fbd2087
--- /dev/null
+++ b/lastwave/patches/patch-af
@@ -0,0 +1,71 @@
+--- LastWave/package_wtrans1d/src/cwt1d.c~	2006-10-13 15:47:56.000000000 +0200
++++ LastWave/package_wtrans1d/src/cwt1d.c	2011-11-24 13:51:06.671760545 +0100
+@@ -41,10 +41,12 @@
+ #include "lastwave.h"
+ #include "wtrans1d.h"
+ #include "extrema1d.h"
++#include "xx_terminal.h"
++#include "xx_system.h"
+ 
+ 
+ /* Computes the continuous wavelet transform using wavelets defined in the physical space */
+-void CWtd(WTRANS wtrans,LWFLOAT aMin,int nOct,int nVoi,Wavelet *wavelet,
++void CWtd_mytest(WTRANS wtrans,LWFLOAT aMin,int nOct,int nVoi,Wavelet *wavelet,
+                   int borderType,int flagMemoryOptimized,int flagCausal,
+                   LWFLOAT expo)
+ {
+@@ -64,6 +66,7 @@
+   double (*d_r_fct_ptr)(double,double);
+   double (*d_i_fct_ptr)(double,double);
+ 
++  printf("Enter in CWtd\n");
+   wt1d_get_wavelet_attributes(wavelet,&type,&d_r_fct_ptr,&d_i_fct_ptr,NULL,NULL,
+                               &d_x_min,&d_x_max,NULL,NULL,NULL,NULL);
+ 
+@@ -89,10 +92,10 @@
+   for (o = 1, a = (double) aMin ; o <= nOct ; o++)   
+     for(v=0;v<nVoi;v++)
+       {   
+-        if (v == 0 && o == 1) Printf("Start octave %d",o);
+-        else if (v == 0 && o != 1) Printf("\nStart octave %d",o);
+-        else Printf(".");
+-        Flush();
++        if (v == 0 && o == 1) printf("Start octave %d",o);
++        else if (v == 0 && o != 1) printf("\nStart octave %d",o);
++        else printf(".");
++	// Flush();
+         
+         SizeSignal(wtrans->D[o][v],size,YSIG);
+ 
+@@ -169,11 +172,11 @@
+             if (type == WAVE_CPLX_REAL || type == WAVE_CPLX_CPLX) ClearSignal(wtrans->A[o][v]);
+           }
+       }
+-  Printf("\n");
++  printf("\n");
+   
+   if (flagMemoryOptimized == YES)
+     {
+-      Printf("nb of extrema : %d\n",nb);
++      printf("nb of extrema : %d\n",nb);
+       wtrans->nOct = 0;
+       wtrans->nVoice = 0;
+     }
+@@ -269,7 +272,7 @@
+   wtrans->wName = CopyStr(waveName);
+   
+   time = MyTime();
+-  CWtd(wtrans,aMin,nOct,nVoi,wavelet,border,flagMemoryOptimized,
++  CWtd_mytest(wtrans,aMin,nOct,nVoi,wavelet,border,flagMemoryOptimized,
+                  flagCausal,expo);
+ 
+   SetResultFloat(MyTime()-time);                 
+@@ -277,7 +280,7 @@
+ 
+ void C_Wt1dNoctMax(char **argv)
+ {
+-  LWFLOAT aMin,aMinWavelet,aMaxWavelet;
++  LWFLOAT aMin,aMinWavelet,aMaxWavelet; 
+   int signalSize,nvoice;
+   Wavelet *wavelet;
+   char *waveName;
diff --git a/lastwave/patches/patch-ag b/lastwave/patches/patch-ag
new file mode 100644
index 0000000000000000000000000000000000000000..875f9d63d4c1cb50183f6dad92506702c34cf3be
--- /dev/null
+++ b/lastwave/patches/patch-ag
@@ -0,0 +1,14 @@
+--- LastWave/package_wtrans1d/src/wtrans_alloc.c~	2006-11-03 13:54:36.000000000 +0100
++++ LastWave/package_wtrans1d/src/wtrans_alloc.c	2011-11-24 13:51:06.671760545 +0100
+@@ -53,9 +53,9 @@
+ void PrintWtrans(WTRANS wtrans)
+ {  
+   if (wtrans->name == NULL)
+-    Printf("<&wtrans[%d,%d];%p>\n",wtrans->nOct,wtrans->nVoice,wtrans);
++    printf("<&wtrans[%d,%d];%p>\n",wtrans->nOct,wtrans->nVoice,wtrans);
+   else
+-    Printf("<'%s';&wtrans[%d,%d];%p>\n",wtrans->name,wtrans->nOct,wtrans->nVoice,wtrans);
++    printf("<'%s';&wtrans[%d,%d];%p>\n",wtrans->name,wtrans->nOct,wtrans->nVoice,wtrans);
+ }
+ 
+ char *ToStrWtrans(WTRANS wtrans, char flagShort)
diff --git a/lastwave/patches/patch-ah b/lastwave/patches/patch-ah
new file mode 100644
index 0000000000000000000000000000000000000000..8678e6e6ae80cade54ce1f2e9d9a1f9016aa6bf5
--- /dev/null
+++ b/lastwave/patches/patch-ah
@@ -0,0 +1,13 @@
+--- LastWave/wxsystem/src/wxsystem.cc~	2008-09-16 14:21:08.000000000 +0200
++++ LastWave/wxsystem/src/wxsystem.cc	2011-11-24 13:51:06.675760545 +0100
+@@ -148,8 +148,8 @@
+   
+   // This is the user directory where to put the config files : history and scriptDir
+   // We create it if necessary.
+-  wxString str = SOFTVERSION;
+-  wxString str1 = wxStandardPaths::Get().GetUserDataDir()+"."+str;
++  wxString str = wxT(SOFTVERSION);
++  wxString str1 = wxStandardPaths::Get().GetUserDataDir()+wxT(".")+str;
+ 
+   strcpy(_LWUserDataDir_,WXSTRING2ANSI(str1));
+