Passar objeto serializável através de intenção

Esta é a minha primeira tentativa de pedir uma solução para um problema meu, então tente ser gentil, pessoal! Eu encontrei inúmeras soluções para problemas que eu lido neste site, fazendo uma pesquisa simples, mas desta vez eu não tive sorte, eu acho. Não encontrei nada para ajustar meu problema, então terminei de fazer uma nova pergunta.

Eu estou tentando passar um objeto através de uma intenção de uma atividade para outra. Eu tenho uma classe abstrata e duas subclasses (a uma delas também é abstrata) como segue. Eu preciso que eles sejam abstratos. Eu removi muito código (métodos abstratos, etc.) apenas para descobrir qual é o problema e acabei com essas classes realmente simples e ainda tenho o mesmo problema.

public abstract class MyObject {

    private boolean New;
    private boolean Modified;

    public MyObject() {
        New = true;
    }

    public boolean isNew() {
        return New;
    }

    protected void setNew(boolean value) {
        New = value;
    }

    protected boolean isModified() {
        return Modified;
    }

    protected void setModified(boolean value) {
        Modified = value;
    }

}

public abstract class MyItemBase extends MyObject {

    private Long Id;
    private String Description;

    public MyItemBase() {
        super();
    }

    public Long getId() {
        return Id;
    }

    public void setId(Long id) {
        Id = id;
    }

    public String getDescription() {
        return Description;
    }

    public void setDescription(String description) {
        Description = description;
    }

}

public class MyItem extends MyItemBase implements Serializable {

    private static final long serialVersionUID = -2875901021692711701L;

    public MyItem() {
        super();
    }

}

Eu tenho duas atividades, ActivityA com um botão para chamar ActivityB da seguinte forma.

public class ActivityA extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_a);

        Button btn = (Button) findViewById(R.id.button);
        btn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent intent = new Intent(getApplicationContext(),
                        ActivityB.class);

                MyItem item = new MyItem();
                item.setId((long) 1);
                item.setDescription("test");

                intent.putExtra("MyItem", (Serializable) item);
                startActivityForResult(intent, 1);
            }

        });
    }

}

public class ActivityB extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_b);

        MyItem item = (MyItem) getIntent().getSerializableExtra("MyItem");
        ((TextView) findViewById(R.id.text)).setText(item.getDescription());
    }

}

Portanto, quando recebo MyItem da segunda atividade, sem nenhum erro, as propriedades Id e Descrição são nulas. Na verdade, é um novo objeto porque a propriedade New é verdadeira. Agora, se eu tentar obter o objeto exatamente depois de colocá-lo na intenção da primeira atividade como essa

intent.putExtra("MyItem", (Serializable) item);
MyItem newItem = (MyItem) intent.getSerializableExtra("MyItem");
startActivityForResult(intent, 1);

Funciona bem. newItem tem todas as propriedades com os valores corretos.

Alguma ideia?

Obrigado antecipadamente a todos!