int result;
 
        /* allocate memory for the internal state */
-       state = kmalloc(sizeof(struct drx39xxj_state), GFP_KERNEL);
+       state = kzalloc(sizeof(struct drx39xxj_state), GFP_KERNEL);
        if (state == NULL)
                goto error;
 
        demod_addr = kmalloc(sizeof(struct i2c_device_addr), GFP_KERNEL);
        if (demod_addr == NULL)
                goto error;
+       memcpy(demod_addr, &drxj_default_addr_g,
+              sizeof(struct i2c_device_addr));
 
        demod_comm_attr = kmalloc(sizeof(struct drx_common_attr), GFP_KERNEL);
        if (demod_comm_attr == NULL)
                goto error;
+       memcpy(demod_comm_attr, &drxj_default_comm_attr_g,
+              sizeof(struct drx_common_attr));
 
        demod_ext_attr = kmalloc(sizeof(struct drxj_data), GFP_KERNEL);
        if (demod_ext_attr == NULL)
                goto error;
+       memcpy(demod_ext_attr, &drxj_data_g, sizeof(struct drxj_data));
 
        /* setup the state */
        state->i2c = i2c;
        state->demod = demod;
 
+       /* setup the demod data */
        memcpy(demod, &drxj_default_demod_g, sizeof(struct drx_demod_instance));
 
        demod->my_i2c_dev_addr = demod_addr;
-       memcpy(demod->my_i2c_dev_addr, &drxj_default_addr_g,
-              sizeof(struct i2c_device_addr));
-       demod->my_i2c_dev_addr->user_data = state;
        demod->my_common_attr = demod_comm_attr;
-       memcpy(demod->my_common_attr, &drxj_default_comm_attr_g,
-              sizeof(struct drx_common_attr));
+       demod->my_i2c_dev_addr->user_data = state;
        demod->my_common_attr->microcode = DRXJ_MC_MAIN;
 #if 0
        demod->my_common_attr->verify_microcode = false;
 #endif
        demod->my_common_attr->verify_microcode = true;
        demod->my_common_attr->intermediate_freq = 5000;
-
        demod->my_ext_attr = demod_ext_attr;
-       memcpy(demod->my_ext_attr, &drxj_data_g, sizeof(struct drxj_data));
-       ((struct drxj_data *)demod->my_ext_attr)->uio_sma_tx_mode = DRX_UIO_MODE_READWRITE;
-
+       ((struct drxj_data *)demod_ext_attr)->uio_sma_tx_mode = DRX_UIO_MODE_READWRITE;
        demod->my_tuner = NULL;
 
        result = drx_open(demod);