def put(self, result, decorated_function, *args, **kwargs):
		""" :meth:`WCacheStorage.put` method implementation
		"""
		self.__check(decorated_function, *args, **kwargs)

		ref = weakref.ref(args[0])
		if decorated_function not in self._storage:
			cache_entry = self._cache_record_cls.create(result, decorated_function, *args, **kwargs)
			self._storage[decorated_function] = [{'instance': ref, 'result': cache_entry}]
		else:
			instance_found = False
			for i in self._storage[decorated_function]:
				if i['instance']() == args[0]:
					cache_entry = i['result']
					cache_entry.update(result, *args, **kwargs)
					instance_found = True
					break
			if instance_found is False:
				cache_entry = self._cache_record_cls.create(result, decorated_function, *args, **kwargs)
				self._storage[decorated_function].append({'instance': ref, 'result': cache_entry})

		def finalize_ref():
			if decorated_function in self._storage:
				fn_list = self._storage[decorated_function]
				if len(fn_list) == 1 and fn_list[0]['instance'] == ref:
					del self._storage[decorated_function]

				for i in range(len(fn_list)):
					if fn_list[i]['instance'] == ref:
						fn_list.pop(i)
						return

		weakref.finalize(args[0], finalize_ref)