diff --git a/examples/shutter.rb b/examples/shutter.rb
index 765550016f7d08e2a6b8500626bc11cb995e3c1c..136f93e071d64b096a0b26b8f456ce6917c618cd 100755
--- a/examples/shutter.rb
+++ b/examples/shutter.rb
@@ -139,7 +139,7 @@ class ShutterWindow < FXMainWindow
 
   def create
     super
-    @shutter.width = (1.25*@shutter.width).to_i
+    @shutter.width = 1.25*@shutter.width
     show(PLACEMENT_SCREEN)
   end
 end
diff --git a/swig-interfaces/ruby-typemaps.i b/swig-interfaces/ruby-typemaps.i
index d51b8ddfbb579f5d7bff07fdd26de57ad33bee4b..929a054157e31cc82659da248ff5abbe72b9a1e7 100644
--- a/swig-interfaces/ruby-typemaps.i
+++ b/swig-interfaces/ruby-typemaps.i
@@ -34,6 +34,15 @@
   FXWindow* owner
 }
 
+%typemap(in) FXchar "$1 = NUM2INT($input);";
+%typemap(in) FXuchar "$1 = NUM2UINT($input);";
+%typemap(in) FXshort "$1 = NUM2INT($input);";
+%typemap(in) FXushort "$1 = NUM2UINT($input);";
+%typemap(in) FXint "$1 = NUM2INT($input);";
+%typemap(in) FXuint "$1 = NUM2UINT($input);";
+%typemap(in) FXlong "$1 = NUM2LONG($input);";
+%typemap(in) FXulong "$1 = NUM2ULONG($input);";
+
 /* Type-checking rules */
 %typecheck(SWIG_TYPECHECK_STRING) const FXString&, FXuchar *data {
   $1 = (NIL_P($input) || TYPE($input) == T_STRING) ? 1 : 0;
diff --git a/test/TC_FXSize.rb b/test/TC_FXSize.rb
index 4865b7f52c51af4233d63a0b4710a8f19f9185f0..503541da694b6acdb589af1fe9f62eaa2ba97fd9 100755
--- a/test/TC_FXSize.rb
+++ b/test/TC_FXSize.rb
@@ -36,6 +36,18 @@ class TC_FXSize < Test::Unit::TestCase
     assert(size2.w == -(@size2.w) && size2.h == -(@size2.h))
   end
 
+  def test_float
+    @size1.w = 2.8
+    @size2.h = 5.8
+    assert_equal(2, @size1.w)
+    assert_equal(5, @size2.h)
+  end
+
+  def test_invalid_type
+    assert_raise(TypeError){ @size1.w =  nil }
+    assert_raise(TypeError){ @size2.h = true }
+  end
+
   def test_add
     assert_equal(FXSize.new(1, 2) + FXSize.new(3, 4), FXSize.new(4, 6))
   end
diff --git a/test/TC_FXWindow.rb b/test/TC_FXWindow.rb
new file mode 100644
index 0000000000000000000000000000000000000000..cb936788a8789dfb45ca048ec90c55518e993eec
--- /dev/null
+++ b/test/TC_FXWindow.rb
@@ -0,0 +1,26 @@
+require 'test/unit'
+require 'fox16'
+require 'testcase'
+
+class TC_FXWindow < Fox::TestCase
+  include Fox
+
+  def setup
+    super(self.class.name)
+    @window = FXWindow.new(mainWindow)
+  end
+
+  def test_width_accessor
+    pos = @window.width
+    assert_instance_of(Fixnum, pos)
+    @window.width = pos + 1
+    assert_equal(pos + 1, @window.width)
+    @window.width = pos + 2.7
+    assert_equal(pos + 2, @window.width)
+    assert_kind_of(Integer, @window.width)
+  end
+
+  def test_width_invalid
+    assert_raise(TypeError){ @window.width = nil }
+  end
+end
diff --git a/test/TC_Misc.rb b/test/TC_Misc.rb
index 9c91c5aac7117dd8f4fa3553ed4d77fe2d699e14..80ff0850a75a7cc14f792de169a538bc48981914 100755
--- a/test/TC_Misc.rb
+++ b/test/TC_Misc.rb
@@ -44,6 +44,7 @@ class TC_Misc < Test::Unit::TestCase
 
   def test_FXREDVAL
     assert_equal(1, Fox.FXREDVAL(Fox.FXRGB(1, 0, 0)))
+    assert_equal(10, Fox.FXREDVAL(Fox.FXRGB(10.6, 0, 0)))
   end
 
   def test_FXGREENVAL
@@ -56,6 +57,7 @@ class TC_Misc < Test::Unit::TestCase
 
   def test_FXALPHAVAL
     assert_equal(1, Fox.FXALPHAVAL(Fox.FXRGBA(0, 0, 0, 1)))
+    assert_equal(10, Fox.FXALPHAVAL(Fox.FXRGBA(0, 0, 0, 10.6)))
   end
 
   def test_FXRGBACOMPVAL