diff --git a/circle/dashboard/forms.py b/circle/dashboard/forms.py
index 22f1c3d..b248d68 100644
--- a/circle/dashboard/forms.py
+++ b/circle/dashboard/forms.py
@@ -888,6 +888,34 @@ class LeaseForm(forms.ModelForm):
         model = Lease
 
 
+class VmRenewForm(forms.Form):
+
+    def __init__(self, *args, **kwargs):
+        choices = kwargs.pop('choices')
+        default = kwargs.pop('default')
+        super(VmRenewForm, self).__init__(*args, **kwargs)
+
+        self.fields['lease'] = forms.ModelChoiceField(queryset=choices,
+                                                      initial=default,
+                                                      required=True,
+                                                      label=_('Length'))
+        if len(choices) < 2:
+            self.fields['lease'].widget = HiddenInput()
+
+    def clean_size(self):
+        size_in_bytes = self.cleaned_data.get("size")
+        if not size_in_bytes.isdigit() and len(size_in_bytes) > 0:
+            raise forms.ValidationError(_("Invalid format, you can use "
+                                          " GB or MB!"))
+        return size_in_bytes
+
+    @property
+    def helper(self):
+        helper = FormHelper(self)
+        helper.form_tag = False
+        return helper
+
+
 class VmCreateDiskForm(forms.Form):
     name = forms.CharField(max_length=100, label=_("Name"))
     size = forms.CharField(
diff --git a/circle/dashboard/views.py b/circle/dashboard/views.py
index 37173a7..d2c1c64 100644
--- a/circle/dashboard/views.py
+++ b/circle/dashboard/views.py
@@ -60,7 +60,7 @@ from .forms import (
     CircleAuthenticationForm, HostForm, LeaseForm, MyProfileForm,
     NodeForm, TemplateForm, TraitForm, VmCustomizeForm, GroupCreateForm,
     UserCreationForm, GroupProfileUpdateForm, UnsubscribeForm,
-    VmSaveForm, UserKeyForm,
+    VmSaveForm, UserKeyForm, VmRenewForm,
     CirclePasswordChangeForm, VmCreateDiskForm, VmDownloadDiskForm,
     TraitsForm, RawDataForm, GroupPermissionForm
 )
@@ -818,11 +818,23 @@ class TokenOperationView(OperationView):
         return user
 
 
-class VmRenewView(TokenOperationView, VmOperationView):
+class VmRenewView(FormOperationMixin, TokenOperationView, VmOperationView):
+
     op = 'renew'
     icon = 'calendar'
     effect = 'info'
     show_in_toolbar = False
+    form_class = VmRenewForm
+
+    def get_form_kwargs(self):
+        choices = Lease.get_objects_with_level("user", self.request.user)
+        default = self.get_op().instance.lease
+        if default and default not in choices:
+            choices |= Lease.objects.filter(pk=default.pk)
+
+        val = super(VmRenewView, self).get_form_kwargs()
+        val.update({'choices': choices, 'default': default})
+        return val
 
 
 vm_ops = OrderedDict([