diff --git a/ldap3_mapper_new/base.py b/ldap3_mapper_new/base.py
index 6fbf1a2d52f1bcec48ccc58118831ee119f0323c..bb580fff6a52c62284627bbd9665f4fcce92f3d4 100644
--- a/ldap3_mapper_new/base.py
+++ b/ldap3_mapper_new/base.py
@@ -124,6 +124,7 @@ class Session:
 		assert obj.state.session is None
 		oper = AddOperation(obj, dn, object_classes)
 		oper.apply_object(obj.state)
+		obj.state.session = self
 		oper.apply_session(self.state)
 		self.changes.append(oper)
 
@@ -205,14 +206,15 @@ class Object:
 			self.committed_state = ObjectState()
 		else:
 			assert session is not None
-			self.committed_state = ObjectState(session, response['attributes'], response['dn'])
+			attrs = {attr: value if isinstance(value, list) else [value] for attr, value in response['attributes'].items()}
+			self.committed_state = ObjectState(session, attrs, response['dn'])
 		self.state = self.committed_state.copy()
 
 	def getattr(self, name):
 		return self.state.attributes.get(name, [])
 
 	def setattr(self, name, values):
-		oper = ModifyOperation(self, {name: [(MODIFY_REPLACE, [values])]})
+		oper = ModifyOperation(self, {name: [(MODIFY_REPLACE, values)]})
 		oper.apply_object(self.state)
 		if self.state.session:
 			oper.apply_session(self.state.session.state)