diff -Naur --exclude=.svn tango_726.org/lib/cpp/server/tango_config.h tango_726/lib/cpp/server/tango_config.h
--- tango_726.org/lib/cpp/server/tango_config.h	2011-03-31 11:01:40.000000000 +0200
+++ tango_726/lib/cpp/server/tango_config.h	2011-04-18 13:15:07.000000000 +0200
@@ -356,6 +356,20 @@
 #define TANGO_HAS_CORE_LOGGER
 
 //
+// Define a macro for unused parameter warning
+//
+
+#ifdef _TG_WINDOWS_
+#define TANGO_UNUSED(var) var
+#else
+	#ifdef __GNUC__
+		#define TANGO_UNUSED(var) var __attribute__ ((unused))
+	#else
+		#define TANGO_UNUSED(var) var
+	#endif
+#endif
+
+//
 // Is it a 32 or 64 bits computer
 //
 
diff -Naur --exclude=.svn tango_726.org/lib/cpp/server/w_attribute.cpp tango_726/lib/cpp/server/w_attribute.cpp
--- tango_726.org/lib/cpp/server/w_attribute.cpp	2011-03-31 11:01:40.000000000 +0200
+++ tango_726/lib/cpp/server/w_attribute.cpp	2011-04-18 13:16:49.000000000 +0200
@@ -735,11 +735,31 @@
 				
 //
 // Check the incoming value
+// First check for NaN, INF
 //
 
-		if (check_min_value == true)
+		for (i = 0;i < nb_data;i++)
 		{
-			for (i = 0;i < nb_data;i++)
+#ifdef _TG_WINDOWS_
+			if (_finite((*db_ptr)[i]) == 0)
+#else
+	#ifdef __SUNPRO_CC
+			if (isnan((*db_ptr)[i]) != 0)
+	#else
+			if (isfinite((*db_ptr)[i]) == 0)
+	#endif
+#endif
+			{
+				TangoSys_OMemStream o;
+
+				o << "Set value for attribute " << name;
+				o << " is a NaN or INF value (at least element " << i << ")" << ends;
+				Except::throw_exception((const char *)"API_WAttrOutsideLimit",
+					      o.str(),
+					      (const char *)"WAttribute::check_written_value()");
+			}
+
+			if (check_min_value == true)
 			{
 				if ((*db_ptr)[i] < min_value.db)
 				{
@@ -752,10 +772,8 @@
 						      (const char *)"WAttribute::check_written_value()");
 				}
 			}
-		}
-		if (check_max_value == true)
-		{
-			for (i = 0;i < nb_data;i++)
+
+			if (check_max_value == true)
 			{
 				if ((*db_ptr)[i] > max_value.db)
 				{
@@ -878,11 +896,32 @@
 				
 //
 // Check the incoming value
+// First check for NaN, INF
 //
 
-		if (check_min_value == true)
+		for (i = 0;i < nb_data;i++)
 		{
-			for (i = 0;i < nb_data;i++)
+#ifdef _TG_WINDOWS_
+			if (_finite((*fl_ptr)[i]) == 0)
+#else
+#else
+	#ifdef __SUNPRO_CC
+			if (isnan((*fl_ptr)[i]) != 0)
+	#else
+			if (isfinite((*fl_ptr)[i]) == 0)
+	#endif
+#endif
+			{
+				TangoSys_OMemStream o;
+
+				o << "Set value for attribute " << name;
+				o << " is a NaN or INF value (at least element " << i << ")" << ends;
+				Except::throw_exception((const char *)"API_WAttrOutsideLimit",
+					      o.str(),
+					      (const char *)"WAttribute::check_written_value()");
+			}
+
+			if (check_min_value == true)
 			{
 				if ((*fl_ptr)[i] < min_value.fl)
 				{
@@ -895,10 +934,8 @@
 						      (const char *)"WAttribute::check_written_value()");
 				}
 			}
-		}
-		if (check_max_value == true)
-		{
-			for (i = 0;i < nb_data;i++)
+
+			if (check_max_value == true)
 			{
 				if ((*fl_ptr)[i] > max_value.fl)
 				{
@@ -1473,11 +1510,31 @@
 				
 //
 // Check the incoming value
+// First check for NaN, INF
 //
 
-			if (check_min_value == true)
+			for (i = 0;i < nb_data;i++)
 			{
-				for (i = 0;i < nb_data;i++)
+#ifdef _TG_WINDOWS_
+				if (_finite(db_seq[i]) == 0)
+#else
+	#ifdef __SUNPRO_CC
+				if (isnan(db_seq[i]) != 0)
+	#else
+				if (isfinite(db_seq[i]) == 0)
+	#endif
+#endif
+				{
+					TangoSys_OMemStream o;
+
+					o << "Set value for attribute " << name;
+					o << " is a NaN or INF value (at least element " << i << ")" << ends;
+					Except::throw_exception((const char *)"API_WAttrOutsideLimit",
+						      o.str(),
+						      (const char *)"WAttribute::check_written_value()");
+				}
+
+				if (check_min_value == true)
 				{
 					if (db_seq[i] < min_value.db)
 					{
@@ -1490,10 +1547,8 @@
 						    	  (const char *)"WAttribute::check_written_value()");
 					}
 				}
-			}
-			if (check_max_value == true)
-			{
-				for (i = 0;i < nb_data;i++)
+
+				if (check_max_value == true)
 				{
 					if (db_seq[i] > max_value.db)
 					{
@@ -1618,11 +1673,31 @@
 				
 //
 // Check the incoming value
+// First check for NaN, INF
 //
 
-			if (check_min_value == true)
+			for (i = 0;i < nb_data;i++)
 			{
-				for (i = 0;i < nb_data;i++)
+#ifdef _TG_WINDOWS_
+				if (_finite(fl_seq[i]) == 0)
+#else
+	#ifdef __SUNPRO_CC
+				if (isnan(fl_seq[i]) != 0)
+	#else
+				if (isfinite(fl_seq[i]) == 0)
+	#endif
+#endif
+				{
+					TangoSys_OMemStream o;
+
+					o << "Set value for attribute " << name;
+					o << " is a NaN or INF value (at least element " << i << ")" << ends;
+					Except::throw_exception((const char *)"API_WAttrOutsideLimit",
+						      o.str(),
+						      (const char *)"WAttribute::check_written_value()");
+				}
+
+				if (check_min_value == true)
 				{
 					if (fl_seq[i] < min_value.fl)
 					{
@@ -1635,10 +1710,8 @@
 						    	  (const char *)"WAttribute::check_written_value()");
 					}
 				}
-			}
-			if (check_max_value == true)
-			{
-				for (i = 0;i < nb_data;i++)
+
+				if (check_max_value == true)
 				{
 					if (fl_seq[i] > max_value.fl)
 					{
@@ -2845,7 +2918,7 @@
 	set_user_set_write_value(true);
 }
 
-void WAttribute::set_write_value(Tango::DevEncoded *, long x,long y)
+void WAttribute::set_write_value(Tango::DevEncoded *, TANGO_UNUSED(long x),TANGO_UNUSED(long y))
 {
 
 //
