dtv_property_dump(tvp);
 
+       /* Allow the frontend to validate incoming properties */
+       if (fe->ops.get_property)
+               r = fe->ops.get_property(fe, tvp);
+
+       if (r < 0)
+               return r;
+
        switch(tvp->cmd) {
        case DTV_FREQUENCY:
                tvp->u.data = fe->dtv_property_cache.frequency;
        printk("%s()\n", __FUNCTION__);
        dtv_property_dump(tvp);
 
+       /* Allow the frontend to validate incoming properties */
+       if (fe->ops.set_property)
+               r = fe->ops.set_property(fe, tvp);
+
+       if (r < 0)
+               return r;
+
        switch(tvp->cmd) {
        case DTV_CLEAR:
                /* Reset a cache of data specific to the frontend here. This does
                }
 
                for (i = 0; i < tvps->num; i++)
-                       dtv_property_process_set(fe, tvp + i, inode, file);
+                       err |= dtv_property_process_set(fe, tvp + i, inode, file);
 
                if(fe->dtv_property_cache.state == DTV_TUNE) {
                        printk("%s() Property cache is full, tuning\n", __FUNCTION__);
                }
-               err = 0;
+
        } else
        if(cmd == FE_GET_PROPERTY) {
                printk("%s() FE_GET_PROPERTY\n", __FUNCTION__);
                }
 
                for (i = 0; i < tvps->num; i++)
-                       dtv_property_process_get(fe, tvp + i, inode, file);
+                       err |= dtv_property_process_get(fe, tvp + i, inode, file);
 
                if (copy_to_user(tvps->props, tvp, tvps->num * sizeof(struct dtv_property))) {
                        err = -EFAULT;
                        goto out;
                }
 
-               err = 0;
        } else
                err = -EOPNOTSUPP;
 
 
        return 0;
 }
 
-static int cx24116_set_params(struct dvb_frontend *fe)
+static int cx24116_get_property(struct dvb_frontend *fe, struct dtv_property* tvp)
 {
-       dprintk("%s(..) We were notified that a tune request may occur\n", __func__);
+       dprintk("%s(..)\n", __func__);
        return 0;
 }
 
        .diseqc_send_burst = cx24116_diseqc_send_burst,
 
        .set_property = cx24116_set_property,
-       .set_params = cx24116_set_params,
+       .get_property = cx24116_get_property,
        .set_frontend = cx24116_set_frontend,
 };