diff --git a/Makefile b/Makefile
index b46b6ee..ceb7fff 100644
--- a/Makefile
+++ b/Makefile
@@ -4,6 +4,7 @@ PREFIX=/usr
 LIB=neural++
 CC=g++
 CFLAGS=-Wall -pedantic -pedantic-errors -ansi
+include Makefile.am
 
 all:
 	${CC} -I${INCLUDEDIR} ${CFLAGS} -fPIC -g -c ${SRCDIR}/neuralnet.cpp
@@ -11,9 +12,14 @@ all:
 	${CC} -I${INCLUDEDIR} ${CFLAGS} -fPIC -g -c ${SRCDIR}/neuron.cpp
 	${CC} -I${INCLUDEDIR} ${CFLAGS} -fPIC -g -c ${SRCDIR}/synapsis.cpp
 	${CC} -I${INCLUDEDIR} ${CFLAGS} -fPIC -g -c ${SRCDIR}/Markup.cpp
-	${CC} -shared -Wl,-soname,lib$(LIB).so.0 -o lib${LIB}.so.0.0.0 neuralnet.o layer.o neuron.o synapsis.o Markup.o
+ifeq ($(OSNAME),Darwin)
+	${CC} ${LDLIBS} -shared -Wl,-install_name,lib$(LIB).so.0 -o lib${LIB}.so.0.0.0 neuralnet.o layer.o neuron.o synapsis.o Markup.o
+else
+	${CC} ${LDLIBS} -shared -Wl,-soname,lib$(LIB).so.0 -o lib${LIB}.so.0.0.0 neuralnet.o layer.o neuron.o synapsis.o Markup.o
+endif
 	ar rcs lib${LIB}.a neuralnet.o layer.o neuron.o synapsis.o Markup.o
 
+.PHONY: install
 install:
 	mkdir -p ${PREFIX}/lib
 	mkdir -p ${PREFIX}/${INCLUDEDIR}
@@ -33,22 +39,14 @@ install:
 	ln -sf ${PREFIX}/lib/lib${LIB}.so.0.0.0 ${PREFIX}/lib/lib${LIB}.so.0
 
 uninstall:
-	rm ${PREFIX}/lib/lib${LIB}.a
-	rm ${PREFIX}/${INCLUDEDIR}/${LIB}.hpp
-	rm ${PREFIX}/${INCLUDEDIR}/${LIB}_exception.hpp
-	rm ${PREFIX}/lib/lib${LIB}.so.0.0.0
-	rm ${PREFIX}/lib/lib${LIB}.so.0
-	rm ${PREFIX}/share/${LIB}/README
-	rm ${PREFIX}/share/${LIB}/INSTALL
-	rm ${PREFIX}/share/${LIB}/BUGS
-	rm ${PREFIX}/share/${LIB}/VERSION
-	rm ${PREFIX}/share/${LIB}/ChangeLog
-	rm -r ${PREFIX}/share/${LIB}/doc
-	rm -r ${PREFIX}/share/${LIB}/examples
-	rmdir ${PREFIX}/share/${LIB}
+	rm -f ${PREFIX}/${INCLUDEDIR}/${LIB}.hpp
+	rm -f ${PREFIX}/lib/lib${LIB}.so.0.0.0
+	rm -f ${PREFIX}/lib/lib${LIB}.so.0
+	rm -rf ${PREFIX}/share/${LIB}
 
+.PHONY: clean
 clean:
-	rm *.o
-	rm lib${LIB}.so.0.0.0
-	rm lib${LIB}.a
+	rm -f *.o
+	rm -f lib${LIB}.so.0.0.0
+	rm -f lib${LIB}.a
 
diff --git a/Makefile.am b/Makefile.am
new file mode 100644
index 0000000..f2597fb
--- /dev/null
+++ b/Makefile.am
@@ -0,0 +1,7 @@
+OSNAME := $(shell uname)
+LDLIBS=
+
+ifeq ($(OSNAME),Darwin)
+    LDLIBS += -liconv -lgcc_eh
+endif
+
diff --git a/README b/README
index cf39d4d..49e545f 100644
--- a/README
+++ b/README
@@ -16,6 +16,9 @@ Released under GNU GPL licence v.3, copyright 2008-2009
 > To link programs with it:
 	g++ <options and files> -lneural++
 
+- Note: because of iconv link bug on OSX, on this system you have to link like that:
+      	g++ <options and files> -liconv -lgcc_eh -lneural++
+
 > HOWTO:
 	# Take a look to the example in "examples" directory in the source package, in
 	  $PREFIX/share/neural++ or at http://blacklight.gotdns.org/prog/neuralpp/examples .
diff --git a/examples/Makefile b/examples/Makefile
index 75e14a6..8a63303 100644
--- a/examples/Makefile
+++ b/examples/Makefile
@@ -1,11 +1,14 @@
+include ../Makefile.am
+LDLIBS+=-lneural++
+
 all:
-	g++ -Wall -o learnAdd learnAdd.cpp -lneural++
-	g++ -Wall -o doAdd doAdd.cpp -lneural++
-	g++ -Wall -o networkForSumsAndSubtractions networkForSumsAndSubtractions.cpp -lneural++
-	g++ -Wall -o adderFromString adderFromString.cpp -lneural++
+	g++ -Wall -o learnAdd learnAdd.cpp ${LDLIBS}
+	g++ -Wall -o doAdd doAdd.cpp ${LDLIBS}
+	g++ -Wall -o networkForSumsAndSubtractions networkForSumsAndSubtractions.cpp ${LDLIBS}
+	g++ -Wall -o adderFromString adderFromString.cpp ${LDLIBS}
 
 clean:
-	rm learnAdd
-	rm doAdd
-	rm networkForSumsAndSubtractions
-	rm adderFromString
+	rm -f learnAdd
+	rm -f doAdd
+	rm -f networkForSumsAndSubtractions
+	rm -f adderFromString