Index: cpp/frams/util/extvalue.cpp
===================================================================
--- cpp/frams/util/extvalue.cpp	(revision 170)
+++ cpp/frams/util/extvalue.cpp	(revision 171)
@@ -56,5 +56,5 @@
 if (!(subtype&1)) return false;
 if (dbobject->refcount==1) return false;
-VectorObject* v=VectorObject::fromObject(*this);
+VectorObject* v=VectorObject::fromObject(*this,false);
 if (v)
 	{
@@ -72,5 +72,5 @@
 }
 
-void* ExtObject::getTarget(const char* classname, bool through_barrier) const
+void* ExtObject::getTarget(const char* classname, bool through_barrier, bool warn) const
 {
 if (!strcmp(interfaceName(),classname))
@@ -81,7 +81,13 @@
 	BarrierObject *bo=BarrierObject::fromObject(*this);
 	if (bo)
-		return bo->getSourceObject().getTarget(classname);
+		return bo->getSourceObject().getTarget(classname,true,warn);
 	}
 #endif
+
+if (warn)
+	{
+	FMprintf("ExtValue","getObjectTarget",FMLV_WARN,"%s object expected, %s found",classname,interfaceName());
+	}
+
 return NULL;
 }
@@ -173,8 +179,8 @@
 
 if (isEmpty()) return SString();
-VectorObject *vec=VectorObject::fromObject(*this);
+VectorObject *vec=VectorObject::fromObject(*this,false);
 if (vec)
 	return vec->serialize();
-DictionaryObject *dic=DictionaryObject::fromObject(*this);
+DictionaryObject *dic=DictionaryObject::fromObject(*this,false);
 if (dic)
 	return dic->serialize();
@@ -215,4 +221,21 @@
 ///////////////////////////////////////
 
+void *ExtValue::getObjectTarget(const char* classname,bool warn) const
+{
+if (type!=TObj)
+	{
+	if (warn)
+		{
+		SString tmp=getString();
+		if (tmp.len()>30) tmp=tmp.substr(0,30)+"...";
+		if (type==TString) tmp=SString("\"")+tmp+SString("\"");
+		FMprintf("ExtValue","getObjectTarget",FMLV_WARN,"%s object expected, %s found",classname,(const char*)tmp);
+		}
+	return NULL;
+	}
+
+return getObject().getTarget(classname,true,warn);
+}
+
 void ExtValue::set(const ExtValue& src)
 {
@@ -326,6 +349,6 @@
 	case TObj:
 		{
-		VectorObject *vec=VectorObject::fromObject(getObject());
-		VectorObject *vec2=VectorObject::fromObject(src.getObject());
+		VectorObject *vec=VectorObject::fromObject(getObject(),false);
+		VectorObject *vec2=VectorObject::fromObject(src.getObject(),false);
 		if (vec && vec2)
 			{
@@ -368,5 +391,5 @@
 	case TObj:
 		{
-		VectorObject *vec=VectorObject::fromObject(getObject());
+		VectorObject *vec=VectorObject::fromObject(getObject(),false);
 		if (vec)
 			{
@@ -532,5 +555,5 @@
 	case TString:
 	{
-	VectorObject *vec=VectorObject::fromObject(src.getObject());
+	VectorObject *vec=VectorObject::fromObject(src.getObject(),false);
 	if (vec)
 		sdata()=format(sdata(),(const ExtValue**)&vec->data.getref(0),vec->data.size());
@@ -815,5 +838,5 @@
 	if (cls && (tmp.getType()!=TUnknown) && (tmp.getType()!=TInvalid))
 		{
-		VectorObject *vec=VectorObject::fromObject(tmp.getObject());
+		VectorObject *vec=VectorObject::fromObject(tmp.getObject(),false);
 		if (vec)
 			{
@@ -826,5 +849,5 @@
 				}
 			}
-		DictionaryObject *dic=DictionaryObject::fromObject(tmp.getObject());
+		DictionaryObject *dic=DictionaryObject::fromObject(tmp.getObject(),false);
 		if (dic)
 			{
Index: cpp/frams/util/extvalue.h
===================================================================
--- cpp/frams/util/extvalue.h	(revision 170)
+++ cpp/frams/util/extvalue.h	(revision 171)
@@ -58,5 +58,5 @@
 bool matchesInterfaceName(ParamInterface* pi) const {return !strcmp(interfaceName(),pi->getName());}
 void* getTarget() const {return (subtype&1)?dbobject:object;}
-void* getTarget(const char* classname, bool through_barrier=true) const;
+void* getTarget(const char* classname, bool through_barrier=true, bool warn=true) const;
 void setEmpty() {decref();subtype=0;param=NULL;object=NULL;}
 int isEmpty() const {return !param;}
@@ -142,5 +142,5 @@
 bool makeUnique() {return (type==TObj) && odata().makeUnique();} //< @return false if nothing has changed
 ExtPType getType() {return type;}
-void *getObjectTarget(const char* classname) {return (type==TObj)?getObject().getTarget(classname):0;}
+void *getObjectTarget(const char* classname,bool warn=true) const;
 void setInt(long v) {if (type!=TInt) setri(v); else idata()=v;}
 void setDouble(double v) {if (type!=TDouble) setrd(v); else ddata()=v;}
