diff --git a/dbus.go b/dbus.go
index 51f531b..446c5d0 100644
--- a/dbus.go
+++ b/dbus.go
@@ -81,6 +81,11 @@
 }
 
 func setDest(dest, src reflect.Value) error {
+	if !isVariant(src.Type()) && isVariant(dest.Type()) {
+		//special conversion for dbus.Variant
+		dest.Set(reflect.ValueOf(MakeVariant(src.Interface())))
+		return nil
+	}
 	if !src.Type().ConvertibleTo(dest.Type()) {
 		return errors.New(
 			"dbus.Store: type mismatch")
@@ -171,17 +176,26 @@
 func newDestValue(srcValue reflect.Value, destType reflect.Type) reflect.Value {
 	switch srcValue.Kind() {
 	case reflect.Map:
-		if !isVariant(srcValue.Type().Elem()) {
+		switch {
+		case !isVariant(srcValue.Type().Elem()):
 			return reflect.New(destType)
+		case destType.Kind() == reflect.Map:
+			return reflect.New(destType)
+		default:
+			return reflect.New(
+				reflect.MapOf(srcValue.Type().Key(), destType))
 		}
-		return reflect.New(
-			reflect.MapOf(srcValue.Type().Key(), destType))
+
 	case reflect.Slice:
-		if !isVariant(srcValue.Type().Elem()) {
+		switch {
+		case !isVariant(srcValue.Type().Elem()):
 			return reflect.New(destType)
+		case destType.Kind() == reflect.Slice:
+			return reflect.New(destType)
+		default:
+			return reflect.New(
+				reflect.SliceOf(destType))
 		}
-		return reflect.New(
-			reflect.SliceOf(destType))
 	default:
 		if !isVariant(srcValue.Type()) {
 			return reflect.New(destType)
diff --git a/encoder_test.go b/encoder_test.go
index 8e3b19d..91a0312 100644
--- a/encoder_test.go
+++ b/encoder_test.go
@@ -332,3 +332,33 @@
 			out, val)
 	}
 }
+
+func TestEncodeVariant(t *testing.T) {
+	var res map[ObjectPath]map[string]map[string]Variant
+	var src = map[ObjectPath]map[string]map[string]Variant{
+		ObjectPath("/foo/bar"): {
+			"foo": {
+				"bar": MakeVariant(10),
+				"baz": MakeVariant("20"),
+			},
+		},
+	}
+	buf := new(bytes.Buffer)
+	order := binary.LittleEndian
+	enc := newEncoder(buf, binary.LittleEndian)
+	err := enc.Encode(src)
+	if err != nil {
+		t.Fatal(err)
+	}
+
+	dec := newDecoder(buf, order)
+	v, err := dec.Decode(SignatureOf(src))
+	if err != nil {
+		t.Fatal(err)
+	}
+	err = Store(v, &res)
+	if err != nil {
+		t.Fatal(err)
+	}
+	_ = res[ObjectPath("/foo/bar")]["foo"]["baz"].Value().(string)
+}
