diff --git a/libasn1fix/asn1fix_derefv.c b/libasn1fix/asn1fix_derefv.c
index a00eac9c717934f715d7ad63aa80f53927f26125..eb67ac3f669fa0af9e790136ae7c893774682610 100644
--- a/libasn1fix/asn1fix_derefv.c
+++ b/libasn1fix/asn1fix_derefv.c
@@ -8,47 +8,31 @@ asn1f_fix_dereference_values(arg_t *arg) {
 	asn1p_expr_t *expr = arg->expr;
 	int r_value = 0;
 
-	if(expr->meta_type != AMT_VALUE)
-		return 0;	/* Just ignore it */
-
-	if(expr->value == NULL)
-		return 0;	/* Just ignore it */
-
-	if(expr->value && expr->value->type != ATV_REFERENCED)
-		return 0;	/* Not a reference */
-
-	DEBUG("%s(%s %x ::= %s) for line %d", __func__,
-		expr->Identifier, expr->expr_type,
-		asn1f_printable_value(expr->value), expr->_lineno);
-
-	/*
-	 * If this integer has a value, check that this value
-	 * is an integer. If it is a reference, resolve it.
-	 */
-	if(expr->value) {
-
+	if(expr->value && expr->meta_type == AMT_VALUE) {
 		if(asn1f_value_resolve(arg, expr)) {
 			/* This function will emit messages */
 			r_value = -1;
 		}
+	}
 
-		if(0 && expr->value->type != ATV_INTEGER) {
-			FATAL(
-				"INTEGER value %s at line %d: "
-				"Incompatible value specified: %s",
-				expr->Identifier,
-				expr->_lineno,
-				asn1f_printable_value(expr->value)
-			);
-			r_value = -1;
+	if(expr->marker.default_value) {
+		arg_t tmparg = *arg;
+		asn1p_expr_t tmpexpr = *expr;
+
+		switch(expr->marker.default_value->type) {
+		default:
+			return r_value;
+		case ATV_REFERENCED:
+			break;
 		}
-	} else {
-		FATAL("Value of \"%s\" at line %d: "
-			"Incompatible value specified",
-			expr->Identifier,
-			expr->_lineno
-		);
-		r_value = -1;
+
+		tmparg.expr = &tmpexpr;
+		tmpexpr.meta_type = AMT_VALUE;
+		tmpexpr.marker.default_value = 0;
+		tmpexpr.value = expr->marker.default_value;
+		if(asn1f_value_resolve(&tmparg, &tmpexpr))
+			r_value = -1;
+		expr->marker.default_value = tmpexpr.value;
 	}
 
 	return r_value;