diff --git a/src/common/data.c b/src/common/data.c
index ef86168..500c4ab 100644
--- a/src/common/data.c
+++ b/src/common/data.c
@@ -1890,37 +1890,29 @@
 
 	switch (match) {
 	case DATA_TYPE_STRING:
-		return _convert_data_string(data) ? DATA_TYPE_NONE :
-						    DATA_TYPE_STRING;
+		(void) _convert_data_string(data);
+		break;
 	case DATA_TYPE_BOOL:
-		return _convert_data_force_bool(data) ? DATA_TYPE_NONE :
-							DATA_TYPE_BOOL;
+		(void) _convert_data_force_bool(data);
+		break;
 	case DATA_TYPE_INT_64:
-		return _convert_data_int(data, true) ? DATA_TYPE_NONE :
-						       DATA_TYPE_INT_64;
+		(void) _convert_data_int(data, true);
+		break;
 	case DATA_TYPE_FLOAT:
-		return _convert_data_float(data) ? DATA_TYPE_NONE :
-						   DATA_TYPE_FLOAT;
+		(void) _convert_data_float(data);
+		break;
 	case DATA_TYPE_NULL:
-		return _convert_data_null(data) ? DATA_TYPE_NONE :
-						  DATA_TYPE_NULL;
+		(void) _convert_data_null(data);
+		break;
 	case DATA_TYPE_NONE:
-		if (!_convert_data_null(data))
-			return DATA_TYPE_NULL;
+		/* If a conversion succeeds skip calling the others */
+		if (!_convert_data_null(data) ||
+		    !_convert_data_int(data, false) ||
+		    !_convert_data_float(data) ||
+		    !_convert_data_int(data, true) || !_convert_data_bool(data))
+			; /* blank on purpose */
 
-		if (!_convert_data_int(data, false))
-			return DATA_TYPE_INT_64;
-
-		if (!_convert_data_float(data))
-			return DATA_TYPE_FLOAT;
-
-		if (!_convert_data_int(data, true))
-			return DATA_TYPE_INT_64;
-
-		if (!_convert_data_bool(data))
-			return DATA_TYPE_BOOL;
-
-		return DATA_TYPE_NONE;
+		break;
 	case DATA_TYPE_DICT:
 		if (data->type == TYPE_DICT)
 			return DATA_TYPE_DICT;
@@ -1929,7 +1921,7 @@
 			return DATA_TYPE_DICT;
 
 		/* data_parser should be used for this conversion instead. */
-		return DATA_TYPE_NONE;
+		break;
 	case DATA_TYPE_LIST:
 		if (data->type == TYPE_LIST)
 			return DATA_TYPE_LIST;
@@ -1938,12 +1930,14 @@
 			return DATA_TYPE_LIST;
 
 		/* data_parser should be used for this conversion instead. */
-		return DATA_TYPE_NONE;
+		break;
 	case DATA_TYPE_MAX:
 		fatal_abort("%s: unexpected data type", __func__);
+	default:
+		fatal_abort("%s: invalid conversion requested", __func__);
 	}
 
-	fatal_abort("%s: invalid conversion requested", __func__);
+	return data_get_type(data);
 }
 
 static data_for_each_cmd_t _convert_list_entry(data_t *data, void *arg)
diff --git a/src/common/data.h b/src/common/data.h
index 2377686..eb4cfb6 100644
--- a/src/common/data.h
+++ b/src/common/data.h
@@ -282,7 +282,7 @@
  * IN data structure to try to type and convert
  * IN match try to detect this type only
  * 	or DATA_TYPE_NONE to give best guess as to data type
- * RET new data type or DATA_TYPE_NONE on no change
+ * RET (new or unchanged) data type of data
  */
 extern data_type_t data_convert_type(data_t *data, const data_type_t match);
 
